···365365 if (error)366366 return error;367367 /* you can only watch an inode if you have read permissions on it */368368- error = vfs_permission(nd, MAY_READ);368368+ error = inode_permission(nd->path.dentry->d_inode, MAY_READ);369369 if (error)370370 path_put(&nd->path);371371 return error;
+10-8
fs/open.c
···251251 if (error)252252 goto dput_and_out;253253254254- error = vfs_permission(&nd, MAY_WRITE);254254+ error = inode_permission(inode, MAY_WRITE);255255 if (error)256256 goto mnt_drop_write_and_out;257257···426426asmlinkage long sys_faccessat(int dfd, const char __user *filename, int mode)427427{428428 struct nameidata nd;429429+ struct inode *inode;429430 int old_fsuid, old_fsgid;430431 kernel_cap_t uninitialized_var(old_cap); /* !SECURE_NO_SETUID_FIXUP */431432 int res;···462461 if (res)463462 goto out;464463465465- if ((mode & MAY_EXEC) && S_ISREG(nd.path.dentry->d_inode->i_mode)) {464464+ inode = nd.path.dentry->d_inode;465465+466466+ if ((mode & MAY_EXEC) && S_ISREG(inode->i_mode)) {466467 /*467468 * MAY_EXEC on regular files is denied if the fs is mounted468469 * with the "noexec" flag.···474471 goto out_path_release;475472 }476473477477- res = vfs_permission(&nd, mode | MAY_ACCESS);474474+ res = inode_permission(inode, mode | MAY_ACCESS);478475 /* SuS v2 requires we report a read only fs too */479479- if(res || !(mode & S_IWOTH) ||480480- special_file(nd.path.dentry->d_inode->i_mode))476476+ if (res || !(mode & S_IWOTH) || special_file(inode->i_mode))481477 goto out_path_release;482478 /*483479 * This is a rare case where using __mnt_is_readonly()···517515 if (error)518516 goto out;519517520520- error = vfs_permission(&nd, MAY_EXEC | MAY_ACCESS);518518+ error = inode_permission(nd.path.dentry->d_inode, MAY_EXEC | MAY_ACCESS);521519 if (error)522520 goto dput_and_out;523521···546544 if (!S_ISDIR(inode->i_mode))547545 goto out_putf;548546549549- error = file_permission(file, MAY_EXEC | MAY_ACCESS);547547+ error = inode_permission(inode, MAY_EXEC | MAY_ACCESS);550548 if (!error)551549 set_fs_pwd(current->fs, &file->f_path);552550out_putf:···564562 if (error)565563 goto out;566564567567- error = vfs_permission(&nd, MAY_EXEC | MAY_ACCESS);565565+ error = inode_permission(nd.path.dentry->d_inode, MAY_EXEC | MAY_ACCESS);568566 if (error)569567 goto dput_and_out;570568