Copy IpSecConfig when IpSecTransforms are created
This change prevents IpSecTransforms from being inadvertently modified by changes to the IpSecConfig. Specifically, once the transform is created, it takes a copy of the config, rather than a reference. Bug: 69385347 Test: New tests added, and all test passing Change-Id: I89b8660c175ca20aa70352dcda893434ff7fd42b
This commit is contained in:
@@ -218,6 +218,25 @@ public final class IpSecConfig implements Parcelable {
|
|||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
public IpSecConfig() {}
|
public IpSecConfig() {}
|
||||||
|
|
||||||
|
/** Copy constructor */
|
||||||
|
@VisibleForTesting
|
||||||
|
public IpSecConfig(IpSecConfig c) {
|
||||||
|
mMode = c.mMode;
|
||||||
|
mSourceAddress = c.mSourceAddress;
|
||||||
|
mDestinationAddress = c.mDestinationAddress;
|
||||||
|
mNetwork = c.mNetwork;
|
||||||
|
mSpiResourceId = c.mSpiResourceId;
|
||||||
|
mEncryption = c.mEncryption;
|
||||||
|
mAuthentication = c.mAuthentication;
|
||||||
|
mAuthenticatedEncryption = c.mAuthenticatedEncryption;
|
||||||
|
mEncapType = c.mEncapType;
|
||||||
|
mEncapSocketResourceId = c.mEncapSocketResourceId;
|
||||||
|
mEncapRemotePort = c.mEncapRemotePort;
|
||||||
|
mNattKeepaliveInterval = c.mNattKeepaliveInterval;
|
||||||
|
mMarkValue = c.mMarkValue;
|
||||||
|
mMarkMask = c.mMarkMask;
|
||||||
|
}
|
||||||
|
|
||||||
private IpSecConfig(Parcel in) {
|
private IpSecConfig(Parcel in) {
|
||||||
mMode = in.readInt();
|
mMode = in.readInt();
|
||||||
mSourceAddress = in.readString();
|
mSourceAddress = in.readString();
|
||||||
|
|||||||
@@ -84,9 +84,11 @@ public final class IpSecTransform implements AutoCloseable {
|
|||||||
@Retention(RetentionPolicy.SOURCE)
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
public @interface EncapType {}
|
public @interface EncapType {}
|
||||||
|
|
||||||
private IpSecTransform(Context context, IpSecConfig config) {
|
/** @hide */
|
||||||
|
@VisibleForTesting
|
||||||
|
public IpSecTransform(Context context, IpSecConfig config) {
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mConfig = config;
|
mConfig = new IpSecConfig(config);
|
||||||
mResourceId = INVALID_RESOURCE_ID;
|
mResourceId = INVALID_RESOURCE_ID;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -142,6 +144,18 @@ public final class IpSecTransform implements AutoCloseable {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Equals method used for testing
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
@VisibleForTesting
|
||||||
|
public static boolean equals(IpSecTransform lhs, IpSecTransform rhs) {
|
||||||
|
if (lhs == null || rhs == null) return (lhs == rhs);
|
||||||
|
return IpSecConfig.equals(lhs.getConfig(), rhs.getConfig())
|
||||||
|
&& lhs.mResourceId == rhs.mResourceId;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Deactivate this {@code IpSecTransform} and free allocated resources.
|
* Deactivate this {@code IpSecTransform} and free allocated resources.
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user