]> git.ipfire.org Git - thirdparty/kmod.git/commitdiff
libkmod-module: do not crash modinfo on 0 key id len
authorLucas De Marchi <lucas.demarchi@intel.com>
Sun, 5 Jun 2016 01:37:11 +0000 (22:37 -0300)
committerLucas De Marchi <lucas.demarchi@intel.com>
Mon, 27 Jun 2016 11:17:55 +0000 (08:17 -0300)
libkmod/libkmod-module.c

index 25dcda7667b7f23cc72ef54230b2eaf5d9471218..b7b5daae80b8e6d1744b43f59b226ec491b23a36 100644 (file)
@@ -2261,22 +2261,30 @@ KMOD_EXPORT int kmod_module_get_info(const struct kmod_module *mod, struct kmod_
                        goto list_error;
                count++;
 
-               /* Display the key id as 01:12:DE:AD:BE:EF:... */
-               key_hex = malloc(sig_info.key_id_len * 3);
-               if (key_hex == NULL)
-                       goto list_error;
-               for (i = 0; i < (int)sig_info.key_id_len; i++) {
-                       sprintf(key_hex + i * 3, "%02X",
-                                       (unsigned char)sig_info.key_id[i]);
-                       if (i < (int)sig_info.key_id_len - 1)
-                               key_hex[i * 3 + 2] = ':';
+               if (sig_info.key_id_len) {
+                       /* Display the key id as 01:12:DE:AD:BE:EF:... */
+                       key_hex = malloc(sig_info.key_id_len * 3);
+                       if (key_hex == NULL)
+                               goto list_error;
+                       for (i = 0; i < (int)sig_info.key_id_len; i++) {
+                               sprintf(key_hex + i * 3, "%02X",
+                                               (unsigned char)sig_info.key_id[i]);
+                               if (i < (int)sig_info.key_id_len - 1)
+                                       key_hex[i * 3 + 2] = ':';
+                       }
+                       n = kmod_module_info_append(list, "sig_key", strlen("sig_key"),
+                                       key_hex, sig_info.key_id_len * 3 - 1);
+                       free(key_hex);
+                       if (n == NULL)
+                               goto list_error;
+                       count++;
+               } else {
+                       n = kmod_module_info_append(list, "sig_key", strlen("sig_key"),
+                                       NULL, 0);
+                       if (n == NULL)
+                               goto list_error;
+                       count++;
                }
-               n = kmod_module_info_append(list, "sig_key", strlen("sig_key"),
-                               key_hex, sig_info.key_id_len * 3 - 1);
-               free(key_hex);
-               if (n == NULL)
-                       goto list_error;
-               count++;
 
                n = kmod_module_info_append(list,
                                "sig_hashalgo", strlen("sig_hashalgo"),