grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] unix exec: avoid atexit handlers when child execvp fails


From: Dimitri John Ledkov
Subject: [PATCH] unix exec: avoid atexit handlers when child execvp fails
Date: Thu, 29 Apr 2021 12:34:34 +0100

Functions `grub_util_exec_pipe()` and `grub_util_exec_pipe_stderr()`
currently call `execvp()`. If the call fails for any reason, the child
currently calls `exit(127)`. This in turn executes the parents
`atexit()` handlers from the forked child, and then the same handlers
are called again from parent. This is usually not desired, and can
lead to deadlocks, and undesired behaviour.

This patch fixes up "unix exec: avoid atexit handlers when child
exits" further.

Fixes e75cf4a58b5eaf482804e5e1b2cc7d4399df350e

Signed-off-by: Dimitri John Ledkov <xnox@ubuntu.com>
---
 grub-core/osdep/unix/exec.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/grub-core/osdep/unix/exec.c b/grub-core/osdep/unix/exec.c
index db3259f650..e8db9202fb 100644
--- a/grub-core/osdep/unix/exec.c
+++ b/grub-core/osdep/unix/exec.c
@@ -188,7 +188,7 @@ grub_util_exec_pipe (const char *const *argv, int *fd)
       close (pipe_fd[1]);
 
       execvp ((char *) argv[0], (char **) argv);
-      exit (127);
+      _exit (127);
     }
   else
     {
@@ -234,7 +234,7 @@ grub_util_exec_pipe_stderr (const char *const *argv, int 
*fd)
       close (pipe_fd[1]);
 
       execvp ((char *) argv[0], (char **) argv);
-      exit (127);
+      _exit (127);
     }
   else
     {
-- 
2.27.0




reply via email to

[Prev in Thread] Current Thread [Next in Thread]