From 0933f89f65e981013b745cbd8c8daa4f68eb6de7 Mon Sep 17 00:00:00 2001 From: Ziyue Yang Date: Wed, 12 Jul 2017 10:59:55 +0800 Subject: [PATCH] kdumpctl: fix infinite loop caused by running under bash Description of problem (https://bugzilla.redhat.com/show_bug.cgi?id=1465735): Run `kdumpctl status` as normal user, get below error messages: Another app is currently holding the kdump lock; waiting for it to exit... flock: 9: Bad file descriptor Another app is currently holding the kdump lock; waiting for it to exit... flock: 9: Bad file descriptor ... The bug is caused by behavior difference between bash and sh (bash in posix). In the function single_instance_lock in kdumpctl script, there is exec 9>/var/lock/kdump which will fail in user mode. However, this fail will cause script exiting under bash but not exiting under sh, causing infinite loop because the flock will always fail. According to the 16th item in ftp://ftp.gnu.org/old-gnu/Manuals/bash-2.02/html_node/bashref_66.html If a POSIX.2 special builtin returns an error status, a non- interactive shell exits. And according to https://www.gnu.org/software/bash/manual/html_node/Special-Builtins.html exec is one of the POSIX.2 special builtin's. This patch fixes the bug by checking exec return value. Fixes: 9fb2996d05c2 ("kdumpctl: change the shebang header to use /bin/bash") Signed-off-by: Ziyue Yang Acked-by: Dave Young Reviewed-by: Xunlei Pang --- kdumpctl | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/kdumpctl b/kdumpctl index e440bbb..1b50966 100755 --- a/kdumpctl +++ b/kdumpctl @@ -37,6 +37,10 @@ single_instance_lock() local rc timeout=5 exec 9>/var/lock/kdump + if [ $? -ne 0 ]; then + echo "Create file lock failed" + exit 1 + fi flock -n 9 rc=$?