tags 411135 patch thanks Hi,
In 2.6.19 all execve() calls in bbc_envctrl.c and envctrl.c have been replaced by call_usermodehelper(). Based on that I've made a simple backport of that (patch attached). I would appreciate if you could build a kernel with this patch applied and confirm that it works. Sorry that I cannot build it myself, I currently don't have access to a sparc box. Best regards, -- Jurij Smakov [EMAIL PROTECTED] Key: http://www.wooyd.org/pgpkey/ KeyID: C99E03CC
diff -aur a/drivers/sbus/char/bbc_envctrl.c b/drivers/sbus/char/bbc_envctrl.c --- a/drivers/sbus/char/bbc_envctrl.c 2006-09-19 20:42:06.000000000 -0700 +++ b/drivers/sbus/char/bbc_envctrl.c 2007-02-18 09:51:07.000000000 -0800 @@ -4,14 +4,12 @@ * Copyright (C) 2001 David S. Miller (davem@redhat.com) */ -#define __KERNEL_SYSCALLS__ -static int errno; - #include <linux/kernel.h> #include <linux/kthread.h> #include <linux/sched.h> #include <linux/slab.h> #include <linux/delay.h> +#include <linux/kmod.h> #include <asm/oplib.h> #include <asm/ebus.h> @@ -200,7 +198,7 @@ printk(KERN_CRIT "kenvctrld: Shutting down the system now.\n"); shutting_down = 1; - if (execve("/sbin/shutdown", argv, envp) < 0) + if (call_usermodehelper("/sbin/shutdown", argv, envp, 0) < 0) printk(KERN_CRIT "envctrl: shutdown execution failed\n"); } diff -aur a/drivers/sbus/char/envctrl.c b/drivers/sbus/char/envctrl.c --- a/drivers/sbus/char/envctrl.c 2006-09-19 20:42:06.000000000 -0700 +++ b/drivers/sbus/char/envctrl.c 2007-02-18 09:55:05.000000000 -0800 @@ -19,9 +19,6 @@ * Daniele Bellucci <[EMAIL PROTECTED]> */ -#define __KERNEL_SYSCALLS__ -static int errno; - #include <linux/module.h> #include <linux/sched.h> #include <linux/kthread.h> @@ -33,6 +30,7 @@ #include <linux/mm.h> #include <linux/slab.h> #include <linux/kernel.h> +#include <linux/kmod.h> #include <asm/ebus.h> #include <asm/uaccess.h> @@ -976,13 +974,15 @@ "HOME=/", "TERM=linux", "PATH=/sbin:/usr/sbin:/bin:/usr/bin", NULL }; char *argv[] = { "/sbin/shutdown", "-h", "now", NULL }; + int ret; if (inprog != 0) return; inprog = 1; printk(KERN_CRIT "kenvctrld: WARNING: Shutting down the system now.\n"); - if (0 > execve("/sbin/shutdown", argv, envp)) { + ret = call_usermodehelper("/sbin/shutdown", argv, envp, 0); + if (ret < 0) { printk(KERN_CRIT "kenvctrld: WARNING: system shutdown failed!\n"); inprog = 0; /* unlikely to succeed, but we could try again */ }