X-Git-Url: https://git.karo-electronics.de/?a=blobdiff_plain;f=net%2Ftipc%2Flink.c;fp=net%2Ftipc%2Flink.c;h=0cc3d9015c5d5bb6a1629251d7a636f41239db6f;hb=126c0524648631a0f6fba4d016586b236209fe6f;hp=b6ffa9fab2447324dfd4edddbf2d6b5c2df44411;hpb=7410f967ba9bdc14b1e336e5d235929ed878cbfc;p=karo-tx-linux.git diff --git a/net/tipc/link.c b/net/tipc/link.c index b6ffa9fab244..0cc3d9015c5d 100644 --- a/net/tipc/link.c +++ b/net/tipc/link.c @@ -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;