On reboot, all possible pending signal sources are disabled.
diff --git a/arch/um/include/irq_user.h b/arch/um/include/irq_user.h
index 087bd39..0df4076 100644
--- a/arch/um/include/irq_user.h
+++ b/arch/um/include/irq_user.h
@@ -14,6 +14,7 @@
 extern void free_irq_by_fd(int fd);
 extern void reactivate_fd(int fd, int irqnum);
 extern void deactivate_fd(int fd, int irqnum);
+extern int deactivate_all_fds(void);
 extern void forward_interrupts(int pid);
 extern void init_irq_signals(int on_sigstack);
 extern void forward_ipi(int fd, int pid);
diff --git a/arch/um/include/time_user.h b/arch/um/include/time_user.h
index 9ddb749..6793a2f 100644
--- a/arch/um/include/time_user.h
+++ b/arch/um/include/time_user.h
@@ -11,6 +11,7 @@
 extern void set_interval(int timer_type);
 extern void idle_sleep(int secs);
 extern void enable_timer(void);
+extern void disable_timer(void);
 extern unsigned long time_lock(void);
 extern void time_unlock(unsigned long);
 
diff --git a/arch/um/kernel/irq_user.c b/arch/um/kernel/irq_user.c
index 87ac2b0..38e66ac 100644
--- a/arch/um/kernel/irq_user.c
+++ b/arch/um/kernel/irq_user.c
@@ -364,6 +364,20 @@
 	irq_unlock(flags);
 }
 
+int deactivate_all_fds(void)
+{
+	struct irq_fd *irq;
+	int err;
+
+	for(irq=active_fds;irq != NULL;irq = irq->next){
+		err = os_clear_fd_async(irq->fd);
+		if(err)
+			return(err);
+	}
+
+	return(0);
+}
+
 void forward_ipi(int fd, int pid)
 {
 	int err;
diff --git a/arch/um/main.c b/arch/um/main.c
index 2fe4c64..0aaae84 100644
--- a/arch/um/main.c
+++ b/arch/um/main.c
@@ -17,6 +17,8 @@
 #include "kern_util.h"
 #include "mem_user.h"
 #include "signal_user.h"
+#include "time_user.h"
+#include "irq_user.h"
 #include "user.h"
 #include "init.h"
 #include "mode.h"
@@ -147,8 +149,20 @@
 	
 	/* Reboot */
 	if(ret){
+		int err;
+
 		printf("\n");
 
+		/* Let any pending signals fire, then disable them.  This 
+		 * ensures that they won't be delivered after the exec, when 
+		 * they are definitely not expected.
+		 */
+		unblock_signals();
+		disable_timer();
+		err = deactivate_all_fds();
+		if(err)
+			printf("deactivate_all_fds failed, errno = %d\n", -err);
+
 		execvp(new_argv[0], new_argv);
 		perror("Failed to exec kernel");
 		ret = 1;