[PATCH] kill altroot
long overdue... Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
8bb79224b8
commit
7f2da1e7d0
89
fs/namei.c
89
fs/namei.c
|
@ -31,7 +31,6 @@
|
||||||
#include <linux/file.h>
|
#include <linux/file.h>
|
||||||
#include <linux/fcntl.h>
|
#include <linux/fcntl.h>
|
||||||
#include <linux/device_cgroup.h>
|
#include <linux/device_cgroup.h>
|
||||||
#include <asm/namei.h>
|
|
||||||
#include <asm/uaccess.h>
|
#include <asm/uaccess.h>
|
||||||
|
|
||||||
#define ACC_MODE(x) ("\000\004\002\006"[(x)&O_ACCMODE])
|
#define ACC_MODE(x) ("\000\004\002\006"[(x)&O_ACCMODE])
|
||||||
|
@ -562,27 +561,16 @@ out_unlock:
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __emul_lookup_dentry(const char *, struct nameidata *);
|
|
||||||
|
|
||||||
/* SMP-safe */
|
/* SMP-safe */
|
||||||
static __always_inline int
|
static __always_inline void
|
||||||
walk_init_root(const char *name, struct nameidata *nd)
|
walk_init_root(const char *name, struct nameidata *nd)
|
||||||
{
|
{
|
||||||
struct fs_struct *fs = current->fs;
|
struct fs_struct *fs = current->fs;
|
||||||
|
|
||||||
read_lock(&fs->lock);
|
read_lock(&fs->lock);
|
||||||
if (fs->altroot.dentry && !(nd->flags & LOOKUP_NOALT)) {
|
|
||||||
nd->path = fs->altroot;
|
|
||||||
path_get(&fs->altroot);
|
|
||||||
read_unlock(&fs->lock);
|
|
||||||
if (__emul_lookup_dentry(name,nd))
|
|
||||||
return 0;
|
|
||||||
read_lock(&fs->lock);
|
|
||||||
}
|
|
||||||
nd->path = fs->root;
|
nd->path = fs->root;
|
||||||
path_get(&fs->root);
|
path_get(&fs->root);
|
||||||
read_unlock(&fs->lock);
|
read_unlock(&fs->lock);
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -623,12 +611,9 @@ static __always_inline int __vfs_follow_link(struct nameidata *nd, const char *l
|
||||||
|
|
||||||
if (*link == '/') {
|
if (*link == '/') {
|
||||||
path_put(&nd->path);
|
path_put(&nd->path);
|
||||||
if (!walk_init_root(link, nd))
|
walk_init_root(link, nd);
|
||||||
/* weird __emul_prefix() stuff did it */
|
|
||||||
goto out;
|
|
||||||
}
|
}
|
||||||
res = link_path_walk(link, nd);
|
res = link_path_walk(link, nd);
|
||||||
out:
|
|
||||||
if (nd->depth || res || nd->last_type!=LAST_NORM)
|
if (nd->depth || res || nd->last_type!=LAST_NORM)
|
||||||
return res;
|
return res;
|
||||||
/*
|
/*
|
||||||
|
@ -1077,67 +1062,6 @@ static int path_walk(const char *name, struct nameidata *nd)
|
||||||
return link_path_walk(name, nd);
|
return link_path_walk(name, nd);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* SMP-safe: Returns 1 and nd will have valid dentry and mnt, if
|
|
||||||
* everything is done. Returns 0 and drops input nd, if lookup failed;
|
|
||||||
*/
|
|
||||||
static int __emul_lookup_dentry(const char *name, struct nameidata *nd)
|
|
||||||
{
|
|
||||||
if (path_walk(name, nd))
|
|
||||||
return 0; /* something went wrong... */
|
|
||||||
|
|
||||||
if (!nd->path.dentry->d_inode ||
|
|
||||||
S_ISDIR(nd->path.dentry->d_inode->i_mode)) {
|
|
||||||
struct path old_path = nd->path;
|
|
||||||
struct qstr last = nd->last;
|
|
||||||
int last_type = nd->last_type;
|
|
||||||
struct fs_struct *fs = current->fs;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* NAME was not found in alternate root or it's a directory.
|
|
||||||
* Try to find it in the normal root:
|
|
||||||
*/
|
|
||||||
nd->last_type = LAST_ROOT;
|
|
||||||
read_lock(&fs->lock);
|
|
||||||
nd->path = fs->root;
|
|
||||||
path_get(&fs->root);
|
|
||||||
read_unlock(&fs->lock);
|
|
||||||
if (path_walk(name, nd) == 0) {
|
|
||||||
if (nd->path.dentry->d_inode) {
|
|
||||||
path_put(&old_path);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
path_put(&nd->path);
|
|
||||||
}
|
|
||||||
nd->path = old_path;
|
|
||||||
nd->last = last;
|
|
||||||
nd->last_type = last_type;
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
void set_fs_altroot(void)
|
|
||||||
{
|
|
||||||
char *emul = __emul_prefix();
|
|
||||||
struct nameidata nd;
|
|
||||||
struct path path = {}, old_path;
|
|
||||||
int err;
|
|
||||||
struct fs_struct *fs = current->fs;
|
|
||||||
|
|
||||||
if (!emul)
|
|
||||||
goto set_it;
|
|
||||||
err = path_lookup(emul, LOOKUP_FOLLOW|LOOKUP_DIRECTORY|LOOKUP_NOALT, &nd);
|
|
||||||
if (!err)
|
|
||||||
path = nd.path;
|
|
||||||
set_it:
|
|
||||||
write_lock(&fs->lock);
|
|
||||||
old_path = fs->altroot;
|
|
||||||
fs->altroot = path;
|
|
||||||
write_unlock(&fs->lock);
|
|
||||||
if (old_path.dentry)
|
|
||||||
path_put(&old_path);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Returns 0 and nd will be valid on success; Retuns error, otherwise. */
|
/* Returns 0 and nd will be valid on success; Retuns error, otherwise. */
|
||||||
static int do_path_lookup(int dfd, const char *name,
|
static int do_path_lookup(int dfd, const char *name,
|
||||||
unsigned int flags, struct nameidata *nd)
|
unsigned int flags, struct nameidata *nd)
|
||||||
|
@ -1153,14 +1077,6 @@ static int do_path_lookup(int dfd, const char *name,
|
||||||
|
|
||||||
if (*name=='/') {
|
if (*name=='/') {
|
||||||
read_lock(&fs->lock);
|
read_lock(&fs->lock);
|
||||||
if (fs->altroot.dentry && !(nd->flags & LOOKUP_NOALT)) {
|
|
||||||
nd->path = fs->altroot;
|
|
||||||
path_get(&fs->altroot);
|
|
||||||
read_unlock(&fs->lock);
|
|
||||||
if (__emul_lookup_dentry(name,nd))
|
|
||||||
goto out; /* found in altroot */
|
|
||||||
read_lock(&fs->lock);
|
|
||||||
}
|
|
||||||
nd->path = fs->root;
|
nd->path = fs->root;
|
||||||
path_get(&fs->root);
|
path_get(&fs->root);
|
||||||
read_unlock(&fs->lock);
|
read_unlock(&fs->lock);
|
||||||
|
@ -1194,7 +1110,6 @@ static int do_path_lookup(int dfd, const char *name,
|
||||||
}
|
}
|
||||||
|
|
||||||
retval = path_walk(name, nd);
|
retval = path_walk(name, nd);
|
||||||
out:
|
|
||||||
if (unlikely(!retval && !audit_dummy_context() && nd->path.dentry &&
|
if (unlikely(!retval && !audit_dummy_context() && nd->path.dentry &&
|
||||||
nd->path.dentry->d_inode))
|
nd->path.dentry->d_inode))
|
||||||
audit_inode(name, nd->path.dentry);
|
audit_inode(name, nd->path.dentry);
|
||||||
|
|
|
@ -1972,7 +1972,7 @@ static struct mnt_namespace *dup_mnt_ns(struct mnt_namespace *mnt_ns,
|
||||||
struct fs_struct *fs)
|
struct fs_struct *fs)
|
||||||
{
|
{
|
||||||
struct mnt_namespace *new_ns;
|
struct mnt_namespace *new_ns;
|
||||||
struct vfsmount *rootmnt = NULL, *pwdmnt = NULL, *altrootmnt = NULL;
|
struct vfsmount *rootmnt = NULL, *pwdmnt = NULL;
|
||||||
struct vfsmount *p, *q;
|
struct vfsmount *p, *q;
|
||||||
|
|
||||||
new_ns = kmalloc(sizeof(struct mnt_namespace), GFP_KERNEL);
|
new_ns = kmalloc(sizeof(struct mnt_namespace), GFP_KERNEL);
|
||||||
|
@ -2015,10 +2015,6 @@ static struct mnt_namespace *dup_mnt_ns(struct mnt_namespace *mnt_ns,
|
||||||
pwdmnt = p;
|
pwdmnt = p;
|
||||||
fs->pwd.mnt = mntget(q);
|
fs->pwd.mnt = mntget(q);
|
||||||
}
|
}
|
||||||
if (p == fs->altroot.mnt) {
|
|
||||||
altrootmnt = p;
|
|
||||||
fs->altroot.mnt = mntget(q);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
p = next_mnt(p, mnt_ns->root);
|
p = next_mnt(p, mnt_ns->root);
|
||||||
q = next_mnt(q, new_ns->root);
|
q = next_mnt(q, new_ns->root);
|
||||||
|
@ -2029,8 +2025,6 @@ static struct mnt_namespace *dup_mnt_ns(struct mnt_namespace *mnt_ns,
|
||||||
mntput(rootmnt);
|
mntput(rootmnt);
|
||||||
if (pwdmnt)
|
if (pwdmnt)
|
||||||
mntput(pwdmnt);
|
mntput(pwdmnt);
|
||||||
if (altrootmnt)
|
|
||||||
mntput(altrootmnt);
|
|
||||||
|
|
||||||
return new_ns;
|
return new_ns;
|
||||||
}
|
}
|
||||||
|
|
|
@ -548,7 +548,7 @@ asmlinkage long sys_chroot(const char __user * filename)
|
||||||
struct nameidata nd;
|
struct nameidata nd;
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
error = __user_walk(filename, LOOKUP_FOLLOW | LOOKUP_DIRECTORY | LOOKUP_NOALT, &nd);
|
error = __user_walk(filename, LOOKUP_FOLLOW | LOOKUP_DIRECTORY, &nd);
|
||||||
if (error)
|
if (error)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
|
@ -561,7 +561,6 @@ asmlinkage long sys_chroot(const char __user * filename)
|
||||||
goto dput_and_out;
|
goto dput_and_out;
|
||||||
|
|
||||||
set_fs_root(current->fs, &nd.path);
|
set_fs_root(current->fs, &nd.path);
|
||||||
set_fs_altroot();
|
|
||||||
error = 0;
|
error = 0;
|
||||||
dput_and_out:
|
dput_and_out:
|
||||||
path_put(&nd.path);
|
path_put(&nd.path);
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
/* $Id: namei.h,v 1.1 1996/12/13 14:48:21 jj Exp $
|
|
||||||
* linux/include/asm-alpha/namei.h
|
|
||||||
*
|
|
||||||
* Included from linux/fs/namei.c
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __ALPHA_NAMEI_H
|
|
||||||
#define __ALPHA_NAMEI_H
|
|
||||||
|
|
||||||
/* This dummy routine maybe changed to something useful
|
|
||||||
* for /usr/gnemul/ emulation stuff.
|
|
||||||
* Look at asm-sparc/namei.h for details.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define __emul_prefix() NULL
|
|
||||||
|
|
||||||
#endif /* __ALPHA_NAMEI_H */
|
|
|
@ -1,25 +0,0 @@
|
||||||
/*
|
|
||||||
* linux/include/asm-arm/namei.h
|
|
||||||
*
|
|
||||||
* Routines to handle famous /usr/gnemul
|
|
||||||
* Derived from the Sparc version of this file
|
|
||||||
*
|
|
||||||
* Included from linux/fs/namei.c
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __ASMARM_NAMEI_H
|
|
||||||
#define __ASMARM_NAMEI_H
|
|
||||||
|
|
||||||
#define ARM_BSD_EMUL "usr/gnemul/bsd/"
|
|
||||||
|
|
||||||
static inline char *__emul_prefix(void)
|
|
||||||
{
|
|
||||||
switch (current->personality) {
|
|
||||||
case PER_BSD:
|
|
||||||
return ARM_BSD_EMUL;
|
|
||||||
default:
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* __ASMARM_NAMEI_H */
|
|
|
@ -1,7 +0,0 @@
|
||||||
#ifndef __ASM_AVR32_NAMEI_H
|
|
||||||
#define __ASM_AVR32_NAMEI_H
|
|
||||||
|
|
||||||
/* This dummy routine may be changed to something useful */
|
|
||||||
#define __emul_prefix() NULL
|
|
||||||
|
|
||||||
#endif /* __ASM_AVR32_NAMEI_H */
|
|
|
@ -1,19 +0,0 @@
|
||||||
/*
|
|
||||||
* linux/include/asm/namei.h
|
|
||||||
*
|
|
||||||
* Included from linux/fs/namei.c
|
|
||||||
*
|
|
||||||
* Changes made by Lineo Inc. May 2001
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __BFIN_NAMEI_H
|
|
||||||
#define __BFIN_NAMEI_H
|
|
||||||
|
|
||||||
/* This dummy routine maybe changed to something useful
|
|
||||||
* for /usr/gnemul/ emulation stuff.
|
|
||||||
* Look at asm-sparc/namei.h for details.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define __emul_prefix() NULL
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,17 +0,0 @@
|
||||||
/* $Id: namei.h,v 1.1 2000/07/10 16:32:31 bjornw Exp $
|
|
||||||
* linux/include/asm-cris/namei.h
|
|
||||||
*
|
|
||||||
* Included from linux/fs/namei.c
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __CRIS_NAMEI_H
|
|
||||||
#define __CRIS_NAMEI_H
|
|
||||||
|
|
||||||
/* used to find file-system prefixes for doing emulations
|
|
||||||
* see for example asm-sparc/namei.h
|
|
||||||
* we don't use it...
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define __emul_prefix() NULL
|
|
||||||
|
|
||||||
#endif /* __CRIS_NAMEI_H */
|
|
|
@ -1,18 +0,0 @@
|
||||||
/*
|
|
||||||
* include/asm-frv/namei.h
|
|
||||||
*
|
|
||||||
* Included from linux/fs/namei.c
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __ASM_NAMEI_H
|
|
||||||
#define __ASM_NAMEI_H
|
|
||||||
|
|
||||||
/* This dummy routine maybe changed to something useful
|
|
||||||
* for /usr/gnemul/ emulation stuff.
|
|
||||||
* Look at asm-sparc/namei.h for details.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define __emul_prefix() NULL
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
/*
|
|
||||||
* linux/include/asm-h8300/namei.h
|
|
||||||
*
|
|
||||||
* Included from linux/fs/namei.c
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __H8300_NAMEI_H
|
|
||||||
#define __H8300_NAMEI_H
|
|
||||||
|
|
||||||
/* This dummy routine maybe changed to something useful
|
|
||||||
* for /usr/gnemul/ emulation stuff.
|
|
||||||
* Look at asm-sparc/namei.h for details.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define __emul_prefix() NULL
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,25 +0,0 @@
|
||||||
#ifndef _ASM_IA64_NAMEI_H
|
|
||||||
#define _ASM_IA64_NAMEI_H
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Modified 1998, 1999, 2001
|
|
||||||
* David Mosberger-Tang <davidm@hpl.hp.com>, Hewlett-Packard Co
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <asm/ptrace.h>
|
|
||||||
#include <asm/system.h>
|
|
||||||
|
|
||||||
#define EMUL_PREFIX_LINUX_IA32 "/emul/ia32-linux/"
|
|
||||||
|
|
||||||
static inline char *
|
|
||||||
__emul_prefix (void)
|
|
||||||
{
|
|
||||||
switch (current->personality) {
|
|
||||||
case PER_LINUX32:
|
|
||||||
return EMUL_PREFIX_LINUX_IA32;
|
|
||||||
default:
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* _ASM_IA64_NAMEI_H */
|
|
|
@ -1,17 +0,0 @@
|
||||||
#ifndef _ASM_M32R_NAMEI_H
|
|
||||||
#define _ASM_M32R_NAMEI_H
|
|
||||||
|
|
||||||
/*
|
|
||||||
* linux/include/asm-m32r/namei.h
|
|
||||||
*
|
|
||||||
* Included from linux/fs/namei.c
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* This dummy routine maybe changed to something useful
|
|
||||||
* for /usr/gnemul/ emulation stuff.
|
|
||||||
* Look at asm-sparc/namei.h for details.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define __emul_prefix() NULL
|
|
||||||
|
|
||||||
#endif /* _ASM_M32R_NAMEI_H */
|
|
|
@ -1,17 +0,0 @@
|
||||||
/*
|
|
||||||
* linux/include/asm-m68k/namei.h
|
|
||||||
*
|
|
||||||
* Included from linux/fs/namei.c
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __M68K_NAMEI_H
|
|
||||||
#define __M68K_NAMEI_H
|
|
||||||
|
|
||||||
/* This dummy routine maybe changed to something useful
|
|
||||||
* for /usr/gnemul/ emulation stuff.
|
|
||||||
* Look at asm-sparc/namei.h for details.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define __emul_prefix() NULL
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1 +0,0 @@
|
||||||
#include <asm-m68k/namei.h>
|
|
|
@ -1,11 +0,0 @@
|
||||||
#ifndef _ASM_NAMEI_H
|
|
||||||
#define _ASM_NAMEI_H
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This dummy routine maybe changed to something useful
|
|
||||||
* for /usr/gnemul/ emulation stuff.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define __emul_prefix() NULL
|
|
||||||
|
|
||||||
#endif /* _ASM_NAMEI_H */
|
|
|
@ -1,22 +0,0 @@
|
||||||
/* Emulation stuff
|
|
||||||
*
|
|
||||||
* Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.
|
|
||||||
* Written by David Howells (dhowells@redhat.com)
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public Licence
|
|
||||||
* as published by the Free Software Foundation; either version
|
|
||||||
* 2 of the Licence, or (at your option) any later version.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _ASM_NAMEI_H
|
|
||||||
#define _ASM_NAMEI_H
|
|
||||||
|
|
||||||
/* This dummy routine maybe changed to something useful
|
|
||||||
* for /usr/gnemul/ emulation stuff.
|
|
||||||
* Look at asm-sparc/namei.h for details.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define __emul_prefix() NULL
|
|
||||||
|
|
||||||
#endif /* _ASM_NAMEI_H */
|
|
|
@ -1,17 +0,0 @@
|
||||||
/* $Id: namei.h,v 1.1 1996/12/13 14:48:21 jj Exp $
|
|
||||||
* linux/include/asm-parisc/namei.h
|
|
||||||
*
|
|
||||||
* Included from linux/fs/namei.c
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __PARISC_NAMEI_H
|
|
||||||
#define __PARISC_NAMEI_H
|
|
||||||
|
|
||||||
/* This dummy routine maybe changed to something useful
|
|
||||||
* for /usr/gnemul/ emulation stuff.
|
|
||||||
* Look at asm-sparc/namei.h for details.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define __emul_prefix() NULL
|
|
||||||
|
|
||||||
#endif /* __PARISC_NAMEI_H */
|
|
|
@ -1,20 +0,0 @@
|
||||||
#ifndef _ASM_POWERPC_NAMEI_H
|
|
||||||
#define _ASM_POWERPC_NAMEI_H
|
|
||||||
|
|
||||||
#ifdef __KERNEL__
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Adapted from include/asm-alpha/namei.h
|
|
||||||
*
|
|
||||||
* Included from fs/namei.c
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* This dummy routine maybe changed to something useful
|
|
||||||
* for /usr/gnemul/ emulation stuff.
|
|
||||||
* Look at asm-sparc/namei.h for details.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define __emul_prefix() NULL
|
|
||||||
|
|
||||||
#endif /* __KERNEL__ */
|
|
||||||
#endif /* _ASM_POWERPC_NAMEI_H */
|
|
|
@ -1,21 +0,0 @@
|
||||||
/*
|
|
||||||
* include/asm-s390/namei.h
|
|
||||||
*
|
|
||||||
* S390 version
|
|
||||||
*
|
|
||||||
* Derived from "include/asm-i386/namei.h"
|
|
||||||
*
|
|
||||||
* Included from linux/fs/namei.c
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __S390_NAMEI_H
|
|
||||||
#define __S390_NAMEI_H
|
|
||||||
|
|
||||||
/* This dummy routine maybe changed to something useful
|
|
||||||
* for /usr/gnemul/ emulation stuff.
|
|
||||||
* Look at asm-sparc/namei.h for details.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define __emul_prefix() NULL
|
|
||||||
|
|
||||||
#endif /* __S390_NAMEI_H */
|
|
|
@ -1,17 +0,0 @@
|
||||||
/* $Id: namei.h,v 1.3 2000/07/04 06:24:49 gniibe Exp $
|
|
||||||
* linux/include/asm-sh/namei.h
|
|
||||||
*
|
|
||||||
* Included from linux/fs/namei.c
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __ASM_SH_NAMEI_H
|
|
||||||
#define __ASM_SH_NAMEI_H
|
|
||||||
|
|
||||||
/* This dummy routine maybe changed to something useful
|
|
||||||
* for /usr/gnemul/ emulation stuff.
|
|
||||||
* Look at asm-sparc/namei.h for details.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define __emul_prefix() NULL
|
|
||||||
|
|
||||||
#endif /* __ASM_SH_NAMEI_H */
|
|
|
@ -1,8 +0,0 @@
|
||||||
#ifndef ___ASM_SPARC_NAMEI_H
|
|
||||||
#define ___ASM_SPARC_NAMEI_H
|
|
||||||
#if defined(__sparc__) && defined(__arch64__)
|
|
||||||
#include <asm-sparc/namei_64.h>
|
|
||||||
#else
|
|
||||||
#include <asm-sparc/namei_32.h>
|
|
||||||
#endif
|
|
||||||
#endif
|
|
|
@ -1 +0,0 @@
|
||||||
#include <asm-sparc/namei.h>
|
|
|
@ -1,6 +0,0 @@
|
||||||
#ifndef __UM_NAMEI_H
|
|
||||||
#define __UM_NAMEI_H
|
|
||||||
|
|
||||||
#include "asm/arch/namei.h"
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,17 +0,0 @@
|
||||||
/*
|
|
||||||
* linux/include/asm-v850/namei.h
|
|
||||||
*
|
|
||||||
* Included from linux/fs/namei.c
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __V850_NAMEI_H__
|
|
||||||
#define __V850_NAMEI_H__
|
|
||||||
|
|
||||||
/* This dummy routine maybe changed to something useful
|
|
||||||
* for /usr/gnemul/ emulation stuff.
|
|
||||||
* Look at asm-sparc/namei.h for details.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define __emul_prefix() NULL
|
|
||||||
|
|
||||||
#endif /* __V850_NAMEI_H__ */
|
|
|
@ -1,11 +0,0 @@
|
||||||
#ifndef _ASM_X86_NAMEI_H
|
|
||||||
#define _ASM_X86_NAMEI_H
|
|
||||||
|
|
||||||
/* This dummy routine maybe changed to something useful
|
|
||||||
* for /usr/gnemul/ emulation stuff.
|
|
||||||
* Look at asm-sparc/namei.h for details.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define __emul_prefix() NULL
|
|
||||||
|
|
||||||
#endif /* _ASM_X86_NAMEI_H */
|
|
|
@ -1,26 +0,0 @@
|
||||||
/*
|
|
||||||
* include/asm-xtensa/namei.h
|
|
||||||
*
|
|
||||||
* Included from linux/fs/namei.c
|
|
||||||
*
|
|
||||||
* This file is subject to the terms and conditions of the GNU General Public
|
|
||||||
* License. See the file "COPYING" in the main directory of this archive
|
|
||||||
* for more details.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2001 - 2005 Tensilica Inc.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _XTENSA_NAMEI_H
|
|
||||||
#define _XTENSA_NAMEI_H
|
|
||||||
|
|
||||||
#ifdef __KERNEL__
|
|
||||||
|
|
||||||
/* This dummy routine maybe changed to something useful
|
|
||||||
* for /usr/gnemul/ emulation stuff.
|
|
||||||
* Look at asm-sparc/namei.h for details.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define __emul_prefix() NULL
|
|
||||||
|
|
||||||
#endif /* __KERNEL__ */
|
|
||||||
#endif /* _XTENSA_NAMEI_H */
|
|
|
@ -7,7 +7,7 @@ struct fs_struct {
|
||||||
atomic_t count;
|
atomic_t count;
|
||||||
rwlock_t lock;
|
rwlock_t lock;
|
||||||
int umask;
|
int umask;
|
||||||
struct path root, pwd, altroot;
|
struct path root, pwd;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define INIT_FS { \
|
#define INIT_FS { \
|
||||||
|
@ -19,7 +19,6 @@ struct fs_struct {
|
||||||
extern struct kmem_cache *fs_cachep;
|
extern struct kmem_cache *fs_cachep;
|
||||||
|
|
||||||
extern void exit_fs(struct task_struct *);
|
extern void exit_fs(struct task_struct *);
|
||||||
extern void set_fs_altroot(void);
|
|
||||||
extern void set_fs_root(struct fs_struct *, struct path *);
|
extern void set_fs_root(struct fs_struct *, struct path *);
|
||||||
extern void set_fs_pwd(struct fs_struct *, struct path *);
|
extern void set_fs_pwd(struct fs_struct *, struct path *);
|
||||||
extern struct fs_struct *copy_fs_struct(struct fs_struct *);
|
extern struct fs_struct *copy_fs_struct(struct fs_struct *);
|
||||||
|
|
|
@ -47,7 +47,6 @@ enum {LAST_NORM, LAST_ROOT, LAST_DOT, LAST_DOTDOT, LAST_BIND};
|
||||||
#define LOOKUP_DIRECTORY 2
|
#define LOOKUP_DIRECTORY 2
|
||||||
#define LOOKUP_CONTINUE 4
|
#define LOOKUP_CONTINUE 4
|
||||||
#define LOOKUP_PARENT 16
|
#define LOOKUP_PARENT 16
|
||||||
#define LOOKUP_NOALT 32
|
|
||||||
#define LOOKUP_REVAL 64
|
#define LOOKUP_REVAL 64
|
||||||
/*
|
/*
|
||||||
* Intent data
|
* Intent data
|
||||||
|
|
|
@ -168,7 +168,6 @@ __set_personality(u_long personality)
|
||||||
current->personality = personality;
|
current->personality = personality;
|
||||||
oep = current_thread_info()->exec_domain;
|
oep = current_thread_info()->exec_domain;
|
||||||
current_thread_info()->exec_domain = ep;
|
current_thread_info()->exec_domain = ep;
|
||||||
set_fs_altroot();
|
|
||||||
|
|
||||||
module_put(oep->module);
|
module_put(oep->module);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -565,8 +565,6 @@ void put_fs_struct(struct fs_struct *fs)
|
||||||
if (atomic_dec_and_test(&fs->count)) {
|
if (atomic_dec_and_test(&fs->count)) {
|
||||||
path_put(&fs->root);
|
path_put(&fs->root);
|
||||||
path_put(&fs->pwd);
|
path_put(&fs->pwd);
|
||||||
if (fs->altroot.dentry)
|
|
||||||
path_put(&fs->altroot);
|
|
||||||
kmem_cache_free(fs_cachep, fs);
|
kmem_cache_free(fs_cachep, fs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -657,13 +657,6 @@ static struct fs_struct *__copy_fs_struct(struct fs_struct *old)
|
||||||
path_get(&old->root);
|
path_get(&old->root);
|
||||||
fs->pwd = old->pwd;
|
fs->pwd = old->pwd;
|
||||||
path_get(&old->pwd);
|
path_get(&old->pwd);
|
||||||
if (old->altroot.dentry) {
|
|
||||||
fs->altroot = old->altroot;
|
|
||||||
path_get(&old->altroot);
|
|
||||||
} else {
|
|
||||||
fs->altroot.mnt = NULL;
|
|
||||||
fs->altroot.dentry = NULL;
|
|
||||||
}
|
|
||||||
read_unlock(&old->lock);
|
read_unlock(&old->lock);
|
||||||
}
|
}
|
||||||
return fs;
|
return fs;
|
||||||
|
|
Loading…
Reference in New Issue