diff mbox series

efi: don't iterate over EFI vars pointlessly if no SSDT override was specified

Message ID 20190911233239.5916-1-ard.biesheuvel@linaro.org
State Accepted
Commit c05f8f92b701576b615f30aac31fabdc0648649b
Headers show
Series efi: don't iterate over EFI vars pointlessly if no SSDT override was specified | expand

Commit Message

Ard Biesheuvel Sept. 11, 2019, 11:32 p.m. UTC
The kernel command line option efivar_ssdt= allows a EFI variable name
to be specified which contains an ACPI SSDT table that will be loaded
into memory by the OS.

Currently, that code will always iterate over the EFI variables and
compare each name with the provided name, even if the command line
option wasn't set to begin with.

So bail early when no variable name was provided.

Cc: Scott Talbert <swt@techie.net>
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

---
 drivers/firmware/efi/efi.c | 3 +++
 1 file changed, 3 insertions(+)

-- 
2.17.1

Comments

Scott Talbert Sept. 12, 2019, 7:35 p.m. UTC | #1
On Thu, 12 Sep 2019, Ard Biesheuvel wrote:

> The kernel command line option efivar_ssdt= allows a EFI variable name

> to be specified which contains an ACPI SSDT table that will be loaded

> into memory by the OS.

>

> Currently, that code will always iterate over the EFI variables and

> compare each name with the provided name, even if the command line

> option wasn't set to begin with.

>

> So bail early when no variable name was provided.

>

> Cc: Scott Talbert <swt@techie.net>

> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

> ---

> drivers/firmware/efi/efi.c | 3 +++

> 1 file changed, 3 insertions(+)

>

> diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c

> index ad3b1f4866b3..8f020827cdd3 100644

> --- a/drivers/firmware/efi/efi.c

> +++ b/drivers/firmware/efi/efi.c

> @@ -282,6 +282,9 @@ static __init int efivar_ssdt_load(void)

> 	void *data;

> 	int ret;

>

> +	if (!efivar_ssdt[0])

> +		return 0;

> +

> 	ret = efivar_init(efivar_ssdt_iter, &entries, true, &entries);

>

> 	list_for_each_entry_safe(entry, aux, &entries, list) {


Thanks for the quick fix!

I can confirm this fixes booting on my Mac Pro 2012 system when applied to 
5.3-rc7.

Whenever this makes it in, if it could be targeted for the stable kernels 
as well, that would be appreciated.

Thanks,
Scott
Ard Biesheuvel Sept. 12, 2019, 8:42 p.m. UTC | #2
On Thu, 12 Sep 2019 at 20:35, Scott Talbert <swt@techie.net> wrote:
>

> On Thu, 12 Sep 2019, Ard Biesheuvel wrote:

>

> > The kernel command line option efivar_ssdt= allows a EFI variable name

> > to be specified which contains an ACPI SSDT table that will be loaded

> > into memory by the OS.

> >

> > Currently, that code will always iterate over the EFI variables and

> > compare each name with the provided name, even if the command line

> > option wasn't set to begin with.

> >

> > So bail early when no variable name was provided.

> >

> > Cc: Scott Talbert <swt@techie.net>

> > Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

> > ---

> > drivers/firmware/efi/efi.c | 3 +++

> > 1 file changed, 3 insertions(+)

> >

> > diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c

> > index ad3b1f4866b3..8f020827cdd3 100644

> > --- a/drivers/firmware/efi/efi.c

> > +++ b/drivers/firmware/efi/efi.c

> > @@ -282,6 +282,9 @@ static __init int efivar_ssdt_load(void)

> >       void *data;

> >       int ret;

> >

> > +     if (!efivar_ssdt[0])

> > +             return 0;

> > +

> >       ret = efivar_init(efivar_ssdt_iter, &entries, true, &entries);

> >

> >       list_for_each_entry_safe(entry, aux, &entries, list) {

>

> Thanks for the quick fix!

>

> I can confirm this fixes booting on my Mac Pro 2012 system when applied to

> 5.3-rc7.

>

> Whenever this makes it in, if it could be targeted for the stable kernels

> as well, that would be appreciated.

>


I'll send it out as a fix with a cc to -stable.

Thanks,
Ard.
Scott Talbert Sept. 19, 2019, 6:01 p.m. UTC | #3
On Thu, 12 Sep 2019, Ard Biesheuvel wrote:

>>> The kernel command line option efivar_ssdt= allows a EFI variable name

>>> to be specified which contains an ACPI SSDT table that will be loaded

>>> into memory by the OS.

>>>

>>> Currently, that code will always iterate over the EFI variables and

>>> compare each name with the provided name, even if the command line

>>> option wasn't set to begin with.

>>>

>>> So bail early when no variable name was provided.

>>>

>>> Cc: Scott Talbert <swt@techie.net>

>>> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

>>> ---

>>> drivers/firmware/efi/efi.c | 3 +++

>>> 1 file changed, 3 insertions(+)

>>>

>>> diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c

>>> index ad3b1f4866b3..8f020827cdd3 100644

>>> --- a/drivers/firmware/efi/efi.c

>>> +++ b/drivers/firmware/efi/efi.c

>>> @@ -282,6 +282,9 @@ static __init int efivar_ssdt_load(void)

>>>       void *data;

>>>       int ret;

>>>

>>> +     if (!efivar_ssdt[0])

>>> +             return 0;

>>> +

>>>       ret = efivar_init(efivar_ssdt_iter, &entries, true, &entries);

>>>

>>>       list_for_each_entry_safe(entry, aux, &entries, list) {

>>

>> Thanks for the quick fix!

>>

>> I can confirm this fixes booting on my Mac Pro 2012 system when applied to

>> 5.3-rc7.

>>

>> Whenever this makes it in, if it could be targeted for the stable kernels

>> as well, that would be appreciated.

>>

>

> I'll send it out as a fix with a cc to -stable.


Hi - just a quick reminder on this as I don't see it in Linus' tree yet. 
Not that I need it urgently, but just want to make sure it isn't 
forgotten.

Thanks,
Scott
Ard Biesheuvel Sept. 25, 2019, 3:57 p.m. UTC | #4
On Thu, 19 Sep 2019 at 20:01, Scott Talbert <swt@techie.net> wrote:
>

> On Thu, 12 Sep 2019, Ard Biesheuvel wrote:

>

> >>> The kernel command line option efivar_ssdt= allows a EFI variable name

> >>> to be specified which contains an ACPI SSDT table that will be loaded

> >>> into memory by the OS.

> >>>

> >>> Currently, that code will always iterate over the EFI variables and

> >>> compare each name with the provided name, even if the command line

> >>> option wasn't set to begin with.

> >>>

> >>> So bail early when no variable name was provided.

> >>>

> >>> Cc: Scott Talbert <swt@techie.net>

> >>> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

> >>> ---

> >>> drivers/firmware/efi/efi.c | 3 +++

> >>> 1 file changed, 3 insertions(+)

> >>>

> >>> diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c

> >>> index ad3b1f4866b3..8f020827cdd3 100644

> >>> --- a/drivers/firmware/efi/efi.c

> >>> +++ b/drivers/firmware/efi/efi.c

> >>> @@ -282,6 +282,9 @@ static __init int efivar_ssdt_load(void)

> >>>       void *data;

> >>>       int ret;

> >>>

> >>> +     if (!efivar_ssdt[0])

> >>> +             return 0;

> >>> +

> >>>       ret = efivar_init(efivar_ssdt_iter, &entries, true, &entries);

> >>>

> >>>       list_for_each_entry_safe(entry, aux, &entries, list) {

> >>

> >> Thanks for the quick fix!

> >>

> >> I can confirm this fixes booting on my Mac Pro 2012 system when applied to

> >> 5.3-rc7.

> >>

> >> Whenever this makes it in, if it could be targeted for the stable kernels

> >> as well, that would be appreciated.

> >>

> >

> > I'll send it out as a fix with a cc to -stable.

>

> Hi - just a quick reminder on this as I don't see it in Linus' tree yet.

> Not that I need it urgently, but just want to make sure it isn't

> forgotten.

>


Hi Scott,

This should get sent out in the next couple of day. It usually takes
another week or so after that for changes to make it into Linus's
tree.
diff mbox series

Patch

diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c
index ad3b1f4866b3..8f020827cdd3 100644
--- a/drivers/firmware/efi/efi.c
+++ b/drivers/firmware/efi/efi.c
@@ -282,6 +282,9 @@  static __init int efivar_ssdt_load(void)
 	void *data;
 	int ret;
 
+	if (!efivar_ssdt[0])
+		return 0;
+
 	ret = efivar_init(efivar_ssdt_iter, &entries, true, &entries);
 
 	list_for_each_entry_safe(entry, aux, &entries, list) {