[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [PATCH] unix exec: avoid atexit handlers when child execvp fails,
Dimitri John Ledkov <=