From: Yin Li <yin.li@oss.qualcomm.com>
To: Ben Horgan <ben.horgan@arm.com>,
"Rafael J. Wysocki" <rafael@kernel.org>,
Shanker Donthineni <sdonthineni@nvidia.com>,
Conor Dooley <conor+dt@kernel.org>,
Fenghua Yu <fenghuay@nvidia.com>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Rob Herring <robh@kernel.org>,
Reinette Chatre <reinette.chatre@intel.com>,
Konrad Dybcio <konradybcio@kernel.org>,
James Morse <james.morse@arm.com>,
Bjorn Andersson <andersson@kernel.org>,
Danilo Krummrich <dakr@kernel.org>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
ilpo.jarvinen@linux.intel.com
Cc: linux-arm-msm@vger.kernel.org,
ganapatrao.kulkarni@oss.qualcomm.com,
trilok.soni@oss.qualcomm.com, devicetree@vger.kernel.org,
driver-core@lists.linux.dev,
Srivathsa L Rao <srivathsa.rao@oss.qualcomm.com>,
Huang Yiwei <huang.yiwei@oss.qualcomm.com>,
aiqun.yu@oss.qualcomm.com, linux-kernel@vger.kernel.org
Subject: Re: [PATCH RFC 09/15] arm_mpam: Fix MSC MMIO window size to use resource_size() instead of end - start
Date: Wed, 9 Sep 2026 17:25:07 +0800 [thread overview]
Message-ID: <db6d6420-c06e-46a1-95a9-b7a7084ebd75@oss.qualcomm.com> (raw)
In-Reply-To: <8e418149-bde1-46a8-bc82-6baeceb8b1a1@oss.qualcomm.com>
On 9/4/2026 11:05 AM, Yin Li wrote:
>
>
> On 9/3/2026 9:23 PM, Ben Horgan wrote:
>> Hi Yin,
>>
>> On 03/09/2026 11:20, Ben Horgan wrote:
>>> Hi Yin,
>>>
>>> On 11/08/2026 14:30, Yin Li wrote:
>>>> struct resource uses an inclusive end address, so the correct size is
>>>> end - start + 1. The previous calculation of end - start was off by
>>>> one,
>>>> resulting in a mapped window one byte smaller than the actual resource.
>>>> Use resource_size() which correctly computes end - start + 1.
>>>>
>>>> Signed-off-by: Yin Li <yin.li@oss.qualcomm.com>
>>>
>>> I just got a kernel ci report for this one which asks for tags:
>>>
>>> Reported-by: kernel test robot <lkp@intel.com>
>>> Closes: https://lore.kernel.org/oe-kbuild-all/202609030809.ObirDhR3-
>>> lkp@intel.com/
>>>
>>> It doesn't look to give a useful fixes tag though. I'd go with this
>>> as that's where the error was
>>> introduced.
>>>
>>> Fixes: f04046f2577a ("arm_mpam: Add probe/remove for mpam msc driver
>>> and kbuild boiler plate")
>>>
>>> Looks good to me.
>>>
>>> Reviewed-by: Ben Horgan <ben.horgan@arm.com>
>>
>> Scratch that. As Ilpo points out,[1], there is no functional bug but
>> just some misleading naming
>> which never the less would be good to fix. This does require > in the
>> warnings becoming >= though
>> and there would be no need for fixes tag. Do you agree with this
>> analysis?
>>
>> Thanks,
>>
>> Ben
>>
>> [1]
>> https://lore.kernel.org/
>> lkml/03055fbc-281f-4ed9-9282-4853d560e17f@arm.com/T/
>> #mdb57d40c888ff4ce656a9d9a00ecf5d99466530c
>>
>>
>
> Hi Ben,
>
> Thanks, and thanks to Ilpo for the detailed analysis.
>
> Agreed — the current code is functionally correct because the off-by-one
> in "end - start" is cancelled out by the ">" checks, since
> mapped_hwpage_sz effectively holds the last mapped byte rather than the
> size. So there's no functional bug and no Fixes tag is needed.
>
> I'll update the patch to switch to resource_size() and change the
> corresponding ">" checks to ">=" together, so the naming becomes
> accurate while keeping the behaviour unchanged. I'll also reword the
> commit message to describe this as a naming/readability cleanup rather
> than a bugfix.
>
>
Hi Ben,
I looked into this more closely, and I think the situation is a bit
different from previous analysis — could you and Ilpo double-check?
All three bounds checks have the access width included on the left-hand
side, e.g.:
WARN_ON_ONCE(reg + sizeof(u32) > msc->mapped_hwpage_sz);
Here "reg + sizeof(u32)" is the one-past-the-end offset of the write, so
a legal access needs "reg + 4 <= size", i.e. the out-of-bounds condition
is correctly "> size".
Take a 0x1000-sized window (valid offsets 0x000..0xFFF):
- With the old value, mapped_hwpage_sz = end - start = 0xFFF (size
- 1).
A write at reg = 0xFFC touches bytes 0xFFC..0xFFF — exactly the last
4 bytes, which is legal. But the check computes 0xFFC + 4 = 0x1000 >
0xFFF → true, so it falsely warns on a valid access. That's a real
off-by-one.
- With resource_size() = 0x1000 (true size), the same access gives
0x1000 > 0x1000 → false, so it correctly passes, while an access at
reg = 0xFFD (0x1001 > 0x1000 → true) is correctly rejected.
So resource_size() fixes a genuine off-by-one here, and the ">" checks
should stay as ">". Changing them to ">=" would break the reg = 0xFFC
case (0x1000 >= 0x1000 → true) and wrongly reject a legal access.
So for the next version I plan to keep the resource_size() change, keep
the ">" checks unchanged, and describe it as an off-by-one fix rather
than a naming cleanup. Does this match what you and Ilpo see?
Best regards,
Yin Li
>>>
>>> Thanks,
>>>
>>> Ben
>>>
>>>> ---
>>>> drivers/resctrl/mpam_devices.c | 2 +-
>>>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>>>
>>>> diff --git a/drivers/resctrl/mpam_devices.c b/drivers/resctrl/
>>>> mpam_devices.c
>>>> index 1e082fb60e30..5d1854d97371 100644
>>>> --- a/drivers/resctrl/mpam_devices.c
>>>> +++ b/drivers/resctrl/mpam_devices.c
>>>> @@ -2296,7 +2296,7 @@ static struct mpam_msc
>>>> *do_mpam_msc_drv_probe(struct platform_device *pdev)
>>>> dev_err_once(dev, "Failed to map MSC base address\n");
>>>> return ERR_CAST(io);
>>>> }
>>>> - msc->mapped_hwpage_sz = msc_res->end - msc_res->start;
>>>> + msc->mapped_hwpage_sz = resource_size(msc_res);
>>>> msc->mapped_hwpage = io;
>>>> } else {
>>>> return ERR_PTR(-EINVAL);
>>>>
>>>
>>
>
--
Thx and BRs,
Yin
next prev parent reply other threads:[~2026-09-09 9:25 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-11 13:30 [PATCH RFC 00/15] arm-mpam: Add basic device tree support for resctrl Yin Li
2026-08-11 13:30 ` [PATCH RFC 01/15] dt-bindings: arm: Add MPAM MSC binding Yin Li
2026-09-03 10:03 ` Ben Horgan
2026-08-11 13:30 ` [PATCH RFC 02/15] cacheinfo: Expose the code to generate a cache-id from a device_node Yin Li
2026-08-25 19:11 ` Drew Fustini
2026-08-31 5:43 ` Yin Li
2026-08-11 13:30 ` [PATCH RFC 03/15] arm_mpam: Add device tree support for MSC probing Yin Li
2026-08-11 13:30 ` [PATCH RFC 04/15] arm_mpam: Add support for memory controller MSC on DT platforms Yin Li
2026-08-11 13:30 ` [PATCH RFC 05/15] arm_mpam: Fix device_node refcount in DT resource parsing Yin Li
2026-09-02 13:29 ` Andre Przywara
2026-09-03 8:07 ` Yin Li
2026-08-11 13:30 ` [PATCH RFC 06/15] arm_mpam: Fix cache ID sentinel from ~0UL to U32_MAX to match u32 return type Yin Li
2026-09-02 13:49 ` Andre Przywara
2026-09-04 3:27 ` Yin Li
2026-08-11 13:30 ` [PATCH RFC 07/15] arm_mpam: Fix the RIS index range check in mpam_ris_create_locked Yin Li
2026-09-02 14:50 ` Andre Przywara
2026-09-03 8:18 ` Yin Li
2026-08-11 13:30 ` [PATCH RFC 08/15] arm_mpam: Fix ris_idx type to prevent range check bypass on truncation Yin Li
2026-09-02 16:22 ` Andre Przywara
2026-09-03 9:42 ` Yin Li
2026-09-03 13:27 ` Andre Przywara
2026-09-04 2:42 ` Yin Li
2026-08-11 13:30 ` [PATCH RFC 09/15] arm_mpam: Fix MSC MMIO window size to use resource_size() instead of end - start Yin Li
2026-09-02 13:16 ` Andre Przywara
2026-09-03 9:45 ` Yin Li
2026-09-03 10:20 ` Ben Horgan
2026-09-03 13:23 ` Ben Horgan
2026-09-04 3:12 ` Yin Li
[not found] ` <8e418149-bde1-46a8-bc82-6baeceb8b1a1@oss.qualcomm.com>
2026-09-09 9:25 ` Yin Li [this message]
2026-09-09 10:11 ` Ben Horgan
2026-09-09 10:28 ` Yin Li
2026-08-11 13:30 ` [PATCH RFC 10/15] arm_mpam: Fix update_msc_accessibility() return type to void Yin Li
2026-08-11 13:30 ` [PATCH RFC 11/15] arm_mpam: Fix mpam_dt_create_foundling_msc() to create MSC platform devices Yin Li
2026-08-11 13:30 ` [PATCH RFC 12/15] arm_mpam: Fix get_cpumask_from_cache() to clear mask on error Yin Li
2026-09-02 16:03 ` Andre Przywara
2026-09-03 9:59 ` Yin Li
2026-08-11 13:30 ` [PATCH RFC 13/15] dt-bindings: arm: Fix MPAM MSC binding schema and examples Yin Li
2026-08-11 13:30 ` [PATCH RFC 14/15] arm_mpam: Support MSC accessibility derivation from RIS nodes Yin Li
2026-08-11 13:30 ` [PATCH DNM RFC 15/15] arm64: dts: qcom: kaanapali: Add MPAM MSC nodes for the L2 caches Yin Li
2026-08-25 8:27 ` [PATCH RFC 00/15] arm-mpam: Add basic device tree support for resctrl Yin Li
2026-09-03 10:11 ` Ben Horgan
2026-09-04 2:52 ` Yin Li
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=db6d6420-c06e-46a1-95a9-b7a7084ebd75@oss.qualcomm.com \
--to=yin.li@oss.qualcomm.com \
--cc=aiqun.yu@oss.qualcomm.com \
--cc=andersson@kernel.org \
--cc=ben.horgan@arm.com \
--cc=conor+dt@kernel.org \
--cc=dakr@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=driver-core@lists.linux.dev \
--cc=fenghuay@nvidia.com \
--cc=ganapatrao.kulkarni@oss.qualcomm.com \
--cc=gregkh@linuxfoundation.org \
--cc=huang.yiwei@oss.qualcomm.com \
--cc=ilpo.jarvinen@linux.intel.com \
--cc=james.morse@arm.com \
--cc=konradybcio@kernel.org \
--cc=krzk+dt@kernel.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=rafael@kernel.org \
--cc=reinette.chatre@intel.com \
--cc=robh@kernel.org \
--cc=sdonthineni@nvidia.com \
--cc=srivathsa.rao@oss.qualcomm.com \
--cc=trilok.soni@oss.qualcomm.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.