瀏覽代碼

aio: fix potential leak in aio_run_iocb().

iovec should be reclaimed whenever caller of rw_copy_check_uvector() returns,
but it doesn't hold when failure happens right after aio_setup_vectored_rw().

Fix that in a such way to avoid hairy goto.

Signed-off-by: Leon Yu <chianglungyu@gmail.com>
Signed-off-by: Benjamin LaHaise <bcrl@kvack.org>
Cc: stable@vger.kernel.org
Leon Yu 11 年之前
父節點
當前提交
754320d6e1
共有 1 個文件被更改,包括 2 次插入4 次删除
  1. 2 4
      fs/aio.c

+ 2 - 4
fs/aio.c

@@ -1327,10 +1327,8 @@ rw_common:
 						&iovec, compat)
 						&iovec, compat)
 			: aio_setup_single_vector(req, rw, buf, &nr_segs,
 			: aio_setup_single_vector(req, rw, buf, &nr_segs,
 						  iovec);
 						  iovec);
-		if (ret)
-			return ret;
-
-		ret = rw_verify_area(rw, file, &req->ki_pos, req->ki_nbytes);
+		if (!ret)
+			ret = rw_verify_area(rw, file, &req->ki_pos, req->ki_nbytes);
 		if (ret < 0) {
 		if (ret < 0) {
 			if (iovec != &inline_vec)
 			if (iovec != &inline_vec)
 				kfree(iovec);
 				kfree(iovec);