mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 20:07:46 +09:00
tipc: fix potential memory leak in __tipc_sendmsg()
commit2fe97a578dupstream. When initiating a connection message to a server side, the connection message is cloned and added to the socket write queue. However, if the cloning is failed, only the socket write queue is purged. It causes memory leak because the original connection message is not freed. This commit fixes it by purging the list of connection message when it cannot be cloned. Fixes:6787927475("tipc: buffer overflow handling in listener socket") Reported-by: Hoang Le <hoang.h.le@dektech.com.au> Signed-off-by: Tung Nguyen <tung.q.nguyen@dektech.com.au> Acked-by: Ying Xue <ying.xue@windriver.com> Acked-by: Jon Maloy <jon.maloy@ericsson.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
28845c28f8
commit
55a0b2c95f
@@ -1396,8 +1396,10 @@ static int __tipc_sendmsg(struct socket *sock, struct msghdr *m, size_t dlen)
|
||||
rc = tipc_msg_build(hdr, m, 0, dlen, mtu, &pkts);
|
||||
if (unlikely(rc != dlen))
|
||||
return rc;
|
||||
if (unlikely(syn && !tipc_msg_skb_clone(&pkts, &sk->sk_write_queue)))
|
||||
if (unlikely(syn && !tipc_msg_skb_clone(&pkts, &sk->sk_write_queue))) {
|
||||
__skb_queue_purge(&pkts);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
trace_tipc_sk_sendmsg(sk, skb_peek(&pkts), TIPC_DUMP_SK_SNDQ, " ");
|
||||
rc = tipc_node_xmit(net, &pkts, dnode, tsk->portid);
|
||||
|
||||
Reference in New Issue
Block a user