]> git.ipfire.org Git - thirdparty/kmod.git/commitdiff
libkmod: error out on unknown hash algorithm
authorEmil Velikov <emil.velikov@collabora.com>
Mon, 6 Feb 2023 14:32:59 +0000 (14:32 +0000)
committerLucas De Marchi <lucas.de.marchi@gmail.com>
Thu, 9 Feb 2023 20:08:14 +0000 (12:08 -0800)
Currently if we see unknown algorithm, we'll do an OOB read in
pkey_hash_algo. This can happen for example if OPENSSL_NO_SM3 is set and
the kernel module uses a SM3 hash.

Cc: Mikhail Novosyolov <m.novosyolov@rosalinux.ru>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Emil Velikov <emil.velikov@collabora.com>
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
libkmod/libkmod-signature.c

index 092f3969c5f31bd02fb4d3439337692bc6961458..b749a818f994924378e7ab176d695d9b176a68c3 100644 (file)
@@ -219,6 +219,7 @@ static bool fill_pkcs7(const char *mem, off_t size,
        unsigned char *key_id_str;
        struct pkcs7_private *pvt;
        const char *issuer_str;
+       int hash_algo;
 
        size -= sig_len;
        pkcs7_raw = mem + size;
@@ -277,7 +278,10 @@ static bool fill_pkcs7(const char *mem, off_t size,
 
        X509_ALGOR_get0(&o, NULL, NULL, dig_alg);
 
-       sig_info->hash_algo = pkey_hash_algo[obj_to_hash_algo(o)];
+       hash_algo = obj_to_hash_algo(o);
+       if (hash_algo < 0)
+               goto err3;
+       sig_info->hash_algo = pkey_hash_algo[hash_algo];
        // hash algo has not been recognized
        if (sig_info->hash_algo == NULL)
                goto err3;