RHEL-147205 - endless poll loop in http_write when POLLHUP is returned

Resolves: RHEL-147205
This commit is contained in:
Zdenek Dohnal 2026-03-06 08:38:06 +01:00
parent 49f4908cbd
commit 10a08e8d4c
2 changed files with 52 additions and 1 deletions

View File

@ -0,0 +1,44 @@
From e2419c698922fb65ef62250a4588104021449b55 Mon Sep 17 00:00:00 2001
From: Zdenek Dohnal <zdohnal@redhat.com>
Date: Fri, 6 Mar 2026 08:31:47 +0100
Subject: [PATCH] tls-gnutls.c: Do not check for errno after I/O operations
Based on gnutls_record_send/recv man pages, we should use the return
value of the functions as indicator what happened in the function and do
not look into errno at all.
Checking the errno value caused infinity loop in cupsd on busy servers
if there were enough connection errors when cupsd wrote the response.
The patch is provided by Paul Zirnik from SUSE - thank you for the
patch!
Fixes #827
---
cups/tls-gnutls.c | 4 ++--
diff --git a/cups/tls-gnutls.c b/cups/tls-gnutls.c
index 64f2af372..5769d6313 100644
--- a/cups/tls-gnutls.c
+++ b/cups/tls-gnutls.c
@@ -1208,7 +1208,7 @@ _httpTLSRead(http_t *http, /* I - Connection to server */
result = gnutls_record_recv(http->tls, buf, (size_t)len);
- if (result < 0 && !errno)
+ if (result < 0)
{
/*
* Convert GNU TLS error to errno value...
@@ -1669,7 +1669,7 @@ _httpTLSWrite(http_t *http, /* I - Connection to server */
result = gnutls_record_send(http->tls, buf, (size_t)len);
- if (result < 0 && !errno)
+ if (result < 0)
{
/*
* Convert GNU TLS error to errno value...
--
2.53.0

View File

@ -22,7 +22,7 @@ Summary: CUPS printing system
Name: cups
Epoch: 1
Version: 2.2.6
Release: 66%{?dist}
Release: 67%{?dist}
License: GPLv2+ and LGPLv2 with exceptions and AML
Url: http://www.cups.org/
Source0: https://github.com/apple/cups/releases/download/v%{VERSION}/cups-%{VERSION}-source.tar.gz
@ -212,6 +212,8 @@ Patch104: 0001-conf.c-Fix-stopping-scheduler-on-unknown-directive.patch
# fix use-after-free reported by OSH
# https://github.com/OpenPrinting/cups/pull/1454
Patch105: 0001-scheduler-Fix-possible-use_after_free-in-cupsdReadCl.patch
# RHEL-147205 - endless poll loop in http_write when POLLHUP is returned
Patch106: 0001-tls-gnutls.c-Do-not-check-for-errno-after-I-O-operat.patch
Patch1000: cups-lspp.patch
@ -554,6 +556,8 @@ Sends IPP requests to the specified URI and tests and/or displays the results.
%patch104 -p1 -b .ignore-unknown
# fix use-after-free reported by OSH
%patch105 -p1 -b .osh-use-after-free
# RHEL-147205 - endless poll loop in http_write when POLLHUP is returned
%patch106 -p1 -b .httpwrite-endless-poll
sed -i -e '1iMaxLogSize 0' conf/cupsd.conf.in
@ -981,6 +985,9 @@ rm -f %{cups_serverbin}/backend/smb
%{_mandir}/man5/ipptoolfile.5.gz
%changelog
* Fri Mar 06 2026 Zdenek Dohnal <zdohnal@redhat.com> - 1:2.2.6-67
- RHEL-147205 - endless poll loop in http_write when POLLHUP is returned
* Fri Dec 12 2025 Zdenek Dohnal <zdohnal@redhat.com> - 1:2.2.6-66
- fix use-after-free reported by OSH