lkml.org 
[lkml]   [2015]   [Jan]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
SubjectIntel GCM: __driver-gcm-aes-aesni setkey missing
Date
Hi Gabriele, Adrian, Tadeusz, Aidan,

during testing of my algif_aead patch with the different GCM implementations I
am able to trigger a kernel crash from user space using __driver-gcm-aes-
aesni.

As I hope that algif_aead is going to be included, unprivileged userspace
would then reliably crash the kernel -- with the current kernel code,
userspace has no interface to trigger the issue.

Looking into the kernel code I think I see where the issue is. The crash
happens when setkey is invoked. The kernel crypto API defines setkey as the
following:

static inline int crypto_aead_setkey(struct crypto_aead *tfm, const u8 *key,
unsigned int keylen)
{
struct aead_tfm *crt = crypto_aead_crt(tfm);

return crt->setkey(crt->base, key, keylen);
}

This means that the kernel crypto API expects that ciphers always implement a
setkey callback.

However, __driver-gcm-aes-aesni does not implement a setkey:

.aead = {
.encrypt = __driver_rfc4106_encrypt,
.decrypt = __driver_rfc4106_decrypt,
},

As I am not sure what the purpose of __driver-gcm-aes-aesni is (only a backend
for RFC4106 GCM or a regular cipher), I did not yet create a patch. IMHO there
are two solutions:

- either create a valid setkey callback so that a key is set

- or create a noop setkey that returns -EOPNOTSUPP which effectively disables
that cipher for regular consumption.

Note, if it is only a backend for the RFC4106 implementation, may I ask why
__driver-gcm-aes-aesni is implemented as a separate cipher that is registered
with the kernel crypto API?

--
Ciao
Stephan


\
 
 \ /
  Last update: 2015-01-17 19:41    [W:0.035 / U:0.124 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site