From 7663f993f71f75255b9bc334fae9852901c2fd7f Mon Sep 17 00:00:00 2001 From: Masayuki Ishikawa Date: Fri, 15 Apr 2022 13:12:26 +0900 Subject: [PATCH] wireless: gs2200m: Fix recvfrom_request() in gs2200m_main.c Summary: - I noticed that wget causes ASSERT in gs2200m_main.c recently. - Finally, I found that it sends a wrong ack message in recvfrom_request() when the socket is closed passively - This commit fixes this issue. Impact: - gs2200m only Testing: - Tested with spresense:wifi_smp Signed-off-by: Masayuki Ishikawa --- wireless/gs2200m/gs2200m_main.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/wireless/gs2200m/gs2200m_main.c b/wireless/gs2200m/gs2200m_main.c index 4c22ae1e9..8e1821277 100644 --- a/wireless/gs2200m/gs2200m_main.c +++ b/wireless/gs2200m/gs2200m_main.c @@ -884,6 +884,7 @@ static int recvfrom_request(int fd, FAR struct gs2200m_s *priv, { FAR struct usrsock_request_recvfrom_s *req = hdrbuf; struct usrsock_message_datareq_ack_s resp; + struct usrsock_message_req_ack_s resp1; struct gs2200m_recv_msg rmsg; FAR struct usock_s *usock; int ret = 0; @@ -967,6 +968,14 @@ prepare: usock_send_event(fd, priv, usock, USRSOCK_EVENT_REMOTE_CLOSED ); + + /* Send ack only */ + + memset(&resp1, 0, sizeof(resp1)); + resp1.result = ret; + ret = _send_ack_common(fd, req->head.xid, &resp1); + + goto err_out; } }