tipc: fix wrong return value for link_send_sections_long routine
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>
This commit is contained in:
parent
7410f967ba
commit
126c052464
1 changed files with 6 additions and 2 deletions
|
@ -1168,6 +1168,7 @@ static int link_send_sections_long(struct tipc_port *sender,
|
||||||
const unchar *sect_crs;
|
const unchar *sect_crs;
|
||||||
int curr_sect;
|
int curr_sect;
|
||||||
u32 fragm_no;
|
u32 fragm_no;
|
||||||
|
int res = 0;
|
||||||
|
|
||||||
again:
|
again:
|
||||||
fragm_no = 1;
|
fragm_no = 1;
|
||||||
|
@ -1215,12 +1216,13 @@ again:
|
||||||
sz = fragm_rest;
|
sz = fragm_rest;
|
||||||
|
|
||||||
if (copy_from_user(buf->data + fragm_crs, sect_crs, sz)) {
|
if (copy_from_user(buf->data + fragm_crs, sect_crs, sz)) {
|
||||||
|
res = -EFAULT;
|
||||||
error:
|
error:
|
||||||
for (; buf_chain; buf_chain = buf) {
|
for (; buf_chain; buf_chain = buf) {
|
||||||
buf = buf_chain->next;
|
buf = buf_chain->next;
|
||||||
kfree_skb(buf_chain);
|
kfree_skb(buf_chain);
|
||||||
}
|
}
|
||||||
return -EFAULT;
|
return res;
|
||||||
}
|
}
|
||||||
sect_crs += sz;
|
sect_crs += sz;
|
||||||
sect_rest -= sz;
|
sect_rest -= sz;
|
||||||
|
@ -1241,8 +1243,10 @@ error:
|
||||||
msg_set_fragm_no(&fragm_hdr, ++fragm_no);
|
msg_set_fragm_no(&fragm_hdr, ++fragm_no);
|
||||||
prev = buf;
|
prev = buf;
|
||||||
buf = tipc_buf_acquire(fragm_sz + INT_H_SIZE);
|
buf = tipc_buf_acquire(fragm_sz + INT_H_SIZE);
|
||||||
if (!buf)
|
if (!buf) {
|
||||||
|
res = -ENOMEM;
|
||||||
goto error;
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
buf->next = NULL;
|
buf->next = NULL;
|
||||||
prev->next = buf;
|
prev->next = buf;
|
||||||
|
|
Loading…
Add table
Reference in a new issue