Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 92515da7 authored by Jeff Dike's avatar Jeff Dike Committed by Linus Torvalds
Browse files

[PATCH] uml: fix segfault on exit with CONFIG_GCOV



We need to disable signals on exit in all cases, not just when rebooting.

Signed-off-by: default avatarJeff Dike <jdike@addtoit.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 0894e27e
Loading
Loading
Loading
Loading
+20 −18
Original line number Diff line number Diff line
@@ -87,7 +87,7 @@ int main(int argc, char **argv, char **envp)
{
	char **new_argv;
	sigset_t mask;
	int ret, i;
	int ret, i, err;

	/* Enable all signals except SIGIO - in some environments, we can
	 * enter with some signals blocked
@@ -160,11 +160,11 @@ int main(int argc, char **argv, char **envp)
	 */
	change_sig(SIGPROF, 0);

	/* Reboot */
	if(ret){
		int err;

		printf("\n");
        /* This signal stuff used to be in the reboot case.  However,
         * sometimes a SIGVTALRM can come in when we're halting (reproducably
         * when writing out gcov information, presumably because that takes
         * some time) and cause a segfault.
         */

        /* stop timers and set SIG*ALRM to be ignored */
        disable_timer();
@@ -172,8 +172,7 @@ int main(int argc, char **argv, char **envp)
        /* disable SIGIO for the fds and set SIGIO to be ignored */
        err = deactivate_all_fds();
        if(err)
			printf("deactivate_all_fds failed, errno = %d\n",
			       -err);
                printf("deactivate_all_fds failed, errno = %d\n", -err);

        /* Let any pending signals fire now.  This ensures
         * that they won't be delivered after the exec, when
@@ -181,6 +180,9 @@ int main(int argc, char **argv, char **envp)
         */
        unblock_signals();

	/* Reboot */
	if(ret){
		printf("\n");
		execvp(new_argv[0], new_argv);
		perror("Failed to exec kernel");
		ret = 1;