From: Lukas Wunner <lukas@wunner.de>
To: Dan Williams <dan.j.williams@intel.com>
Cc: gregkh@linuxfoundation.org,
Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>,
Marc Herbert <marc.herbert@intel.com>,
"Rafael J. Wysocki" <rafael@kernel.org>,
linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org,
linux-coco@lists.linux.dev, alsa-devel@alsa-project.org
Subject: Re: [PATCH 1/3] sysfs: Fix crash on empty group attributes array
Date: Mon, 22 Apr 2024 11:20:15 +0200 [thread overview]
Message-ID: <ZiYrzzk9Me1aksmE@wunner.de> (raw)
In-Reply-To: <170863445442.1479840.1818801787239831650.stgit@dwillia2-xfh.jf.intel.com>
On Thu, Feb 22, 2024 at 12:40:54PM -0800, Dan Williams wrote:
> It turns out that arch/x86/events/intel/core.c makes use of "empty"
> attributes.
>
> static struct attribute *empty_attrs;
>
> __init int intel_pmu_init(void)
> {
> struct attribute **extra_skl_attr = &empty_attrs;
> struct attribute **extra_attr = &empty_attrs;
> struct attribute **td_attr = &empty_attrs;
> struct attribute **mem_attr = &empty_attrs;
> struct attribute **tsx_attr = &empty_attrs;
> ...
>
> That breaks the assumption __first_visible() that expects that if
> grp->attrs is set then grp->attrs[0] must also be set and results in
> backtraces like:
>
> BUG: kernel NULL pointer dereference, address: 00rnel mode
> #PF: error_code(0x0000) - not-present ] PREEMPT SMP NOPTI
> CPU: 1 PID: 1 Comm: swapper/IP: 0010:exra_is_visible+0x14/0x20
> ? exc_page_fault+0x68/0x190
> internal_create_groups+0x42/0xa0
> pmu_dev_alloc+0xc0/0xe0
> perf_event_sysfs_init+0x580000000000 ]---
> RIP: 0010:exra_is_visible+0x14/0
>
> Check for non-empty attributes array before calling is_visible().
[...]
> --- a/fs/sysfs/group.c
> +++ b/fs/sysfs/group.c
> @@ -33,10 +33,10 @@ static void remove_files(struct kernfs_node *parent,
>
> static umode_t __first_visible(const struct attribute_group *grp, struct kobject *kobj)
> {
> - if (grp->attrs && grp->is_visible)
> + if (grp->attrs && grp->attrs[0] && grp->is_visible)
> return grp->is_visible(kobj, grp->attrs[0], 0);
>
> - if (grp->bin_attrs && grp->is_bin_visible)
> + if (grp->bin_attrs && grp->bin_attrs[0] && grp->is_bin_visible)
> return grp->is_bin_visible(kobj, grp->bin_attrs[0], 0);
>
> return 0;
I'm wondering why 0 is returned by default and not SYSFS_GROUP_INVISIBLE.
An empty attribute list (containing just the NULL sentinel) will now
result in the attribute group being visible as an empty directory.
I thought the whole point was to hide such empty directories.
Was it a conscious decision to return 0?
Did you expect breakage if SYSFS_GROUP_INVISIBLE is returned?
Thanks,
Lukas
next prev parent reply other threads:[~2024-04-22 9:21 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-22 20:40 [PATCH 0/3] sysfs: Group visibility fixups Dan Williams
2024-02-22 20:40 ` [PATCH 1/3] sysfs: Fix crash on empty group attributes array Dan Williams
2024-02-22 21:14 ` Rafael J. Wysocki
2024-02-22 22:03 ` Dan Williams
2024-02-22 23:15 ` Dan Williams
2024-04-22 9:20 ` Lukas Wunner [this message]
2024-04-26 17:59 ` Dan Williams
2024-04-26 19:18 ` Lukas Wunner
2024-04-27 11:05 ` Greg KH
2024-04-27 16:49 ` Dan Williams
2024-04-27 21:14 ` Lukas Wunner
2024-04-27 21:33 ` Dan Williams
2024-04-27 22:39 ` Dan Williams
2024-04-27 23:09 ` Dan Williams
2024-04-28 10:08 ` Lukas Wunner
2024-04-29 17:47 ` Dan Williams
2024-02-22 20:41 ` [PATCH 2/3] sysfs: Document new "group visible" helpers Dan Williams
2024-02-22 20:41 ` [PATCH 3/3] sysfs: Introduce DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE() Dan Williams
2024-02-23 6:33 ` [PATCH 0/3] sysfs: Group visibility fixups Greg KH
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=ZiYrzzk9Me1aksmE@wunner.de \
--to=lukas@wunner.de \
--cc=alsa-devel@alsa-project.org \
--cc=dan.j.williams@intel.com \
--cc=gregkh@linuxfoundation.org \
--cc=linux-coco@lists.linux.dev \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=marc.herbert@intel.com \
--cc=pierre-louis.bossart@linux.intel.com \
--cc=rafael@kernel.org \
/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.