How does one tell where DMAP addresses should not appear when looking around via kgdb?
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 16 Dec 2024 19:29:11 UTC
In: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=267028 I wrote about an example that is part of what prompts the more general question . . . --- Comment #241 from Mark Millard <marklmi26-fbsd@yahoo.com> --- One of the older ("obsolete") crash dump reports is for: /* * free: * * Free a block of memory allocated by malloc. * * This routine may not block. */ void free(void *addr, struct malloc_type *mtp) { uma_zone_t zone; uma_slab_t slab; u_long size; #ifdef MALLOC_DEBUG if (free_dbg(&addr, mtp) != 0) return; #endif /* free(NULL, ...) does nothing */ if (addr == NULL) return; vtozoneslab((vm_offset_t)addr & (~UMA_SLAB_MASK), &zone, &slab); . . . where addr ended up being 0xfffff80000000007 , in other words PHYS_TO_DMAP(0x7). The (vm_offset_t)addr & (~UMA_SLAB_MASK) turned it into 0xfffff80000000000 for vtozoneslab. That in turn reported a failure. The presence of a NULL check in the kernel's free suggests to me that the kernel's free may not be intended to handle DMAP addresses. Similarly for other kernel code that checks against NULL but not against PHYS_TO_DMAP(NULL). How does one tell where DMAP addresses should not appear when looking around via kgdb? === Mark Millard marklmi at yahoo.com