From 36c51ae068a62ed9909c0d71ffdf639f6ddb8a49 Mon Sep 17 00:00:00 2001 From: Pawel Jakub Dawidek Date: Tue, 16 Aug 2005 18:59:00 +0000 Subject: [PATCH] Check key size for rijndael, as invalid key size can lead to kernel panic. It checked other algorithms against this bug and it seems they aren't affected. Reported by: Mike Tancsa PR: i386/84860 Reviewed by: phk, cperciva(x2) --- sys/crypto/rijndael/rijndael-alg-fst.c | 2 ++ sys/opencrypto/xform.c | 2 ++ 2 files changed, 4 insertions(+) diff --git a/sys/crypto/rijndael/rijndael-alg-fst.c b/sys/crypto/rijndael/rijndael-alg-fst.c index 4f2164f2c1a0..a0eb4fd850cd 100644 --- a/sys/crypto/rijndael/rijndael-alg-fst.c +++ b/sys/crypto/rijndael/rijndael-alg-fst.c @@ -734,6 +734,8 @@ int rijndaelKeySetupEnc(u32 rk[/*4*(Nr + 1)*/], const u8 cipherKey[], int keyBit int i = 0; u32 temp; + KASSERT(keyBits == 128 || keyBits == 192 || keyBits == 256, + ("Invalid key size (%d).", keyBits)); rk[0] = GETU32(cipherKey ); rk[1] = GETU32(cipherKey + 4); rk[2] = GETU32(cipherKey + 8); diff --git a/sys/opencrypto/xform.c b/sys/opencrypto/xform.c index 5dfb3170dab6..a24d6da2106f 100644 --- a/sys/opencrypto/xform.c +++ b/sys/opencrypto/xform.c @@ -512,6 +512,8 @@ rijndael128_setkey(u_int8_t **sched, u_int8_t *key, int len) { int err; + if (len != 16 && len != 24 && len != 32) + return (EINVAL); MALLOC(*sched, u_int8_t *, sizeof(rijndael_ctx), M_CRYPTO_DATA, M_NOWAIT|M_ZERO); if (*sched != NULL) {