Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2d2422ae authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Alex Elder
Browse files

xfs: fix a use after free in xfs_end_io_direct_write



There is a window in which the ioend that we call inode_dio_wake on
in xfs_end_io_direct_write is already free.  Fix this by storing
the inode pointer in a local variable.

This is a fix for the regression introduced in 3.1-rc by
"fs: move inode_dio_done to the end_io handler".

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarAlex Elder <aelder@sgi.com>
parent 003f6c9d
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -1300,6 +1300,7 @@ xfs_end_io_direct_write(
	bool			is_async)
{
	struct xfs_ioend	*ioend = iocb->private;
	struct inode		*inode = ioend->io_inode;

	/*
	 * blockdev_direct_IO can return an error even after the I/O
@@ -1331,7 +1332,7 @@ xfs_end_io_direct_write(
	}

	/* XXX: probably should move into the real I/O completion handler */
	inode_dio_done(ioend->io_inode);
	inode_dio_done(inode);
}

STATIC ssize_t