mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
tipc: refactor node xmit and fix memory leaks
Refactor tipc_node_xmit() to fail fast and fail early. Fix several potential memory leaks in unexpected error paths. Reported-by: Dmitry Vyukov <dvyukov@google.com> Reviewed-by: Jon Maloy <jon.maloy@ericsson.com> Signed-off-by: Richard Alpe <richard.alpe@ericsson.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
37ace20a3c
commit
4952cd3e7b
2 changed files with 40 additions and 26 deletions
|
@ -903,8 +903,10 @@ int tipc_link_xmit(struct tipc_link *l, struct sk_buff_head *list,
|
|||
if (unlikely(l->backlog[i].len >= l->backlog[i].limit))
|
||||
return link_schedule_user(l, list);
|
||||
}
|
||||
if (unlikely(msg_size(hdr) > mtu))
|
||||
if (unlikely(msg_size(hdr) > mtu)) {
|
||||
skb_queue_purge(list);
|
||||
return -EMSGSIZE;
|
||||
}
|
||||
|
||||
/* Prepare each packet for sending, and add to relevant queue: */
|
||||
while (skb_queue_len(list)) {
|
||||
|
@ -916,8 +918,10 @@ int tipc_link_xmit(struct tipc_link *l, struct sk_buff_head *list,
|
|||
|
||||
if (likely(skb_queue_len(transmq) < maxwin)) {
|
||||
_skb = skb_clone(skb, GFP_ATOMIC);
|
||||
if (!_skb)
|
||||
if (!_skb) {
|
||||
skb_queue_purge(list);
|
||||
return -ENOBUFS;
|
||||
}
|
||||
__skb_dequeue(list);
|
||||
__skb_queue_tail(transmq, skb);
|
||||
__skb_queue_tail(xmitq, _skb);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue