ACPI panic
Stefan Farfeleder
stefanf at FreeBSD.org
Sun Nov 25 14:00:18 UTC 2012
Hi Andriy,
with your patch my notebook has a ~50% chance of stalling during boot.
This always happens after the "Entropy harvesting" line and I can only
power it down then.
I guess somehow cycles are introduced into the acpi objects list? The
panic was never triggered.
Stefan
On Thu, Nov 22, 2012 at 12:59:09PM +0200, Andriy Gapon wrote:
>
> A patch that should actually compile, finally.
> BTW, it's probably better to replace the NULL dereference trick with a simple
> panic call in the first patch too.
>
> diff --git a/sys/contrib/dev/acpica/components/utilities/utcache.c
> b/sys/contrib/dev/acpica/components/utilities/utcache.c
> index b8efa68..edd9e4f 100644
> --- a/sys/contrib/dev/acpica/components/utilities/utcache.c
> +++ b/sys/contrib/dev/acpica/components/utilities/utcache.c
> @@ -226,6 +226,21 @@ AcpiOsReleaseObject (
> return (AE_BAD_PARAMETER);
> }
>
> + (void) AcpiUtAcquireMutex (ACPI_MTX_CACHES);
> + char *Curr;
> + char *Next;
> + Next = Cache->ListHead;
> + while (Next)
> + {
> + Curr = Next;
> + Next = *(ACPI_CAST_INDIRECT_PTR (char,
> + &(((char *) Curr)[Cache->LinkOffset])));
> + if (Object == Curr) {
> + panic("freeing a free object %p", Object);
> + }
> + }
> + (void) AcpiUtReleaseMutex (ACPI_MTX_CACHES);
> +
> /* If cache is full, just free this object */
>
> if (Cache->CurrentDepth >= Cache->MaxDepth)
> @@ -312,6 +327,10 @@ AcpiOsAcquireObject (
>
> Cache->CurrentDepth--;
>
> + if (*(const unsigned char *) Object != 0xCA) {
> + panic("detected use after free %p\n", Object);
> + }
> +
> ACPI_MEM_TRACKING (Cache->Hits++);
> ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
> "Object %p from %s cache\n", Object, Cache->ListName));
>
> --
> Andriy Gapon
> _______________________________________________
> freebsd-acpi at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-acpi
> To unsubscribe, send any mail to "freebsd-acpi-unsubscribe at freebsd.org"
More information about the freebsd-acpi
mailing list