From: Tomasz Nowicki <tn@semihalf.com>
To: Hanjun Guo <guohanjun@huawei.com>,
Robin Murphy <robin.murphy@arm.com>,
Dan Carpenter <dan.carpenter@oracle.com>
Cc: linux-acpi@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
Lorenzo Pieralisi <Lorenzo.Pieralisi@arm.com>
Subject: Re: [bug report] ACPI: Add new IORT functions to support MSI domain handling
Date: Fri, 14 Jun 2019 12:09:17 +0200 [thread overview]
Message-ID: <40cc7b22-d5e6-ffcf-d6ec-a74f3fbe906c@semihalf.com> (raw)
In-Reply-To: <5f9fecb1-66de-b550-3f8e-097795a08efe@huawei.com>
On 14.06.2019 03:03, Hanjun Guo wrote:
> On 2019/6/13 17:30, Robin Murphy wrote:
>> On 13/06/2019 07:54, Dan Carpenter wrote:
>>> Hello Tomasz Nowicki,
>>>
>>> The patch 4bf2efd26d76: "ACPI: Add new IORT functions to support MSI
>>> domain handling" from Sep 12, 2016, leads to the following static
>>> checker warning:
>>>
>>> drivers/acpi/arm64/iort.c:628 iort_dev_find_its_id()
>>> warn: array off by one? 'its->identifiers[idx]'
>>>
>>> drivers/acpi/arm64/iort.c
>>> 589 /**
>>> 590 * iort_dev_find_its_id() - Find the ITS identifier for a device
>>> 591 * @dev: The device.
>>> 592 * @req_id: Device's requester ID
>>> 593 * @idx: Index of the ITS identifier list.
>>> 594 * @its_id: ITS identifier.
>>> 595 *
>>> 596 * Returns: 0 on success, appropriate error value otherwise
>>> 597 */
>>> 598 static int iort_dev_find_its_id(struct device *dev, u32 req_id,
>>> 599 unsigned int idx, int *its_id)
>>> 600 {
>>> 601 struct acpi_iort_its_group *its;
>>> 602 struct acpi_iort_node *node;
>>> 603
>>> 604 node = iort_find_dev_node(dev);
>>> 605 if (!node)
>>> 606 return -ENXIO;
>>> 607
>>> 608 node = iort_node_map_id(node, req_id, NULL, IORT_MSI_TYPE);
>>> 609 if (!node)
>>> 610 return -ENXIO;
>>> 611
>>> 612 /* Move to ITS specific data */
>>> 613 its = (struct acpi_iort_its_group *)node->node_data;
>>> 614 if (idx > its->its_count) {
>>> ^^^^^^^^^^^^^^^^^^^^
>>> I wasn't able to find any information about how its->its_count is set
>>> but it looks to me that is off by one.
>>
>> its->count is read directly from the firmware table. Currently it seems this condition can never be hit anyway, since this is only ever called with idx == 0. TBH I can't really see how the code could evolve such that this check should ever be necessary (i.e. it makes no sense for callers to pull idx values out if thin air, so they'd presumably end up being derived from its->count in the first place), but if we are going to have it then I agree it should be ">=".
>
> For now seems we only got systems which map a device to a single
> ITS, but in the IORT spec, it assumes that maybe there is a ITS group
> for mapping, so I think we can just use ">=" as you suggested to
> align with the spec.
>
Yes, should be ">=" and the error massage should be fixed as well:
/* Move to ITS specific data */
its = (struct acpi_iort_its_group *)node->node_data;
if (idx >= its->its_count) {
dev_err(dev, "requested ITS ID index [%d] exceeds max permitted
[%d] index\n",
idx, its->its_count - 1);
return -ENXIO;
}
Thanks,
Tomasz
next prev parent reply other threads:[~2019-06-14 10:09 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-06-13 6:54 [bug report] ACPI: Add new IORT functions to support MSI domain handling Dan Carpenter
2019-06-13 9:30 ` Robin Murphy
2019-06-14 1:03 ` Hanjun Guo
2019-06-14 10:09 ` Tomasz Nowicki [this message]
2019-06-14 14:28 ` Lorenzo Pieralisi
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=40cc7b22-d5e6-ffcf-d6ec-a74f3fbe906c@semihalf.com \
--to=tn@semihalf.com \
--cc=Lorenzo.Pieralisi@arm.com \
--cc=dan.carpenter@oracle.com \
--cc=guohanjun@huawei.com \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=robin.murphy@arm.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).