From: kernel test robot <lkp@intel.com>
To: Fengnan Chang <fengnanchang@gmail.com>
Cc: oe-kbuild-all@lists.linux.dev, linux-kernel@vger.kernel.org,
Jens Axboe <axboe@kernel.dk>, Yu Kuai <yukuai3@huawei.com>
Subject: block/blk-mq.c:733:36: sparse: sparse: dereference of noderef expression
Date: Thu, 14 May 2026 11:33:32 +0800 [thread overview]
Message-ID: <202605141138.hMZzR7pQ-lkp@intel.com> (raw)
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: e1914add2799225a87502051415fc5c32aeb02ae
commit: 89e1fb7ceffd898505ad7fa57acec0585bfaa2cc blk-mq: fix potential uaf for 'queue_hw_ctx'
date: 6 months ago
config: m68k-randconfig-r122-20260514 (https://download.01.org/0day-ci/archive/20260514/202605141138.hMZzR7pQ-lkp@intel.com/config)
compiler: m68k-linux-gcc (GCC) 8.5.0
sparse: v0.6.5-rc1
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260514/202605141138.hMZzR7pQ-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Fixes: 89e1fb7ceffd ("blk-mq: fix potential uaf for 'queue_hw_ctx'")
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202605141138.hMZzR7pQ-lkp@intel.com/
sparse warnings: (new ones prefixed by >>)
block/blk-mq.c:4380:16: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const *objp @@ got struct blk_mq_hw_ctx *[noderef] __rcu *queue_hw_ctx @@
block/blk-mq.c:4380:16: sparse: expected void const *objp
block/blk-mq.c:4380:16: sparse: got struct blk_mq_hw_ctx *[noderef] __rcu *queue_hw_ctx
block/blk-mq.c:4525:41: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct blk_mq_hw_ctx **hctxs @@ got struct blk_mq_hw_ctx *[noderef] __rcu *queue_hw_ctx @@
block/blk-mq.c:4525:41: sparse: expected struct blk_mq_hw_ctx **hctxs
block/blk-mq.c:4525:41: sparse: got struct blk_mq_hw_ctx *[noderef] __rcu *queue_hw_ctx
>> block/blk-mq.c:733:36: sparse: sparse: dereference of noderef expression
block/blk-mq.c:2326:9: sparse: sparse: context imbalance in 'blk_mq_run_hw_queue' - unexpected unlock
block/blk-mq.c:2551:9: sparse: sparse: context imbalance in 'blk_mq_run_work_fn' - unexpected unlock
block/blk-mq.c:2587:17: sparse: sparse: context imbalance in 'blk_mq_insert_requests' - unexpected unlock
block/blk-mq.c:2892:17: sparse: sparse: context imbalance in 'blk_mq_dispatch_queue_requests' - unexpected unlock
block/blk-mq.c:3242:17: sparse: sparse: context imbalance in 'blk_mq_submit_bio' - unexpected unlock
block/blk-mq.c:3677:53: sparse: sparse: context imbalance in 'blk_mq_hctx_has_requests' - unexpected unlock
block/blk-mq.c: note: in included file:
block/blk-mq.h:87:31: sparse: sparse: dereference of noderef expression
block/blk-mq.h:87:31: sparse: sparse: dereference of noderef expression
block/blk-mq.h:87:31: sparse: sparse: dereference of noderef expression
block/blk-mq.h:87:31: sparse: sparse: dereference of noderef expression
block/blk-mq.h:87:31: sparse: sparse: dereference of noderef expression
block/blk-mq.h:87:31: sparse: sparse: dereference of noderef expression
block/blk-mq.c:5211:48: sparse: sparse: dereference of noderef expression
vim +733 block/blk-mq.c
320ae51feed5c2f Jens Axboe 2013-10-24 686
cd6ce1482fd9e69 Bart Van Assche 2017-06-20 687 struct request *blk_mq_alloc_request_hctx(struct request_queue *q,
16458cf3bd15e56 Bart Van Assche 2022-07-14 688 blk_opf_t opf, blk_mq_req_flags_t flags, unsigned int hctx_idx)
1f5bd336b915056 Ming Lin 2016-06-13 689 {
e6e7abffe386b61 Christoph Hellwig 2020-05-29 690 struct blk_mq_alloc_data data = {
e6e7abffe386b61 Christoph Hellwig 2020-05-29 691 .q = q,
e6e7abffe386b61 Christoph Hellwig 2020-05-29 692 .flags = flags,
9b79f86e06283ba Jens Axboe 2025-04-15 693 .shallow_depth = 0,
16458cf3bd15e56 Bart Van Assche 2022-07-14 694 .cmd_flags = opf,
9b79f86e06283ba Jens Axboe 2025-04-15 695 .rq_flags = 0,
47c122e35d7e43b Jens Axboe 2021-10-06 696 .nr_tags = 1,
9b79f86e06283ba Jens Axboe 2025-04-15 697 .cached_rqs = NULL,
9b79f86e06283ba Jens Axboe 2025-04-15 698 .ctx = NULL,
9b79f86e06283ba Jens Axboe 2025-04-15 699 .hctx = NULL
e6e7abffe386b61 Christoph Hellwig 2020-05-29 700 };
600c3b0cea784aa Christoph Hellwig 2020-05-29 701 u64 alloc_time_ns = 0;
e3c5a78cdb6237b John Garry 2022-10-26 702 struct request *rq;
6d2809d51a5079f Omar Sandoval 2017-02-27 703 unsigned int cpu;
600c3b0cea784aa Christoph Hellwig 2020-05-29 704 unsigned int tag;
1f5bd336b915056 Ming Lin 2016-06-13 705 int ret;
1f5bd336b915056 Ming Lin 2016-06-13 706
600c3b0cea784aa Christoph Hellwig 2020-05-29 707 /* alloc_time includes depth and tag waits */
600c3b0cea784aa Christoph Hellwig 2020-05-29 708 if (blk_queue_rq_alloc_time(q))
08420cf70cfb32e Jens Axboe 2024-01-15 709 alloc_time_ns = blk_time_get_ns();
600c3b0cea784aa Christoph Hellwig 2020-05-29 710
1f5bd336b915056 Ming Lin 2016-06-13 711 /*
1f5bd336b915056 Ming Lin 2016-06-13 712 * If the tag allocator sleeps we could get an allocation for a
1f5bd336b915056 Ming Lin 2016-06-13 713 * different hardware context. No need to complicate the low level
1f5bd336b915056 Ming Lin 2016-06-13 714 * allocator for this for the rare use case of a command tied to
1f5bd336b915056 Ming Lin 2016-06-13 715 * a specific queue.
1f5bd336b915056 Ming Lin 2016-06-13 716 */
6ee858a3d3270a6 Kemeng Shi 2023-01-18 717 if (WARN_ON_ONCE(!(flags & BLK_MQ_REQ_NOWAIT)) ||
6ee858a3d3270a6 Kemeng Shi 2023-01-18 718 WARN_ON_ONCE(!(flags & BLK_MQ_REQ_RESERVED)))
1f5bd336b915056 Ming Lin 2016-06-13 719 return ERR_PTR(-EINVAL);
1f5bd336b915056 Ming Lin 2016-06-13 720
1f5bd336b915056 Ming Lin 2016-06-13 721 if (hctx_idx >= q->nr_hw_queues)
1f5bd336b915056 Ming Lin 2016-06-13 722 return ERR_PTR(-EIO);
1f5bd336b915056 Ming Lin 2016-06-13 723
3a0a529971ec4e2 Bart Van Assche 2017-11-09 724 ret = blk_queue_enter(q, flags);
1f5bd336b915056 Ming Lin 2016-06-13 725 if (ret)
1f5bd336b915056 Ming Lin 2016-06-13 726 return ERR_PTR(ret);
1f5bd336b915056 Ming Lin 2016-06-13 727
c8712c6a674e338 Christoph Hellwig 2016-09-23 728 /*
c8712c6a674e338 Christoph Hellwig 2016-09-23 729 * Check if the hardware context is actually mapped to anything.
c8712c6a674e338 Christoph Hellwig 2016-09-23 730 * If not tell the caller that it should skip this queue.
c8712c6a674e338 Christoph Hellwig 2016-09-23 731 */
a5ea5811058ddb9 Christoph Hellwig 2020-05-16 732 ret = -EXDEV;
d0c98769ee7d5db Fengnan Chang 2025-11-28 @733 data.hctx = q->queue_hw_ctx[hctx_idx];
e6e7abffe386b61 Christoph Hellwig 2020-05-29 734 if (!blk_mq_hw_queue_mapped(data.hctx))
a5ea5811058ddb9 Christoph Hellwig 2020-05-16 735 goto out_queue_exit;
e6e7abffe386b61 Christoph Hellwig 2020-05-29 736 cpu = cpumask_first_and(data.hctx->cpumask, cpu_online_mask);
14dc7a18abbe417 Bart Van Assche 2022-06-15 737 if (cpu >= nr_cpu_ids)
14dc7a18abbe417 Bart Van Assche 2022-06-15 738 goto out_queue_exit;
e6e7abffe386b61 Christoph Hellwig 2020-05-29 739 data.ctx = __blk_mq_get_ctx(q, cpu);
1f5bd336b915056 Ming Lin 2016-06-13 740
dd6216bb16e83e3 Christoph Hellwig 2023-05-18 741 if (q->elevator)
dd6216bb16e83e3 Christoph Hellwig 2023-05-18 742 data.rq_flags |= RQF_SCHED_TAGS;
781dd830ec4f4d5 Jens Axboe 2021-11-02 743 else
dd6216bb16e83e3 Christoph Hellwig 2023-05-18 744 blk_mq_tag_busy(data.hctx);
600c3b0cea784aa Christoph Hellwig 2020-05-29 745
99e48cd6855e953 John Garry 2022-07-06 746 if (flags & BLK_MQ_REQ_RESERVED)
99e48cd6855e953 John Garry 2022-07-06 747 data.rq_flags |= RQF_RESV;
99e48cd6855e953 John Garry 2022-07-06 748
a5ea5811058ddb9 Christoph Hellwig 2020-05-16 749 ret = -EWOULDBLOCK;
600c3b0cea784aa Christoph Hellwig 2020-05-29 750 tag = blk_mq_get_tag(&data);
600c3b0cea784aa Christoph Hellwig 2020-05-29 751 if (tag == BLK_MQ_NO_TAG)
a5ea5811058ddb9 Christoph Hellwig 2020-05-16 752 goto out_queue_exit;
b8643d682669994 Chengming Zhou 2023-09-13 753 if (!(data.rq_flags & RQF_SCHED_TAGS))
b8643d682669994 Chengming Zhou 2023-09-13 754 blk_mq_inc_active_requests(data.hctx);
5c17f45e91f5035 Chengming Zhou 2023-07-10 755 rq = blk_mq_rq_ctx_init(&data, blk_mq_tags_from_data(&data), tag);
5c17f45e91f5035 Chengming Zhou 2023-07-10 756 blk_mq_rq_time_init(rq, alloc_time_ns);
e3c5a78cdb6237b John Garry 2022-10-26 757 rq->__data_len = 0;
2f6b2565d43cdb5 Keith Busch 2025-10-14 758 rq->phys_gap_bit = 0;
e3c5a78cdb6237b John Garry 2022-10-26 759 rq->__sector = (sector_t) -1;
e3c5a78cdb6237b John Garry 2022-10-26 760 rq->bio = rq->biotail = NULL;
e3c5a78cdb6237b John Garry 2022-10-26 761 return rq;
600c3b0cea784aa Christoph Hellwig 2020-05-29 762
a5ea5811058ddb9 Christoph Hellwig 2020-05-16 763 out_queue_exit:
a5ea5811058ddb9 Christoph Hellwig 2020-05-16 764 blk_queue_exit(q);
a5ea5811058ddb9 Christoph Hellwig 2020-05-16 765 return ERR_PTR(ret);
1f5bd336b915056 Ming Lin 2016-06-13 766 }
1f5bd336b915056 Ming Lin 2016-06-13 767 EXPORT_SYMBOL_GPL(blk_mq_alloc_request_hctx);
1f5bd336b915056 Ming Lin 2016-06-13 768
:::::: The code at line 733 was first introduced by commit
:::::: d0c98769ee7d5db8d699a270690639cde1766cd4 blk-mq: use array manage hctx map instead of xarray
:::::: TO: Fengnan Chang <fengnanchang@gmail.com>
:::::: CC: Jens Axboe <axboe@kernel.dk>
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
reply other threads:[~2026-05-14 3:34 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=202605141138.hMZzR7pQ-lkp@intel.com \
--to=lkp@intel.com \
--cc=axboe@kernel.dk \
--cc=fengnanchang@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=oe-kbuild-all@lists.linux.dev \
--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