···830static int831ecryptfs_permission(struct inode *inode, int mask)832{833- return permission(ecryptfs_inode_to_lower(inode), mask, NULL);834}835836/**
···830static int831ecryptfs_permission(struct inode *inode, int mask)832{833+ return inode_permission(ecryptfs_inode_to_lower(inode), mask);834}835836/**
+9-13
fs/namei.c
···227 return -EACCES;228}229230-int permission(struct inode *inode, int mask, struct nameidata *nd)231{232 int retval;233- struct vfsmount *mnt = NULL;234-235- if (nd)236- mnt = nd->path.mnt;237238 if (mask & MAY_WRITE) {239 umode_t mode = inode->i_mode;···289 */290int vfs_permission(struct nameidata *nd, int mask)291{292- return permission(nd->path.dentry->d_inode, mask, nd);293}294295/**···306 */307int file_permission(struct file *file, int mask)308{309- return permission(file->f_path.dentry->d_inode, mask, NULL);310}311312/*···1258{1259 int err;12601261- err = permission(nd->path.dentry->d_inode, MAY_EXEC, nd);1262 if (err)1263 return ERR_PTR(err);1264 return __lookup_hash(&nd->last, nd->path.dentry, nd);···1306 if (err)1307 return ERR_PTR(err);13081309- err = permission(base->d_inode, MAY_EXEC, NULL);1310 if (err)1311 return ERR_PTR(err);1312 return __lookup_hash(&this, base, NULL);···1396 BUG_ON(victim->d_parent->d_inode != dir);1397 audit_inode_child(victim->d_name.name, victim, dir);13981399- error = permission(dir,MAY_WRITE | MAY_EXEC, NULL);1400 if (error)1401 return error;1402 if (IS_APPEND(dir))···1433 return -EEXIST;1434 if (IS_DEADDIR(dir))1435 return -ENOENT;1436- return permission(dir,MAY_WRITE | MAY_EXEC, nd);1437}14381439/* ···2539 * we'll need to flip '..'.2540 */2541 if (new_dir != old_dir) {2542- error = permission(old_dentry->d_inode, MAY_WRITE, NULL);2543 if (error)2544 return error;2545 }···2893EXPORT_SYMBOL(page_symlink_inode_operations);2894EXPORT_SYMBOL(path_lookup);2895EXPORT_SYMBOL(vfs_path_lookup);2896-EXPORT_SYMBOL(permission);2897EXPORT_SYMBOL(vfs_permission);2898EXPORT_SYMBOL(file_permission);2899EXPORT_SYMBOL(unlock_rename);
···227 return -EACCES;228}229230+int inode_permission(struct inode *inode, int mask)231{232 int retval;0000233234 if (mask & MAY_WRITE) {235 umode_t mode = inode->i_mode;···293 */294int vfs_permission(struct nameidata *nd, int mask)295{296+ return inode_permission(nd->path.dentry->d_inode, mask);297}298299/**···310 */311int file_permission(struct file *file, int mask)312{313+ return inode_permission(file->f_path.dentry->d_inode, mask);314}315316/*···1262{1263 int err;12641265+ err = inode_permission(nd->path.dentry->d_inode, MAY_EXEC);1266 if (err)1267 return ERR_PTR(err);1268 return __lookup_hash(&nd->last, nd->path.dentry, nd);···1310 if (err)1311 return ERR_PTR(err);13121313+ err = inode_permission(base->d_inode, MAY_EXEC);1314 if (err)1315 return ERR_PTR(err);1316 return __lookup_hash(&this, base, NULL);···1400 BUG_ON(victim->d_parent->d_inode != dir);1401 audit_inode_child(victim->d_name.name, victim, dir);14021403+ error = inode_permission(dir, MAY_WRITE | MAY_EXEC);1404 if (error)1405 return error;1406 if (IS_APPEND(dir))···1437 return -EEXIST;1438 if (IS_DEADDIR(dir))1439 return -ENOENT;1440+ return inode_permission(dir, MAY_WRITE | MAY_EXEC);1441}14421443/* ···2543 * we'll need to flip '..'.2544 */2545 if (new_dir != old_dir) {2546+ error = inode_permission(old_dentry->d_inode, MAY_WRITE);2547 if (error)2548 return error;2549 }···2897EXPORT_SYMBOL(page_symlink_inode_operations);2898EXPORT_SYMBOL(path_lookup);2899EXPORT_SYMBOL(vfs_path_lookup);2900+EXPORT_SYMBOL(inode_permission);2901EXPORT_SYMBOL(vfs_permission);2902EXPORT_SYMBOL(file_permission);2903EXPORT_SYMBOL(unlock_rename);
+1-1
fs/nfsd/nfsfh.c
···51 /* make sure parents give x permission to user */52 int err;53 parent = dget_parent(tdentry);54- err = permission(parent->d_inode, MAY_EXEC, NULL);55 if (err < 0) {56 dput(parent);57 break;
···51 /* make sure parents give x permission to user */52 int err;53 parent = dget_parent(tdentry);54+ err = inode_permission(parent->d_inode, MAY_EXEC);55 if (err < 0) {56 dput(parent);57 break;
+2-2
fs/nfsd/vfs.c
···1953 return 0;19541955 /* This assumes NFSD_MAY_{READ,WRITE,EXEC} == MAY_{READ,WRITE,EXEC} */1956- err = permission(inode, acc & (MAY_READ|MAY_WRITE|MAY_EXEC), NULL);19571958 /* Allow read access to binaries even when mode 111 */1959 if (err == -EACCES && S_ISREG(inode->i_mode) &&1960 acc == (NFSD_MAY_READ | NFSD_MAY_OWNER_OVERRIDE))1961- err = permission(inode, MAY_EXEC, NULL);19621963 return err? nfserrno(err) : 0;1964}
···1953 return 0;19541955 /* This assumes NFSD_MAY_{READ,WRITE,EXEC} == MAY_{READ,WRITE,EXEC} */1956+ err = inode_permission(inode, acc & (MAY_READ|MAY_WRITE|MAY_EXEC));19571958 /* Allow read access to binaries even when mode 111 */1959 if (err == -EACCES && S_ISREG(inode->i_mode) &&1960 acc == (NFSD_MAY_READ | NFSD_MAY_OWNER_OVERRIDE))1961+ err = inode_permission(inode, MAY_EXEC);19621963 return err? nfserrno(err) : 0;1964}
+1-1
fs/utimes.c
···96 goto mnt_drop_write_and_out;9798 if (!is_owner_or_cap(inode)) {99- error = permission(inode, MAY_WRITE, NULL);100 if (error)101 goto mnt_drop_write_and_out;102 }
···96 goto mnt_drop_write_and_out;9798 if (!is_owner_or_cap(inode)) {99+ error = inode_permission(inode, MAY_WRITE);100 if (error)101 goto mnt_drop_write_and_out;102 }