From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 0B7227F88 for ; Fri, 1 Feb 2013 04:51:00 -0600 (CST) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 91C15AC001 for ; Fri, 1 Feb 2013 02:50:59 -0800 (PST) Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by cuda.sgi.com with ESMTP id cYnw6QOafTQKYlnY for ; Fri, 01 Feb 2013 02:50:58 -0800 (PST) From: Greg Kroah-Hartman Subject: [ 12/33] xfs: Fix possible use-after-free with AIO Date: Fri, 1 Feb 2013 11:49:17 +0100 Message-Id: <20130201104725.531364005@linuxfoundation.org> In-Reply-To: <20130201104724.605715763@linuxfoundation.org> References: <20130201104724.605715763@linuxfoundation.org> List-Id: XFS Filesystem from SGI List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: xfs-bounces@oss.sgi.com Sender: xfs-bounces@oss.sgi.com To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , Ben Myers , Jan Kara , stable@vger.kernel.org, xfs@oss.sgi.com 3.4-stable review patch. If anyone has any objections, please let me know. ------------------ From: Jan Kara commit 4b05d09c18d9aa62d2e7fb4b057f54e5a38963f5 upstream. Running AIO is pinning inode in memory using file reference. Once AIO is completed using aio_complete(), file reference is put and inode can be freed from memory. So we have to be sure that calling aio_complete() is the last thing we do with the inode. Signed-off-by: Jan Kara CC: xfs@oss.sgi.com CC: Ben Myers Reviewed-by: Ben Myers Signed-off-by: Ben Myers Signed-off-by: Greg Kroah-Hartman --- fs/xfs/xfs_aops.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- a/fs/xfs/xfs_aops.c +++ b/fs/xfs/xfs_aops.c @@ -89,11 +89,11 @@ xfs_destroy_ioend( } if (ioend->io_iocb) { + inode_dio_done(ioend->io_inode); if (ioend->io_isasync) { aio_complete(ioend->io_iocb, ioend->io_error ? ioend->io_error : ioend->io_result, 0); } - inode_dio_done(ioend->io_inode); } mempool_free(ioend, xfs_ioend_pool); _______________________________________________ xfs mailing list xfs@oss.sgi.com http://oss.sgi.com/mailman/listinfo/xfs