module: fix signature check failures when using in-kernel decompression
[sfrench/cifs-2.6.git] / kernel / module.c
index 34fe2824eb56d450a7e3c34ffdba605c5945526f..387ee77bdbd683a3c457b564e7ceab187dfbb480 100644 (file)
@@ -2883,12 +2883,13 @@ static int module_sig_check(struct load_info *info, int flags)
        const unsigned long markerlen = sizeof(MODULE_SIG_STRING) - 1;
        const char *reason;
        const void *mod = info->hdr;
-
+       bool mangled_module = flags & (MODULE_INIT_IGNORE_MODVERSIONS |
+                                      MODULE_INIT_IGNORE_VERMAGIC);
        /*
-        * Require flags == 0, as a module with version information
-        * removed is no longer the module that was signed
+        * Do not allow mangled modules as a module with version information
+        * removed is no longer the module that was signed.
         */
-       if (flags == 0 &&
+       if (!mangled_module &&
            info->len > markerlen &&
            memcmp(mod + info->len - markerlen, MODULE_SIG_STRING, markerlen) == 0) {
                /* We truncate the module to discard the signature */