mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-04 04:06:26 +00:00
vfs-6.8-rc7.fixes
-----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQRAhzRXHqcMeLMyaSiRxhvAZXjcogUCZeHE0QAKCRCRxhvAZXjc ojUoAQDaH72HFy7vw9/5x9IN1LfbwWLNmFpF2eFVWIB/xnJaMAD/aPOxqBSHfC7W kam84prsnQcOh3wNF5j23HSR9HS79gw= =5YAw -----END PGP SIGNATURE----- Merge tag 'vfs-6.8-rc7.fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs Pull vfs fixes from Christian Brauner: "Two small fixes: - Fix an endless loop during afs directory iteration caused by not skipping silly-rename files correctly. - Fix reporting of completion events for aio causing leaks in userspace. This is based on the fix last week as it's now possible to recognize aio events submitted through the old aio interface" * tag 'vfs-6.8-rc7.fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs: fs/aio: Make io_cancel() generate completions again afs: Fix endless loop in directory parsing
This commit is contained in:
commit
1678f8d85d
@ -479,8 +479,10 @@ static int afs_dir_iterate_block(struct afs_vnode *dvnode,
|
||||
dire->u.name[0] == '.' &&
|
||||
ctx->actor != afs_lookup_filldir &&
|
||||
ctx->actor != afs_lookup_one_filldir &&
|
||||
memcmp(dire->u.name, ".__afs", 6) == 0)
|
||||
memcmp(dire->u.name, ".__afs", 6) == 0) {
|
||||
ctx->pos = blkoff + next * sizeof(union afs_xdr_dirent);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* found the next entry */
|
||||
if (!dir_emit(ctx, dire->u.name, nlen,
|
||||
|
27
fs/aio.c
27
fs/aio.c
@ -2165,14 +2165,11 @@ COMPAT_SYSCALL_DEFINE3(io_submit, compat_aio_context_t, ctx_id,
|
||||
#endif
|
||||
|
||||
/* sys_io_cancel:
|
||||
* Attempts to cancel an iocb previously passed to io_submit. If
|
||||
* the operation is successfully cancelled, the resulting event is
|
||||
* copied into the memory pointed to by result without being placed
|
||||
* into the completion queue and 0 is returned. May fail with
|
||||
* -EFAULT if any of the data structures pointed to are invalid.
|
||||
* May fail with -EINVAL if aio_context specified by ctx_id is
|
||||
* invalid. May fail with -EAGAIN if the iocb specified was not
|
||||
* cancelled. Will fail with -ENOSYS if not implemented.
|
||||
* Attempts to cancel an iocb previously passed to io_submit(). If the
|
||||
* operation is successfully cancelled 0 is returned. May fail with
|
||||
* -EFAULT if any of the data structures pointed to are invalid. May
|
||||
* fail with -EINVAL if aio_context specified by ctx_id is invalid. Will
|
||||
* fail with -ENOSYS if not implemented.
|
||||
*/
|
||||
SYSCALL_DEFINE3(io_cancel, aio_context_t, ctx_id, struct iocb __user *, iocb,
|
||||
struct io_event __user *, result)
|
||||
@ -2203,14 +2200,12 @@ SYSCALL_DEFINE3(io_cancel, aio_context_t, ctx_id, struct iocb __user *, iocb,
|
||||
}
|
||||
spin_unlock_irq(&ctx->ctx_lock);
|
||||
|
||||
if (!ret) {
|
||||
/*
|
||||
* The result argument is no longer used - the io_event is
|
||||
* always delivered via the ring buffer. -EINPROGRESS indicates
|
||||
* cancellation is progress:
|
||||
*/
|
||||
ret = -EINPROGRESS;
|
||||
}
|
||||
/*
|
||||
* The result argument is no longer used - the io_event is always
|
||||
* delivered via the ring buffer.
|
||||
*/
|
||||
if (ret == 0 && kiocb->rw.ki_flags & IOCB_AIO_RW)
|
||||
aio_complete_rw(&kiocb->rw, -EINTR);
|
||||
|
||||
percpu_ref_put(&ctx->users);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user