Bug 616684 - wrong redirections with SIGPIPE traps
Summary: wrong redirections with SIGPIPE traps
Status: CLOSED ERRATA
Alias: None
Product: Red Hat Enterprise Linux 6
Classification: Red Hat
Component: ksh (Show other bugs)
(Show other bugs)
Version: 6.1
Hardware: All Linux
medium
medium
Target Milestone: rc
: ---
Assignee: Michal Hlavinka
QA Contact: BaseOS QE - Apps
URL:
Whiteboard:
Keywords:
Depends On: 615284
Blocks:
TreeView+ depends on / blocked
 
Reported: 2010-07-21 07:53 UTC by Michal Hlavinka
Modified: 2011-05-19 13:50 UTC (History)
4 users (show)

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
When a ksh script contained the "trap" command to capture a "SIGPIPE" signal, sending this signal via the built-in "echo" command could cause its output to be incorrectly added to the redirected output of an external command. With this update, ksh now flushes the output buffer before redirecting any output streams.
Story Points: ---
Clone Of: 615284
Environment:
Last Closed: 2011-05-19 13:50:03 UTC
Type: ---
Regression: ---
Mount Type: ---
Documentation: ---
CRM:
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---


Attachments (Terms of Use)
patch to fix this (482 bytes, patch)
2011-01-05 13:18 UTC, Michal Hlavinka
jskala: review+
Details | Diff


External Trackers
Tracker ID Priority Status Summary Last Updated
Red Hat Product Errata RHBA-2011:0645 normal SHIPPED_LIVE ksh bug fix and enhancement update 2011-05-18 17:55:36 UTC

Description Michal Hlavinka 2010-07-21 07:53:06 UTC
+++ This bug was initially created as a clone of Bug #615284 +++

Description of problem:
In a ksh script, when SIGPIPE trap action is specified and SIGPIPE occurs by the output of the built-in echo command, the output appears in a redirect file of a external command.

Version-Release number of selected component (if applicable):
ksh-20100202-1.el5

How reproducible:
Always

Steps to Reproduce:

Run the following scripts with

ssh localhost /path/to/the/script.ksh >/dev/null

Steps to reproduce:

Case 1:
-------

the script.ksh is:

#!/bin/ksh
killparent()
{
	sleep 1
	/bin/kill -9 $1
}
trap "/bin/echo trap > /dev/null" 13
killparent ${PPID} &
/usr/bin/yes
print "echo1"
/bin/echo "echo2" > /tmp/echo2
trap 13

After running the script with ssh print the contents of the resulting file:
# cat /tmp/echo2

Actual results:
echo1
echo2

Expected results:
echo2

Case 2:
-------

the script.ksh is

#!/bin/ksh
killparent()
{
	sleep 1
	/bin/kill -9 $1
}
trap "/bin/echo trap >> /tmp/trap" 13
killparent ${PPID} &
/usr/bin/yes
echo "echo1"
/bin/echo "echo2"
trap 13

After running the script with ssh print the contents of the resulting file:
# cat /tmp/trap

Actual results:
echo1
trap
trap

Expected results:
trap
trap

Additional information:
Seems that the output of the echo builtin command is buffered and the buffer is flushed upon forking a child process.  However when the flush fails the content of the buffer is not erased and then appears in where it should not.

Maybe the ksh should either delete the buffer after flush (even unsucessful), not to buffer the echo output or not to buffer the redirection output.

--- Additional comment from mhlavink@redhat.com on 2010-07-21 03:49:56 EDT ---

patch attached in original bug

Comment 2 Michal Hlavinka 2011-01-05 13:18:53 UTC
Created attachment 471856 [details]
patch to fix this

Comment 5 Martin Prpič 2011-03-16 15:53:45 UTC
    Technical note added. If any revisions are required, please edit the "Technical Notes" field
    accordingly. All revisions will be proofread by the Engineering Content Services team.
    
    New Contents:
* When a ksh script contained the "trap" command to capture a "SIGPIPE" signal, sending this signal via the built-in "echo" command could cause its output to be incorrectly added to the redirected output of an external command. With this update, ksh now flushes the output buffer before redirecting any output streams.

Comment 6 Martin Prpič 2011-03-16 15:53:54 UTC
    Technical note updated. If any revisions are required, please edit the "Technical Notes" field
    accordingly. All revisions will be proofread by the Engineering Content Services team.
    
    Diffed Contents:
@@ -1 +1 @@
-* When a ksh script contained the "trap" command to capture a "SIGPIPE" signal, sending this signal via the built-in "echo" command could cause its output to be incorrectly added to the redirected output of an external command. With this update, ksh now flushes the output buffer before redirecting any output streams.+When a ksh script contained the "trap" command to capture a "SIGPIPE" signal, sending this signal via the built-in "echo" command could cause its output to be incorrectly added to the redirected output of an external command. With this update, ksh now flushes the output buffer before redirecting any output streams.

Comment 7 errata-xmlrpc 2011-05-19 13:50:03 UTC
An advisory has been issued which should help the problem
described in this bug report. This report is therefore being
closed with a resolution of ERRATA. For more information
on therefore solution and/or where to find the updated files,
please follow the link below. You may reopen this bug report
if the solution does not work for you.

http://rhn.redhat.com/errata/RHBA-2011-0645.html


Note You need to log in before you can comment on or make changes to this bug.