From 5ecf1e982695ff237f2f1e4eba46419b85a2488e Mon Sep 17 00:00:00 2001 From: rodrigc Date: Thu, 25 Jan 2007 06:39:25 +0000 Subject: [PATCH] Try to avoid a possible infinite loop when parsing an invalid kernel dump file. PR: 108229 Submitted by: Jessica Han Reviewed by: marcel MFC after: 1 week --- gnu/usr.bin/gdb/kgdb/kthr.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/gnu/usr.bin/gdb/kgdb/kthr.c b/gnu/usr.bin/gdb/kgdb/kthr.c index 02f9a20994c4..37ecad2c2639 100644 --- a/gnu/usr.bin/gdb/kgdb/kthr.c +++ b/gnu/usr.bin/gdb/kgdb/kthr.c @@ -104,12 +104,17 @@ kgdb_thr_init(void) stoppcbs = lookup("_stoppcbs"); while (paddr != 0) { - if (kvm_read(kvm, paddr, &p, sizeof(p)) != sizeof(p)) + if (kvm_read(kvm, paddr, &p, sizeof(p)) != sizeof(p)) { warnx("kvm_read: %s", kvm_geterr(kvm)); + break; + } addr = (uintptr_t)TAILQ_FIRST(&p.p_threads); while (addr != 0) { - if (kvm_read(kvm, addr, &td, sizeof(td)) != sizeof(td)) + if (kvm_read(kvm, addr, &td, sizeof(td)) != + sizeof(td)) { warnx("kvm_read: %s", kvm_geterr(kvm)); + break; + } kt = malloc(sizeof(*kt)); kt->next = first; kt->kaddr = addr;