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 <x...@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 _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel