crypto: algif_skcipher - set error code when kcalloc fails
authorPan Bian <bianpan2016@163.com>
Thu, 1 Dec 2016 02:04:43 +0000 (10:04 +0800)
committerHerbert Xu <herbert@gondor.apana.org.au>
Thu, 1 Dec 2016 13:06:43 +0000 (21:06 +0800)
Fix bug https://bugzilla.kernel.org/show_bug.cgi?id=188521. In function
skcipher_recvmsg_async(), variable err takes the return value, and its
value should be negative on failures. Because variable err may be
reassigned and checked before calling kcalloc(), its value may be 0
(indicates no error) even if kcalloc() fails. This patch fixes the bug
by explicitly assigning -ENOMEM to err when kcalloc() returns a NULL
pointer.

Signed-off-by: Pan Bian <bianpan2016@163.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
crypto/algif_skcipher.c

index 28556fce42671e2f182d5239d3dc6468e5b1d970..bfb0a1a2507a833aab7233ba471a7d8b768f4e39 100644 (file)
@@ -566,8 +566,10 @@ static int skcipher_recvmsg_async(struct socket *sock, struct msghdr *msg,
                         * need to expand */
                        tmp = kcalloc(tx_nents * 2, sizeof(*tmp),
                                      GFP_KERNEL);
-                       if (!tmp)
+                       if (!tmp) {
+                               err = -ENOMEM;
                                goto free;
+                       }
 
                        sg_init_table(tmp, tx_nents * 2);
                        for (x = 0; x < tx_nents; x++)