Re: [PATCH 07/13] perf hwmon: Fix fd check to accept fd 0 in hwmon_pmu__describe_items()

From: Ian Rogers

Date: Mon Jun 15 2026 - 13:13:21 EST


On Fri, Jun 12, 2026 at 3:24 PM Arnaldo Carvalho de Melo
<acme@xxxxxxxxxx> wrote:
>
> From: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>
>
> hwmon_pmu__describe_items() checks 'if (fd > 0)' after openat(), which
> incorrectly rejects fd 0. While fd 0 is normally stdin, if stdin has
> been closed (common in daemon/service contexts), the kernel reuses fd 0
> for the next open. With fd > 0, the sysfs file is not read and the fd
> is leaked.
>
> Change to 'if (fd >= 0)' to match the standard openat() error check.
>
> Reported-by: sashiko-bot <sashiko-bot@xxxxxxxxxx>
> Fixes: 53cc0b351ec99278 ("perf hwmon_pmu: Add a tool PMU exposing events from hwmon in sysfs")
> Cc: Ian Rogers <irogers@xxxxxxxxxx>
> Assisted-by: Claude Opus 4.6 <noreply@xxxxxxxxxxxxx>
> Signed-off-by: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>

Reviewed-by: Ian Rogers <irogers@xxxxxxxxxx>

Thanks,
Ian

> ---
> tools/perf/util/hwmon_pmu.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/tools/perf/util/hwmon_pmu.c b/tools/perf/util/hwmon_pmu.c
> index efd3067a2e591050..ed544dca70c380b2 100644
> --- a/tools/perf/util/hwmon_pmu.c
> +++ b/tools/perf/util/hwmon_pmu.c
> @@ -435,7 +435,7 @@ static size_t hwmon_pmu__describe_items(struct hwmon_pmu *hwm, char *out_buf, si
> hwmon_item_strs[bit],
> is_alarm ? "_alarm" : "");
> fd = openat(dir, buf, O_RDONLY);
> - if (fd > 0) {
> + if (fd >= 0) {
> ssize_t read_len = read(fd, buf, sizeof(buf) - 1);
>
> while (read_len > 0 && buf[read_len - 1] == '\n')
> --
> 2.54.0
>