diff options
author | Jeffrey Vander Stoep <jeffv@google.com> | 2019-09-30 12:49:49 -0700 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2019-09-30 12:49:49 -0700 |
commit | 48547ce1d0e5cebed350b6c0aebcbe49a301357e (patch) | |
tree | 47f4b09a9b8d606140349f65b18468615bb8a6e8 /services/net/java | |
parent | 7adcb62d1a09ae9cb4b1f318cf9c7322e11187b2 (diff) | |
parent | 0b6d97471308930abaf6cb09a1806f8abef721e4 (diff) |
Merge "Fix FD leak in ConnectivityManager.getConnectionOwnerUid" am: 20bdc26698
am: 0b6d974713
Change-Id: I5d3b329018a1f640f086887ec222c5cf7e2975b4
Diffstat (limited to 'services/net/java')
-rw-r--r-- | services/net/java/android/net/netlink/InetDiagMessage.java | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/services/net/java/android/net/netlink/InetDiagMessage.java b/services/net/java/android/net/netlink/InetDiagMessage.java index af9e601da9ec..31a2556f2041 100644 --- a/services/net/java/android/net/netlink/InetDiagMessage.java +++ b/services/net/java/android/net/netlink/InetDiagMessage.java @@ -16,26 +16,23 @@ package android.net.netlink; -import static android.os.Process.INVALID_UID; import static android.net.netlink.NetlinkConstants.SOCK_DIAG_BY_FAMILY; import static android.net.netlink.NetlinkSocket.DEFAULT_RECV_BUFSIZE; import static android.net.netlink.StructNlMsgHdr.NLM_F_DUMP; import static android.net.netlink.StructNlMsgHdr.NLM_F_REQUEST; +import static android.os.Process.INVALID_UID; import static android.system.OsConstants.AF_INET; import static android.system.OsConstants.AF_INET6; import static android.system.OsConstants.IPPROTO_UDP; import static android.system.OsConstants.NETLINK_INET_DIAG; -import android.os.Build; -import android.os.Process; +import android.net.util.SocketUtils; import android.system.ErrnoException; import android.util.Log; import java.io.FileDescriptor; +import java.io.IOException; import java.io.InterruptedIOException; -import java.net.DatagramSocket; -import java.net.DatagramSocket; -import java.net.InetAddress; import java.net.Inet4Address; import java.net.Inet6Address; import java.net.InetSocketAddress; @@ -163,17 +160,25 @@ public class InetDiagMessage extends NetlinkMessage { */ public static int getConnectionOwnerUid(int protocol, InetSocketAddress local, InetSocketAddress remote) { + int uid = INVALID_UID; + FileDescriptor fd = null; try { - final FileDescriptor fd = NetlinkSocket.forProto(NETLINK_INET_DIAG); + fd = NetlinkSocket.forProto(NETLINK_INET_DIAG); NetlinkSocket.connectToKernel(fd); - - return lookupUid(protocol, local, remote, fd); - + uid = lookupUid(protocol, local, remote, fd); } catch (ErrnoException | SocketException | IllegalArgumentException | InterruptedIOException e) { Log.e(TAG, e.toString()); + } finally { + if (fd != null) { + try { + SocketUtils.closeSocket(fd); + } catch (IOException e) { + Log.e(TAG, e.toString()); + } + } } - return INVALID_UID; + return uid; } @Override |