]> git.ipfire.org Git - thirdparty/kmod.git/commitdiff
module: fix a memory leak
authorBartosz Golaszewski <bgolaszewski@baylibre.com>
Wed, 15 Feb 2017 11:18:03 +0000 (12:18 +0100)
committerLucas De Marchi <lucas.demarchi@intel.com>
Thu, 16 Feb 2017 16:50:01 +0000 (08:50 -0800)
When a module is removed and re-inserted without unrefing, the
kmod_file is unconditionally re-opened. This results in a memory
and file descriptor leak.

Fix it by checking if the file is already open in
kmod_module_insert_module().

Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
libkmod/libkmod-module.c

index bf6a8d60f7c4ea48a724d7d48636fcfe70e51106..57da0a2d11479d8e1ee85afd10e95f38f0817a19 100644 (file)
@@ -833,10 +833,12 @@ KMOD_EXPORT int kmod_module_insert_module(struct kmod_module *mod,
                return -ENOENT;
        }
 
-       mod->file = kmod_file_open(mod->ctx, path);
-       if (mod->file == NULL) {
-               err = -errno;
-               return err;
+       if (!mod->file) {
+               mod->file = kmod_file_open(mod->ctx, path);
+               if (mod->file == NULL) {
+                       err = -errno;
+                       return err;
+               }
        }
 
        if (kmod_file_get_direct(mod->file)) {