diff options
author | Yan Zheng <yanzheng@21cn.com> | 2007-10-08 15:16:20 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-10-08 15:58:14 -0400 |
commit | 87e2831c3fa39cbf6f7ab676bb5aef039b9659e2 (patch) | |
tree | 88e1a3fca607a0643a7f6e60aef80a2bc04323c3 | |
parent | 745ad48e8cac47beec0b2f72dc3c64424bce1fec (diff) |
AIO: fix cleanup in io_submit_one(...)
When IOCB_FLAG_RESFD flag is set and iocb->aio_resfd is incorrect,
statement 'goto out_put_req' is executed. At label 'out_put_req',
aio_put_req(..) is called, which requires 'req->ki_filp' set.
Signed-off-by: Yan Zheng<yanzheng@21cn.com>
Cc: Zach Brown <zach.brown@oracle.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r-- | fs/aio.c | 2 |
1 files changed, 1 insertions, 1 deletions
@@ -1562,6 +1562,7 @@ int fastcall io_submit_one(struct kioctx *ctx, struct iocb __user *user_iocb, | |||
1562 | fput(file); | 1562 | fput(file); |
1563 | return -EAGAIN; | 1563 | return -EAGAIN; |
1564 | } | 1564 | } |
1565 | req->ki_filp = file; | ||
1565 | if (iocb->aio_flags & IOCB_FLAG_RESFD) { | 1566 | if (iocb->aio_flags & IOCB_FLAG_RESFD) { |
1566 | /* | 1567 | /* |
1567 | * If the IOCB_FLAG_RESFD flag of aio_flags is set, get an | 1568 | * If the IOCB_FLAG_RESFD flag of aio_flags is set, get an |
@@ -1576,7 +1577,6 @@ int fastcall io_submit_one(struct kioctx *ctx, struct iocb __user *user_iocb, | |||
1576 | } | 1577 | } |
1577 | } | 1578 | } |
1578 | 1579 | ||
1579 | req->ki_filp = file; | ||
1580 | ret = put_user(req->ki_key, &user_iocb->aio_key); | 1580 | ret = put_user(req->ki_key, &user_iocb->aio_key); |
1581 | if (unlikely(ret)) { | 1581 | if (unlikely(ret)) { |
1582 | dprintk("EFAULT: aio_key\n"); | 1582 | dprintk("EFAULT: aio_key\n"); |