Merge "Fix fd leak in KeepaliveTracker." am: c6a527351f am: 759c08d0f4 am: 93e0ec070a am: bc08ba8b3b

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1361907

Change-Id: Idee2fcb96d2b94120d5b53b8d402faa11c94d142
This commit is contained in:
Lorenzo Colitti
2020-08-07 06:30:11 +00:00
committed by Automerger Merge Worker

View File

@@ -220,6 +220,8 @@ import com.android.server.utils.PriorityDump;
import com.google.android.collect.Lists; import com.google.android.collect.Lists;
import libcore.io.IoUtils;
import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlPullParserException;
@@ -7513,18 +7515,34 @@ public class ConnectivityService extends IConnectivityManager.Stub
public void startNattKeepaliveWithFd(Network network, FileDescriptor fd, int resourceId, public void startNattKeepaliveWithFd(Network network, FileDescriptor fd, int resourceId,
int intervalSeconds, ISocketKeepaliveCallback cb, String srcAddr, int intervalSeconds, ISocketKeepaliveCallback cb, String srcAddr,
String dstAddr) { String dstAddr) {
mKeepaliveTracker.startNattKeepalive( try {
getNetworkAgentInfoForNetwork(network), fd, resourceId, mKeepaliveTracker.startNattKeepalive(
intervalSeconds, cb, getNetworkAgentInfoForNetwork(network), fd, resourceId,
srcAddr, dstAddr, NattSocketKeepalive.NATT_PORT); intervalSeconds, cb,
srcAddr, dstAddr, NattSocketKeepalive.NATT_PORT);
} finally {
// FileDescriptors coming from AIDL calls must be manually closed to prevent leaks.
// startNattKeepalive calls Os.dup(fd) before returning, so we can close immediately.
if (fd != null && Binder.getCallingPid() != Process.myPid()) {
IoUtils.closeQuietly(fd);
}
}
} }
@Override @Override
public void startTcpKeepalive(Network network, FileDescriptor fd, int intervalSeconds, public void startTcpKeepalive(Network network, FileDescriptor fd, int intervalSeconds,
ISocketKeepaliveCallback cb) { ISocketKeepaliveCallback cb) {
enforceKeepalivePermission(); try {
mKeepaliveTracker.startTcpKeepalive( enforceKeepalivePermission();
getNetworkAgentInfoForNetwork(network), fd, intervalSeconds, cb); mKeepaliveTracker.startTcpKeepalive(
getNetworkAgentInfoForNetwork(network), fd, intervalSeconds, cb);
} finally {
// FileDescriptors coming from AIDL calls must be manually closed to prevent leaks.
// startTcpKeepalive calls Os.dup(fd) before returning, so we can close immediately.
if (fd != null && Binder.getCallingPid() != Process.myPid()) {
IoUtils.closeQuietly(fd);
}
}
} }
@Override @Override