aboutsummaryrefslogtreecommitdiffstats
path: root/net/tipc
diff options
context:
space:
mode:
authorYing Xue <ying.xue@windriver.com>2013-06-17 10:54:50 -0400
committerDavid S. Miller <davem@davemloft.net>2013-06-17 18:53:01 -0400
commit126c0524648631a0f6fba4d016586b236209fe6f (patch)
tree23e9ee7556a92759320ed661007719272b4deb8f /net/tipc
parent7410f967ba9bdc14b1e336e5d235929ed878cbfc (diff)
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>
Diffstat (limited to 'net/tipc')
-rw-r--r--net/tipc/link.c8
1 files changed, 6 insertions, 2 deletions
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,
1168 const unchar *sect_crs; 1168 const unchar *sect_crs;
1169 int curr_sect; 1169 int curr_sect;
1170 u32 fragm_no; 1170 u32 fragm_no;
1171 int res = 0;
1171 1172
1172again: 1173again:
1173 fragm_no = 1; 1174 fragm_no = 1;
@@ -1215,12 +1216,13 @@ again:
1215 sz = fragm_rest; 1216 sz = fragm_rest;
1216 1217
1217 if (copy_from_user(buf->data + fragm_crs, sect_crs, sz)) { 1218 if (copy_from_user(buf->data + fragm_crs, sect_crs, sz)) {
1219 res = -EFAULT;
1218error: 1220error:
1219 for (; buf_chain; buf_chain = buf) { 1221 for (; buf_chain; buf_chain = buf) {
1220 buf = buf_chain->next; 1222 buf = buf_chain->next;
1221 kfree_skb(buf_chain); 1223 kfree_skb(buf_chain);
1222 } 1224 }
1223 return -EFAULT; 1225 return res;
1224 } 1226 }
1225 sect_crs += sz; 1227 sect_crs += sz;
1226 sect_rest -= sz; 1228 sect_rest -= sz;
@@ -1241,8 +1243,10 @@ error:
1241 msg_set_fragm_no(&fragm_hdr, ++fragm_no); 1243 msg_set_fragm_no(&fragm_hdr, ++fragm_no);
1242 prev = buf; 1244 prev = buf;
1243 buf = tipc_buf_acquire(fragm_sz + INT_H_SIZE); 1245 buf = tipc_buf_acquire(fragm_sz + INT_H_SIZE);
1244 if (!buf) 1246 if (!buf) {
1247 res = -ENOMEM;
1245 goto error; 1248 goto error;
1249 }
1246 1250
1247 buf->next = NULL; 1251 buf->next = NULL;
1248 prev->next = buf; 1252 prev->next = buf;