]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
cryptenroll: fix a memory leak
authorFrantisek Sumsal <frantisek@sumsal.cz>
Mon, 27 Mar 2023 14:51:00 +0000 (16:51 +0200)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 28 Mar 2023 04:41:55 +0000 (13:41 +0900)
$ dd if=/dev/zero of=luks.img bs=1M count=64
$ echo 1231dfsd234d | cryptsetup luksFormat luks.img
$ build-san/systemd-cryptenroll luks.img
SLOT TYPE
   0 password

=================================================================
==640364==ERROR: LeakSanitizer: detected memory leaks

Direct leak of 64 byte(s) in 1 object(s) allocated from:
    #0 0x7f43ffeb95b5 in __interceptor_realloc.part.0 (/lib64/libasan.so.8+0xb95b5)
    #1 0x7f43ff0a4f2f in greedy_realloc ../src/basic/alloc-util.c:70
    #2 0x404d9f in list_enrolled ../src/cryptenroll/cryptenroll-list.c:30
    #3 0x40f149 in run ../src/cryptenroll/cryptenroll.c:673
    #4 0x40f149 in main ../src/cryptenroll/cryptenroll.c:692
    #5 0x7f43fd64a50f in __libc_start_call_main (/lib64/libc.so.6+0x2750f)

SUMMARY: AddressSanitizer: 64 byte(s) leaked in 1 allocation(s).
Aborted (core dumped)

Reported in https://github.com/systemd/systemd/pull/27007.

src/cryptenroll/cryptenroll-list.c

index 62688da3d3b997ae78e374e31039986d41955582..d21df7123b0c852f3b5b5f3146cef7fa4690fac6 100644 (file)
@@ -5,12 +5,13 @@
 #include "format-table.h"
 #include "parse-util.h"
 
-int list_enrolled(struct crypt_device *cd) {
+struct keyslot_metadata {
+        int slot;
+        const char *type;
+};
 
-        struct keyslot_metadata {
-                int slot;
-                const char *type;
-        } *keyslot_metadata = NULL;
+int list_enrolled(struct crypt_device *cd) {
+        _cleanup_free_ struct keyslot_metadata *keyslot_metadata = NULL;
         _cleanup_(table_unrefp) Table *t = NULL;
         size_t n_keyslot_metadata = 0;
         int slot_max, r;