[PATCH] init: fix sparse warnings

From: Jaswinder Singh
Date: Sat Jul 12 2008 - 12:31:44 EST


ïïI am trying to solve following sparse warnings. Please give me feedback
for the Patch. You can also find updated sparse patches from
http://git.infradead.org/users/jaswinder/sparse-2.6.git

CHECK init/main.c
init/main.c:193:6: warning: symbol 'envp_init' was not declared. Should it be static?
init/main.c:805:16: warning: cast adds address space to expression (<asn:1>)

CHECK init/do_mounts.c
init/do_mounts.c:22:16: warning: symbol 'rd_doload' was not declared. Should it be static?
init/do_mounts.c:216:22: warning: incorrect type in argument 1 (different address spaces)
init/do_mounts.c:216:22: expected char [noderef] <asn:1>*dev_name
init/do_mounts.c:216:22: got char *name
init/do_mounts.c:216:28: warning: incorrect type in argument 2 (different address spaces)
init/do_mounts.c:216:28: expected char [noderef] <asn:1>*dir_name
init/do_mounts.c:216:28: got char static *<noident>
init/do_mounts.c:216:37: warning: incorrect type in argument 3 (different address spaces)
init/do_mounts.c:216:37: expected char [noderef] <asn:1>*type
init/do_mounts.c:216:37: got char *fs
init/do_mounts.c:216:48: warning: incorrect type in argument 5 (different address spaces)
init/do_mounts.c:216:48: expected void [noderef] <asn:1>*data
init/do_mounts.c:216:48: got void *data
init/do_mounts.c:220:12: warning: incorrect type in argument 1 (different address spaces)
init/do_mounts.c:220:12: expected char const [noderef] <asn:1>*filename
init/do_mounts.c:220:12: got char static *<noident>
init/do_mounts.c:306:16: warning: incorrect type in argument 1 (different address spaces)
init/do_mounts.c:306:16: expected char const [noderef] <asn:1>*filename
init/do_mounts.c:306:16: got char static *<noident>
init/do_mounts.c:312:16: warning: incorrect type in argument 1 (different address spaces)
init/do_mounts.c:312:16: expected char const [noderef] <asn:1>*filename
init/do_mounts.c:312:16: got char static *<noident>
init/do_mounts.c:317:17: warning: incorrect type in argument 2 (different address spaces)
init/do_mounts.c:317:17: expected char [noderef] <asn:1>*buf
init/do_mounts.c:317:17: got char *<noident>
init/do_mounts.h:18:13: warning: incorrect type in argument 1 (different address spaces)
init/do_mounts.h:18:13: expected char const [noderef] <asn:1>*pathname
init/do_mounts.h:18:13: got char *name
init/do_mounts.h:19:19: warning: incorrect type in argument 1 (different address spaces)
init/do_mounts.h:19:19: expected char const [noderef] <asn:1>*filename
init/do_mounts.h:19:19: got char *name
init/do_mounts.c:403:12: warning: incorrect type in argument 1 (different address spaces)
init/do_mounts.c:403:12: expected char [noderef] <asn:1>*dev_name
init/do_mounts.c:403:12: got char static *<noident>
init/do_mounts.c:403:17: warning: incorrect type in argument 2 (different address spaces)
init/do_mounts.c:403:17: expected char [noderef] <asn:1>*dir_name
init/do_mounts.c:403:17: got char static *<noident>
init/do_mounts.c:404:13: warning: incorrect type in argument 1 (different address spaces)
init/do_mounts.c:404:13: expected char const [noderef] <asn:1>*filename
init/do_mounts.c:404:13: got char static *<noident>

CHECK init/do_mounts_rd.c
init/do_mounts_rd.c:73:15: warning: incorrect type in argument 2 (different address spaces)
init/do_mounts_rd.c:73:15: expected char [noderef] <asn:1>*buf
init/do_mounts_rd.c:73:15: got unsigned char *[assigned] buf
init/do_mounts_rd.c:108:15: warning: incorrect type in argument 2 (different address spaces)
init/do_mounts_rd.c:108:15: expected char [noderef] <asn:1>*buf
init/do_mounts_rd.c:108:15: got unsigned char *[assigned] buf
init/do_mounts_rd.c:152:20: warning: incorrect type in argument 1 (different address spaces)
init/do_mounts_rd.c:152:20: expected char const [noderef] <asn:1>*filename
init/do_mounts_rd.c:152:20: got char static *<noident>
init/do_mounts_rd.c:156:19: warning: incorrect type in argument 1 (different address spaces)
init/do_mounts_rd.c:156:19: expected char const [noderef] <asn:1>*filename
init/do_mounts_rd.c:156:19: got char *from
init/do_mounts_rd.c:231:21: warning: incorrect type in argument 1 (different address spaces)
init/do_mounts_rd.c:231:21: expected char const [noderef] <asn:1>*filename
init/do_mounts_rd.c:231:21: got char *from
init/do_mounts_rd.c:238:19: warning: incorrect type in argument 2 (different address spaces)
init/do_mounts_rd.c:238:19: expected char [noderef] <asn:1>*buf
init/do_mounts_rd.c:238:19: got char *[assigned] buf
init/do_mounts_rd.c:239:21: warning: incorrect type in argument 2 (different address spaces)
init/do_mounts_rd.c:239:21: expected char const [noderef] <asn:1>*buf
init/do_mounts_rd.c:239:21: got char *[assigned] buf
init/do_mounts_rd.c:257:13: warning: incorrect type in argument 1 (different address spaces)
init/do_mounts_rd.c:257:13: expected char const [noderef] <asn:1>*pathname
init/do_mounts_rd.c:257:13: got char static *<noident>
init/do_mounts.h:18:13: warning: incorrect type in argument 1 (different address spaces)
init/do_mounts.h:18:13: expected char const [noderef] <asn:1>*pathname
init/do_mounts.h:18:13: got char *name
init/do_mounts.h:19:19: warning: incorrect type in argument 1 (different address spaces)
init/do_mounts.h:19:19: expected char const [noderef] <asn:1>*filename
init/do_mounts.h:19:19: got char *name
init/do_mounts.h:18:13: warning: incorrect type in argument 1 (different address spaces)
init/do_mounts.h:18:13: expected char const [noderef] <asn:1>*pathname
init/do_mounts.h:18:13: got char *name
init/do_mounts.h:19:19: warning: incorrect type in argument 1 (different address spaces)
init/do_mounts.h:19:19: expected char const [noderef] <asn:1>*filename
init/do_mounts.h:19:19: got char *name
init/do_mounts_rd.c:352:30: warning: incorrect type in argument 2 (different address spaces)
init/do_mounts_rd.c:352:30: expected char [noderef] <asn:1>*buf
init/do_mounts_rd.c:352:30: got unsigned char [usertype] *static [toplevel] inbuf
init/do_mounts_rd.c:373:36: warning: incorrect type in argument 2 (different address spaces)
init/do_mounts_rd.c:373:36: expected char const [noderef] <asn:1>*buf
init/do_mounts_rd.c:373:36: got unsigned char [usertype] *static [toplevel] window

CHECK init/do_mounts_initrd.c
init/do_mounts_initrd.c:35:18: warning: incorrect type in argument 1 (different address spaces)
init/do_mounts_initrd.c:35:18: expected char const [noderef] <asn:1>*filename
init/do_mounts_initrd.c:35:18: got char static *<noident>
init/do_mounts.h:18:13: warning: incorrect type in argument 1 (different address spaces)
init/do_mounts.h:18:13: expected char const [noderef] <asn:1>*pathname
init/do_mounts.h:18:13: got char *name
init/do_mounts.h:19:19: warning: incorrect type in argument 1 (different address spaces)
init/do_mounts.h:19:19: expected char const [noderef] <asn:1>*filename
init/do_mounts.h:19:19: got char *name
init/do_mounts_initrd.c:50:12: warning: incorrect type in argument 1 (different address spaces)
init/do_mounts_initrd.c:50:12: expected char const [noderef] <asn:1>*pathname
init/do_mounts_initrd.c:50:12: got char static *<noident>
init/do_mounts_initrd.c:51:21: warning: incorrect type in argument 1 (different address spaces)
init/do_mounts_initrd.c:51:21: expected char const [noderef] <asn:1>*filename
init/do_mounts_initrd.c:51:21: got char static *<noident>
init/do_mounts_initrd.c:52:20: warning: incorrect type in argument 1 (different address spaces)
init/do_mounts_initrd.c:52:20: expected char const [noderef] <asn:1>*filename
init/do_mounts_initrd.c:52:20: got char static *<noident>
init/do_mounts_initrd.c:54:12: warning: incorrect type in argument 1 (different address spaces)
init/do_mounts_initrd.c:54:12: expected char const [noderef] <asn:1>*filename
init/do_mounts_initrd.c:54:12: got char static *<noident>
init/do_mounts_initrd.c:55:12: warning: incorrect type in argument 1 (different address spaces)
init/do_mounts_initrd.c:55:12: expected char [noderef] <asn:1>*dev_name
init/do_mounts_initrd.c:55:12: got char static *<noident>
init/do_mounts_initrd.c:55:17: warning: incorrect type in argument 2 (different address spaces)
init/do_mounts_initrd.c:55:17: expected char [noderef] <asn:1>*dir_name
init/do_mounts_initrd.c:55:17: got char static *<noident>
init/do_mounts_initrd.c:56:13: warning: incorrect type in argument 1 (different address spaces)
init/do_mounts_initrd.c:56:13: expected char const [noderef] <asn:1>*filename
init/do_mounts_initrd.c:56:13: got char static *<noident>
init/do_mounts_initrd.c:73:12: warning: incorrect type in argument 1 (different address spaces)
init/do_mounts_initrd.c:73:12: expected char [noderef] <asn:1>*dev_name
init/do_mounts_initrd.c:73:12: got char static *<noident>
init/do_mounts_initrd.c:73:17: warning: incorrect type in argument 2 (different address spaces)
init/do_mounts_initrd.c:73:17: expected char [noderef] <asn:1>*dir_name
init/do_mounts_initrd.c:73:17: got char static *<noident>
init/do_mounts_initrd.c:76:13: warning: incorrect type in argument 1 (different address spaces)
init/do_mounts_initrd.c:76:13: expected char const [noderef] <asn:1>*filename
init/do_mounts_initrd.c:76:13: got char static *<noident>
init/do_mounts_initrd.c:81:13: warning: incorrect type in argument 1 (different address spaces)
init/do_mounts_initrd.c:81:13: expected char const [noderef] <asn:1>*filename
init/do_mounts_initrd.c:81:13: got char static *<noident>
init/do_mounts_initrd.c:89:20: warning: incorrect type in argument 1 (different address spaces)
init/do_mounts_initrd.c:89:20: expected char [noderef] <asn:1>*dev_name
init/do_mounts_initrd.c:89:20: got char static *<noident>
init/do_mounts_initrd.c:89:28: warning: incorrect type in argument 2 (different address spaces)
init/do_mounts_initrd.c:89:28: expected char [noderef] <asn:1>*dir_name
init/do_mounts_initrd.c:89:28: got char static *<noident>
init/do_mounts_initrd.c:93:21: warning: incorrect type in argument 1 (different address spaces)
init/do_mounts_initrd.c:93:21: expected char const [noderef] <asn:1>*filename
init/do_mounts_initrd.c:93:21: got char static *<noident>
init/do_mounts_initrd.c:99:14: warning: incorrect type in argument 1 (different address spaces)
init/do_mounts_initrd.c:99:14: expected char [noderef] <asn:1>*name
init/do_mounts_initrd.c:99:14: got char static *<noident>
init/do_mounts.h:18:13: warning: incorrect type in argument 1 (different address spaces)
init/do_mounts.h:18:13: expected char const [noderef] <asn:1>*pathname
init/do_mounts.h:18:13: got char *name
init/do_mounts.h:19:19: warning: incorrect type in argument 1 (different address spaces)
init/do_mounts.h:19:19: expected char const [noderef] <asn:1>*filename
init/do_mounts.h:19:19: got char *name
init/do_mounts_initrd.c:122:15: warning: incorrect type in argument 1 (different address spaces)
init/do_mounts_initrd.c:122:15: expected char const [noderef] <asn:1>*pathname
init/do_mounts_initrd.c:122:15: got char static *<noident>
init/do_mounts_initrd.c:127:13: warning: incorrect type in argument 1 (different address spaces)
init/do_mounts_initrd.c:127:13: expected char const [noderef] <asn:1>*pathname
init/do_mounts_initrd.c:127:13: got char static *<noident>

CHECK init/initramfs.c
init/initramfs.c:243:21: warning: incorrect type in argument 1 (different address spaces)
init/initramfs.c:243:21: expected char const [noderef] <asn:1>*oldname
init/initramfs.c:243:21: got char *old
init/initramfs.c:243:26: warning: incorrect type in argument 2 (different address spaces)
init/initramfs.c:243:26: expected char const [noderef] <asn:1>*newname
init/initramfs.c:243:26: got char *static [toplevel] [assigned] collected
init/initramfs.c:252:20: warning: incorrect type in argument 1 (different address spaces)
init/initramfs.c:252:20: expected char [noderef] <asn:1>*filename
init/initramfs.c:252:20: got char *path
init/initramfs.c:252:27: warning: incorrect type in argument 2 (different address spaces)
init/initramfs.c:252:27: expected struct stat [noderef] <asn:1>*statbuf
init/initramfs.c:252:27: got struct stat *<noident>
init/initramfs.c:254:14: warning: incorrect type in argument 1 (different address spaces)
init/initramfs.c:254:14: expected char const [noderef] <asn:1>*pathname
init/initramfs.c:254:14: got char *path
init/initramfs.c:256:15: warning: incorrect type in argument 1 (different address spaces)
init/initramfs.c:256:15: expected char const [noderef] <asn:1>*pathname
init/initramfs.c:256:15: got char *path
init/initramfs.c:279:19: warning: incorrect type in argument 1 (different address spaces)
init/initramfs.c:279:19: expected char const [noderef] <asn:1>*filename
init/initramfs.c:279:19: got char *static [toplevel] [assigned] collected
init/initramfs.c:288:13: warning: incorrect type in argument 1 (different address spaces)
init/initramfs.c:288:13: expected char const [noderef] <asn:1>*pathname
init/initramfs.c:288:13: got char *static [toplevel] [assigned] collected
init/initramfs.c:289:13: warning: incorrect type in argument 1 (different address spaces)
init/initramfs.c:289:13: expected char const [noderef] <asn:1>*filename
init/initramfs.c:289:13: got char *static [toplevel] [assigned] collected
init/initramfs.c:290:13: warning: incorrect type in argument 1 (different address spaces)
init/initramfs.c:290:13: expected char const [noderef] <asn:1>*filename
init/initramfs.c:290:13: got char *static [toplevel] [assigned] collected
init/initramfs.c:294:14: warning: incorrect type in argument 1 (different address spaces)
init/initramfs.c:294:14: expected char const [noderef] <asn:1>*filename
init/initramfs.c:294:14: got char *static [toplevel] [assigned] collected
init/initramfs.c:295:14: warning: incorrect type in argument 1 (different address spaces)
init/initramfs.c:295:14: expected char const [noderef] <asn:1>*filename
init/initramfs.c:295:14: got char *static [toplevel] [assigned] collected
init/initramfs.c:296:14: warning: incorrect type in argument 1 (different address spaces)
init/initramfs.c:296:14: expected char const [noderef] <asn:1>*filename
init/initramfs.c:296:14: got char *static [toplevel] [assigned] collected
init/initramfs.c:305:18: warning: incorrect type in argument 2 (different address spaces)
init/initramfs.c:305:18: expected char const [noderef] <asn:1>*buf
init/initramfs.c:305:18: got char *static [toplevel] [assigned] victim
init/initramfs.c:311:18: warning: incorrect type in argument 2 (different address spaces)
init/initramfs.c:311:18: expected char const [noderef] <asn:1>*buf
init/initramfs.c:311:18: got char *static [toplevel] [assigned] victim
init/initramfs.c:322:24: warning: incorrect type in argument 1 (different address spaces)
init/initramfs.c:322:24: expected char const [noderef] <asn:1>*old
init/initramfs.c:322:24: got char *
init/initramfs.c:322:45: warning: incorrect type in argument 2 (different address spaces)
init/initramfs.c:322:45: expected char const [noderef] <asn:1>*new
init/initramfs.c:322:45: got char *static [toplevel] [assigned] collected
init/initramfs.c:323:13: warning: incorrect type in argument 1 (different address spaces)
init/initramfs.c:323:13: expected char const [noderef] <asn:1>*filename
init/initramfs.c:323:13: got char *static [toplevel] [assigned] collected
init/initramfs.c:561:17: warning: incorrect type in argument 1 (different address spaces)
init/initramfs.c:561:17: expected char const [noderef] <asn:1>*filename
init/initramfs.c:561:17: got char static *<noident>
init/initramfs.c:563:19: warning: incorrect type in argument 2 (different address spaces)
init/initramfs.c:563:19: expected char const [noderef] <asn:1>*buf
init/initramfs.c:563:19: got char *<noident>

Signed-off-by: Jaswinder Singh <jaswinder@xxxxxxxxxxxxx>
---
include/linux/initrd.h | 12 +++++++++
init/do_mounts.c | 32 ++++++++++++++-----------
init/do_mounts.h | 4 +-
init/do_mounts_initrd.c | 58 +++++++++++++++++++++++++++++++---------------
init/do_mounts_rd.c | 25 ++++++++++---------
init/initramfs.c | 41 +++++++++++++++++++-------------
init/main.c | 4 +-
7 files changed, 110 insertions(+), 66 deletions(-)

diff --git a/include/linux/initrd.h b/include/linux/initrd.h
index 55289d2..83cba3a 100644
--- a/include/linux/initrd.h
+++ b/include/linux/initrd.h
@@ -1,3 +1,5 @@
+#ifndef _LINUX_INITRD_H
+#define _LINUX_INITRD_H

#define INITRD_MINOR 250 /* shouldn't collide with /dev/ram* too soon ... */

@@ -18,3 +20,13 @@ extern unsigned long initrd_start, initrd_end;
extern void free_initrd_mem(unsigned long, unsigned long);

extern unsigned int real_root_dev;
+
+extern char *envp_init[];
+
+extern const char __user cuold[], curoot[], curootroot[], cudot[], cuinitrd[];
+extern const char __user cudevram[], cudevconsole[], cudevroot[];
+extern const char __user cudevrootold[];
+extern char __user uold[], uroot[], urootroot[], udot[], uinitrd[];
+extern char __user udevram[], udevconsole[], udevroot[], udevrootold[];
+
+#endif /* _LINUX_INITRD_H */
diff --git a/init/do_mounts.c b/init/do_mounts.c
index 660c1e5..d82aa6b 100644
--- a/init/do_mounts.c
+++ b/init/do_mounts.c
@@ -11,6 +11,7 @@
#include <linux/mount.h>
#include <linux/device.h>
#include <linux/init.h>
+#include <linux/initrd.h>
#include <linux/fs.h>

#include <linux/nfs_fs.h>
@@ -211,13 +212,15 @@ static void __init get_fs_names(char *page)
*s = '\0';
}

-static int __init do_mount_root(char *name, char *fs, int flags, void *data)
+static int __init do_mount_root(char __user *name, char *fs,
+ unsigned long flags, void *data)
{
- int err = sys_mount(name, "/root", fs, flags, data);
+ long err = sys_mount(name, urootroot, (char __user *)fs,
+ flags, (void __user *)data);
if (err)
return err;

- sys_chdir("/root");
+ sys_chdir(urootroot);
ROOT_DEV = current->fs->pwd.mnt->mnt_sb->s_dev;
printk("VFS: Mounted root (%s filesystem)%s.\n",
current->fs->pwd.mnt->mnt_sb->s_type->name,
@@ -226,7 +229,7 @@ static int __init do_mount_root(char *name, char *fs, int flags, void *data)
return 0;
}

-void __init mount_block_root(char *name, int flags)
+void __init mount_block_root(char __user *name, unsigned long flags)
{
char *fs_names = __getname();
char *p;
@@ -284,9 +287,9 @@ static int __init mount_nfs_root(void)
{
void *data = nfs_root_data();

- create_dev("/dev/root", ROOT_DEV);
+ create_dev(cudevroot, ROOT_DEV);
if (data &&
- do_mount_root("/dev/root", "nfs", root_mountflags, data) == 0)
+ do_mount_root(devroot, "nfs", root_mountflags, data) == 0)
return 1;
return 0;
}
@@ -297,19 +300,19 @@ void __init change_floppy(char *fmt, ...)
{
struct termios termios;
char buf[80];
- char c;
+ char __user c;
int fd;
va_list args;
va_start(args, fmt);
vsprintf(buf, fmt, args);
va_end(args);
- fd = sys_open("/dev/root", O_RDWR | O_NDELAY, 0);
+ fd = sys_open(cudevroot, O_RDWR | O_NDELAY, 0);
if (fd >= 0) {
sys_ioctl(fd, FDEJECT, 0);
sys_close(fd);
}
printk(KERN_NOTICE "VFS: Insert %s and press ENTER\n", buf);
- fd = sys_open("/dev/console", O_RDWR, 0);
+ fd = sys_open(cudevconsole, O_RDWR, 0);
if (fd >= 0) {
sys_ioctl(fd, TCGETS, (long)&termios);
termios.c_lflag &= ~ICANON;
@@ -346,8 +349,8 @@ void __init mount_root(void)
}
#endif
#ifdef CONFIG_BLOCK
- create_dev("/dev/root", ROOT_DEV);
- mount_block_root("/dev/root", root_mountflags);
+ create_dev(cudevroot, ROOT_DEV);
+ mount_block_root(udevroot, root_mountflags);
#endif
}

@@ -373,7 +376,8 @@ void __init prepare_namespace(void)
if (saved_root_name[0]) {
root_device_name = saved_root_name;
if (!strncmp(root_device_name, "mtd", 3)) {
- mount_block_root(root_device_name, root_mountflags);
+ mount_block_root((char __user *)root_device_name,
+ root_mountflags);
goto out;
}
ROOT_DEV = name_to_dev_t(root_device_name);
@@ -400,7 +404,7 @@ void __init prepare_namespace(void)

mount_root();
out:
- sys_mount(".", "/", NULL, MS_MOVE, NULL);
- sys_chroot(".");
+ sys_mount(udot, uroot, NULL, MS_MOVE, NULL);
+ sys_chroot(cudot);
}

diff --git a/init/do_mounts.h b/init/do_mounts.h
index 735705d..49e5ec6 100644
--- a/init/do_mounts.h
+++ b/init/do_mounts.h
@@ -8,12 +8,12 @@
#include <linux/root_dev.h>

void change_floppy(char *fmt, ...);
-void mount_block_root(char *name, int flags);
+void mount_block_root(char __user *name, unsigned long flags);
void mount_root(void);
extern int root_mountflags;
extern char *root_device_name;

-static inline int create_dev(char *name, dev_t dev)
+static inline int create_dev(const char __user *name, dev_t dev)
{
sys_unlink(name);
return sys_mknod(name, S_IFBLK|0600, new_encode_dev(dev));
diff --git a/init/do_mounts_initrd.c b/init/do_mounts_initrd.c
index 614241b..39b4e0b 100644
--- a/init/do_mounts_initrd.c
+++ b/init/do_mounts_initrd.c
@@ -16,6 +16,26 @@ unsigned int real_root_dev; /* do_proc_dointvec cannot handle kdev_t */
static int __initdata old_fd, root_fd;
static int __initdata mount_initrd = 1;

+const char __user cuold[] = "/old";
+char __user uold[] = "/old";
+const char __user curoot[] = "/";
+char __user uroot[] = "/";
+const char __user curootroot[] = "/root";
+char __user urootroot[] = "/root";
+const char __user cudot[] = ".";
+char __user udot[] = ".";
+const char __user cuinitrd[] = "/root/initrd";
+char __user uinitrd[] = "/root/initrd";
+/* devs */
+const char __user cudevram[] = "/dev/ram";
+char __user udevram[] = "/dev/ram";
+const char __user cudevconsole[] = "/dev/console";
+char __user udevconsole[] = "/dev/console";
+const char __user cudevroot[] = "/dev/root";
+char __user udevroot[] = "/dev/root";
+const char __user cudevrootold[] = "/dev/root.old";
+char __user udevrootold[] = "/dev/root.old";
+
static int __init no_initrd(char *str)
{
mount_initrd = 0;
@@ -27,12 +47,11 @@ __setup("noinitrd", no_initrd);
static int __init do_linuxrc(void * shell)
{
static char *argv[] = { "linuxrc", NULL, };
- extern char * envp_init[];

sys_close(old_fd);sys_close(root_fd);
sys_close(0);sys_close(1);sys_close(2);
sys_setsid();
- (void) sys_open("/dev/console",O_RDWR,0);
+ (void) sys_open(cudevconsole, O_RDWR, 0);
(void) sys_dup(0);
(void) sys_dup(0);
return kernel_execve(shell, argv, envp_init);
@@ -44,16 +63,16 @@ static void __init handle_initrd(void)
int pid;

real_root_dev = new_encode_dev(ROOT_DEV);
- create_dev("/dev/root.old", Root_RAM0);
+ create_dev(cudevrootold, Root_RAM0);
/* mount initrd on rootfs' /root */
- mount_block_root("/dev/root.old", root_mountflags & ~MS_RDONLY);
- sys_mkdir("/old", 0700);
- root_fd = sys_open("/", 0, 0);
- old_fd = sys_open("/old", 0, 0);
+ mount_block_root(udevrootold, root_mountflags & ~MS_RDONLY);
+ sys_mkdir(cuold, 0700);
+ root_fd = sys_open(curoot, 0, 0);
+ old_fd = sys_open(cuold, 0, 0);
/* move initrd over / and chdir/chroot in initrd root */
- sys_chdir("/root");
- sys_mount(".", "/", NULL, MS_MOVE, NULL);
- sys_chroot(".");
+ sys_chdir(curootroot);
+ sys_mount(udot, uroot, NULL, MS_MOVE, NULL);
+ sys_chroot(cudot);

/*
* In case that a resume from disk is carried out by linuxrc or one of
@@ -70,15 +89,15 @@ static void __init handle_initrd(void)

/* move initrd to rootfs' /old */
sys_fchdir(old_fd);
- sys_mount("/", ".", NULL, MS_MOVE, NULL);
+ sys_mount(uroot, udot, NULL, MS_MOVE, NULL);
/* switch root and cwd back to / of rootfs */
sys_fchdir(root_fd);
- sys_chroot(".");
+ sys_chroot(cudot);
sys_close(old_fd);
sys_close(root_fd);

if (new_decode_dev(real_root_dev) == Root_RAM0) {
- sys_chdir("/old");
+ sys_chdir(cuold);
return;
}

@@ -86,17 +105,17 @@ static void __init handle_initrd(void)
mount_root();

printk(KERN_NOTICE "Trying to move old root to /initrd ... ");
- error = sys_mount("/old", "/root/initrd", NULL, MS_MOVE, NULL);
+ error = sys_mount(uold, uinitrd, NULL, MS_MOVE, NULL);
if (!error)
printk("okay\n");
else {
- int fd = sys_open("/dev/root.old", O_RDWR, 0);
+ int fd = sys_open(cudevrootold, O_RDWR, 0);
if (error == -ENOENT)
printk("/initrd does not exist. Ignored.\n");
else
printk("failed\n");
printk(KERN_NOTICE "Unmounting old root\n");
- sys_umount("/old", MNT_DETACH);
+ sys_umount(uold, MNT_DETACH);
printk(KERN_NOTICE "Trying to free ramdisk memory ... ");
if (fd < 0) {
error = fd;
@@ -110,8 +129,9 @@ static void __init handle_initrd(void)

int __init initrd_load(void)
{
+ const char __user pathname[] = "/initrd.image";
if (mount_initrd) {
- create_dev("/dev/ram", Root_RAM0);
+ create_dev(udevram, Root_RAM0);
/*
* Load the initrd data into /dev/ram0. Execute it as initrd
* unless /dev/ram0 is supposed to be our actual root device,
@@ -119,11 +139,11 @@ int __init initrd_load(void)
* mounted in the normal path.
*/
if (rd_load_image("/initrd.image") && ROOT_DEV != Root_RAM0) {
- sys_unlink("/initrd.image");
+ sys_unlink(pathname);
handle_initrd();
return 1;
}
}
- sys_unlink("/initrd.image");
+ sys_unlink(pathname);
return 0;
}
diff --git a/init/do_mounts_rd.c b/init/do_mounts_rd.c
index 46dfd64..e11c956 100644
--- a/init/do_mounts_rd.c
+++ b/init/do_mounts_rd.c
@@ -70,7 +70,7 @@ identify_ramdisk_image(int fd, int start_block)
* Read block 0 to test for gzipped kernel
*/
sys_lseek(fd, start_block * BLOCK_SIZE, 0);
- sys_read(fd, buf, size);
+ sys_read(fd, (char __user *)buf, size);

/*
* If it matches the gzip magic numbers, return -1
@@ -105,7 +105,7 @@ identify_ramdisk_image(int fd, int start_block)
* Read block 1 to test for minix and ext2 superblock
*/
sys_lseek(fd, (start_block+1) * BLOCK_SIZE, 0);
- sys_read(fd, buf, size);
+ sys_read(fd, (char __user *)buf, size);

/* Try minix */
if (minixsb->s_magic == MINIX_SUPER_MAGIC ||
@@ -149,11 +149,11 @@ int __init rd_load_image(char *from)
char rotator[4] = { '|' , '/' , '-' , '\\' };
#endif

- out_fd = sys_open("/dev/ram", O_RDWR, 0);
+ out_fd = sys_open(cudevram, O_RDWR, 0);
if (out_fd < 0)
goto out;

- in_fd = sys_open(from, O_RDONLY, 0);
+ in_fd = sys_open((const char __user *)from, O_RDONLY, 0);
if (in_fd < 0)
goto noclose_input;

@@ -228,15 +228,16 @@ int __init rd_load_image(char *from)
goto noclose_input;
}
change_floppy("disk #%d", disk);
- in_fd = sys_open(from, O_RDONLY, 0);
+ in_fd = sys_open((const char __user *)from,
+ O_RDONLY, 0);
if (in_fd < 0) {
printk("Error opening disk.\n");
goto noclose_input;
}
printk("Loading disk #%d... ", disk);
}
- sys_read(in_fd, buf, BLOCK_SIZE);
- sys_write(out_fd, buf, BLOCK_SIZE);
+ sys_read(in_fd, (char __user *)buf, BLOCK_SIZE);
+ sys_write(out_fd, (char __user *)buf, BLOCK_SIZE);
#if !defined(CONFIG_S390) && !defined(CONFIG_PPC_ISERIES)
if (!(i % 16)) {
printk("%c\b", rotator[rotate & 0x3]);
@@ -254,7 +255,7 @@ noclose_input:
sys_close(out_fd);
out:
kfree(buf);
- sys_unlink("/dev/ram");
+ sys_unlink(cudevram);
return res;
}

@@ -262,8 +263,8 @@ int __init rd_load_disk(int n)
{
if (rd_prompt)
change_floppy("root floppy disk to be loaded into RAM disk");
- create_dev("/dev/root", ROOT_DEV);
- create_dev("/dev/ram", MKDEV(RAMDISK_MAJOR, n));
+ create_dev(cudevroot, ROOT_DEV);
+ create_dev(cudevram, MKDEV(RAMDISK_MAJOR, n));
return rd_load_image("/dev/root");
}

@@ -349,7 +350,7 @@ static int __init fill_inbuf(void)
{
if (exit_code) return -1;

- insize = sys_read(crd_infd, inbuf, INBUFSIZ);
+ insize = sys_read(crd_infd, (char __user *)inbuf, INBUFSIZ);
if (insize == 0) {
error("RAMDISK: ran out of compressed data");
return -1;
@@ -370,7 +371,7 @@ static void __init flush_window(void)
unsigned n, written;
uch *in, ch;

- written = sys_write(crd_outfd, window, outcnt);
+ written = sys_write(crd_outfd, (char __user *)window, outcnt);
if (written != outcnt && unzip_error == 0) {
printk(KERN_ERR "RAMDISK: incomplete write (%d != %d) %ld\n",
written, outcnt, bytes_out);
diff --git a/init/initramfs.c b/init/initramfs.c
index 8eeeccb..dc6706c 100644
--- a/init/initramfs.c
+++ b/init/initramfs.c
@@ -240,7 +240,9 @@ static int __init maybe_link(void)
if (nlink >= 2) {
char *old = find_link(major, minor, ino, mode, collected);
if (old)
- return (sys_link(old, collected) < 0) ? -1 : 1;
+ return (sys_link((const char __user *)old,
+ (const char __user *)collected)
+ < 0) ? -1 : 1;
}
return 0;
}
@@ -249,11 +251,13 @@ static void __init clean_path(char *path, mode_t mode)
{
struct stat st;

- if (!sys_newlstat(path, &st) && (st.st_mode^mode) & S_IFMT) {
+ if (!sys_newlstat((char __user *)path,
+ (struct stat __user *)&st) &&
+ (st.st_mode^mode) & S_IFMT) {
if (S_ISDIR(st.st_mode))
- sys_rmdir(path);
+ sys_rmdir((const char __user *)path);
else
- sys_unlink(path);
+ sys_unlink((const char __user *)path);
}
}

@@ -276,7 +280,8 @@ static int __init do_name(void)
int openflags = O_WRONLY|O_CREAT;
if (ml != 1)
openflags |= O_TRUNC;
- wfd = sys_open(collected, openflags, mode);
+ wfd = sys_open((const char __user *)collected,
+ openflags, mode);

if (wfd >= 0) {
sys_fchown(wfd, uid, gid);
@@ -285,15 +290,15 @@ static int __init do_name(void)
}
}
} else if (S_ISDIR(mode)) {
- sys_mkdir(collected, mode);
- sys_chown(collected, uid, gid);
- sys_chmod(collected, mode);
+ sys_mkdir((const char __user *)collected, mode);
+ sys_chown((const char __user *)collected, uid, gid);
+ sys_chmod((const char __user *)collected, mode);
} else if (S_ISBLK(mode) || S_ISCHR(mode) ||
S_ISFIFO(mode) || S_ISSOCK(mode)) {
if (maybe_link() == 0) {
- sys_mknod(collected, mode, rdev);
- sys_chown(collected, uid, gid);
- sys_chmod(collected, mode);
+ sys_mknod((const char __user *)collected, mode, rdev);
+ sys_chown((const char __user *)collected, uid, gid);
+ sys_chmod((const char __user *)collected, mode);
}
}
return 0;
@@ -302,13 +307,13 @@ static int __init do_name(void)
static int __init do_copy(void)
{
if (count >= body_len) {
- sys_write(wfd, victim, body_len);
+ sys_write(wfd, (const char __user *)victim, body_len);
sys_close(wfd);
eat(body_len);
state = SkipIt;
return 0;
} else {
- sys_write(wfd, victim, count);
+ sys_write(wfd, (const char __user *)victim, count);
body_len -= count;
eat(count);
return 1;
@@ -319,8 +324,9 @@ static int __init do_symlink(void)
{
collected[N_ALIGN(name_len) + body_len] = '\0';
clean_path(collected, 0);
- sys_symlink(collected + N_ALIGN(name_len), collected);
- sys_lchown(collected, uid, gid);
+ sys_symlink((const char __user *)collected + N_ALIGN(name_len),
+ (const char __user *)collected);
+ sys_lchown((const char __user *)collected, uid, gid);
state = SkipIt;
next_state = Reset;
return 0;
@@ -540,6 +546,7 @@ skip:

static int __init populate_rootfs(void)
{
+ const char __user image[] = "/initrd.image";
char *err = unpack_to_rootfs(__initramfs_start,
__initramfs_end - __initramfs_start, 0);
if (err)
@@ -558,9 +565,9 @@ static int __init populate_rootfs(void)
return 0;
}
printk("it isn't (%s); looks like an initrd\n", err);
- fd = sys_open("/initrd.image", O_WRONLY|O_CREAT, 0700);
+ fd = sys_open(image, O_WRONLY|O_CREAT, 0700);
if (fd >= 0) {
- sys_write(fd, (char *)initrd_start,
+ sys_write(fd, (const char __user *)initrd_start,
initrd_end - initrd_start);
sys_close(fd);
free_initrd();
diff --git a/init/main.c b/init/main.c
index f7fb200..a756446 100644
--- a/init/main.c
+++ b/init/main.c
@@ -190,7 +190,7 @@ static int __init set_reset_devices(char *str)
__setup("reset_devices", set_reset_devices);

static char * argv_init[MAX_INIT_ARGS+2] = { "init", NULL, };
-char * envp_init[MAX_INIT_ENVS+2] = { "HOME=/", "TERM=linux", NULL, };
+char *envp_init[MAX_INIT_ENVS+2] = { "HOME=/", "TERM=linux", NULL, };
static const char *panic_later, *panic_param;

extern struct obs_kernel_param __setup_start[], __setup_end[];
@@ -802,7 +802,7 @@ static int noinline init_post(void)
system_state = SYSTEM_RUNNING;
numa_default_policy();

- if (sys_open((const char __user *) "/dev/console", O_RDWR, 0) < 0)
+ if (sys_open(cudevconsole, O_RDWR, 0) < 0)
printk(KERN_WARNING "Warning: unable to open an initial console.\n");

(void) sys_dup(0);
--
1.5.5.1



--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/