Bug 439814 - Minor defect in nanny [NEEDINFO]
Minor defect in nanny
Product: Red Hat Enterprise Linux 5
Classification: Red Hat
Component: piranha (Show other bugs)
All Linux
low Severity low
: rc
: ---
Assigned To: Marek Grac
Depends On:
Blocks: 440251 450166
  Show dependency treegraph
Reported: 2008-03-31 11:44 EDT by Darren Lavender
Modified: 2009-06-19 23:19 EDT (History)
2 users (show)

See Also:
Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of:
Last Closed: 2009-01-20 15:54:49 EST
Type: ---
Regression: ---
Mount Type: ---
Documentation: ---
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---
cward: needinfo? (bnagendr)

Attachments (Terms of Use)

  None (edit)
Description Darren Lavender 2008-03-31 11:44:13 EDT
Description of problem:

In reviewing the nanny code I discovered what appears to be a minor coding 

char *
getExecOutput (int flags, char **argv, int timeout)
        pipe (p);

        if (!(child = fork ())) {
                int stdin, stderr;

                execvp (argv[0], argv);
                exit (1);

        close (p[1]);

        alarm (timeout);

        needsKilling = child;
        sigprocmask (SIG_UNBLOCK, &sigs, &oldSigs);

        rc = waitpid (child, &status, 0);          <--------- rc
        sigprocmask (SIG_SETMASK, &oldSigs, NULL);
        needsKilling = 0;

        if (rc < 0) {
                if (rc == EINTR)                  <------------- bug!! Should be
                        piranha_log (flags, (char *)
                                     "unexpected return \"%s\" running the
                        piranha_log (flags,
                                     (char *) "timeout running the following:");

The above code makes a check of rc as though it is an errno, this is incorrect,
the syscall
rc value will be -1 and errno would be set to EINTR, as per the waitpid man page:


       wait(): on success, returns the process ID of the terminated child; on
error, -1 is returned.

       waitpid(): on success, returns the process ID of the child whose state
has changed; on error, -1 is returned;  if  WNO-
       HANG was specified and no child(ren) specified by pid has yet changed
state, then 0 is returned.

       waitid():  returns 0 on success or if WNOHANG was specified and no
child(ren) specified by id has yet changed state; on
       error, -1 is returned.

       Each of these calls sets errno to an appropriate value in the case of an
Comment 3 Chris Ward 2008-11-28 02:13:28 EST
Partners, this bug should be fixed in the latest RHEL 5.3 Snapshot. We believe that you have some interest in its correct functionality, so we're making a friendly request to send us some testing feedback. 

If you have a chance to test it, please share with us your findings. If you have successfully VERIFIED the fix, please add PartnerVerified to the Bugzilla keywords, along with a description of the results. Thanks!
Comment 4 Chris Ward 2008-12-18 05:38:25 EST
~~ Snapshot 6 is out ~~ Partners, please test and let us know if this bug has been fixed. Add PartnerVerified keyword if everything works as expected. For any new issues encountered, CLONE this bug and report the issues in the new bug.
Comment 6 errata-xmlrpc 2009-01-20 15:54:49 EST
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.


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