aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorJeff Layton <jlayton@redhat.com>2012-10-10 15:25:28 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2012-10-12 20:14:55 -0400
commit91a27b2a756784714e924e5e854b919273082d26 (patch)
tree3913246b7d6e62703ec915f481e3a7159393f0f0 /arch
parent8e377d15078a501c4da98471f56396343c407d92 (diff)
vfs: define struct filename and have getname() return it
getname() is intended to copy pathname strings from userspace into a kernel buffer. The result is just a string in kernel space. It would however be quite helpful to be able to attach some ancillary info to the string. For instance, we could attach some audit-related info to reduce the amount of audit-related processing needed. When auditing is enabled, we could also call getname() on the string more than once and not need to recopy it from userspace. This patchset converts the getname()/putname() interfaces to return a struct instead of a string. For now, the struct just tracks the string in kernel space and the original userland pointer for it. Later, we'll add other information to the struct as it becomes convenient. Signed-off-by: Jeff Layton <jlayton@redhat.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'arch')
-rw-r--r--arch/alpha/kernel/osf_sys.c16
-rw-r--r--arch/arm64/kernel/sys.c4
-rw-r--r--arch/arm64/kernel/sys_compat.c6
-rw-r--r--arch/avr32/kernel/process.c4
-rw-r--r--arch/blackfin/kernel/process.c4
-rw-r--r--arch/cris/arch-v10/kernel/process.c4
-rw-r--r--arch/cris/arch-v32/kernel/process.c4
-rw-r--r--arch/h8300/kernel/process.c4
-rw-r--r--arch/hexagon/kernel/syscall.c4
-rw-r--r--arch/ia64/kernel/process.c4
-rw-r--r--arch/m32r/kernel/process.c4
-rw-r--r--arch/microblaze/kernel/sys_microblaze.c4
-rw-r--r--arch/mips/kernel/linux32.c4
-rw-r--r--arch/mips/kernel/syscall.c4
-rw-r--r--arch/openrisc/kernel/process.c4
-rw-r--r--arch/parisc/hpux/fs.c4
-rw-r--r--arch/parisc/kernel/process.c4
-rw-r--r--arch/parisc/kernel/sys_parisc32.c4
-rw-r--r--arch/score/kernel/sys_score.c4
-rw-r--r--arch/sh/kernel/process_32.c4
-rw-r--r--arch/sh/kernel/process_64.c4
-rw-r--r--arch/sparc/kernel/process_32.c4
-rw-r--r--arch/sparc/kernel/process_64.c4
-rw-r--r--arch/sparc/kernel/sys_sparc32.c4
-rw-r--r--arch/tile/kernel/process.c8
-rw-r--r--arch/unicore32/kernel/sys.c4
-rw-r--r--arch/xtensa/kernel/process.c4
27 files changed, 63 insertions, 63 deletions
diff --git a/arch/alpha/kernel/osf_sys.c b/arch/alpha/kernel/osf_sys.c
index 63e77e3944ce..9eb090582cf1 100644
--- a/arch/alpha/kernel/osf_sys.c
+++ b/arch/alpha/kernel/osf_sys.c
@@ -449,7 +449,7 @@ osf_ufs_mount(char *dirname, struct ufs_args __user *args, int flags)
449{ 449{
450 int retval; 450 int retval;
451 struct cdfs_args tmp; 451 struct cdfs_args tmp;
452 char *devname; 452 struct filename *devname;
453 453
454 retval = -EFAULT; 454 retval = -EFAULT;
455 if (copy_from_user(&tmp, args, sizeof(tmp))) 455 if (copy_from_user(&tmp, args, sizeof(tmp)))
@@ -458,7 +458,7 @@ osf_ufs_mount(char *dirname, struct ufs_args __user *args, int flags)
458 retval = PTR_ERR(devname); 458 retval = PTR_ERR(devname);
459 if (IS_ERR(devname)) 459 if (IS_ERR(devname))
460 goto out; 460 goto out;
461 retval = do_mount(devname, dirname, "ext2", flags, NULL); 461 retval = do_mount(devname->name, dirname, "ext2", flags, NULL);
462 putname(devname); 462 putname(devname);
463 out: 463 out:
464 return retval; 464 return retval;
@@ -469,7 +469,7 @@ osf_cdfs_mount(char *dirname, struct cdfs_args __user *args, int flags)
469{ 469{
470 int retval; 470 int retval;
471 struct cdfs_args tmp; 471 struct cdfs_args tmp;
472 char *devname; 472 struct filename *devname;
473 473
474 retval = -EFAULT; 474 retval = -EFAULT;
475 if (copy_from_user(&tmp, args, sizeof(tmp))) 475 if (copy_from_user(&tmp, args, sizeof(tmp)))
@@ -478,7 +478,7 @@ osf_cdfs_mount(char *dirname, struct cdfs_args __user *args, int flags)
478 retval = PTR_ERR(devname); 478 retval = PTR_ERR(devname);
479 if (IS_ERR(devname)) 479 if (IS_ERR(devname))
480 goto out; 480 goto out;
481 retval = do_mount(devname, dirname, "iso9660", flags, NULL); 481 retval = do_mount(devname->name, dirname, "iso9660", flags, NULL);
482 putname(devname); 482 putname(devname);
483 out: 483 out:
484 return retval; 484 return retval;
@@ -499,7 +499,7 @@ SYSCALL_DEFINE4(osf_mount, unsigned long, typenr, const char __user *, path,
499 int, flag, void __user *, data) 499 int, flag, void __user *, data)
500{ 500{
501 int retval; 501 int retval;
502 char *name; 502 struct filename *name;
503 503
504 name = getname(path); 504 name = getname(path);
505 retval = PTR_ERR(name); 505 retval = PTR_ERR(name);
@@ -507,13 +507,13 @@ SYSCALL_DEFINE4(osf_mount, unsigned long, typenr, const char __user *, path,
507 goto out; 507 goto out;
508 switch (typenr) { 508 switch (typenr) {
509 case 1: 509 case 1:
510 retval = osf_ufs_mount(name, data, flag); 510 retval = osf_ufs_mount(name->name, data, flag);
511 break; 511 break;
512 case 6: 512 case 6:
513 retval = osf_cdfs_mount(name, data, flag); 513 retval = osf_cdfs_mount(name->name, data, flag);
514 break; 514 break;
515 case 9: 515 case 9:
516 retval = osf_procfs_mount(name, data, flag); 516 retval = osf_procfs_mount(name->name, data, flag);
517 break; 517 break;
518 default: 518 default:
519 retval = -EINVAL; 519 retval = -EINVAL;
diff --git a/arch/arm64/kernel/sys.c b/arch/arm64/kernel/sys.c
index 905fcfb0ddd0..b120df37de35 100644
--- a/arch/arm64/kernel/sys.c
+++ b/arch/arm64/kernel/sys.c
@@ -50,13 +50,13 @@ asmlinkage long sys_execve(const char __user *filenamei,
50 struct pt_regs *regs) 50 struct pt_regs *regs)
51{ 51{
52 long error; 52 long error;
53 char * filename; 53 struct filename *filename;
54 54
55 filename = getname(filenamei); 55 filename = getname(filenamei);
56 error = PTR_ERR(filename); 56 error = PTR_ERR(filename);
57 if (IS_ERR(filename)) 57 if (IS_ERR(filename))
58 goto out; 58 goto out;
59 error = do_execve(filename, argv, envp, regs); 59 error = do_execve(filename->name, argv, envp, regs);
60 putname(filename); 60 putname(filename);
61out: 61out:
62 return error; 62 return error;
diff --git a/arch/arm64/kernel/sys_compat.c b/arch/arm64/kernel/sys_compat.c
index 93f10e27dc79..e521087cb0c4 100644
--- a/arch/arm64/kernel/sys_compat.c
+++ b/arch/arm64/kernel/sys_compat.c
@@ -56,14 +56,14 @@ asmlinkage int compat_sys_execve(const char __user *filenamei,
56 struct pt_regs *regs) 56 struct pt_regs *regs)
57{ 57{
58 int error; 58 int error;
59 char * filename; 59 struct filename *filename;
60 60
61 filename = getname(filenamei); 61 filename = getname(filenamei);
62 error = PTR_ERR(filename); 62 error = PTR_ERR(filename);
63 if (IS_ERR(filename)) 63 if (IS_ERR(filename))
64 goto out; 64 goto out;
65 error = compat_do_execve(filename, compat_ptr(argv), compat_ptr(envp), 65 error = compat_do_execve(filename->name, compat_ptr(argv),
66 regs); 66 compat_ptr(envp), regs);
67 putname(filename); 67 putname(filename);
68out: 68out:
69 return error; 69 return error;
diff --git a/arch/avr32/kernel/process.c b/arch/avr32/kernel/process.c
index 92c5af98a6f7..1bb0a8abd79b 100644
--- a/arch/avr32/kernel/process.c
+++ b/arch/avr32/kernel/process.c
@@ -388,14 +388,14 @@ asmlinkage int sys_execve(const char __user *ufilename,
388 struct pt_regs *regs) 388 struct pt_regs *regs)
389{ 389{
390 int error; 390 int error;
391 char *filename; 391 struct filename *filename;
392 392
393 filename = getname(ufilename); 393 filename = getname(ufilename);
394 error = PTR_ERR(filename); 394 error = PTR_ERR(filename);
395 if (IS_ERR(filename)) 395 if (IS_ERR(filename))
396 goto out; 396 goto out;
397 397
398 error = do_execve(filename, uargv, uenvp, regs); 398 error = do_execve(filename->name, uargv, uenvp, regs);
399 putname(filename); 399 putname(filename);
400 400
401out: 401out:
diff --git a/arch/blackfin/kernel/process.c b/arch/blackfin/kernel/process.c
index 62bcea7dcc6d..bb1cc721fcf7 100644
--- a/arch/blackfin/kernel/process.c
+++ b/arch/blackfin/kernel/process.c
@@ -213,14 +213,14 @@ asmlinkage int sys_execve(const char __user *name,
213 const char __user *const __user *envp) 213 const char __user *const __user *envp)
214{ 214{
215 int error; 215 int error;
216 char *filename; 216 struct filename *filename;
217 struct pt_regs *regs = (struct pt_regs *)((&name) + 6); 217 struct pt_regs *regs = (struct pt_regs *)((&name) + 6);
218 218
219 filename = getname(name); 219 filename = getname(name);
220 error = PTR_ERR(filename); 220 error = PTR_ERR(filename);
221 if (IS_ERR(filename)) 221 if (IS_ERR(filename))
222 return error; 222 return error;
223 error = do_execve(filename, argv, envp, regs); 223 error = do_execve(filename->name, argv, envp, regs);
224 putname(filename); 224 putname(filename);
225 return error; 225 return error;
226} 226}
diff --git a/arch/cris/arch-v10/kernel/process.c b/arch/cris/arch-v10/kernel/process.c
index bee8df43c201..15ac7150371f 100644
--- a/arch/cris/arch-v10/kernel/process.c
+++ b/arch/cris/arch-v10/kernel/process.c
@@ -212,14 +212,14 @@ asmlinkage int sys_execve(const char *fname,
212 struct pt_regs *regs) 212 struct pt_regs *regs)
213{ 213{
214 int error; 214 int error;
215 char *filename; 215 struct filename *filename;
216 216
217 filename = getname(fname); 217 filename = getname(fname);
218 error = PTR_ERR(filename); 218 error = PTR_ERR(filename);
219 219
220 if (IS_ERR(filename)) 220 if (IS_ERR(filename))
221 goto out; 221 goto out;
222 error = do_execve(filename, argv, envp, regs); 222 error = do_execve(filename->name, argv, envp, regs);
223 putname(filename); 223 putname(filename);
224 out: 224 out:
225 return error; 225 return error;
diff --git a/arch/cris/arch-v32/kernel/process.c b/arch/cris/arch-v32/kernel/process.c
index 0570e8ce603d..4e9992246359 100644
--- a/arch/cris/arch-v32/kernel/process.c
+++ b/arch/cris/arch-v32/kernel/process.c
@@ -224,7 +224,7 @@ sys_execve(const char *fname,
224 struct pt_regs *regs) 224 struct pt_regs *regs)
225{ 225{
226 int error; 226 int error;
227 char *filename; 227 struct filename *filename;
228 228
229 filename = getname(fname); 229 filename = getname(fname);
230 error = PTR_ERR(filename); 230 error = PTR_ERR(filename);
@@ -232,7 +232,7 @@ sys_execve(const char *fname,
232 if (IS_ERR(filename)) 232 if (IS_ERR(filename))
233 goto out; 233 goto out;
234 234
235 error = do_execve(filename, argv, envp, regs); 235 error = do_execve(filename->name, argv, envp, regs);
236 putname(filename); 236 putname(filename);
237 out: 237 out:
238 return error; 238 return error;
diff --git a/arch/h8300/kernel/process.c b/arch/h8300/kernel/process.c
index f153ed1a4c08..e8dc1393a13a 100644
--- a/arch/h8300/kernel/process.c
+++ b/arch/h8300/kernel/process.c
@@ -217,14 +217,14 @@ asmlinkage int sys_execve(const char *name,
217 int dummy, ...) 217 int dummy, ...)
218{ 218{
219 int error; 219 int error;
220 char * filename; 220 struct filename *filename;
221 struct pt_regs *regs = (struct pt_regs *) ((unsigned char *)&dummy-4); 221 struct pt_regs *regs = (struct pt_regs *) ((unsigned char *)&dummy-4);
222 222
223 filename = getname(name); 223 filename = getname(name);
224 error = PTR_ERR(filename); 224 error = PTR_ERR(filename);
225 if (IS_ERR(filename)) 225 if (IS_ERR(filename))
226 return error; 226 return error;
227 error = do_execve(filename, argv, envp, regs); 227 error = do_execve(filename->name, argv, envp, regs);
228 putname(filename); 228 putname(filename);
229 return error; 229 return error;
230} 230}
diff --git a/arch/hexagon/kernel/syscall.c b/arch/hexagon/kernel/syscall.c
index 553cd60ee659..25a9bfe3445d 100644
--- a/arch/hexagon/kernel/syscall.c
+++ b/arch/hexagon/kernel/syscall.c
@@ -40,7 +40,7 @@ asmlinkage int sys_execve(char __user *ufilename,
40 const char __user *const __user *envp) 40 const char __user *const __user *envp)
41{ 41{
42 struct pt_regs *pregs = current_thread_info()->regs; 42 struct pt_regs *pregs = current_thread_info()->regs;
43 char *filename; 43 struct filename *filename;
44 int retval; 44 int retval;
45 45
46 filename = getname(ufilename); 46 filename = getname(ufilename);
@@ -48,7 +48,7 @@ asmlinkage int sys_execve(char __user *ufilename,
48 if (IS_ERR(filename)) 48 if (IS_ERR(filename))
49 return retval; 49 return retval;
50 50
51 retval = do_execve(filename, argv, envp, pregs); 51 retval = do_execve(filename->name, argv, envp, pregs);
52 putname(filename); 52 putname(filename);
53 53
54 return retval; 54 return retval;
diff --git a/arch/ia64/kernel/process.c b/arch/ia64/kernel/process.c
index ee31fe9b310e..35e106f2ed13 100644
--- a/arch/ia64/kernel/process.c
+++ b/arch/ia64/kernel/process.c
@@ -614,14 +614,14 @@ sys_execve (const char __user *filename,
614 const char __user *const __user *envp, 614 const char __user *const __user *envp,
615 struct pt_regs *regs) 615 struct pt_regs *regs)
616{ 616{
617 char *fname; 617 struct filename *fname;
618 int error; 618 int error;
619 619
620 fname = getname(filename); 620 fname = getname(filename);
621 error = PTR_ERR(fname); 621 error = PTR_ERR(fname);
622 if (IS_ERR(fname)) 622 if (IS_ERR(fname))
623 goto out; 623 goto out;
624 error = do_execve(fname, argv, envp, regs); 624 error = do_execve(fname->name, argv, envp, regs);
625 putname(fname); 625 putname(fname);
626out: 626out:
627 return error; 627 return error;
diff --git a/arch/m32r/kernel/process.c b/arch/m32r/kernel/process.c
index 384e63f3a4c4..e7366276ef30 100644
--- a/arch/m32r/kernel/process.c
+++ b/arch/m32r/kernel/process.c
@@ -296,14 +296,14 @@ asmlinkage int sys_execve(const char __user *ufilename,
296 unsigned long r6, struct pt_regs regs) 296 unsigned long r6, struct pt_regs regs)
297{ 297{
298 int error; 298 int error;
299 char *filename; 299 struct filename *filename;
300 300
301 filename = getname(ufilename); 301 filename = getname(ufilename);
302 error = PTR_ERR(filename); 302 error = PTR_ERR(filename);
303 if (IS_ERR(filename)) 303 if (IS_ERR(filename))
304 goto out; 304 goto out;
305 305
306 error = do_execve(filename, uargv, uenvp, &regs); 306 error = do_execve(filename->name, uargv, uenvp, &regs);
307 putname(filename); 307 putname(filename);
308out: 308out:
309 return error; 309 return error;
diff --git a/arch/microblaze/kernel/sys_microblaze.c b/arch/microblaze/kernel/sys_microblaze.c
index e5b154f24f85..404c0f24bd41 100644
--- a/arch/microblaze/kernel/sys_microblaze.c
+++ b/arch/microblaze/kernel/sys_microblaze.c
@@ -54,13 +54,13 @@ asmlinkage long microblaze_execve(const char __user *filenamei,
54 struct pt_regs *regs) 54 struct pt_regs *regs)
55{ 55{
56 int error; 56 int error;
57 char *filename; 57 struct filename *filename;
58 58
59 filename = getname(filenamei); 59 filename = getname(filenamei);
60 error = PTR_ERR(filename); 60 error = PTR_ERR(filename);
61 if (IS_ERR(filename)) 61 if (IS_ERR(filename))
62 goto out; 62 goto out;
63 error = do_execve(filename, argv, envp, regs); 63 error = do_execve(filename->name, argv, envp, regs);
64 putname(filename); 64 putname(filename);
65out: 65out:
66 return error; 66 return error;
diff --git a/arch/mips/kernel/linux32.c b/arch/mips/kernel/linux32.c
index 922a554cd108..3a21acedf882 100644
--- a/arch/mips/kernel/linux32.c
+++ b/arch/mips/kernel/linux32.c
@@ -83,13 +83,13 @@ out:
83asmlinkage int sys32_execve(nabi_no_regargs struct pt_regs regs) 83asmlinkage int sys32_execve(nabi_no_regargs struct pt_regs regs)
84{ 84{
85 int error; 85 int error;
86 char * filename; 86 struct filename *filename;
87 87
88 filename = getname(compat_ptr(regs.regs[4])); 88 filename = getname(compat_ptr(regs.regs[4]));
89 error = PTR_ERR(filename); 89 error = PTR_ERR(filename);
90 if (IS_ERR(filename)) 90 if (IS_ERR(filename))
91 goto out; 91 goto out;
92 error = compat_do_execve(filename, compat_ptr(regs.regs[5]), 92 error = compat_do_execve(filename->name, compat_ptr(regs.regs[5]),
93 compat_ptr(regs.regs[6]), &regs); 93 compat_ptr(regs.regs[6]), &regs);
94 putname(filename); 94 putname(filename);
95 95
diff --git a/arch/mips/kernel/syscall.c b/arch/mips/kernel/syscall.c
index b08220c82113..2bd561bc05ae 100644
--- a/arch/mips/kernel/syscall.c
+++ b/arch/mips/kernel/syscall.c
@@ -133,13 +133,13 @@ _sys_clone(nabi_no_regargs struct pt_regs regs)
133asmlinkage int sys_execve(nabi_no_regargs struct pt_regs regs) 133asmlinkage int sys_execve(nabi_no_regargs struct pt_regs regs)
134{ 134{
135 int error; 135 int error;
136 char * filename; 136 struct filename *filename;
137 137
138 filename = getname((const char __user *) (long)regs.regs[4]); 138 filename = getname((const char __user *) (long)regs.regs[4]);
139 error = PTR_ERR(filename); 139 error = PTR_ERR(filename);
140 if (IS_ERR(filename)) 140 if (IS_ERR(filename))
141 goto out; 141 goto out;
142 error = do_execve(filename, 142 error = do_execve(filename->name,
143 (const char __user *const __user *) (long)regs.regs[5], 143 (const char __user *const __user *) (long)regs.regs[5],
144 (const char __user *const __user *) (long)regs.regs[6], 144 (const char __user *const __user *) (long)regs.regs[6],
145 &regs); 145 &regs);
diff --git a/arch/openrisc/kernel/process.c b/arch/openrisc/kernel/process.c
index 55210f37d1a3..c35f3ab1a8d3 100644
--- a/arch/openrisc/kernel/process.c
+++ b/arch/openrisc/kernel/process.c
@@ -271,7 +271,7 @@ asmlinkage long _sys_execve(const char __user *name,
271 struct pt_regs *regs) 271 struct pt_regs *regs)
272{ 272{
273 int error; 273 int error;
274 char *filename; 274 struct filename *filename;
275 275
276 filename = getname(name); 276 filename = getname(name);
277 error = PTR_ERR(filename); 277 error = PTR_ERR(filename);
@@ -279,7 +279,7 @@ asmlinkage long _sys_execve(const char __user *name,
279 if (IS_ERR(filename)) 279 if (IS_ERR(filename))
280 goto out; 280 goto out;
281 281
282 error = do_execve(filename, argv, envp, regs); 282 error = do_execve(filename->name, argv, envp, regs);
283 putname(filename); 283 putname(filename);
284 284
285out: 285out:
diff --git a/arch/parisc/hpux/fs.c b/arch/parisc/hpux/fs.c
index 6785de7bd2a0..a0760b87fd4e 100644
--- a/arch/parisc/hpux/fs.c
+++ b/arch/parisc/hpux/fs.c
@@ -34,14 +34,14 @@
34int hpux_execve(struct pt_regs *regs) 34int hpux_execve(struct pt_regs *regs)
35{ 35{
36 int error; 36 int error;
37 char *filename; 37 struct filename *filename;
38 38
39 filename = getname((const char __user *) regs->gr[26]); 39 filename = getname((const char __user *) regs->gr[26]);
40 error = PTR_ERR(filename); 40 error = PTR_ERR(filename);
41 if (IS_ERR(filename)) 41 if (IS_ERR(filename))
42 goto out; 42 goto out;
43 43
44 error = do_execve(filename, 44 error = do_execve(filename->name,
45 (const char __user *const __user *) regs->gr[25], 45 (const char __user *const __user *) regs->gr[25],
46 (const char __user *const __user *) regs->gr[24], 46 (const char __user *const __user *) regs->gr[24],
47 regs); 47 regs);
diff --git a/arch/parisc/kernel/process.c b/arch/parisc/kernel/process.c
index 8c6b6b6561f0..cbc37216bf90 100644
--- a/arch/parisc/kernel/process.c
+++ b/arch/parisc/kernel/process.c
@@ -342,13 +342,13 @@ unsigned long thread_saved_pc(struct task_struct *t)
342asmlinkage int sys_execve(struct pt_regs *regs) 342asmlinkage int sys_execve(struct pt_regs *regs)
343{ 343{
344 int error; 344 int error;
345 char *filename; 345 struct filename *filename;
346 346
347 filename = getname((const char __user *) regs->gr[26]); 347 filename = getname((const char __user *) regs->gr[26]);
348 error = PTR_ERR(filename); 348 error = PTR_ERR(filename);
349 if (IS_ERR(filename)) 349 if (IS_ERR(filename))
350 goto out; 350 goto out;
351 error = do_execve(filename, 351 error = do_execve(filename->name,
352 (const char __user *const __user *) regs->gr[25], 352 (const char __user *const __user *) regs->gr[25],
353 (const char __user *const __user *) regs->gr[24], 353 (const char __user *const __user *) regs->gr[24],
354 regs); 354 regs);
diff --git a/arch/parisc/kernel/sys_parisc32.c b/arch/parisc/kernel/sys_parisc32.c
index dc9a62462323..bf5b93a885d3 100644
--- a/arch/parisc/kernel/sys_parisc32.c
+++ b/arch/parisc/kernel/sys_parisc32.c
@@ -60,14 +60,14 @@
60asmlinkage int sys32_execve(struct pt_regs *regs) 60asmlinkage int sys32_execve(struct pt_regs *regs)
61{ 61{
62 int error; 62 int error;
63 char *filename; 63 struct filename *filename;
64 64
65 DBG(("sys32_execve(%p) r26 = 0x%lx\n", regs, regs->gr[26])); 65 DBG(("sys32_execve(%p) r26 = 0x%lx\n", regs, regs->gr[26]));
66 filename = getname((const char __user *) regs->gr[26]); 66 filename = getname((const char __user *) regs->gr[26]);
67 error = PTR_ERR(filename); 67 error = PTR_ERR(filename);
68 if (IS_ERR(filename)) 68 if (IS_ERR(filename))
69 goto out; 69 goto out;
70 error = compat_do_execve(filename, compat_ptr(regs->gr[25]), 70 error = compat_do_execve(filename->name, compat_ptr(regs->gr[25]),
71 compat_ptr(regs->gr[24]), regs); 71 compat_ptr(regs->gr[24]), regs);
72 putname(filename); 72 putname(filename);
73out: 73out:
diff --git a/arch/score/kernel/sys_score.c b/arch/score/kernel/sys_score.c
index 21e867974066..d45cf00a3351 100644
--- a/arch/score/kernel/sys_score.c
+++ b/arch/score/kernel/sys_score.c
@@ -92,14 +92,14 @@ asmlinkage long
92score_execve(struct pt_regs *regs) 92score_execve(struct pt_regs *regs)
93{ 93{
94 int error; 94 int error;
95 char *filename; 95 struct filename *filename;
96 96
97 filename = getname((char __user*)regs->regs[4]); 97 filename = getname((char __user*)regs->regs[4]);
98 error = PTR_ERR(filename); 98 error = PTR_ERR(filename);
99 if (IS_ERR(filename)) 99 if (IS_ERR(filename))
100 return error; 100 return error;
101 101
102 error = do_execve(filename, 102 error = do_execve(filename->name,
103 (const char __user *const __user *)regs->regs[5], 103 (const char __user *const __user *)regs->regs[5],
104 (const char __user *const __user *)regs->regs[6], 104 (const char __user *const __user *)regs->regs[6],
105 regs); 105 regs);
diff --git a/arch/sh/kernel/process_32.c b/arch/sh/kernel/process_32.c
index 59521e8a164d..ba7345f37bc9 100644
--- a/arch/sh/kernel/process_32.c
+++ b/arch/sh/kernel/process_32.c
@@ -298,14 +298,14 @@ asmlinkage int sys_execve(const char __user *ufilename,
298{ 298{
299 struct pt_regs *regs = RELOC_HIDE(&__regs, 0); 299 struct pt_regs *regs = RELOC_HIDE(&__regs, 0);
300 int error; 300 int error;
301 char *filename; 301 struct filename *filename;
302 302
303 filename = getname(ufilename); 303 filename = getname(ufilename);
304 error = PTR_ERR(filename); 304 error = PTR_ERR(filename);
305 if (IS_ERR(filename)) 305 if (IS_ERR(filename))
306 goto out; 306 goto out;
307 307
308 error = do_execve(filename, uargv, uenvp, regs); 308 error = do_execve(filename->name, uargv, uenvp, regs);
309 putname(filename); 309 putname(filename);
310out: 310out:
311 return error; 311 return error;
diff --git a/arch/sh/kernel/process_64.c b/arch/sh/kernel/process_64.c
index 602545b12a86..98a709f0c3c4 100644
--- a/arch/sh/kernel/process_64.c
+++ b/arch/sh/kernel/process_64.c
@@ -491,14 +491,14 @@ asmlinkage int sys_execve(const char *ufilename, char **uargv,
491 struct pt_regs *pregs) 491 struct pt_regs *pregs)
492{ 492{
493 int error; 493 int error;
494 char *filename; 494 struct filename *filename;
495 495
496 filename = getname((char __user *)ufilename); 496 filename = getname((char __user *)ufilename);
497 error = PTR_ERR(filename); 497 error = PTR_ERR(filename);
498 if (IS_ERR(filename)) 498 if (IS_ERR(filename))
499 goto out; 499 goto out;
500 500
501 error = do_execve(filename, 501 error = do_execve(filename->name,
502 (const char __user *const __user *)uargv, 502 (const char __user *const __user *)uargv,
503 (const char __user *const __user *)uenvp, 503 (const char __user *const __user *)uenvp,
504 pregs); 504 pregs);
diff --git a/arch/sparc/kernel/process_32.c b/arch/sparc/kernel/process_32.c
index 14006d8aca28..487bffb36f5e 100644
--- a/arch/sparc/kernel/process_32.c
+++ b/arch/sparc/kernel/process_32.c
@@ -482,7 +482,7 @@ int dump_fpu (struct pt_regs * regs, elf_fpregset_t * fpregs)
482asmlinkage int sparc_execve(struct pt_regs *regs) 482asmlinkage int sparc_execve(struct pt_regs *regs)
483{ 483{
484 int error, base = 0; 484 int error, base = 0;
485 char *filename; 485 struct filename *filename;
486 486
487 /* Check for indirect call. */ 487 /* Check for indirect call. */
488 if(regs->u_regs[UREG_G1] == 0) 488 if(regs->u_regs[UREG_G1] == 0)
@@ -492,7 +492,7 @@ asmlinkage int sparc_execve(struct pt_regs *regs)
492 error = PTR_ERR(filename); 492 error = PTR_ERR(filename);
493 if(IS_ERR(filename)) 493 if(IS_ERR(filename))
494 goto out; 494 goto out;
495 error = do_execve(filename, 495 error = do_execve(filename->name,
496 (const char __user *const __user *) 496 (const char __user *const __user *)
497 regs->u_regs[base + UREG_I1], 497 regs->u_regs[base + UREG_I1],
498 (const char __user *const __user *) 498 (const char __user *const __user *)
diff --git a/arch/sparc/kernel/process_64.c b/arch/sparc/kernel/process_64.c
index aff0c72fac09..fcaa59421126 100644
--- a/arch/sparc/kernel/process_64.c
+++ b/arch/sparc/kernel/process_64.c
@@ -722,7 +722,7 @@ EXPORT_SYMBOL(dump_fpu);
722asmlinkage int sparc_execve(struct pt_regs *regs) 722asmlinkage int sparc_execve(struct pt_regs *regs)
723{ 723{
724 int error, base = 0; 724 int error, base = 0;
725 char *filename; 725 struct filename *filename;
726 726
727 /* User register window flush is done by entry.S */ 727 /* User register window flush is done by entry.S */
728 728
@@ -734,7 +734,7 @@ asmlinkage int sparc_execve(struct pt_regs *regs)
734 error = PTR_ERR(filename); 734 error = PTR_ERR(filename);
735 if (IS_ERR(filename)) 735 if (IS_ERR(filename))
736 goto out; 736 goto out;
737 error = do_execve(filename, 737 error = do_execve(filename->name,
738 (const char __user *const __user *) 738 (const char __user *const __user *)
739 regs->u_regs[base + UREG_I1], 739 regs->u_regs[base + UREG_I1],
740 (const char __user *const __user *) 740 (const char __user *const __user *)
diff --git a/arch/sparc/kernel/sys_sparc32.c b/arch/sparc/kernel/sys_sparc32.c
index d862499eb01c..c3239811a1b5 100644
--- a/arch/sparc/kernel/sys_sparc32.c
+++ b/arch/sparc/kernel/sys_sparc32.c
@@ -403,7 +403,7 @@ asmlinkage long compat_sys_rt_sigaction(int sig,
403asmlinkage long sparc32_execve(struct pt_regs *regs) 403asmlinkage long sparc32_execve(struct pt_regs *regs)
404{ 404{
405 int error, base = 0; 405 int error, base = 0;
406 char *filename; 406 struct filename *filename;
407 407
408 /* User register window flush is done by entry.S */ 408 /* User register window flush is done by entry.S */
409 409
@@ -416,7 +416,7 @@ asmlinkage long sparc32_execve(struct pt_regs *regs)
416 if (IS_ERR(filename)) 416 if (IS_ERR(filename))
417 goto out; 417 goto out;
418 418
419 error = compat_do_execve(filename, 419 error = compat_do_execve(filename->name,
420 compat_ptr(regs->u_regs[base + UREG_I1]), 420 compat_ptr(regs->u_regs[base + UREG_I1]),
421 compat_ptr(regs->u_regs[base + UREG_I2]), regs); 421 compat_ptr(regs->u_regs[base + UREG_I2]), regs);
422 422
diff --git a/arch/tile/kernel/process.c b/arch/tile/kernel/process.c
index 6be799150501..622560030a58 100644
--- a/arch/tile/kernel/process.c
+++ b/arch/tile/kernel/process.c
@@ -594,13 +594,13 @@ SYSCALL_DEFINE4(execve, const char __user *, path,
594 struct pt_regs *, regs) 594 struct pt_regs *, regs)
595{ 595{
596 long error; 596 long error;
597 char *filename; 597 struct filename *filename;
598 598
599 filename = getname(path); 599 filename = getname(path);
600 error = PTR_ERR(filename); 600 error = PTR_ERR(filename);
601 if (IS_ERR(filename)) 601 if (IS_ERR(filename))
602 goto out; 602 goto out;
603 error = do_execve(filename, argv, envp, regs); 603 error = do_execve(filename->name, argv, envp, regs);
604 putname(filename); 604 putname(filename);
605 if (error == 0) 605 if (error == 0)
606 single_step_execve(); 606 single_step_execve();
@@ -615,13 +615,13 @@ long compat_sys_execve(const char __user *path,
615 struct pt_regs *regs) 615 struct pt_regs *regs)
616{ 616{
617 long error; 617 long error;
618 char *filename; 618 struct filename *filename;
619 619
620 filename = getname(path); 620 filename = getname(path);
621 error = PTR_ERR(filename); 621 error = PTR_ERR(filename);
622 if (IS_ERR(filename)) 622 if (IS_ERR(filename))
623 goto out; 623 goto out;
624 error = compat_do_execve(filename, argv, envp, regs); 624 error = compat_do_execve(filename->name, argv, envp, regs);
625 putname(filename); 625 putname(filename);
626 if (error == 0) 626 if (error == 0)
627 single_step_execve(); 627 single_step_execve();
diff --git a/arch/unicore32/kernel/sys.c b/arch/unicore32/kernel/sys.c
index 5fd9af773e15..fabdee96110b 100644
--- a/arch/unicore32/kernel/sys.c
+++ b/arch/unicore32/kernel/sys.c
@@ -51,13 +51,13 @@ asmlinkage long __sys_execve(const char __user *filename,
51 struct pt_regs *regs) 51 struct pt_regs *regs)
52{ 52{
53 int error; 53 int error;
54 char *fn; 54 struct filename *fn;
55 55
56 fn = getname(filename); 56 fn = getname(filename);
57 error = PTR_ERR(fn); 57 error = PTR_ERR(fn);
58 if (IS_ERR(fn)) 58 if (IS_ERR(fn))
59 goto out; 59 goto out;
60 error = do_execve(fn, argv, envp, regs); 60 error = do_execve(fn->name, argv, envp, regs);
61 putname(fn); 61 putname(fn);
62out: 62out:
63 return error; 63 return error;
diff --git a/arch/xtensa/kernel/process.c b/arch/xtensa/kernel/process.c
index bc44311aa18c..bc020825cce5 100644
--- a/arch/xtensa/kernel/process.c
+++ b/arch/xtensa/kernel/process.c
@@ -328,13 +328,13 @@ long xtensa_execve(const char __user *name,
328 struct pt_regs *regs) 328 struct pt_regs *regs)
329{ 329{
330 long error; 330 long error;
331 char * filename; 331 struct filename *filename;
332 332
333 filename = getname(name); 333 filename = getname(name);
334 error = PTR_ERR(filename); 334 error = PTR_ERR(filename);
335 if (IS_ERR(filename)) 335 if (IS_ERR(filename))
336 goto out; 336 goto out;
337 error = do_execve(filename, argv, envp, regs); 337 error = do_execve(filename->name, argv, envp, regs);
338 putname(filename); 338 putname(filename);
339out: 339out:
340 return error; 340 return error;