Use TransformRecord to get SPI instead of SpiRecord
IpSecService.applyTunnelModeTransform() currently does not take an SpiRecord instance, yet implicitly requires that the SpiRecord instance is still alive based on the stored SpiRecord resourceId in the TransformRecord's IpSecConfig. This check is unnecessary, as the SpiRecord has been subsumed into the TransformRecord, and the kernel resources are kept alive whether or not the SpiRecord is still held by the user. This allows users of the IpSecManager API to allocate short-lived SPIs during the creation of an IpSecTransform, without having to keep track of both of them (even though the SPI is no longer usable). The TransformRecord.getSpiRecord() call is already used in multiple other places in the same method. Bug: 142072071 Test: New tests added, passing. Change-Id: I1959f3080946267243564459ff4207647922566e Merged-In: I1959f3080946267243564459ff4207647922566e (cherry picked from commit 5258b1b82f39bf17e0751bcb94479464250aaec5)
This commit is contained in:
@@ -1776,7 +1776,7 @@ public class IpSecService extends IIpSecService.Stub {
|
|||||||
socketRecord =
|
socketRecord =
|
||||||
userRecord.mEncapSocketRecords.getResourceOrThrow(c.getEncapSocketResourceId());
|
userRecord.mEncapSocketRecords.getResourceOrThrow(c.getEncapSocketResourceId());
|
||||||
}
|
}
|
||||||
SpiRecord spiRecord = userRecord.mSpiRecords.getResourceOrThrow(c.getSpiResourceId());
|
SpiRecord spiRecord = transformInfo.getSpiRecord();
|
||||||
|
|
||||||
int mark =
|
int mark =
|
||||||
(direction == IpSecManager.DIRECTION_OUT)
|
(direction == IpSecManager.DIRECTION_OUT)
|
||||||
@@ -1809,7 +1809,7 @@ public class IpSecService extends IIpSecService.Stub {
|
|||||||
|
|
||||||
// Set outbound SPI only. We want inbound to use any valid SA (old, new) on rekeys,
|
// Set outbound SPI only. We want inbound to use any valid SA (old, new) on rekeys,
|
||||||
// but want to guarantee outbound packets are sent over the new SA.
|
// but want to guarantee outbound packets are sent over the new SA.
|
||||||
spi = transformInfo.getSpiRecord().getSpi();
|
spi = spiRecord.getSpi();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Always update the policy with the relevant XFRM_IF_ID
|
// Always update the policy with the relevant XFRM_IF_ID
|
||||||
|
|||||||
Reference in New Issue
Block a user