Merge branch 'for-linus2' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
* 'for-linus2' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: (165 commits) reiserfs: Properly display mount options in /proc/mounts vfs: prevent remount read-only if pending removes vfs: count unlinked inodes vfs: protect remounting superblock read-only vfs: keep list of mounts for each superblock vfs: switch ->show_options() to struct dentry * vfs: switch ->show_path() to struct dentry * vfs: switch ->show_devname() to struct dentry * vfs: switch ->show_stats to struct dentry * switch security_path_chmod() to struct path * vfs: prefer ->dentry->d_sb to ->mnt->mnt_sb vfs: trim includes a bit switch mnt_namespace ->root to struct mount vfs: take /proc/*/mounts and friends to fs/proc_namespace.c vfs: opencode mntget() mnt_set_mountpoint() vfs: spread struct mount - remaining argument of next_mnt() vfs: move fsnotify junk to struct mount vfs: move mnt_devname vfs: move mnt_list to struct mount vfs: switch pnode.h macros to struct mount * ...
This commit is contained in:
@@ -165,7 +165,7 @@ static void __init aafs_remove(const char *name)
|
||||
*
|
||||
* Used aafs_remove to remove entries created with this fn.
|
||||
*/
|
||||
static int __init aafs_create(const char *name, int mask,
|
||||
static int __init aafs_create(const char *name, umode_t mask,
|
||||
const struct file_operations *fops)
|
||||
{
|
||||
struct dentry *dentry;
|
||||
|
||||
@@ -262,7 +262,7 @@ static int apparmor_path_unlink(struct path *dir, struct dentry *dentry)
|
||||
}
|
||||
|
||||
static int apparmor_path_mkdir(struct path *dir, struct dentry *dentry,
|
||||
int mode)
|
||||
umode_t mode)
|
||||
{
|
||||
return common_perm_create(OP_MKDIR, dir, dentry, AA_MAY_CREATE,
|
||||
S_IFDIR);
|
||||
@@ -274,7 +274,7 @@ static int apparmor_path_rmdir(struct path *dir, struct dentry *dentry)
|
||||
}
|
||||
|
||||
static int apparmor_path_mknod(struct path *dir, struct dentry *dentry,
|
||||
int mode, unsigned int dev)
|
||||
umode_t mode, unsigned int dev)
|
||||
{
|
||||
return common_perm_create(OP_MKNOD, dir, dentry, AA_MAY_CREATE, mode);
|
||||
}
|
||||
@@ -344,13 +344,12 @@ static int apparmor_path_rename(struct path *old_dir, struct dentry *old_dentry,
|
||||
return error;
|
||||
}
|
||||
|
||||
static int apparmor_path_chmod(struct dentry *dentry, struct vfsmount *mnt,
|
||||
mode_t mode)
|
||||
static int apparmor_path_chmod(struct path *path, umode_t mode)
|
||||
{
|
||||
if (!mediated_filesystem(dentry->d_inode))
|
||||
if (!mediated_filesystem(path->dentry->d_inode))
|
||||
return 0;
|
||||
|
||||
return common_perm_mnt_dentry(OP_CHMOD, mnt, dentry, AA_MAY_CHMOD);
|
||||
return common_perm_mnt_dentry(OP_CHMOD, path->mnt, path->dentry, AA_MAY_CHMOD);
|
||||
}
|
||||
|
||||
static int apparmor_path_chown(struct path *path, uid_t uid, gid_t gid)
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
*/
|
||||
|
||||
#include <linux/magic.h>
|
||||
#include <linux/mnt_namespace.h>
|
||||
#include <linux/mount.h>
|
||||
#include <linux/namei.h>
|
||||
#include <linux/nsproxy.h>
|
||||
|
||||
@@ -125,7 +125,7 @@ static int cap_inode_init_security(struct inode *inode, struct inode *dir,
|
||||
}
|
||||
|
||||
static int cap_inode_create(struct inode *inode, struct dentry *dentry,
|
||||
int mask)
|
||||
umode_t mask)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
@@ -148,7 +148,7 @@ static int cap_inode_symlink(struct inode *inode, struct dentry *dentry,
|
||||
}
|
||||
|
||||
static int cap_inode_mkdir(struct inode *inode, struct dentry *dentry,
|
||||
int mask)
|
||||
umode_t mask)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
@@ -159,7 +159,7 @@ static int cap_inode_rmdir(struct inode *inode, struct dentry *dentry)
|
||||
}
|
||||
|
||||
static int cap_inode_mknod(struct inode *inode, struct dentry *dentry,
|
||||
int mode, dev_t dev)
|
||||
umode_t mode, dev_t dev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
@@ -235,13 +235,13 @@ static void cap_inode_getsecid(const struct inode *inode, u32 *secid)
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SECURITY_PATH
|
||||
static int cap_path_mknod(struct path *dir, struct dentry *dentry, int mode,
|
||||
static int cap_path_mknod(struct path *dir, struct dentry *dentry, umode_t mode,
|
||||
unsigned int dev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cap_path_mkdir(struct path *dir, struct dentry *dentry, int mode)
|
||||
static int cap_path_mkdir(struct path *dir, struct dentry *dentry, umode_t mode)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
@@ -279,8 +279,7 @@ static int cap_path_truncate(struct path *path)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cap_path_chmod(struct dentry *dentry, struct vfsmount *mnt,
|
||||
mode_t mode)
|
||||
static int cap_path_chmod(struct path *path, umode_t mode)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
+8
-8
@@ -56,7 +56,7 @@ static const struct file_operations default_file_ops = {
|
||||
.llseek = noop_llseek,
|
||||
};
|
||||
|
||||
static struct inode *get_inode(struct super_block *sb, int mode, dev_t dev)
|
||||
static struct inode *get_inode(struct super_block *sb, umode_t mode, dev_t dev)
|
||||
{
|
||||
struct inode *inode = new_inode(sb);
|
||||
|
||||
@@ -85,7 +85,7 @@ static struct inode *get_inode(struct super_block *sb, int mode, dev_t dev)
|
||||
|
||||
/* SMP-safe */
|
||||
static int mknod(struct inode *dir, struct dentry *dentry,
|
||||
int mode, dev_t dev)
|
||||
umode_t mode, dev_t dev)
|
||||
{
|
||||
struct inode *inode;
|
||||
int error = -ENOMEM;
|
||||
@@ -102,7 +102,7 @@ static int mknod(struct inode *dir, struct dentry *dentry,
|
||||
return error;
|
||||
}
|
||||
|
||||
static int mkdir(struct inode *dir, struct dentry *dentry, int mode)
|
||||
static int mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
|
||||
{
|
||||
int res;
|
||||
|
||||
@@ -113,7 +113,7 @@ static int mkdir(struct inode *dir, struct dentry *dentry, int mode)
|
||||
return res;
|
||||
}
|
||||
|
||||
static int create(struct inode *dir, struct dentry *dentry, int mode)
|
||||
static int create(struct inode *dir, struct dentry *dentry, umode_t mode)
|
||||
{
|
||||
mode = (mode & S_IALLUGO) | S_IFREG;
|
||||
return mknod(dir, dentry, mode, 0);
|
||||
@@ -145,7 +145,7 @@ static struct file_system_type fs_type = {
|
||||
.kill_sb = kill_litter_super,
|
||||
};
|
||||
|
||||
static int create_by_name(const char *name, mode_t mode,
|
||||
static int create_by_name(const char *name, umode_t mode,
|
||||
struct dentry *parent,
|
||||
struct dentry **dentry)
|
||||
{
|
||||
@@ -159,12 +159,12 @@ static int create_by_name(const char *name, mode_t mode,
|
||||
* have around.
|
||||
*/
|
||||
if (!parent)
|
||||
parent = mount->mnt_sb->s_root;
|
||||
parent = mount->mnt_root;
|
||||
|
||||
mutex_lock(&parent->d_inode->i_mutex);
|
||||
*dentry = lookup_one_len(name, parent, strlen(name));
|
||||
if (!IS_ERR(*dentry)) {
|
||||
if ((mode & S_IFMT) == S_IFDIR)
|
||||
if (S_ISDIR(mode))
|
||||
error = mkdir(parent->d_inode, *dentry, mode);
|
||||
else
|
||||
error = create(parent->d_inode, *dentry, mode);
|
||||
@@ -205,7 +205,7 @@ static int create_by_name(const char *name, mode_t mode,
|
||||
* If securityfs is not enabled in the kernel, the value %-ENODEV is
|
||||
* returned.
|
||||
*/
|
||||
struct dentry *securityfs_create_file(const char *name, mode_t mode,
|
||||
struct dentry *securityfs_create_file(const char *name, umode_t mode,
|
||||
struct dentry *parent, void *data,
|
||||
const struct file_operations *fops)
|
||||
{
|
||||
|
||||
+8
-9
@@ -388,7 +388,7 @@ int security_old_inode_init_security(struct inode *inode, struct inode *dir,
|
||||
EXPORT_SYMBOL(security_old_inode_init_security);
|
||||
|
||||
#ifdef CONFIG_SECURITY_PATH
|
||||
int security_path_mknod(struct path *dir, struct dentry *dentry, int mode,
|
||||
int security_path_mknod(struct path *dir, struct dentry *dentry, umode_t mode,
|
||||
unsigned int dev)
|
||||
{
|
||||
if (unlikely(IS_PRIVATE(dir->dentry->d_inode)))
|
||||
@@ -397,7 +397,7 @@ int security_path_mknod(struct path *dir, struct dentry *dentry, int mode,
|
||||
}
|
||||
EXPORT_SYMBOL(security_path_mknod);
|
||||
|
||||
int security_path_mkdir(struct path *dir, struct dentry *dentry, int mode)
|
||||
int security_path_mkdir(struct path *dir, struct dentry *dentry, umode_t mode)
|
||||
{
|
||||
if (unlikely(IS_PRIVATE(dir->dentry->d_inode)))
|
||||
return 0;
|
||||
@@ -454,12 +454,11 @@ int security_path_truncate(struct path *path)
|
||||
return security_ops->path_truncate(path);
|
||||
}
|
||||
|
||||
int security_path_chmod(struct dentry *dentry, struct vfsmount *mnt,
|
||||
mode_t mode)
|
||||
int security_path_chmod(struct path *path, umode_t mode)
|
||||
{
|
||||
if (unlikely(IS_PRIVATE(dentry->d_inode)))
|
||||
if (unlikely(IS_PRIVATE(path->dentry->d_inode)))
|
||||
return 0;
|
||||
return security_ops->path_chmod(dentry, mnt, mode);
|
||||
return security_ops->path_chmod(path, mode);
|
||||
}
|
||||
|
||||
int security_path_chown(struct path *path, uid_t uid, gid_t gid)
|
||||
@@ -475,7 +474,7 @@ int security_path_chroot(struct path *path)
|
||||
}
|
||||
#endif
|
||||
|
||||
int security_inode_create(struct inode *dir, struct dentry *dentry, int mode)
|
||||
int security_inode_create(struct inode *dir, struct dentry *dentry, umode_t mode)
|
||||
{
|
||||
if (unlikely(IS_PRIVATE(dir)))
|
||||
return 0;
|
||||
@@ -506,7 +505,7 @@ int security_inode_symlink(struct inode *dir, struct dentry *dentry,
|
||||
return security_ops->inode_symlink(dir, dentry, old_name);
|
||||
}
|
||||
|
||||
int security_inode_mkdir(struct inode *dir, struct dentry *dentry, int mode)
|
||||
int security_inode_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
|
||||
{
|
||||
if (unlikely(IS_PRIVATE(dir)))
|
||||
return 0;
|
||||
@@ -521,7 +520,7 @@ int security_inode_rmdir(struct inode *dir, struct dentry *dentry)
|
||||
return security_ops->inode_rmdir(dir, dentry);
|
||||
}
|
||||
|
||||
int security_inode_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t dev)
|
||||
int security_inode_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, dev_t dev)
|
||||
{
|
||||
if (unlikely(IS_PRIVATE(dir)))
|
||||
return 0;
|
||||
|
||||
@@ -1740,7 +1740,7 @@ static inline u32 file_mask_to_av(int mode, int mask)
|
||||
{
|
||||
u32 av = 0;
|
||||
|
||||
if ((mode & S_IFMT) != S_IFDIR) {
|
||||
if (!S_ISDIR(mode)) {
|
||||
if (mask & MAY_EXEC)
|
||||
av |= FILE__EXECUTE;
|
||||
if (mask & MAY_READ)
|
||||
@@ -2507,7 +2507,7 @@ static int selinux_mount(char *dev_name,
|
||||
const struct cred *cred = current_cred();
|
||||
|
||||
if (flags & MS_REMOUNT)
|
||||
return superblock_has_perm(cred, path->mnt->mnt_sb,
|
||||
return superblock_has_perm(cred, path->dentry->d_sb,
|
||||
FILESYSTEM__REMOUNT, NULL);
|
||||
else
|
||||
return path_has_perm(cred, path, FILE__MOUNTON);
|
||||
@@ -2598,7 +2598,7 @@ static int selinux_inode_init_security(struct inode *inode, struct inode *dir,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int selinux_inode_create(struct inode *dir, struct dentry *dentry, int mask)
|
||||
static int selinux_inode_create(struct inode *dir, struct dentry *dentry, umode_t mode)
|
||||
{
|
||||
return may_create(dir, dentry, SECCLASS_FILE);
|
||||
}
|
||||
@@ -2618,7 +2618,7 @@ static int selinux_inode_symlink(struct inode *dir, struct dentry *dentry, const
|
||||
return may_create(dir, dentry, SECCLASS_LNK_FILE);
|
||||
}
|
||||
|
||||
static int selinux_inode_mkdir(struct inode *dir, struct dentry *dentry, int mask)
|
||||
static int selinux_inode_mkdir(struct inode *dir, struct dentry *dentry, umode_t mask)
|
||||
{
|
||||
return may_create(dir, dentry, SECCLASS_DIR);
|
||||
}
|
||||
@@ -2628,7 +2628,7 @@ static int selinux_inode_rmdir(struct inode *dir, struct dentry *dentry)
|
||||
return may_link(dir, dentry, MAY_RMDIR);
|
||||
}
|
||||
|
||||
static int selinux_inode_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t dev)
|
||||
static int selinux_inode_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, dev_t dev)
|
||||
{
|
||||
return may_create(dir, dentry, inode_mode_to_security_class(mode));
|
||||
}
|
||||
|
||||
@@ -406,7 +406,7 @@ static int smack_sb_statfs(struct dentry *dentry)
|
||||
static int smack_sb_mount(char *dev_name, struct path *path,
|
||||
char *type, unsigned long flags, void *data)
|
||||
{
|
||||
struct superblock_smack *sbp = path->mnt->mnt_sb->s_security;
|
||||
struct superblock_smack *sbp = path->dentry->d_sb->s_security;
|
||||
struct smk_audit_info ad;
|
||||
|
||||
smk_ad_init(&ad, __func__, LSM_AUDIT_DATA_PATH);
|
||||
@@ -435,7 +435,7 @@ static int smack_sb_umount(struct vfsmount *mnt, int flags)
|
||||
smk_ad_init(&ad, __func__, LSM_AUDIT_DATA_PATH);
|
||||
smk_ad_setfield_u_fs_path(&ad, path);
|
||||
|
||||
sbp = mnt->mnt_sb->s_security;
|
||||
sbp = path.dentry->d_sb->s_security;
|
||||
return smk_curacc(sbp->smk_floor, MAY_WRITE, &ad);
|
||||
}
|
||||
|
||||
|
||||
@@ -112,7 +112,7 @@ out:
|
||||
*
|
||||
* Returns file type string.
|
||||
*/
|
||||
static inline const char *tomoyo_filetype(const mode_t mode)
|
||||
static inline const char *tomoyo_filetype(const umode_t mode)
|
||||
{
|
||||
switch (mode & S_IFMT) {
|
||||
case S_IFREG:
|
||||
@@ -180,7 +180,7 @@ static char *tomoyo_print_header(struct tomoyo_request_info *r)
|
||||
for (i = 0; i < TOMOYO_MAX_PATH_STAT; i++) {
|
||||
struct tomoyo_mini_stat *stat;
|
||||
unsigned int dev;
|
||||
mode_t mode;
|
||||
umode_t mode;
|
||||
if (!obj->stat_valid[i])
|
||||
continue;
|
||||
stat = &obj->stat[i];
|
||||
|
||||
@@ -564,7 +564,7 @@ struct tomoyo_mini_stat {
|
||||
uid_t uid;
|
||||
gid_t gid;
|
||||
ino_t ino;
|
||||
mode_t mode;
|
||||
umode_t mode;
|
||||
dev_t dev;
|
||||
dev_t rdev;
|
||||
};
|
||||
|
||||
@@ -4,15 +4,8 @@
|
||||
* Copyright (C) 2005-2011 NTT DATA CORPORATION
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/mount.h>
|
||||
#include <linux/mnt_namespace.h>
|
||||
#include <linux/fs_struct.h>
|
||||
#include <linux/magic.h>
|
||||
#include <linux/slab.h>
|
||||
#include <net/sock.h>
|
||||
#include "common.h"
|
||||
#include "../../fs/internal.h"
|
||||
#include <linux/magic.h>
|
||||
|
||||
/**
|
||||
* tomoyo_encode2 - Encode binary string to ascii string.
|
||||
|
||||
@@ -224,7 +224,7 @@ static const struct file_operations tomoyo_operations = {
|
||||
*
|
||||
* Returns nothing.
|
||||
*/
|
||||
static void __init tomoyo_create_entry(const char *name, const mode_t mode,
|
||||
static void __init tomoyo_create_entry(const char *name, const umode_t mode,
|
||||
struct dentry *parent, const u8 key)
|
||||
{
|
||||
securityfs_create_file(name, mode, parent, ((u8 *) NULL) + key,
|
||||
|
||||
@@ -186,7 +186,7 @@ static int tomoyo_path_unlink(struct path *parent, struct dentry *dentry)
|
||||
* Returns 0 on success, negative value otherwise.
|
||||
*/
|
||||
static int tomoyo_path_mkdir(struct path *parent, struct dentry *dentry,
|
||||
int mode)
|
||||
umode_t mode)
|
||||
{
|
||||
struct path path = { parent->mnt, dentry };
|
||||
return tomoyo_path_number_perm(TOMOYO_TYPE_MKDIR, &path,
|
||||
@@ -234,7 +234,7 @@ static int tomoyo_path_symlink(struct path *parent, struct dentry *dentry,
|
||||
* Returns 0 on success, negative value otherwise.
|
||||
*/
|
||||
static int tomoyo_path_mknod(struct path *parent, struct dentry *dentry,
|
||||
int mode, unsigned int dev)
|
||||
umode_t mode, unsigned int dev)
|
||||
{
|
||||
struct path path = { parent->mnt, dentry };
|
||||
int type = TOMOYO_TYPE_CREATE;
|
||||
@@ -353,17 +353,14 @@ static int tomoyo_file_ioctl(struct file *file, unsigned int cmd,
|
||||
/**
|
||||
* tomoyo_path_chmod - Target for security_path_chmod().
|
||||
*
|
||||
* @dentry: Pointer to "struct dentry".
|
||||
* @mnt: Pointer to "struct vfsmount".
|
||||
* @mode: DAC permission mode.
|
||||
* @path: Pointer to "struct path".
|
||||
* @mode: DAC permission mode.
|
||||
*
|
||||
* Returns 0 on success, negative value otherwise.
|
||||
*/
|
||||
static int tomoyo_path_chmod(struct dentry *dentry, struct vfsmount *mnt,
|
||||
mode_t mode)
|
||||
static int tomoyo_path_chmod(struct path *path, umode_t mode)
|
||||
{
|
||||
struct path path = { mnt, dentry };
|
||||
return tomoyo_path_number_perm(TOMOYO_TYPE_CHMOD, &path,
|
||||
return tomoyo_path_number_perm(TOMOYO_TYPE_CHMOD, path,
|
||||
mode & S_IALLUGO);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user