Re: [PATCH 05/11] ACPICA: AML Parser: skip opcodes that open a scope upon parse failure

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Aug 10, 2018 at 11:45 PM Erik Schmauss <erik.schmauss@xxxxxxxxx> wrote:
>
> This change skips the entire length of opcodes that open a scope
> (Device, Scope, Processor, etc) if the creation of the op fails. The
> failure could be caused by various errors including AE_ALREADY_EXISTS
> and AE_NOT_FOUND.
>
> Reported-by: Jeremy Linton <jeremy.linton@xxxxxxx>
> Tested-by: Jeremy Linton <jeremy.linton@xxxxxxx>
> Signed-off-by: Erik Schmauss <erik.schmauss@xxxxxxxxx>

I think that we should propagate this fix to the "stable" kernel
series, at least 4.17.y and newer.  Do you agree?

> ---
>  drivers/acpi/acpica/psloop.c | 17 +++++++++++------
>  1 file changed, 11 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/acpi/acpica/psloop.c b/drivers/acpi/acpica/psloop.c
> index 20b6142da183..358fcdd1f8a5 100644
> --- a/drivers/acpi/acpica/psloop.c
> +++ b/drivers/acpi/acpica/psloop.c
> @@ -22,6 +22,7 @@
>  #include "acdispat.h"
>  #include "amlcode.h"
>  #include "acconvert.h"
> +#include "acnamesp.h"
>
>  #define _COMPONENT          ACPI_PARSER
>  ACPI_MODULE_NAME("psloop")
> @@ -527,12 +528,18 @@ acpi_status acpi_ps_parse_loop(struct acpi_walk_state *walk_state)
>                                 if (ACPI_FAILURE(status)) {
>                                         return_ACPI_STATUS(status);
>                                 }
> -                               if (walk_state->opcode == AML_SCOPE_OP) {
> +                               if (acpi_ns_opens_scope
> +                                   (acpi_ps_get_opcode_info
> +                                    (walk_state->opcode)->object_type)) {
>                                         /*
> -                                        * If the scope op fails to parse, skip the body of the
> -                                        * scope op because the parse failure indicates that the
> -                                        * device may not exist.
> +                                        * If the scope/device op fails to parse, skip the body of
> +                                        * the scope op because the parse failure indicates that
> +                                        * the device may not exist.
>                                          */
> +                                       ACPI_ERROR((AE_INFO,
> +                                                   "Skip parsing opcode %s",
> +                                                   acpi_ps_get_opcode_name
> +                                                   (walk_state->opcode)));
>                                         walk_state->parser_state.aml =
>                                             walk_state->aml + 1;
>                                         walk_state->parser_state.aml =
> @@ -540,8 +547,6 @@ acpi_status acpi_ps_parse_loop(struct acpi_walk_state *walk_state)
>                                             (&walk_state->parser_state);
>                                         walk_state->aml =
>                                             walk_state->parser_state.aml;
> -                                       ACPI_ERROR((AE_INFO,
> -                                                   "Skipping Scope block"));
>                                 }
>
>                                 continue;
> --
> 2.17.1
>



[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux