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

Commit f4537190 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

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

Change-Id: Idee2fcb96d2b94120d5b53b8d402faa11c94d142
parents 59bf36c7 7b01e919
Loading
Loading
Loading
Loading
+25 −7
Original line number Original line Diff line number Diff line
@@ -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) {
        try {
            mKeepaliveTracker.startNattKeepalive(
            mKeepaliveTracker.startNattKeepalive(
                    getNetworkAgentInfoForNetwork(network), fd, resourceId,
                    getNetworkAgentInfoForNetwork(network), fd, resourceId,
                    intervalSeconds, cb,
                    intervalSeconds, cb,
                    srcAddr, dstAddr, NattSocketKeepalive.NATT_PORT);
                    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) {
        try {
            enforceKeepalivePermission();
            enforceKeepalivePermission();
            mKeepaliveTracker.startTcpKeepalive(
            mKeepaliveTracker.startTcpKeepalive(
                    getNetworkAgentInfoForNetwork(network), fd, intervalSeconds, cb);
                    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