On Tue, May 15, 2018 at 09:48:09PM +0200, Christoph Hellwig wrote: > case -EIOCBQUEUED: > + if (req->ki_filp->f_op->cancel_kiocb) { > + struct aio_kiocb *iocb = > + container_of(req, struct aio_kiocb, rw); > + struct kioctx *ctx = iocb->ki_ctx; > + unsigned long flags; > + > + spin_lock_irqsave(&ctx->ctx_lock, flags); > + list_add_tail(&iocb->ki_list, &ctx->active_reqs); Use after free - that list insertion used to be done by drivers and doing so before any ->ki_complete() calls might've happened used to be their responsibility. Now you've taken that to the point after ->read_iter() (or ->write_iter()) return, so there's no way in hell to guarantee it's not been completed (and freed) by that point. Incidentally, none of the callers gives a damn about the difference between 0 and -EIOCBQUEUED now, so aio_rw_ret() might as well had been made void... -- To unsubscribe from this list: send the line "unsubscribe linux-api" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html