aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sparc/kernel
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/sparc/kernel
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/sparc/kernel')
-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
3 files changed, 6 insertions, 6 deletions
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