]> git.ipfire.org Git - thirdparty/kmod.git/commitdiff
libkmod: unref list before returning with error
authorJakub Ślepecki <jakub.slepecki@intel.com>
Fri, 20 Jun 2025 15:59:07 +0000 (17:59 +0200)
committerLucas De Marchi <demarchi@kernel.org>
Mon, 10 Aug 2026 13:42:19 +0000 (08:42 -0500)
In case of error path this might have led to, for example:

    ==86629==ERROR: LeakSanitizer: detected memory leaks

    Direct leak of 24 byte(s) in 1 object(s) allocated from:
        #0 0x7fa904b20e15  (/usr/lib/gcc/x86_64-pc-linux-gnu/15.1.1/../../../../lib/libasan.so+0x120e15) (BuildId: 9dccfc42ea2d9790ff7cf76cc8a3210650e604e0)
        #1 0x55d74820fc8a  ($kmod/build/kmod+0xefc8a) (BuildId: e7c136c95271cf020398e33fd5577d82adc7a47c)
        #2 0x55d7482173a6  ($kmod/build/kmod+0xf73a6) (BuildId: e7c136c95271cf020398e33fd5577d82adc7a47c)
        #3 0x55d74821a617  ($kmod/build/kmod+0xfa617) (BuildId: e7c136c95271cf020398e33fd5577d82adc7a47c)
        #4 0x55d7481e2d80  ($kmod/build/kmod+0xc2d80) (BuildId: e7c136c95271cf020398e33fd5577d82adc7a47c)
        #5 0x55d7481e314f  ($kmod/build/kmod+0xc314f) (BuildId: e7c136c95271cf020398e33fd5577d82adc7a47c)
        #6 0x55d7481e658c  ($kmod/build/kmod+0xc658c) (BuildId: e7c136c95271cf020398e33fd5577d82adc7a47c)
        #7 0x7fa9038376b4  (/usr/lib/libc.so.6+0x276b4) (BuildId: 468e3585c794491a48ea75fceb9e4d6b1464fc35)
        #8 0x7fa903837768  (/usr/lib/libc.so.6+0x27768) (BuildId: 468e3585c794491a48ea75fceb9e4d6b1464fc35)
        #9 0x55d7481c3334  ($kmod/build/kmod+0xa3334) (BuildId: e7c136c95271cf020398e33fd5577d82adc7a47c)

    Indirect leak of 4120 byte(s) in 1 object(s) allocated from:
        #0 0x7fa904b2073d  (/usr/lib/gcc/x86_64-pc-linux-gnu/15.1.1/../../../../lib/libasan.so+0x12073d) (BuildId: 9dccfc42ea2d9790ff7cf76cc8a3210650e604e0)
        #1 0x55d7481eb8eb  ($kmod/build/kmod+0xcb8eb) (BuildId: e7c136c95271cf020398e33fd5577d82adc7a47c)
        #2 0x55d7481f6fee  ($kmod/build/kmod+0xd6fee) (BuildId: e7c136c95271cf020398e33fd5577d82adc7a47c)
        #3 0x55d7481e52c4  ($kmod/build/kmod+0xc52c4) (BuildId: e7c136c95271cf020398e33fd5577d82adc7a47c)
        #4 0x7fa9038376b4  (/usr/lib/libc.so.6+0x276b4) (BuildId: 468e3585c794491a48ea75fceb9e4d6b1464fc35)
        #5 0x7fa903837768  (/usr/lib/libc.so.6+0x27768) (BuildId: 468e3585c794491a48ea75fceb9e4d6b1464fc35)
        #6 0x55d7481c3334  ($kmod/build/kmod+0xa3334) (BuildId: e7c136c95271cf020398e33fd5577d82adc7a47c)

    [...]

    SUMMARY: AddressSanitizer: 5701 byte(s) leaked in 27 allocation(s).

Co-authored-by: Dawid Osuchowski <dawid.osuchowski@linux.intel.com>
Signed-off-by: Dawid Osuchowski <dawid.osuchowski@linux.intel.com>
Signed-off-by: Jakub Ślepecki <jakub.slepecki@intel.com>
Link: https://github.com/kmod-project/kmod/pull/312
Signed-off-by: Lucas De Marchi <demarchi@kernel.org>
libkmod/libkmod-module.c

index 4f8fcaf649b75d0ecbd077f03238e400ad3b4b79..4d8ca9503d1be5f85914b7316a07fb5252a62490 100644 (file)
@@ -1043,10 +1043,10 @@ KMOD_EXPORT int kmod_module_probe_insert_module(
 
                err = kmod_module_apply_filter(mod->ctx, KMOD_FILTER_BLACKLIST, list,
                                               &filtered);
+               kmod_module_unref_list(list);
                if (err < 0)
                        return err;
 
-               kmod_module_unref_list(list);
                if (filtered == NULL)
                        return KMOD_PROBE_APPLY_BLACKLIST_ALL;