tipc: fix wrong return value for link_send_sections_long routine
authorYing Xue <ying.xue@windriver.com>
Mon, 17 Jun 2013 14:54:50 +0000 (10:54 -0400)
committerDavid S. Miller <davem@davemloft.net>
Mon, 17 Jun 2013 22:53:01 +0000 (15:53 -0700)
When skb buffer cannot be allocated in link_send_sections_long(),
-ENOMEM error code instead of -EFAULT should be returned to its
caller.

Signed-off-by: Ying Xue <ying.xue@windriver.com>
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/tipc/link.c

index b6ffa9fab2447324dfd4edddbf2d6b5c2df44411..0cc3d9015c5d5bb6a1629251d7a636f41239db6f 100644 (file)
@@ -1168,6 +1168,7 @@ static int link_send_sections_long(struct tipc_port *sender,
        const unchar *sect_crs;
        int curr_sect;
        u32 fragm_no;
+       int res = 0;
 
 again:
        fragm_no = 1;
@@ -1215,12 +1216,13 @@ again:
                        sz = fragm_rest;
 
                if (copy_from_user(buf->data + fragm_crs, sect_crs, sz)) {
+                       res = -EFAULT;
 error:
                        for (; buf_chain; buf_chain = buf) {
                                buf = buf_chain->next;
                                kfree_skb(buf_chain);
                        }
-                       return -EFAULT;
+                       return res;
                }
                sect_crs += sz;
                sect_rest -= sz;
@@ -1241,8 +1243,10 @@ error:
                        msg_set_fragm_no(&fragm_hdr, ++fragm_no);
                        prev = buf;
                        buf = tipc_buf_acquire(fragm_sz + INT_H_SIZE);
-                       if (!buf)
+                       if (!buf) {
+                               res = -ENOMEM;
                                goto error;
+                       }
 
                        buf->next = NULL;
                        prev->next = buf;