Skip to content

Commit 535e70a

Browse files
jukkarkartben
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 <jukka.rissanen@nordicsemi.no>
1 parent 653e717 commit 535e70a

File tree

1 file changed

+5
-0
lines changed

1 file changed

+5
-0
lines changed

subsys/net/lib/sockets/sockets_inet.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,11 @@ static void zsock_flush_queue(struct net_context *ctx)
6363
while ((p = k_fifo_get(&ctx->recv_q, K_NO_WAIT)) != NULL) {
6464
if (is_listen) {
6565
NET_DBG("discarding ctx %p", p);
66+
67+
/* Note that we must release all the packets we
68+
* might have received to the accepted socket.
69+
*/
70+
zsock_flush_queue(p);
6671
net_context_put(p);
6772
} else {
6873
NET_DBG("discarding pkt %p", p);

0 commit comments

Comments
 (0)