Loading fs/nfsd/vfs.c +17 −10 Original line number Diff line number Diff line Loading @@ -649,6 +649,7 @@ nfsd_open(struct svc_rqst *rqstp, struct svc_fh *fhp, umode_t type, { struct path path; struct inode *inode; struct file *file; int flags = O_RDONLY|O_LARGEFILE; __be32 err; int host_err = 0; Loading Loading @@ -703,19 +704,25 @@ nfsd_open(struct svc_rqst *rqstp, struct svc_fh *fhp, umode_t type, else flags = O_WRONLY|O_LARGEFILE; } *filp = dentry_open(&path, flags, current_cred()); if (IS_ERR(*filp)) { host_err = PTR_ERR(*filp); *filp = NULL; } else { host_err = ima_file_check(*filp, may_flags); file = dentry_open(&path, flags, current_cred()); if (IS_ERR(file)) { host_err = PTR_ERR(file); goto out_nfserr; } host_err = ima_file_check(file, may_flags); if (host_err) { nfsd_close(file); goto out_nfserr; } if (may_flags & NFSD_MAY_64BIT_COOKIE) (*filp)->f_mode |= FMODE_64BITHASH; file->f_mode |= FMODE_64BITHASH; else (*filp)->f_mode |= FMODE_32BITHASH; } file->f_mode |= FMODE_32BITHASH; *filp = file; out_nfserr: err = nfserrno(host_err); out: Loading Loading
fs/nfsd/vfs.c +17 −10 Original line number Diff line number Diff line Loading @@ -649,6 +649,7 @@ nfsd_open(struct svc_rqst *rqstp, struct svc_fh *fhp, umode_t type, { struct path path; struct inode *inode; struct file *file; int flags = O_RDONLY|O_LARGEFILE; __be32 err; int host_err = 0; Loading Loading @@ -703,19 +704,25 @@ nfsd_open(struct svc_rqst *rqstp, struct svc_fh *fhp, umode_t type, else flags = O_WRONLY|O_LARGEFILE; } *filp = dentry_open(&path, flags, current_cred()); if (IS_ERR(*filp)) { host_err = PTR_ERR(*filp); *filp = NULL; } else { host_err = ima_file_check(*filp, may_flags); file = dentry_open(&path, flags, current_cred()); if (IS_ERR(file)) { host_err = PTR_ERR(file); goto out_nfserr; } host_err = ima_file_check(file, may_flags); if (host_err) { nfsd_close(file); goto out_nfserr; } if (may_flags & NFSD_MAY_64BIT_COOKIE) (*filp)->f_mode |= FMODE_64BITHASH; file->f_mode |= FMODE_64BITHASH; else (*filp)->f_mode |= FMODE_32BITHASH; } file->f_mode |= FMODE_32BITHASH; *filp = file; out_nfserr: err = nfserrno(host_err); out: Loading