]> git.hungrycats.org Git - linux/commitdiff
crypto: gcm - Fix rfc4543 decryption crash
authorHerbert Xu <herbert@gondor.apana.org.au>
Fri, 18 Mar 2016 14:42:40 +0000 (22:42 +0800)
committerBen Hutchings <ben@decadent.org.uk>
Sat, 30 Apr 2016 22:06:15 +0000 (00:06 +0200)
This bug has already bee fixed upstream since 4.2.  However, it
was fixed during the AEAD conversion so no fix was backported to
the older kernels.

[bwh: The upstream commit was adcbc688fe2f ("crypto: gcm - Convert to
new AEAD interface")]

When we do an RFC 4543 decryption, we will end up writing the
ICV beyond the end of the dst buffer.  This should lead to a
crash but for some reason it was never noticed.

This patch fixes it by only writing back the ICV for encryption.

Fixes: d733ac90f9fe ("crypto: gcm - fix rfc4543 to handle async...")
Reported-by: Patrick Meyer <patrick.meyer@vasgard.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
crypto/gcm.c

index 9cea4d0b6904ad81f63b4e4788dacaee8d0974f5..f0bd00b15f26ac08f962ee84b13f168bdb5e832a 100644 (file)
@@ -1173,6 +1173,9 @@ static struct aead_request *crypto_rfc4543_crypt(struct aead_request *req,
        aead_request_set_tfm(subreq, ctx->child);
        aead_request_set_callback(subreq, req->base.flags, crypto_rfc4543_done,
                                  req);
+       if (!enc)
+               aead_request_set_callback(subreq, req->base.flags,
+                                         req->base.complete, req->base.data);
        aead_request_set_crypt(subreq, cipher, cipher, enc ? 0 : authsize, iv);
        aead_request_set_assoc(subreq, assoc, assoclen);