modprobe: handle module arguments containing spaces
[oweals/busybox.git] / examples / linux-2.6.30_proc_self_exe.patch
1 This patch makes /proc/self/exe executable even if proc
2 is not mounted. It is especially useful on NOMMU arches.
3
4 diff -urp ../linux-2.6.30.org/fs/exec.c linux-2.6.30/fs/exec.c
5 --- ../linux-2.6.30.org/fs/exec.c       2009-06-10 05:05:27.000000000 +0200
6 +++ linux-2.6.30/fs/exec.c      2009-06-25 00:20:13.000000000 +0200
7 @@ -652,9 +652,25 @@ struct file *open_exec(const char *name)
8         file = do_filp_open(AT_FDCWD, name,
9                                 O_LARGEFILE | O_RDONLY | FMODE_EXEC, 0,
10                                 MAY_EXEC | MAY_OPEN);
11 -       if (IS_ERR(file))
12 -               goto out;
13 +       if (IS_ERR(file)) {
14 +               if ((PTR_ERR(file) == -ENOENT || PTR_ERR(file) == -EACCES)
15 +                && strcmp(name, "/proc/self/exe") == 0
16 +               ) {
17 +                       struct file *sv = file;
18 +                       struct mm_struct *mm;
19  
20 +                       mm = get_task_mm(current);
21 +                       if (!mm)
22 +                               goto out;
23 +                       file = get_mm_exe_file(mm);
24 +                       mmput(mm);
25 +                       if (file)
26 +                               goto ok;
27 +                       file = sv;
28 +               }
29 +               goto out;
30 +       }
31 +ok:
32         err = -EACCES;
33         if (!S_ISREG(file->f_path.dentry->d_inode->i_mode))
34                 goto exit;