diff --git a/mm/mm_heap/mm_foreach.c b/mm/mm_heap/mm_foreach.c index 9be84a9848..a0d4dc9e57 100644 --- a/mm/mm_heap/mm_foreach.c +++ b/mm/mm_heap/mm_foreach.c @@ -81,6 +81,7 @@ void mm_foreach(FAR struct mm_heap_s *heap, mm_node_handler_t handler, node = (FAR struct mm_allocnode_s *)((FAR char *)node + nodesize)) { nodesize = MM_SIZEOF_NODE(node); + DEBUGASSERT(nodesize >= MM_SIZEOF_ALLOCNODE); minfo("region=%d node=%p size=%zu preceding=%u (%c %c)\n", region, node, nodesize, (unsigned int)node->preceding, MM_PREVNODE_IS_FREE(node) ? 'F' : 'A', diff --git a/tools/gdb/nuttxgdb/mm.py b/tools/gdb/nuttxgdb/mm.py index c0da309724..bb923ecd5e 100644 --- a/tools/gdb/nuttxgdb/mm.py +++ b/tools/gdb/nuttxgdb/mm.py @@ -466,6 +466,9 @@ class MMNode(gdb.Value, p.MMFreeNode): @property def nextnode(self) -> MMNode: + if not self.nodesize: + return None + addr = int(self.address) + self.nodesize type = utils.lookup_type("struct mm_freenode_s").pointer() # Use gdb.Value for better performance @@ -551,7 +554,7 @@ class MMHeap(Value, p.MMHeap): def nodes(self) -> Generator[MMNode, None, None]: for start, end in self.regions: node = start - while node.address <= end.address: + while node and node.address <= end.address: yield node node = node.nextnode