From 90050b25284b4ff19c6f25524de8364241cd8c5d Mon Sep 17 00:00:00 2001
From: Chalard Jean <jchalard@google.com>
Date: Mon, 25 Sep 2023 16:29:12 +0900
Subject: [PATCH] Fix a socket leak
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Test: manualĂ‚ :
      adb root
      adb shell lsof | grep system_ | grep IPv
      adb shell dumpsys connectivity --diag
      adb shell lsof | grep system_ | grep IPv
      Before the change : plenty of new open FDs
      After the change : no new FD
Bug: 297483305
Change-Id: I1c1fb8de44e50998e99af8b3aac3f77edce903e0
---
 .../com/android/server/connectivity/NetworkDiagnostics.java  | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/service/src/com/android/server/connectivity/NetworkDiagnostics.java b/service/src/com/android/server/connectivity/NetworkDiagnostics.java
index e1e2585aea..3db37e59e0 100644
--- a/service/src/com/android/server/connectivity/NetworkDiagnostics.java
+++ b/service/src/com/android/server/connectivity/NetworkDiagnostics.java
@@ -340,8 +340,9 @@ public class NetworkDiagnostics {
     @TargetApi(Build.VERSION_CODES.S)
     private int getMtuForTarget(InetAddress target) {
         final int family = target instanceof Inet4Address ? AF_INET : AF_INET6;
+        FileDescriptor socket = null;
         try {
-            final FileDescriptor socket = Os.socket(family, SOCK_DGRAM, 0);
+            socket = Os.socket(family, SOCK_DGRAM, 0);
             mNetwork.bindSocket(socket);
             Os.connect(socket, target, 0);
             if (family == AF_INET) {
@@ -352,6 +353,8 @@ public class NetworkDiagnostics {
         } catch (ErrnoException | IOException e) {
             Log.e(TAG, "Can't get MTU for destination " + target, e);
             return -1;
+        } finally {
+            IoUtils.closeQuietly(socket);
         }
     }
 
-- 
GitLab