From: David Woodhouse Date: Wed, 6 Apr 2022 15:43:42 +0000 (+0100) Subject: esp: Close socket on error X-Git-Tag: v9.00~75 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=6f8c5ed00ef7ed01bd0a0659af34bb502fe8e49c;p=users%2Fdwmw2%2Fopenconnect.git esp: Close socket on error Previously we would just keep trying to read from it and consume all CPU. Fixes: 389 (hopefully) Signed-off-by: David Woodhouse --- diff --git a/esp.c b/esp.c index d607a4e0..87efa438 100644 --- a/esp.c +++ b/esp.c @@ -169,8 +169,15 @@ int esp_mainloop(struct openconnect_info *vpninfo, int *timeout, int readable) } pkt = vpninfo->dtls_pkt; len = recv(vpninfo->dtls_fd, (void *)&pkt->esp, len + sizeof(pkt->esp), 0); - if (len <= 0) - break; + if (len <= 0) { + if (!len || errno == EAGAIN || errno == EWOULDBLOCK) + break; + + /* On *real* errors, close the UDP socket and try again later. */ + vpn_perror(vpninfo, "ESP recv()"); + vpninfo->proto->udp_close(vpninfo); + return 0; + } work_done = 1;