public inbox for linux-block@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] block: fix NULL pointer dereferenced within __blk_rq_map_sg
@ 2025-02-14  8:46 Ming Lei
  2025-02-14 14:10 ` Christoph Hellwig
  0 siblings, 1 reply; 3+ messages in thread
From: Ming Lei @ 2025-02-14  8:46 UTC (permalink / raw)
  To: Jens Axboe, linux-block; +Cc: Ming Lei, Christoph Hellwig, Cheyenne Wills

Discard request may use special payload only and doesn't have bio
attached, so the request iterator has to be initialized from valid
req->bio, otherwise NULL pointer dereferenced is triggered.

Cc: Christoph Hellwig <hch@lst.de>
Reported-and-tested-by: Cheyenne Wills <cheyenne.wills@gmail.com>
Fixes: b7175e24d6ac ("block: add a dma mapping iterator")
Signed-off-by: Ming Lei <ming.lei@redhat.com>
---
 block/blk-merge.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/block/blk-merge.c b/block/blk-merge.c
index b55c52a42303..48a96aed15b6 100644
--- a/block/blk-merge.c
+++ b/block/blk-merge.c
@@ -556,11 +556,14 @@ int __blk_rq_map_sg(struct request_queue *q, struct request *rq,
 {
 	struct req_iterator iter = {
 		.bio	= rq->bio,
-		.iter	= rq->bio->bi_iter,
 	};
 	struct phys_vec vec;
 	int nsegs = 0;
 
+	/* discard request may not have bio attached */
+	if (iter.bio)
+		iter.iter = iter.bio->bi_iter;
+
 	while (blk_map_iter_next(rq, &iter, &vec)) {
 		*last_sg = blk_next_sg(last_sg, sglist);
 		sg_set_page(*last_sg, phys_to_page(vec.paddr), vec.len,
-- 
2.47.1


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] block: fix NULL pointer dereferenced within __blk_rq_map_sg
  2025-02-14  8:46 [PATCH] block: fix NULL pointer dereferenced within __blk_rq_map_sg Ming Lei
@ 2025-02-14 14:10 ` Christoph Hellwig
  2025-02-17  3:11   ` Ming Lei
  0 siblings, 1 reply; 3+ messages in thread
From: Christoph Hellwig @ 2025-02-14 14:10 UTC (permalink / raw)
  To: Ming Lei; +Cc: Jens Axboe, linux-block, Christoph Hellwig, Cheyenne Wills

On Fri, Feb 14, 2025 at 04:46:38PM +0800, Ming Lei wrote:
> Discard request may use special payload only and doesn't have bio
> attached, so the request iterator has to be initialized from valid
> req->bio, otherwise NULL pointer dereferenced is triggered.

So while the code changes here look good to me, the commit message is
wrong.  discard requests always have at least one bio attached, so we're
not going to hit this condition.  Discard requests also aren't even
handled by the function in Cheyenne's report.  I'm pretty sure this is
a flush request, as these are the only non-passthrough requests without
a bio.

> +	/* discard request may not have bio attached */
> +	if (iter.bio)
> +		iter.iter = iter.bio->bi_iter;

Same for the comment.


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] block: fix NULL pointer dereferenced within __blk_rq_map_sg
  2025-02-14 14:10 ` Christoph Hellwig
@ 2025-02-17  3:11   ` Ming Lei
  0 siblings, 0 replies; 3+ messages in thread
From: Ming Lei @ 2025-02-17  3:11 UTC (permalink / raw)
  To: Christoph Hellwig; +Cc: Jens Axboe, linux-block, Cheyenne Wills

On Fri, Feb 14, 2025 at 03:10:10PM +0100, Christoph Hellwig wrote:
> On Fri, Feb 14, 2025 at 04:46:38PM +0800, Ming Lei wrote:
> > Discard request may use special payload only and doesn't have bio
> > attached, so the request iterator has to be initialized from valid
> > req->bio, otherwise NULL pointer dereferenced is triggered.
> 
> So while the code changes here look good to me, the commit message is
> wrong.  discard requests always have at least one bio attached, so we're
> not going to hit this condition.  Discard requests also aren't even
> handled by the function in Cheyenne's report.  I'm pretty sure this is
> a flush request, as these are the only non-passthrough requests without
> a bio.
> 
> > +	/* discard request may not have bio attached */
> > +	if (iter.bio)
> > +		iter.iter = iter.bio->bi_iter;
> 
> Same for the comment.
 
You are right, it should be the flush internal request, even though
mapping discard request may not need bio, I will fix the commit log and
comment.


Thanks,
Ming


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2025-02-17  3:11 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-02-14  8:46 [PATCH] block: fix NULL pointer dereferenced within __blk_rq_map_sg Ming Lei
2025-02-14 14:10 ` Christoph Hellwig
2025-02-17  3:11   ` Ming Lei

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox