diff options
Diffstat (limited to 'source/components/debugger/dbexec.c')
| -rw-r--r-- | source/components/debugger/dbexec.c | 44 | 
1 files changed, 38 insertions, 6 deletions
| diff --git a/source/components/debugger/dbexec.c b/source/components/debugger/dbexec.c index dff3c79ad6820..668dcdd332e7d 100644 --- a/source/components/debugger/dbexec.c +++ b/source/components/debugger/dbexec.c @@ -62,7 +62,7 @@ AcpiDbExecuteMethod (      ACPI_DB_METHOD_INFO     *Info,      ACPI_BUFFER             *ReturnObj); -static void +static ACPI_STATUS  AcpiDbExecuteSetup (      ACPI_DB_METHOD_INFO     *Info); @@ -237,10 +237,15 @@ Cleanup:   *   ******************************************************************************/ -static void +static ACPI_STATUS  AcpiDbExecuteSetup (      ACPI_DB_METHOD_INFO     *Info)  { +    ACPI_STATUS             Status; + + +    ACPI_FUNCTION_NAME (DbExecuteSetup); +      /* Catenate the current scope to the supplied name */ @@ -248,10 +253,21 @@ AcpiDbExecuteSetup (      if ((Info->Name[0] != '\\') &&          (Info->Name[0] != '/'))      { -        ACPI_STRCAT (Info->Pathname, AcpiGbl_DbScopeBuf); +        if (AcpiUtSafeStrcat (Info->Pathname, sizeof (Info->Pathname), +            AcpiGbl_DbScopeBuf)) +        { +            Status = AE_BUFFER_OVERFLOW; +            goto ErrorExit; +        } +    } + +    if (AcpiUtSafeStrcat (Info->Pathname, sizeof (Info->Pathname), +        Info->Name)) +    { +        Status = AE_BUFFER_OVERFLOW; +        goto ErrorExit;      } -    ACPI_STRCAT (Info->Pathname, Info->Name);      AcpiDbPrepNamestring (Info->Pathname);      AcpiDbSetOutputDestination (ACPI_DB_DUPLICATE_OUTPUT); @@ -269,6 +285,13 @@ AcpiDbExecuteSetup (          AcpiDbSetOutputDestination (ACPI_DB_REDIRECTABLE_OUTPUT);      } + +    return (AE_OK); + +ErrorExit: + +    ACPI_EXCEPTION ((AE_INFO, Status, "During setup for method execution")); +    return (Status);  } @@ -429,7 +452,12 @@ AcpiDbExecute (          ReturnObj.Pointer = NULL;          ReturnObj.Length = ACPI_ALLOCATE_BUFFER; -        AcpiDbExecuteSetup (&AcpiGbl_DbMethodInfo); +        Status = AcpiDbExecuteSetup (&AcpiGbl_DbMethodInfo); +        if (ACPI_FAILURE (Status)) +        { +            ACPI_FREE (NameString); +            return; +        }          /* Get the NS node, determines existence also */ @@ -729,7 +757,11 @@ AcpiDbCreateExecutionThreads (      AcpiDbUint32ToHexString (NumThreads, AcpiGbl_DbMethodInfo.NumThreadsStr); -    AcpiDbExecuteSetup (&AcpiGbl_DbMethodInfo); +    Status = AcpiDbExecuteSetup (&AcpiGbl_DbMethodInfo); +    if (ACPI_FAILURE (Status)) +    { +        goto CleanupAndExit; +    }      /* Get the NS node, determines existence also */ | 
