]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
crypto: testmgr - add guard to dst buffer for ahash_export
authorJan Stancek <jstancek@redhat.com>
Wed, 28 Sep 2016 14:38:37 +0000 (16:38 +0200)
committerHerbert Xu <herbert@gondor.apana.org.au>
Sun, 2 Oct 2016 14:33:43 +0000 (22:33 +0800)
Add a guard to 'state' buffer and warn if its consistency after
call to crypto_ahash_export() changes, so that any write that
goes beyond advertised statesize (and thus causing potential
memory corruption [1]) is more visible.

[1] https://marc.info/?l=linux-crypto-vger&m=147467656516085

Signed-off-by: Jan Stancek <jstancek@redhat.com>
Cc: Herbert Xu <herbert@gondor.apana.org.au>
Cc: Marcelo Cerri <marcelo.cerri@canonical.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
crypto/testmgr.c

index 0b01c3d062e2f97103777f7cc941f895a1b41266..62dffa0028acdb54f286d2ca1aa89ca9b422945e 100644 (file)
@@ -209,16 +209,19 @@ static int ahash_partial_update(struct ahash_request **preq,
        char *state;
        struct ahash_request *req;
        int statesize, ret = -EINVAL;
+       const char guard[] = { 0x00, 0xba, 0xad, 0x00 };
 
        req = *preq;
        statesize = crypto_ahash_statesize(
                        crypto_ahash_reqtfm(req));
-       state = kmalloc(statesize, GFP_KERNEL);
+       state = kmalloc(statesize + sizeof(guard), GFP_KERNEL);
        if (!state) {
                pr_err("alt: hash: Failed to alloc state for %s\n", algo);
                goto out_nostate;
        }
+       memcpy(state + statesize, guard, sizeof(guard));
        ret = crypto_ahash_export(req, state);
+       WARN_ON(memcmp(state + statesize, guard, sizeof(guard)));
        if (ret) {
                pr_err("alt: hash: Failed to export() for %s\n", algo);
                goto out;