From 34c265f01c8b189e7de4e73fb7ecb0e63a004c51 Mon Sep 17 00:00:00 2001 From: Ruediger Meier Date: Thu, 22 May 2014 09:19:08 +0200 Subject: [PATCH] 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 --- sys-utils/setarch.c | 3 +++ tests/expected/misc/setarch | 11 +++++++++++ 2 files changed, 14 insertions(+) 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 -- 2.47.2