Loading fs/init.c +25 −0 Original line number Original line Diff line number Diff line Loading @@ -122,6 +122,31 @@ int __init init_eaccess(const char *filename) return error; return error; } } int __init init_mknod(const char *filename, umode_t mode, unsigned int dev) { struct dentry *dentry; struct path path; int error; if (S_ISFIFO(mode) || S_ISSOCK(mode)) dev = 0; else if (!(S_ISBLK(mode) || S_ISCHR(mode))) return -EINVAL; dentry = kern_path_create(AT_FDCWD, filename, &path, 0); if (IS_ERR(dentry)) return PTR_ERR(dentry); if (!IS_POSIXACL(path.dentry->d_inode)) mode &= ~current_umask(); error = security_path_mknod(&path, dentry, mode, dev); if (!error) error = vfs_mknod(path.dentry->d_inode, dentry, mode, new_decode_dev(dev)); done_path_create(&path, dentry); return error; } int __init init_link(const char *oldname, const char *newname) int __init init_link(const char *oldname, const char *newname) { { struct dentry *new_dentry; struct dentry *new_dentry; Loading fs/internal.h +0 −2 Original line number Original line Diff line number Diff line Loading @@ -62,8 +62,6 @@ extern int filename_lookup(int dfd, struct filename *name, unsigned flags, struct path *path, struct path *root); struct path *path, struct path *root); extern int vfs_path_lookup(struct dentry *, struct vfsmount *, extern int vfs_path_lookup(struct dentry *, struct vfsmount *, const char *, unsigned int, struct path *); const char *, unsigned int, struct path *); long do_mknodat(int dfd, const char __user *filename, umode_t mode, unsigned int dev); long do_rmdir(int dfd, struct filename *name); long do_rmdir(int dfd, struct filename *name); long do_unlinkat(int dfd, struct filename *name); long do_unlinkat(int dfd, struct filename *name); int may_linkat(struct path *link); int may_linkat(struct path *link); Loading fs/namei.c +1 −1 Original line number Original line Diff line number Diff line Loading @@ -3564,7 +3564,7 @@ static int may_mknod(umode_t mode) } } } } long do_mknodat(int dfd, const char __user *filename, umode_t mode, static long do_mknodat(int dfd, const char __user *filename, umode_t mode, unsigned int dev) unsigned int dev) { { struct dentry *dentry; struct dentry *dentry; Loading include/linux/init_syscalls.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -8,6 +8,7 @@ int __init init_chroot(const char *filename); int __init init_chown(const char *filename, uid_t user, gid_t group, int flags); int __init init_chown(const char *filename, uid_t user, gid_t group, int flags); int __init init_chmod(const char *filename, umode_t mode); int __init init_chmod(const char *filename, umode_t mode); int __init init_eaccess(const char *filename); int __init init_eaccess(const char *filename); int __init init_mknod(const char *filename, umode_t mode, unsigned int dev); int __init init_link(const char *oldname, const char *newname); int __init init_link(const char *oldname, const char *newname); int __init init_symlink(const char *oldname, const char *newname); int __init init_symlink(const char *oldname, const char *newname); int __init init_unlink(const char *pathname); int __init init_unlink(const char *pathname); Loading include/linux/syscalls.h +0 −9 Original line number Original line Diff line number Diff line Loading @@ -1270,15 +1270,6 @@ int compat_ksys_ipc(u32 call, int first, int second, * The following kernel syscall equivalents are just wrappers to fs-internal * The following kernel syscall equivalents are just wrappers to fs-internal * functions. Therefore, provide stubs to be inlined at the callsites. * functions. Therefore, provide stubs to be inlined at the callsites. */ */ extern long do_mknodat(int dfd, const char __user *filename, umode_t mode, unsigned int dev); static inline long ksys_mknod(const char __user *filename, umode_t mode, unsigned int dev) { return do_mknodat(AT_FDCWD, filename, mode, dev); } extern int do_fchownat(int dfd, const char __user *filename, uid_t user, extern int do_fchownat(int dfd, const char __user *filename, uid_t user, gid_t group, int flag); gid_t group, int flag); Loading Loading
fs/init.c +25 −0 Original line number Original line Diff line number Diff line Loading @@ -122,6 +122,31 @@ int __init init_eaccess(const char *filename) return error; return error; } } int __init init_mknod(const char *filename, umode_t mode, unsigned int dev) { struct dentry *dentry; struct path path; int error; if (S_ISFIFO(mode) || S_ISSOCK(mode)) dev = 0; else if (!(S_ISBLK(mode) || S_ISCHR(mode))) return -EINVAL; dentry = kern_path_create(AT_FDCWD, filename, &path, 0); if (IS_ERR(dentry)) return PTR_ERR(dentry); if (!IS_POSIXACL(path.dentry->d_inode)) mode &= ~current_umask(); error = security_path_mknod(&path, dentry, mode, dev); if (!error) error = vfs_mknod(path.dentry->d_inode, dentry, mode, new_decode_dev(dev)); done_path_create(&path, dentry); return error; } int __init init_link(const char *oldname, const char *newname) int __init init_link(const char *oldname, const char *newname) { { struct dentry *new_dentry; struct dentry *new_dentry; Loading
fs/internal.h +0 −2 Original line number Original line Diff line number Diff line Loading @@ -62,8 +62,6 @@ extern int filename_lookup(int dfd, struct filename *name, unsigned flags, struct path *path, struct path *root); struct path *path, struct path *root); extern int vfs_path_lookup(struct dentry *, struct vfsmount *, extern int vfs_path_lookup(struct dentry *, struct vfsmount *, const char *, unsigned int, struct path *); const char *, unsigned int, struct path *); long do_mknodat(int dfd, const char __user *filename, umode_t mode, unsigned int dev); long do_rmdir(int dfd, struct filename *name); long do_rmdir(int dfd, struct filename *name); long do_unlinkat(int dfd, struct filename *name); long do_unlinkat(int dfd, struct filename *name); int may_linkat(struct path *link); int may_linkat(struct path *link); Loading
fs/namei.c +1 −1 Original line number Original line Diff line number Diff line Loading @@ -3564,7 +3564,7 @@ static int may_mknod(umode_t mode) } } } } long do_mknodat(int dfd, const char __user *filename, umode_t mode, static long do_mknodat(int dfd, const char __user *filename, umode_t mode, unsigned int dev) unsigned int dev) { { struct dentry *dentry; struct dentry *dentry; Loading
include/linux/init_syscalls.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -8,6 +8,7 @@ int __init init_chroot(const char *filename); int __init init_chown(const char *filename, uid_t user, gid_t group, int flags); int __init init_chown(const char *filename, uid_t user, gid_t group, int flags); int __init init_chmod(const char *filename, umode_t mode); int __init init_chmod(const char *filename, umode_t mode); int __init init_eaccess(const char *filename); int __init init_eaccess(const char *filename); int __init init_mknod(const char *filename, umode_t mode, unsigned int dev); int __init init_link(const char *oldname, const char *newname); int __init init_link(const char *oldname, const char *newname); int __init init_symlink(const char *oldname, const char *newname); int __init init_symlink(const char *oldname, const char *newname); int __init init_unlink(const char *pathname); int __init init_unlink(const char *pathname); Loading
include/linux/syscalls.h +0 −9 Original line number Original line Diff line number Diff line Loading @@ -1270,15 +1270,6 @@ int compat_ksys_ipc(u32 call, int first, int second, * The following kernel syscall equivalents are just wrappers to fs-internal * The following kernel syscall equivalents are just wrappers to fs-internal * functions. Therefore, provide stubs to be inlined at the callsites. * functions. Therefore, provide stubs to be inlined at the callsites. */ */ extern long do_mknodat(int dfd, const char __user *filename, umode_t mode, unsigned int dev); static inline long ksys_mknod(const char __user *filename, umode_t mode, unsigned int dev) { return do_mknodat(AT_FDCWD, filename, mode, dev); } extern int do_fchownat(int dfd, const char __user *filename, uid_t user, extern int do_fchownat(int dfd, const char __user *filename, uid_t user, gid_t group, int flag); gid_t group, int flag); Loading