diff options
author | V3n3RiX <venerix@redcorelinux.org> | 2020-06-13 10:39:22 +0100 |
---|---|---|
committer | V3n3RiX <venerix@redcorelinux.org> | 2020-06-13 10:39:22 +0100 |
commit | 9452a6e87b6c2c70513bc47a2470bf9f1168920e (patch) | |
tree | 8ac67e26b45f34d71c5aab3621813b100a0d5f00 /net-misc/curl/files | |
parent | f516638b7fe9592837389826a6152a7e1b251c54 (diff) |
gentoo resync : 13.06.2020
Diffstat (limited to 'net-misc/curl/files')
-rw-r--r-- | net-misc/curl/files/curl-fix-cpu-load.patch | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/net-misc/curl/files/curl-fix-cpu-load.patch b/net-misc/curl/files/curl-fix-cpu-load.patch new file mode 100644 index 000000000000..fb20641b5b22 --- /dev/null +++ b/net-misc/curl/files/curl-fix-cpu-load.patch @@ -0,0 +1,94 @@ +Fixes https://bugs.gentoo.org/727352 + +From 2a41e236716da4c41ebc1132bd36d9273bd0321f Mon Sep 17 00:00:00 2001 +From: Daniel Stenberg <daniel@haxx.se> +Date: Mon, 8 Jun 2020 14:05:22 +0200 +Subject: [PATCH] socks: detect connection close during handshake + +The SOCKS4/5 state machines weren't properly terminated when the proxy +connection got closed, leading to a busy-loop. + +Reported-By: zloi-user on github +Fixes #5532 +Closes #5542 +--- + lib/socks.c | 32 ++++++++++++++++++++++++++++---- + 1 file changed, 28 insertions(+), 4 deletions(-) + +diff --git a/lib/socks.c b/lib/socks.c +index 4c1af7b9de7..b2215fef30c 100644 +--- a/lib/socks.c ++++ b/lib/socks.c +@@ -382,6 +382,11 @@ CURLcode Curl_SOCKS4(const char *proxy_user, + curl_easy_strerror(result)); + return CURLE_COULDNT_CONNECT; + } ++ else if(!result && !actualread) { ++ /* connection closed */ ++ failf(data, "connection to proxy closed"); ++ return CURLE_COULDNT_CONNECT; ++ } + else if(actualread != sx->outstanding) { + /* remain in reading state */ + sx->outstanding -= actualread; +@@ -592,6 +597,11 @@ CURLcode Curl_SOCKS5(const char *proxy_user, + failf(data, "Unable to receive initial SOCKS5 response."); + return CURLE_COULDNT_CONNECT; + } ++ else if(!result && !actualread) { ++ /* connection closed */ ++ failf(data, "Connection to proxy closed"); ++ return CURLE_COULDNT_CONNECT; ++ } + else if(actualread != sx->outstanding) { + /* remain in reading state */ + sx->outstanding -= actualread; +@@ -717,15 +727,19 @@ CURLcode Curl_SOCKS5(const char *proxy_user, + failf(data, "Unable to receive SOCKS5 sub-negotiation response."); + return CURLE_COULDNT_CONNECT; + } +- if(actualread != sx->outstanding) { ++ else if(!result && !actualread) { ++ /* connection closed */ ++ failf(data, "connection to proxy closed"); ++ return CURLE_COULDNT_CONNECT; ++ } ++ else if(actualread != sx->outstanding) { + /* remain in state */ + sx->outstanding -= actualread; + sx->outp += actualread; + return CURLE_OK; + } +- + /* ignore the first (VER) byte */ +- if(socksreq[1] != 0) { /* status */ ++ else if(socksreq[1] != 0) { /* status */ + failf(data, "User was rejected by the SOCKS5 server (%d %d).", + socksreq[0], socksreq[1]); + return CURLE_COULDNT_CONNECT; +@@ -890,6 +904,11 @@ CURLcode Curl_SOCKS5(const char *proxy_user, + failf(data, "Failed to receive SOCKS5 connect request ack."); + return CURLE_COULDNT_CONNECT; + } ++ else if(!result && !actualread) { ++ /* connection closed */ ++ failf(data, "connection to proxy closed"); ++ return CURLE_COULDNT_CONNECT; ++ } + else if(actualread != sx->outstanding) { + /* remain in state */ + sx->outstanding -= actualread; +@@ -967,7 +986,12 @@ CURLcode Curl_SOCKS5(const char *proxy_user, + failf(data, "Failed to receive SOCKS5 connect request ack."); + return CURLE_COULDNT_CONNECT; + } +- if(actualread != sx->outstanding) { ++ else if(!result && !actualread) { ++ /* connection closed */ ++ failf(data, "connection to proxy closed"); ++ return CURLE_COULDNT_CONNECT; ++ } ++ else if(actualread != sx->outstanding) { + /* remain in state */ + sx->outstanding -= actualread; + sx->outp += actualread; |