Skip to content

Commit 28f1398

Browse files
jukkarnashif
authored andcommitted
net: socket: Release packets in accepted socket in close
If we have received data to the accepted socket, then release those before removing the accepted socket. This is a rare event as it requires that we get multiple simultaneous connections and there is a failure before the socket accept is called by the application. For example one such scenario is when HTTP server receives multiple connection attempts at the same time, and the server poll fails before socket accept is called. This leads to buffer leak as the socket close is not called for the accepted socket because the accepted is not yet created from application point of view. The solution is to flush the received queue of the accepted socket before removing the actual accepted socket. Fixes #84538 Signed-off-by: Jukka Rissanen <[email protected]> (cherry picked from commit 535e70a)
1 parent 0e5cda3 commit 28f1398

File tree

1 file changed

+5
-0
lines changed

1 file changed

+5
-0
lines changed

subsys/net/lib/sockets/sockets.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,11 @@ static void zsock_flush_queue(struct net_context *ctx)
140140
while ((p = k_fifo_get(&ctx->recv_q, K_NO_WAIT)) != NULL) {
141141
if (is_listen) {
142142
NET_DBG("discarding ctx %p", p);
143+
144+
/* Note that we must release all the packets we
145+
* might have received to the accepted socket.
146+
*/
147+
zsock_flush_queue(p);
143148
net_context_put(p);
144149
} else {
145150
NET_DBG("discarding pkt %p", p);

0 commit comments

Comments
 (0)