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 bf6a8d6..57da0a2 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)) {