Wrapfs: protect lower_file by ref-count during aio operation
authorErez Zadok <ezk@cs.sunysb.edu>
Sun, 10 Aug 2014 04:40:56 +0000 (00:40 -0400)
committerRohit Kumar <rokkumar@cs.stonybrook.edu>
Fri, 12 Oct 2018 16:28:37 +0000 (12:28 -0400)
Signed-off-by: Erez Zadok <ezk@cs.sunysb.edu>
Signed-off-by: Mengyang Li <li.mengyang@stonybrook.edu>
fs/wrapfs/file.c

index 6086cce83a50551bb829fd5ff999ef6404b92cf9..e8242a80844c27491fa52c9f3c53b8e66ad6f208 100644 (file)
@@ -279,9 +279,11 @@ static ssize_t wrapfs_aio_read(struct kiocb *iocb, const struct iovec *iov,
         * It appears safe to rewrite this iocb, because in
         * do_io_submit@fs/aio.c, iocb is a just copy from user.
         */
+       get_file(lower_file); /* prevent lower_file from being released */
        iocb->ki_filp = lower_file;
        err = lower_file->f_op->aio_read(iocb, iov, nr_segs, pos);
        iocb->ki_filp = file;
+       fput(lower_file);
 out:
        return err;
 }
@@ -300,9 +302,11 @@ static ssize_t wrapfs_aio_write(struct kiocb *iocb, const struct iovec *iov,
         * It appears safe to rewrite this iocb, because in
         * do_io_submit@fs/aio.c, iocb is a just copy from user.
         */
+       get_file(lower_file); /* prevent lower_file from being released */
        iocb->ki_filp = lower_file;
        err = lower_file->f_op->aio_write(iocb, iov, nr_segs, pos);
        iocb->ki_filp = file;
+       fput(lower_file);
 out:
        return err;
 }