Bug 2166254
Summary: | curl fails large file downloads for some http2 server | |||
---|---|---|---|---|
Product: | Red Hat Enterprise Linux 8 | Reporter: | Riccardo Piccoli <rpiccoli> | |
Component: | curl | Assignee: | Kamil Dudka <kdudka> | |
Status: | CLOSED ERRATA | QA Contact: | Daniel Rusek <drusek> | |
Severity: | urgent | Docs Contact: | ||
Priority: | unspecified | |||
Version: | 8.6 | CC: | brault, kdudka, oourfali | |
Target Milestone: | rc | Keywords: | Patch, Triaged, ZStream | |
Target Release: | --- | |||
Hardware: | Unspecified | |||
OS: | Linux | |||
Whiteboard: | ||||
Fixed In Version: | curl-7.61.1-29.el8 | Doc Type: | If docs needed, set a value | |
Doc Text: | Story Points: | --- | ||
Clone Of: | ||||
: | 2167825 2167826 (view as bug list) | Environment: | ||
Last Closed: | 2023-05-16 09:03:39 UTC | Type: | Bug | |
Regression: | --- | Mount Type: | --- | |
Documentation: | --- | CRM: | ||
Verified Versions: | Category: | --- | ||
oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | ||
Cloudforms Team: | --- | Target Upstream Version: | ||
Embargoed: | ||||
Bug Depends On: | ||||
Bug Blocks: | 2167825, 2167826 |
Description
Riccardo Piccoli
2023-02-01 10:11:37 UTC
Thank you for reporting it! git-bisect points to the following commit: https://github.com/curl/curl/commit/15f51474c837679c0b79825c23356ac681ffabde Although the commit message says that nghttp2-1.41.0 or newer is required to fix https://github.com/curl/curl/issues/4939 it does not seem to be needed to fix this bug. The problem went away for me despite I was still using libnghttp2-1.33.0-3.el8_2.1.x86_64 from the system. So I guess this bug is fixed just by coincidence and there is a chance that the upstream fix could be somehow minimized to better apply on RHEL-8 and lower the risk that it would break something else. Changing the severity due to the service impact here. The important part of the upstream commit regarding the bug in question seems to be this one-liner: --- a/lib/http2.c +++ b/lib/http2.c @@ -63,7 +63,7 @@ #define NGHTTP2_HAS_SET_LOCAL_WINDOW_SIZE 1 #endif -#define HTTP2_HUGE_WINDOW_SIZE (1 << 30) +#define HTTP2_HUGE_WINDOW_SIZE (32 * 1024 * 1024) /* 32 MB */ #ifdef DEBUG_HTTP2 #define H2BUGF(x) x Amazing, indeed the transfer would always stop at 1073741824 bytes, which is 1 << 30. I guess the stream was stalling and they were not negotiating a new window? Just out of curiosity, do you have any more insights on what this window size was triggering? Not really. The value is passed to libnghttp2. I have never debugged the protocol at this level. Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory (Low: curl security and bug fix update), and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. https://access.redhat.com/errata/RHSA-2023:2963 |