From 3c0dc27a4da7c54efc2ee422fb66360ad4b58ae3 Mon Sep 17 00:00:00 2001 From: Erik Kline Date: Wed, 4 Jul 2018 17:57:51 +0900 Subject: [PATCH] Always close file descriptors Every error thrown leaked a netlink NETFILTER socket. Test: as follows - built, flashed, booted - runtest frameworks-net passes - enabled tethering and tried to cause conntrack updates to sessions that had expired (which causes ErrnoExceptions to be thrown) while monitoring lsof for system_server's NETFILTER sockets Bug: 32163131 Bug: 64976634 Bug: 110122306 Merged-In: Id25f948b6b4d25ac033d9b608ab4a6b474f2c606 Merged-In: I212cbbe134bba4580a6e73de9bb77e712d25c9a6 Change-Id: Ib52b812e8434c27ad9f2596666400c13e03c2216 --- services/net/java/android/net/netlink/NetlinkSocket.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/services/net/java/android/net/netlink/NetlinkSocket.java b/services/net/java/android/net/netlink/NetlinkSocket.java index 5af3c299bfc15..cfcba3a84f513 100644 --- a/services/net/java/android/net/netlink/NetlinkSocket.java +++ b/services/net/java/android/net/netlink/NetlinkSocket.java @@ -59,10 +59,9 @@ public class NetlinkSocket { final String errPrefix = "Error in NetlinkSocket.sendOneShotKernelMessage"; final long IO_TIMEOUT = 300L; - FileDescriptor fd; + final FileDescriptor fd = forProto(nlProto); try { - fd = forProto(nlProto); connectToKernel(fd); sendMessage(fd, msg, 0, msg.length, IO_TIMEOUT); final ByteBuffer bytes = recvMessage(fd, DEFAULT_RECV_BUFSIZE, IO_TIMEOUT); @@ -96,9 +95,9 @@ public class NetlinkSocket { } catch (SocketException e) { Log.e(TAG, errPrefix, e); throw new ErrnoException(errPrefix, EIO, e); + } finally { + IoUtils.closeQuietly(fd); } - - IoUtils.closeQuietly(fd); } public static FileDescriptor forProto(int nlProto) throws ErrnoException {