Skip to contentSkip to conversation

efi/efivars: create efivars mount point when get variable services are available

PATCH In review Lee, Chun-Yi 3 participants 3 messages Aug 19, 2020 – Aug 24, 2020 EFI

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 efi/efivars: create efivars mount point when get variable services are available

The efivars filesystem depends on GetVariable or GetNextVariable EFI runtime services. So the /sys/firmware/efi/efivars does not need to be created when GetVariable and GetNextVariable are not available.

It is useful for userland to determine the availability of efivars filesystem.

Cc Ilias Apalodimas <[email protected]>
Cc Ard Biesheuvel <[email protected]>
---
 drivers/firmware/efi/efi.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)
drivers/firmware/efi/efi.c +8 -5
index fdd1db025dbf..929fbf4dfd5d 100644
@@ -404,11 +404,14 @@ static int __init efisubsys_init(void)
 	if (error)
 		goto err_remove_group;
 
-	/* and the standard mountpoint for efivarfs */
-	error = sysfs_create_mount_point(efi_kobj, "efivars");
-	if (error) {
-		pr_err("efivars: Subsystem registration failed.\n");
-		goto err_remove_group;
+	if (efi_rt_services_supported(EFI_RT_SUPPORTED_GET_VARIABLE |
+				      EFI_RT_SUPPORTED_GET_NEXT_VARIABLE_NAME)) {
+		/* and the standard mountpoint for efivarfs */
+		error = sysfs_create_mount_point(efi_kobj, "efivars");
+		if (error) {
+			pr_err("efivars: Subsystem registration failed.\n");
+			goto err_remove_group;
+		}
 	}
 
 	if (efi_enabled(EFI_DBG) && efi_enabled(EFI_PRESERVE_BS_REGIONS))
Signature · 1 line
2.16.4
maintainer
#1 lore raw
Quoted 11 lines · Chun-Yi

The efivars filesystem depends on GetVariable or GetNextVariable EFI runtime services. So the /sys/firmware/efi/efivars does not need to be created when GetVariable and GetNextVariable are not available.

It is useful for userland to determine the availability of efivars filesystem.

Cc Ilias Apalodimas <[email protected]>
Cc Ard Biesheuvel <[email protected]>

Hello Joey,

This is not the right check to perform here: the efivarfs code could be instantiated using a different efivars abstraction, so whether the RT services are implemented is not entirely relevant.

Please look at commit f88814cc2578c121e6edef686365036db72af0ed ("efi/efivars: Expose RT service availability via efivars abstraction") for an explanation of the underlying issue, and update your patch accordingly.

Quoted 31 lines
---
 drivers/firmware/efi/efi.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)
drivers/firmware/efi/efi.c +8 -6
index fdd1db025dbf..929fbf4dfd5d 100644
@@ -404,11 +404,14 @@ static int __init efisubsys_init(void)
        if (error)
                goto err_remove_group;
 
-       /* and the standard mountpoint for efivarfs */
-       error = sysfs_create_mount_point(efi_kobj, "efivars");
-       if (error) {
-               pr_err("efivars: Subsystem registration failed.\n");
-               goto err_remove_group;
+       if (efi_rt_services_supported(EFI_RT_SUPPORTED_GET_VARIABLE |
+                                     EFI_RT_SUPPORTED_GET_NEXT_VARIABLE_NAME)) {
+               /* and the standard mountpoint for efivarfs */
+               error = sysfs_create_mount_point(efi_kobj, "efivars");
+               if (error) {
+                       pr_err("efivars: Subsystem registration failed.\n");
+                       goto err_remove_group;
+               }
        }
 
        if (efi_enabled(EFI_DBG) && efi_enabled(EFI_PRESERVE_BS_REGIONS))
--

2.16.4

#2 lore raw

Hi Ard,

Quoted 15 lines · Ard Biesheuvel
Quoted 11 lines · Chun-Yi

The efivars filesystem depends on GetVariable or GetNextVariable EFI runtime services. So the /sys/firmware/efi/efivars does not need to be created when GetVariable and GetNextVariable are not available.

It is useful for userland to determine the availability of efivars filesystem.

Cc Ilias Apalodimas <[email protected]>
Cc Ard Biesheuvel <[email protected]>

Hello Joey,

Quoted 9 lines

This is not the right check to perform here: the efivarfs code could be instantiated using a different efivars abstraction, so whether the RT services are implemented is not entirely relevant.

Please look at commit f88814cc2578c121e6edef686365036db72af0ed ("efi/efivars: Expose RT service availability via efivars abstraction") for an explanation of the underlying issue, and update your patch accordingly.

Thanks for youre review! I will look at f88814cc257 and change my patch for v2.

Joey Lee

Quoted 32 lines
Quoted 32 lines
---
 drivers/firmware/efi/efi.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)
drivers/firmware/efi/efi.c +8 -6
index fdd1db025dbf..929fbf4dfd5d 100644
@@ -404,11 +404,14 @@ static int __init efisubsys_init(void)
        if (error)
                goto err_remove_group;
 
-       /* and the standard mountpoint for efivarfs */
-       error = sysfs_create_mount_point(efi_kobj, "efivars");
-       if (error) {
-               pr_err("efivars: Subsystem registration failed.\n");
-               goto err_remove_group;
+       if (efi_rt_services_supported(EFI_RT_SUPPORTED_GET_VARIABLE |
+                                     EFI_RT_SUPPORTED_GET_NEXT_VARIABLE_NAME)) {
+               /* and the standard mountpoint for efivarfs */
+               error = sysfs_create_mount_point(efi_kobj, "efivars");
+               if (error) {
+                       pr_err("efivars: Subsystem registration failed.\n");
+                       goto err_remove_group;
+               }
        }
 
        if (efi_enabled(EFI_DBG) && efi_enabled(EFI_PRESERVE_BS_REGIONS))
--

2.16.4