Bug 1259898

Summary: table of file descriptors not updated on F_DUPFD_CLOEXEC
Product: Red Hat Enterprise Linux 6 Reporter: Paulo Andrade <pandrade>
Component: kshAssignee: Siteshwar Vashisht <svashisht>
Status: CLOSED WONTFIX QA Contact: BaseOS QE - Apps <qe-baseos-apps>
Severity: high Docs Contact:
Priority: high    
Version: 6.6CC: baitken, cisley, jruemker, kcleveng, mhlavink, mpoole, pandrade, srandhaw, svashisht
Target Milestone: rcKeywords: Patch, Reopened
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2017-11-06 13:21: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: 1269194, 1461138    
Attachments:
Description Flags
ksh-20120801-F_dupfd_cloexec.patch none

Description Paulo Andrade 2015-09-03 18:19:32 UTC
Created attachment 1070038 [details]
ksh-20120801-F_dupfd_cloexec.patch

I do not yet have a reproducer, but have a patch
that handles the final state, and user reports
the patch corrects this specific crash condition.

  But I am afraid it is just hiding a descriptor
leak. In the crash coredump, it had:

(gdb) p shp->gd->lim.open_max
$1 = 64
(gdb) p fd
$2 = 122

Comment 2 Michal Hlavinka 2015-11-16 14:54:14 UTC
Any luck with getting a reproducer?

Comment 20 Siteshwar Vashisht 2017-06-18 18:30:33 UTC
I am able to reproduce a file descriptor leak with this code :

while true; do
    foo=`pvs << EOF
         $(pvs)
         EOF`
done

however patch from comment 0 does not fix it, so it may be unrelated.

Comment 21 Paulo Andrade 2017-06-19 12:50:46 UTC
The patch in comment 0 just attempts to do "what was meant", and  (mostly)
match latest ast code, that is to use F_DUPFD_CLOEXEC, detected by build
configure, that sets the value of F_dupfd_cloexec.
I believe the patch has the side effect of not "exporting" the leak in
ksh internal structures to forked shells, thus making it harder to have
cumulative leaks, that end in out of bounds writes.