Bug#411135: linux-image-2.6.18-4-sparc64-smp: Unknown symbol execve in module bbc
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 jurij@wooyd.org
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 <bellucda@tiscali.it>
*/
-#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 */
}
Reply to: