Merge "[ipsec-doze] Add fchown to IpSecService to support doze"
am: 4edb4c8ec4
Change-Id: I75a3cb9e9d9d7d3b6c0ede86074a00ddcd86028e
This commit is contained in:
@@ -988,12 +988,6 @@ public class IpSecService extends IIpSecService.Stub {
|
||||
sockFd = Os.socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
|
||||
mUidFdTagger.tag(sockFd, callingUid);
|
||||
|
||||
if (port != 0) {
|
||||
Log.v(TAG, "Binding to port " + port);
|
||||
Os.bind(sockFd, INADDR_ANY, port);
|
||||
} else {
|
||||
port = bindToRandomPort(sockFd);
|
||||
}
|
||||
// This code is common to both the unspecified and specified port cases
|
||||
Os.setsockoptInt(
|
||||
sockFd,
|
||||
@@ -1001,6 +995,14 @@ public class IpSecService extends IIpSecService.Stub {
|
||||
OsConstants.UDP_ENCAP,
|
||||
OsConstants.UDP_ENCAP_ESPINUDP);
|
||||
|
||||
mSrvConfig.getNetdInstance().ipSecSetEncapSocketOwner(sockFd, callingUid);
|
||||
if (port != 0) {
|
||||
Log.v(TAG, "Binding to port " + port);
|
||||
Os.bind(sockFd, INADDR_ANY, port);
|
||||
} else {
|
||||
port = bindToRandomPort(sockFd);
|
||||
}
|
||||
|
||||
userRecord.mEncapSocketRecords.put(
|
||||
resourceId,
|
||||
new RefcountedResource<EncapSocketRecord>(
|
||||
|
||||
@@ -475,4 +475,26 @@ public class IpSecServiceTest {
|
||||
testIpSecService.closeUdpEncapsulationSocket(udpEncapResp.resourceId);
|
||||
udpEncapResp.fileDescriptor.close();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOpenUdpEncapsulationSocketCallsSetEncapSocketOwner() throws Exception {
|
||||
IpSecUdpEncapResponse udpEncapResp =
|
||||
mIpSecService.openUdpEncapsulationSocket(0, new Binder());
|
||||
|
||||
FileDescriptor sockFd = udpEncapResp.fileDescriptor.getFileDescriptor();
|
||||
ArgumentMatcher<FileDescriptor> fdMatcher = (arg) -> {
|
||||
try {
|
||||
StructStat sockStat = Os.fstat(sockFd);
|
||||
StructStat argStat = Os.fstat(arg);
|
||||
|
||||
return sockStat.st_ino == argStat.st_ino
|
||||
&& sockStat.st_dev == argStat.st_dev;
|
||||
} catch (ErrnoException e) {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
verify(mMockNetd).ipSecSetEncapSocketOwner(argThat(fdMatcher), eq(Os.getuid()));
|
||||
mIpSecService.closeUdpEncapsulationSocket(udpEncapResp.resourceId);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user