Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1500486 > unrolled thread

[PATCH v2] perf: xgene: Remove bogus IS_ERR() check

Started byTai Nguyen <ttnguyen@apm.com>
First post2016-10-13 20:20 +0200
Last post2016-10-14 02:50 +0200
Articles 3 — 3 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH v2] perf: xgene: Remove bogus IS_ERR() check Tai Nguyen <ttnguyen@apm.com> - 2016-10-13 20:20 +0200
    Re: [PATCH v2] perf: xgene: Remove bogus IS_ERR() check Al Viro <viro@ZenIV.linux.org.uk> - 2016-10-13 20:20 +0200
      Re: [PATCH v2] perf: xgene: Remove bogus IS_ERR() check Mark Rutland <mark.rutland@arm.com> - 2016-10-14 02:50 +0200

#1500486 — [PATCH v2] perf: xgene: Remove bogus IS_ERR() check

FromTai Nguyen <ttnguyen@apm.com>
Date2016-10-13 20:20 +0200
Subject[PATCH v2] perf: xgene: Remove bogus IS_ERR() check
Message-ID<srSLL-78p-5@gated-at.bofh.it>
In acpi_get_pmu_hw_inf we pass the address of a local variable to IS_ERR(),
which doesn't make sense, as the pointer must be a real, valid pointer.
This doesn't cause a functional problem, as IS_ERR() will evaluate as
false, but the check is bogus and causes static checkers to complain.

Remove the bogus check.

The bug is reported by Dan Carpenter <dan.carpenter@oracle.com> in [1]

[1] https://www.spinics.net/lists/arm-kernel/msg535957.html

Signed-off-by: Tai Nguyen <ttnguyen@apm.com>
Acked-by: Mark Rutland <mark.rutland@arm.com>
---
v2:
 Add more problem description in the commit message
 Add Acked-by: Mark Rutland <mark.rutland@arm.com>

 drivers/perf/xgene_pmu.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/perf/xgene_pmu.c b/drivers/perf/xgene_pmu.c
index c2ac764..a8ac4bc 100644
--- a/drivers/perf/xgene_pmu.c
+++ b/drivers/perf/xgene_pmu.c
@@ -1011,7 +1011,7 @@ xgene_pmu_dev_ctx *acpi_get_pmu_hw_inf(struct xgene_pmu *xgene_pmu,
 	rc = acpi_dev_get_resources(adev, &resource_list,
 				    acpi_pmu_dev_add_resource, &res);
 	acpi_dev_free_resource_list(&resource_list);
-	if (rc < 0 || IS_ERR(&res)) {
+	if (rc < 0) {
 		dev_err(dev, "PMU type %d: No resource address found\n", type);
 		goto err;
 	}
-- 
1.9.1

[toc] | [next] | [standalone]


#1500487

FromAl Viro <viro@ZenIV.linux.org.uk>
Date2016-10-13 20:20 +0200
Message-ID<srSLL-78p-7@gated-at.bofh.it>
In reply to#1500486
On Thu, Oct 13, 2016 at 11:09:16AM -0700, Tai Nguyen wrote:
> In acpi_get_pmu_hw_inf we pass the address of a local variable to IS_ERR(),
> which doesn't make sense, as the pointer must be a real, valid pointer.
> This doesn't cause a functional problem, as IS_ERR() will evaluate as
> false, but the check is bogus and causes static checkers to complain.

... unless the test is actually a misspelled IS_ERR(res) and the current
code is broken by effectively skipping it.

[toc] | [prev] | [next] | [standalone]


#1500649

FromMark Rutland <mark.rutland@arm.com>
Date2016-10-14 02:50 +0200
Message-ID<srYRb-2nn-5@gated-at.bofh.it>
In reply to#1500487
On Thu, Oct 13, 2016 at 07:18:37PM +0100, Al Viro wrote:
> On Thu, Oct 13, 2016 at 11:09:16AM -0700, Tai Nguyen wrote:
> > In acpi_get_pmu_hw_inf we pass the address of a local variable to IS_ERR(),
> > which doesn't make sense, as the pointer must be a real, valid pointer.
> > This doesn't cause a functional problem, as IS_ERR() will evaluate as
> > false, but the check is bogus and causes static checkers to complain.
> 
> ... unless the test is actually a misspelled IS_ERR(res) and the current
> code is broken by effectively skipping it.

Sure.

In this case, res is a struct resource, so IS_ERR(res) is also bogus.

None of the pointer fields in struct resource are ever set to an ERR_PTR value,
so nothing in res is worth checking. Nothing else in the function prior to this
would be an ERR_PTR value either.

I believe this case was copy-paste and a thinko. There's some other error
handling in the file that does validly have to handle an ERR_PTR value.

Thanks,
Mark.

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web