Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-15-SP7:Update
util-linux
util-linux-more-exit-if-POLLERR-and-POLLHUP-on-...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File util-linux-more-exit-if-POLLERR-and-POLLHUP-on-stdin-is-received.patch of Package util-linux
From 68e14d3d5f4116ad3aca0e392d008645ea90cf70 Mon Sep 17 00:00:00 2001 From: Goldwyn Rodrigues <rgoldwyn@suse.com> Date: Fri, 8 Dec 2023 09:04:39 -0600 Subject: [PATCH] more: exit if POLLERR and POLLHUP on stdin is received References: bsc#1220117 more command continues to run in case stdin have closed the file and it takes 100% of CPU. This is because revents on stdin send POLLIN | POLLHUP | POLLERR once stdin is closed. more receives it even though it is not requested in events. This is common Linux behaviour to never mask out POLLHUP or POLLERR. The loop in more_key_command() runs infinitely because more_poll() returns 0 and read_command() reads 0 bytes. Check for POLLERR and POLLHUP, and exit more in case of an error. Steps to reproduce: 1. Setup /etc/systemd/logind.conf with KillUserProcesses=no 2. Add config "Defaults use_pty" in /etc/sudoers 3. Start an ssh session to the machine 4. # sudo su - 5. # more <big enough file> 6. kill the parent ssh process, say close the tab At this time "more" runs with 100% CPU utilization. Signed-off-by: Goldwyn Rodrigues <rgoldwyn@suse.com> diff --git a/text-utils/more.c b/text-utils/more.c index d4db3d5eb..a49acbc3e 100644 --- a/text-utils/more.c +++ b/text-utils/more.c @@ -1392,6 +1392,11 @@ static int more_poll(struct more_control *ctl, int timeout) abort(); } } + + /* Check for POLLERR and POLLHUP in stdin revents */ + if ((pfd[1].revents & POLLERR) && (pfd[1].revents & POLLHUP)) + more_exit(ctl); + if (pfd[1].revents == 0) return 1; return 0;
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor