diff mbox series

efivarfs: Replace invalid slashes with exclamation marks in dentries.

Message ID 20200918112459.918328-1-misch@google.com
State Accepted
Commit 336af6a4686d885a067ecea8c3c3dd129ba4fc75
Headers show
Series efivarfs: Replace invalid slashes with exclamation marks in dentries. | expand

Commit Message

Michael Schaller Sept. 18, 2020, 11:24 a.m. UTC
Without this patch efivarfs_alloc_dentry creates dentries with slashes in
their name if the respective EFI variable has slashes in its name. This in
turn causes EIO on getdents64, which prevents a complete directory listing
of /sys/firmware/efi/efivars/.

This patch replaces the invalid shlashes with exclamation marks like
kobject_set_name_vargs does for /sys/firmware/efi/vars/ to have consistently
named dentries under /sys/firmware/efi/vars/ and /sys/firmware/efi/efivars/.
---
 fs/efivarfs/super.c | 3 +++
 1 file changed, 3 insertions(+)

Comments

Ard Biesheuvel Sept. 25, 2020, 7:04 a.m. UTC | #1
On Fri, 18 Sep 2020 at 13:25, Michael Schaller <misch@google.com> wrote:
>

> Without this patch efivarfs_alloc_dentry creates dentries with slashes in

> their name if the respective EFI variable has slashes in its name. This in

> turn causes EIO on getdents64, which prevents a complete directory listing

> of /sys/firmware/efi/efivars/.

>

> This patch replaces the invalid shlashes with exclamation marks like

> kobject_set_name_vargs does for /sys/firmware/efi/vars/ to have consistently

> named dentries under /sys/firmware/efi/vars/ and /sys/firmware/efi/efivars/.


Thanks Michael

Can you resend this with a signed-off-by line please?

> ---

>  fs/efivarfs/super.c | 3 +++

>  1 file changed, 3 insertions(+)

>

> diff --git a/fs/efivarfs/super.c b/fs/efivarfs/super.c

> index 28bb5689333a..15880a68faad 100644

> --- a/fs/efivarfs/super.c

> +++ b/fs/efivarfs/super.c

> @@ -141,6 +141,9 @@ static int efivarfs_callback(efi_char16_t *name16, efi_guid_t vendor,

>

>         name[len + EFI_VARIABLE_GUID_LEN+1] = '\0';

>

> +       /* replace invalid slashes like kobject_set_name_vargs does for /sys/firmware/efi/vars. */

> +       strreplace(name, '/', '!');

> +

>         inode = efivarfs_get_inode(sb, d_inode(root), S_IFREG | 0644, 0,

>                                    is_removable);

>         if (!inode)

> --

> 2.28.0.681.g6f77f65b4e-goog

>
Michael Schaller Sept. 25, 2020, 7:46 a.m. UTC | #2
On Fri, Sep 25, 2020 at 9:05 AM Ard Biesheuvel <ardb@kernel.org> wrote:
>
> On Fri, 18 Sep 2020 at 13:25, Michael Schaller <misch@google.com> wrote:
> >
> > Without this patch efivarfs_alloc_dentry creates dentries with slashes in
> > their name if the respective EFI variable has slashes in its name. This in
> > turn causes EIO on getdents64, which prevents a complete directory listing
> > of /sys/firmware/efi/efivars/.
> >
> > This patch replaces the invalid shlashes with exclamation marks like
> > kobject_set_name_vargs does for /sys/firmware/efi/vars/ to have consistently
> > named dentries under /sys/firmware/efi/vars/ and /sys/firmware/efi/efivars/.
>
> Thanks Michael
>
> Can you resend this with a signed-off-by line please?
>
I've sent a v2 patch in a new mail thread.
> > ---
> >  fs/efivarfs/super.c | 3 +++
> >  1 file changed, 3 insertions(+)
> >
> > diff --git a/fs/efivarfs/super.c b/fs/efivarfs/super.c
> > index 28bb5689333a..15880a68faad 100644
> > --- a/fs/efivarfs/super.c
> > +++ b/fs/efivarfs/super.c
> > @@ -141,6 +141,9 @@ static int efivarfs_callback(efi_char16_t *name16, efi_guid_t vendor,
> >
> >         name[len + EFI_VARIABLE_GUID_LEN+1] = '\0';
> >
> > +       /* replace invalid slashes like kobject_set_name_vargs does for /sys/firmware/efi/vars. */
> > +       strreplace(name, '/', '!');
> > +
> >         inode = efivarfs_get_inode(sb, d_inode(root), S_IFREG | 0644, 0,
> >                                    is_removable);
> >         if (!inode)
> > --
> > 2.28.0.681.g6f77f65b4e-goog
> >
diff mbox series

Patch

diff --git a/fs/efivarfs/super.c b/fs/efivarfs/super.c
index 28bb5689333a..15880a68faad 100644
--- a/fs/efivarfs/super.c
+++ b/fs/efivarfs/super.c
@@ -141,6 +141,9 @@  static int efivarfs_callback(efi_char16_t *name16, efi_guid_t vendor,
 
 	name[len + EFI_VARIABLE_GUID_LEN+1] = '\0';
 
+	/* replace invalid slashes like kobject_set_name_vargs does for /sys/firmware/efi/vars. */
+	strreplace(name, '/', '!');
+
 	inode = efivarfs_get_inode(sb, d_inode(root), S_IFREG | 0644, 0,
 				   is_removable);
 	if (!inode)