Merge "Fix fd leak in KeepaliveTracker." am: 3dbbfa10bb am: 2e7172387e

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

Change-Id: I68dcb3da95c803179733861604e092582eefb254
This commit is contained in:
Lorenzo Colitti
2020-08-07 06:02:12 +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 libcore.io.IoUtils;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
@@ -7513,18 +7515,34 @@ public class ConnectivityService extends IConnectivityManager.Stub
public void startNattKeepaliveWithFd(Network network, FileDescriptor fd, int resourceId,
int intervalSeconds, ISocketKeepaliveCallback cb, String srcAddr,
String dstAddr) {
try {
mKeepaliveTracker.startNattKeepalive(
getNetworkAgentInfoForNetwork(network), fd, resourceId,
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
public void startTcpKeepalive(Network network, FileDescriptor fd, int intervalSeconds,
ISocketKeepaliveCallback cb) {
try {
enforceKeepalivePermission();
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