mirror of https://github.com/torvalds/linux.git
nfs: use credential guards in nfs_local_call_read()
Use credential guards for scoped credential override with automatic restoration on scope exit. Link: https://patch.msgid.link/20251103-work-creds-guards-simple-v1-10-a3e156839e7f@kernel.org Reviewed-by: Amir Goldstein <amir73il@gmail.com> Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
parent
5e88d1aadc
commit
94afb627df
|
|
@ -595,29 +595,26 @@ static void nfs_local_call_read(struct work_struct *work)
|
|||
struct nfs_local_kiocb *iocb =
|
||||
container_of(work, struct nfs_local_kiocb, work);
|
||||
struct file *filp = iocb->kiocb.ki_filp;
|
||||
const struct cred *save_cred;
|
||||
ssize_t status;
|
||||
|
||||
save_cred = override_creds(filp->f_cred);
|
||||
scoped_with_creds(filp->f_cred) {
|
||||
for (int i = 0; i < iocb->n_iters ; i++) {
|
||||
if (iocb->iter_is_dio_aligned[i]) {
|
||||
iocb->kiocb.ki_flags |= IOCB_DIRECT;
|
||||
iocb->kiocb.ki_complete = nfs_local_read_aio_complete;
|
||||
iocb->aio_complete_work = nfs_local_read_aio_complete_work;
|
||||
}
|
||||
|
||||
for (int i = 0; i < iocb->n_iters ; i++) {
|
||||
if (iocb->iter_is_dio_aligned[i]) {
|
||||
iocb->kiocb.ki_flags |= IOCB_DIRECT;
|
||||
iocb->kiocb.ki_complete = nfs_local_read_aio_complete;
|
||||
iocb->aio_complete_work = nfs_local_read_aio_complete_work;
|
||||
}
|
||||
|
||||
iocb->kiocb.ki_pos = iocb->offset[i];
|
||||
status = filp->f_op->read_iter(&iocb->kiocb, &iocb->iters[i]);
|
||||
if (status != -EIOCBQUEUED) {
|
||||
nfs_local_pgio_done(iocb->hdr, status);
|
||||
if (iocb->hdr->task.tk_status)
|
||||
break;
|
||||
iocb->kiocb.ki_pos = iocb->offset[i];
|
||||
status = filp->f_op->read_iter(&iocb->kiocb, &iocb->iters[i]);
|
||||
if (status != -EIOCBQUEUED) {
|
||||
nfs_local_pgio_done(iocb->hdr, status);
|
||||
if (iocb->hdr->task.tk_status)
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
revert_creds(save_cred);
|
||||
|
||||
if (status != -EIOCBQUEUED) {
|
||||
nfs_local_read_done(iocb, status);
|
||||
nfs_local_pgio_release(iocb);
|
||||
|
|
|
|||
Loading…
Reference in New Issue