diff options
author | rodrigc <rodrigc@FreeBSD.org> | 2007-01-25 06:39:25 +0000 |
---|---|---|
committer | rodrigc <rodrigc@FreeBSD.org> | 2007-01-25 06:39:25 +0000 |
commit | 5ecf1e982695ff237f2f1e4eba46419b85a2488e (patch) | |
tree | 2216108698e93e1318bd545ab7bf528a3e054a76 /gnu | |
parent | 83064ec323555287e3f57d6a7467f4f3017aacbf (diff) | |
download | FreeBSD-src-5ecf1e982695ff237f2f1e4eba46419b85a2488e.zip FreeBSD-src-5ecf1e982695ff237f2f1e4eba46419b85a2488e.tar.gz |
Try to avoid a possible infinite loop when parsing an invalid kernel dump file.
PR: 108229
Submitted by: Jessica Han <jessicah juniper net>
Reviewed by: marcel
MFC after: 1 week
Diffstat (limited to 'gnu')
-rw-r--r-- | gnu/usr.bin/gdb/kgdb/kthr.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/gnu/usr.bin/gdb/kgdb/kthr.c b/gnu/usr.bin/gdb/kgdb/kthr.c index 02f9a20..37ecad2 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; |