linux-raid.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Nigel Croxon <ncroxon@redhat.com>
To: yukuai1@huaweicloud.com, yukuai3@huawei.com,
	Song Liu <song@kernel.org>,
	linux-raid@vger.kernel.org
Subject: [PATCH v4] raid10: cleanup memleak at raid10_make_request
Date: Thu, 3 Jul 2025 11:23:04 -0400	[thread overview]
Message-ID: <c0787379-9caa-42f3-b5fc-369aed784400@redhat.com> (raw)

If raid10_read_request or raid10_write_request registers a new
request and the REQ_NOWAIT flag is set, the code does not
free the malloc from the mempool.

unreferenced object 0xffff8884802c3200 (size 192):
   comm "fio", pid 9197, jiffies 4298078271
   hex dump (first 32 bytes):
     00 00 00 00 00 00 00 00 88 41 02 00 00 00 00 00  .........A......
     08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
   backtrace (crc c1a049a2):
     __kmalloc+0x2bb/0x450
     mempool_alloc+0x11b/0x320
     raid10_make_request+0x19e/0x650 [raid10]
     md_handle_request+0x3b3/0x9e0
     __submit_bio+0x394/0x560
     __submit_bio_noacct+0x145/0x530
     submit_bio_noacct_nocheck+0x682/0x830
     __blkdev_direct_IO_async+0x4dc/0x6b0
     blkdev_read_iter+0x1e5/0x3b0
     __io_read+0x230/0x1110
     io_read+0x13/0x30
     io_issue_sqe+0x134/0x1180
     io_submit_sqes+0x48c/0xe90
     __do_sys_io_uring_enter+0x574/0x8b0
     do_syscall_64+0x5c/0xe0
     entry_SYSCALL_64_after_hwframe+0x76/0x7e

V4: changing backing tree to see if CKI tests will pass.
The patch code has not changed between any versions.

Signed-off-by: Nigel Croxon <ncroxon@redhat.com>
---
  drivers/md/raid10.c | 8 ++++++--
  1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
index 862b1fb71d86..4945e9e9a4a7 100644
--- a/drivers/md/raid10.c
+++ b/drivers/md/raid10.c
@@ -1186,8 +1186,10 @@ static void raid10_read_request(struct mddev 
*mddev, struct bio *bio,
  		}
  	}

-	if (!regular_request_wait(mddev, conf, bio, r10_bio->sectors))
+	if (!regular_request_wait(mddev, conf, bio, r10_bio->sectors)) {
+		raid_end_bio_io(r10_bio);
  		return;
+	}
  	rdev = read_balance(conf, r10_bio, &max_sectors);
  	if (!rdev) {
  		if (err_rdev) {
@@ -1373,8 +1375,10 @@ static void raid10_write_request(struct mddev 
*mddev, struct bio *bio,
  	}

  	sectors = r10_bio->sectors;
-	if (!regular_request_wait(mddev, conf, bio, sectors))
+	if (!regular_request_wait(mddev, conf, bio, sectors)) {
+		raid_end_bio_io(r10_bio);
  		return;
+	}
  	if (test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery) &&
  	    (mddev->reshape_backwards
  	     ? (bio->bi_iter.bi_sector < conf->reshape_safe &&
-- 
2.43.5


                 reply	other threads:[~2025-07-03 15:23 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=c0787379-9caa-42f3-b5fc-369aed784400@redhat.com \
    --to=ncroxon@redhat.com \
    --cc=linux-raid@vger.kernel.org \
    --cc=song@kernel.org \
    --cc=yukuai1@huaweicloud.com \
    --cc=yukuai3@huawei.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).