From: Ruediger Meier Date: Thu, 22 May 2014 07:19:08 +0000 (+0200) Subject: setarch: flush output streams before exec X-Git-Tag: v2.25-rc1~99^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=34c265f01c8b189e7de4e73fb7ecb0e63a004c51;p=thirdparty%2Futil-linux.git setarch: flush output streams before exec This fixes the following (non-deterministic) discrepancy: $ setarch x86_64 -RFZLvXBIST3 --uname-2.6 echo success Switching on READ_IMPLIES_EXEC. Switching on ADDR_LIMIT_32BIT. Switching on SHORT_INODE. Switching on WHOLE_SECONDS. Switching on STICKY_TIMEOUTS. Switching on ADDR_LIMIT_3GB. Switching on UNAME26. success $ setarch x86_64 -RFZLvXBIST3 --uname-2.6 echo success &> /tmp/bla; cat /tmp/bla success Signed-off-by: Ruediger Meier --- diff --git a/sys-utils/setarch.c b/sys-utils/setarch.c index 957bb2b030..f957c79758 100644 --- a/sys-utils/setarch.c +++ b/sys-utils/setarch.c @@ -356,6 +356,9 @@ int main(int argc, char *argv[]) if (set_arch(p, options, 0)) err(EXIT_FAILURE, _("Failed to set personality to %s"), p); + /* flush all output streams before exec */ + fflush(NULL); + if (!argc) { execl("/bin/sh", "-sh", NULL); err(EXIT_FAILURE, _("failed to execute %s"), "/bin/sh"); diff --git a/tests/expected/misc/setarch b/tests/expected/misc/setarch index 2e9ba477f8..54208acf65 100644 --- a/tests/expected/misc/setarch +++ b/tests/expected/misc/setarch @@ -1 +1,12 @@ +Switching on ADDR_NO_RANDOMIZE. +Switching on FDPIC_FUNCPTRS. +Switching on MMAP_PAGE_ZERO. +Switching on ADDR_COMPAT_LAYOUT. +Switching on READ_IMPLIES_EXEC. +Switching on ADDR_LIMIT_32BIT. +Switching on SHORT_INODE. +Switching on WHOLE_SECONDS. +Switching on STICKY_TIMEOUTS. +Switching on ADDR_LIMIT_3GB. +Switching on UNAME26. success