Bug 1427500

Summary: util-linux: script does not retry on EINTR when logging command output
Product: Red Hat Enterprise Linux 7 Reporter: Florian Weimer <fweimer>
Component: util-linuxAssignee: Karel Zak <kzak>
Status: CLOSED ERRATA QA Contact: Radka Brychtova <rskvaril>
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: 7.3CC: fweimer, rskvaril
Target Milestone: rc   
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: util-linux-2.23.2-44.el7 Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2018-04-10 17:25:50 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: 1465901, 1472751    

Description Florian Weimer 2017-02-28 12:15:18 UTC
Description of problem:

When logging command output, script fails if the underlying write system call fails with EINTR.

This is peripherally related to this glibc upstream bug:

  https://sourceware.org/bugzilla/show_bug.cgi?id=21004

But as noted in this bug, I'm not convinced we should change the behavior within glibc.

This should be fixed by switching to a direct write system call with an EINTR retry loop, or installing the signal handler with SA_RESTART.

Version-Release number of selected component (if applicable):

util-linux-2.23.2-33.el7.x86_64

How reproducible:

Rarely.

Steps to Reproduce:
1. Run script to capture output from a long-running process under screen.
2. Detach the screen and reattach it with a different terminal size.

Actual results:

script exits with: “script: write failed: Interrupted system call”.  Any pending data is discarded.

Expected results:

script continues to run.

Comment 1 Karel Zak 2017-02-28 13:56:16 UTC
That's right, the current upstream uses write_all()
https://github.com/karelzak/util-linux/blob/master/include/all-io.h. These issue should be already fixed on Fedora.

Do you think the problem is important enough to backport the change to RHEL7? (I'm not sure:-)

Comment 2 Florian Weimer 2017-02-28 14:04:17 UTC
(In reply to Karel Zak from comment #1)
> That's right, the current upstream uses write_all()
> https://github.com/karelzak/util-linux/blob/master/include/all-io.h. These
> issue should be already fixed on Fedora.
> 
> Do you think the problem is important enough to backport the change to
> RHEL7? (I'm not sure:-)

Is there any other tool which can be used to capture output from a terminal?  Maybe I could use screen itself or tmux.

I need this for glibc testing, to capture full crash output (including backtraces).  If there is no other option, I would appreciate a fixed script program.

Comment 3 Karel Zak 2017-02-28 14:12:46 UTC
I don't want to force you to use something else, just asking how important it is.

Comment 11 errata-xmlrpc 2018-04-10 17:25:50 UTC
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, 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/RHBA-2018:0936