You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
1.5 KiB
45 lines
1.5 KiB
From b9605c63b859adfffc0b4b9420d720aa323b90e9 Mon Sep 17 00:00:00 2001
|
|
From: Emil Velikov <emil.velikov@collabora.com>
|
|
Date: Mon, 6 Feb 2023 14:32:59 +0000
|
|
Subject: [PATCH] libkmod: error out on unknown hash algorithm
|
|
|
|
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 | 6 +++++-
|
|
1 file changed, 5 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/libkmod/libkmod-signature.c b/libkmod/libkmod-signature.c
|
|
index 092f396..b749a81 100644
|
|
--- a/libkmod/libkmod-signature.c
|
|
+++ b/libkmod/libkmod-signature.c
|
|
@@ -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;
|
|
--
|
|
2.13.6
|
|
|