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 an email with "unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx Please read the FAQ at http://kernelnewbies.org/FAQ