Skip to content

Commit 1678f8d

Browse files
committed
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
2 parents 17ba566 + 54cbc05 commit 1678f8d

File tree

2 files changed

+14
-17
lines changed

2 files changed

+14
-17
lines changed

fs/afs/dir.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -479,8 +479,10 @@ static int afs_dir_iterate_block(struct afs_vnode *dvnode,
479479
dire->u.name[0] == '.' &&
480480
ctx->actor != afs_lookup_filldir &&
481481
ctx->actor != afs_lookup_one_filldir &&
482-
memcmp(dire->u.name, ".__afs", 6) == 0)
482+
memcmp(dire->u.name, ".__afs", 6) == 0) {
483+
ctx->pos = blkoff + next * sizeof(union afs_xdr_dirent);
483484
continue;
485+
}
484486

485487
/* found the next entry */
486488
if (!dir_emit(ctx, dire->u.name, nlen,

fs/aio.c

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2165,14 +2165,11 @@ COMPAT_SYSCALL_DEFINE3(io_submit, compat_aio_context_t, ctx_id,
21652165
#endif
21662166

21672167
/* sys_io_cancel:
2168-
* Attempts to cancel an iocb previously passed to io_submit. If
2169-
* the operation is successfully cancelled, the resulting event is
2170-
* copied into the memory pointed to by result without being placed
2171-
* into the completion queue and 0 is returned. May fail with
2172-
* -EFAULT if any of the data structures pointed to are invalid.
2173-
* May fail with -EINVAL if aio_context specified by ctx_id is
2174-
* invalid. May fail with -EAGAIN if the iocb specified was not
2175-
* cancelled. Will fail with -ENOSYS if not implemented.
2168+
* Attempts to cancel an iocb previously passed to io_submit(). If the
2169+
* operation is successfully cancelled 0 is returned. May fail with
2170+
* -EFAULT if any of the data structures pointed to are invalid. May
2171+
* fail with -EINVAL if aio_context specified by ctx_id is invalid. Will
2172+
* fail with -ENOSYS if not implemented.
21762173
*/
21772174
SYSCALL_DEFINE3(io_cancel, aio_context_t, ctx_id, struct iocb __user *, iocb,
21782175
struct io_event __user *, result)
@@ -2203,14 +2200,12 @@ SYSCALL_DEFINE3(io_cancel, aio_context_t, ctx_id, struct iocb __user *, iocb,
22032200
}
22042201
spin_unlock_irq(&ctx->ctx_lock);
22052202

2206-
if (!ret) {
2207-
/*
2208-
* The result argument is no longer used - the io_event is
2209-
* always delivered via the ring buffer. -EINPROGRESS indicates
2210-
* cancellation is progress:
2211-
*/
2212-
ret = -EINPROGRESS;
2213-
}
2203+
/*
2204+
* The result argument is no longer used - the io_event is always
2205+
* delivered via the ring buffer.
2206+
*/
2207+
if (ret == 0 && kiocb->rw.ki_flags & IOCB_AIO_RW)
2208+
aio_complete_rw(&kiocb->rw, -EINTR);
22142209

22152210
percpu_ref_put(&ctx->users);
22162211

0 commit comments

Comments
 (0)