kmodloader: fix possible segfaults
authorHans Dedecker <dedeckeh@gmail.com>
Wed, 30 Aug 2017 13:09:49 +0000 (15:09 +0200)
committerHans Dedecker <dedeckeh@gmail.com>
Thu, 31 Aug 2017 09:44:38 +0000 (11:44 +0200)
Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>
kmodloader.c

index a4d492d42348c2fe3c08e3ed02df0e297ba61c93..3dc7665bd207237d8b9b9474e802174250d8f952 100644 (file)
@@ -563,6 +563,9 @@ static int insert_module(char *path, const char *options)
        }
 
        data = malloc(s.st_size);
+       if (!data)
+               goto out;
+
        if (read(fd, data, s.st_size) == s.st_size) {
                ret = syscall(__NR_init_module, data, (unsigned long) s.st_size, options);
                if (errno == EEXIST)
@@ -571,6 +574,7 @@ static int insert_module(char *path, const char *options)
        else
                ULOG_ERR("failed to read full module %s\n", path);
 
+out:
        close(fd);
        free(data);
 
@@ -692,6 +696,11 @@ static int main_insmod(int argc, char **argv)
                len += strlen(argv[i]) + 1;
 
        options = malloc(len);
+       if (!options) {
+               ret = -1;
+               goto err;
+       }
+
        options[0] = 0;
        cur = options;
        for (i = 2; i < argc; i++) {
@@ -897,6 +906,9 @@ static int main_loader(int argc, char **argv)
                dir = argv[1];
 
        path = malloc(strlen(dir) + 2);
+       if (!path)
+               return -1;
+
        strcpy(path, dir);
        strcat(path, "*");