diff options
Diffstat (limited to 'net/tipc/link.c')
-rw-r--r-- | net/tipc/link.c | 18 |
1 files changed, 7 insertions, 11 deletions
diff --git a/net/tipc/link.c b/net/tipc/link.c index 0a4c3a1bb9cc..d34429d03c16 100644 --- a/net/tipc/link.c +++ b/net/tipc/link.c | |||
@@ -1081,7 +1081,7 @@ again: | |||
1081 | * (Must not hold any locks while building message.) | 1081 | * (Must not hold any locks while building message.) |
1082 | */ | 1082 | */ |
1083 | res = tipc_msg_build(hdr, msg_sect, num_sect, total_len, | 1083 | res = tipc_msg_build(hdr, msg_sect, num_sect, total_len, |
1084 | sender->max_pkt, !sender->user_port, &buf); | 1084 | sender->max_pkt, &buf); |
1085 | 1085 | ||
1086 | read_lock_bh(&tipc_net_lock); | 1086 | read_lock_bh(&tipc_net_lock); |
1087 | node = tipc_node_find(destaddr); | 1087 | node = tipc_node_find(destaddr); |
@@ -1216,18 +1216,14 @@ again: | |||
1216 | else | 1216 | else |
1217 | sz = fragm_rest; | 1217 | sz = fragm_rest; |
1218 | 1218 | ||
1219 | if (likely(!sender->user_port)) { | 1219 | if (copy_from_user(buf->data + fragm_crs, sect_crs, sz)) { |
1220 | if (copy_from_user(buf->data + fragm_crs, sect_crs, sz)) { | ||
1221 | error: | 1220 | error: |
1222 | for (; buf_chain; buf_chain = buf) { | 1221 | for (; buf_chain; buf_chain = buf) { |
1223 | buf = buf_chain->next; | 1222 | buf = buf_chain->next; |
1224 | kfree_skb(buf_chain); | 1223 | kfree_skb(buf_chain); |
1225 | } | ||
1226 | return -EFAULT; | ||
1227 | } | 1224 | } |
1228 | } else | 1225 | return -EFAULT; |
1229 | skb_copy_to_linear_data_offset(buf, fragm_crs, | 1226 | } |
1230 | sect_crs, sz); | ||
1231 | sect_crs += sz; | 1227 | sect_crs += sz; |
1232 | sect_rest -= sz; | 1228 | sect_rest -= sz; |
1233 | fragm_crs += sz; | 1229 | fragm_crs += sz; |