elf-reader: reclaim fd and mem before break
authorXiaole He <hexiaole@kylinos.cn>
Tue, 20 Dec 2022 13:06:34 +0000 (21:06 +0800)
committerDodji Seketeli <dodji@redhat.com>
Wed, 21 Dec 2022 10:15:23 +0000 (11:15 +0100)
In elf::reader::priv::locate_alt_ctf_debug_info from
src/abg-elf-reader.cc, the resources held by the hdl and fd variables
aren't necessary released because the control-flow gets out of the
loop too early.  This patch fixes the problem.

        * src/abg-elf-reader.cc
(elf::reader::priv::locate_alt_ctf_debug_info): Reclaim fd and mem
before break.  Also, do not try to locate the debug info it's
already been located.

Signed-off-by: Xiaole He <hexiaole@kylinos.cn>
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
src/abg-elf-reader.cc

index c07f0655d471fd19bba9f3710be1439a41b4ab7f..656418e3ab830bfee4022a6b9f5a6e84a8d50875 100644 (file)
@@ -420,6 +420,9 @@ struct reader::priv
   void
   locate_alt_ctf_debug_info()
   {
+    if (alt_ctf_section)
+      return;
+
     Elf_Scn *section =
       elf_helpers::find_section(elf_handle,
                                ".gnu_debuglink",
@@ -453,10 +456,12 @@ struct reader::priv
          // unlikely .ctf was designed to be present in stripped file
          alt_ctf_section =
            elf_helpers::find_section(hdl, ".ctf", SHT_PROGBITS);
-          break;
 
          elf_end(hdl);
          close(fd);
+
+         if (alt_ctf_section)
+           break;
        }
   }