]> git.neil.brown.name Git - history.git/commitdiff
[IPV4/IPV6]: Add missing kmalloc failure checks.
authorKrishna Kumar <krkumar@us.ibm.com>
Tue, 9 Mar 2004 07:24:55 +0000 (23:24 -0800)
committerDavid S. Miller <davem@kernel.bkbits.net>
Tue, 9 Mar 2004 07:24:55 +0000 (23:24 -0800)
net/ipv4/esp4.c
net/ipv4/ip_output.c
net/ipv6/esp6.c
net/ipv6/ip6_output.c

index ce9eb8a326f6fc04a834c8420ab3d2eacc3f8645..b3287b88fae01e3fb4037fc16f0787832398bb46 100644 (file)
@@ -518,6 +518,8 @@ int esp_init_state(struct xfrm_state *x, void *args)
        esp->conf.padlen = 0;
        if (esp->conf.ivlen) {
                esp->conf.ivec = kmalloc(esp->conf.ivlen, GFP_KERNEL);
+               if (unlikely(esp->conf.ivec == NULL))
+                       goto error;
                get_random_bytes(esp->conf.ivec, esp->conf.ivlen);
        }
        crypto_cipher_setkey(esp->conf.tfm, esp->conf.key, esp->conf.key_len);
index 80558f7b1dc870837297077ec70f0118d277dd1d..a962a811d4ef0e11fc2ed8fa94352991d20ec1f7 100644 (file)
@@ -761,8 +761,11 @@ int ip_append_data(struct sock *sk,
                 */
                opt = ipc->opt;
                if (opt) {
-                       if (inet->cork.opt == NULL)
+                       if (inet->cork.opt == NULL) {
                                inet->cork.opt = kmalloc(sizeof(struct ip_options) + 40, sk->sk_allocation);
+                               if (unlikely(inet->cork.opt == NULL))
+                                       return -ENOBUFS;
+                       }
                        memcpy(inet->cork.opt, opt, sizeof(struct ip_options)+opt->optlen);
                        inet->cork.flags |= IPCORK_OPT;
                        inet->cork.addr = ipc->addr;
index db09e37225109affe44df5c87ee61e78d1d34785..ca3685bafc0613b88599a51073a4bd916e8401f6 100644 (file)
@@ -422,6 +422,8 @@ int esp6_init_state(struct xfrm_state *x, void *args)
        esp->conf.padlen = 0;
        if (esp->conf.ivlen) {
                esp->conf.ivec = kmalloc(esp->conf.ivlen, GFP_KERNEL);
+               if (unlikely(esp->conf.ivec == NULL))
+                       goto error;
                get_random_bytes(esp->conf.ivec, esp->conf.ivlen);
        }
        crypto_cipher_setkey(esp->conf.tfm, esp->conf.key, esp->conf.key_len);
index 0b960dd56621e6bd8141f263e1c6e75fcdbef33f..6665a7f9b7d24f91915c15d808ee8f4e3ee5758c 100644 (file)
@@ -816,9 +816,12 @@ int ip6_append_data(struct sock *sk, int getfrag(void *from, char *to, int offse
                 * setup for corking
                 */
                if (opt) {
-                       if (np->cork.opt == NULL)
+                       if (np->cork.opt == NULL) {
                                np->cork.opt = kmalloc(opt->tot_len,
                                                       sk->sk_allocation);
+                               if (unlikely(np->cork.opt == NULL))
+                                       return -ENOBUFS;
+                       }
                        memcpy(np->cork.opt, opt, opt->tot_len);
                        inet->cork.flags |= IPCORK_OPT;
                        /* need source address above miyazawa*/