Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit db8ae41d authored by Lorenzo Colitti's avatar Lorenzo Colitti Committed by Automerger Merge Worker
Browse files

Merge "Fix fd leak in KeepaliveTracker." am: 4f1a3c1c am: af8f6f71 am:...

Merge "Fix fd leak in KeepaliveTracker." am: 4f1a3c1c am: af8f6f71 am: f3ced351 am: 7b01e919 am: f4537190

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

Change-Id: Ie486543475b0e4e8227f71aea47000da14979e5f
parents 9e4adbcf f4537190
Loading
Loading
Loading
Loading
+25 −7
Original line number Diff line number Diff line
@@ -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