bcachefs: Fix a memory leak in dio write path
authorKent Overstreet <kent.overstreet@gmail.com>
Mon, 14 Jun 2021 18:47:26 +0000 (14:47 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:06 +0000 (17:09 -0400)
Commit c42bca92be928ce7dece5fc04cf68d0e37ee6718 "bio: don't copy bvec
for direct IO" changed bio_iov_iter_get_pages() to point bio->bi_iovec
at the incoming biovec, meaning if we already allocated one, it'll be
leaked.

Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
fs/bcachefs/fs-io.c

index 132ff0497b3992ef3de9712a10296289198f39d9..e39e22581e4b443376aa92c6c3443a56a7089a59 100644 (file)
@@ -2025,7 +2025,9 @@ ssize_t bch2_direct_write(struct kiocb *req, struct iov_iter *iter)
        }
 
        bio = bio_alloc_bioset(NULL,
-                              iov_iter_npages(iter, BIO_MAX_VECS),
+                              iov_iter_is_bvec(iter)
+                              ? 0
+                              : iov_iter_npages(iter, BIO_MAX_VECS),
                               REQ_OP_WRITE,
                               GFP_KERNEL,
                               &c->dio_write_bioset);