When extracting the capture buffer from a crashdump, only read the valid

portion of the capture buffer (db_capture_bufoff vs db_capture_bufsize).
This could result in outputting garbage (e.g. lots of 'p' characters if
DIAGNOSTIC is enabled) after the end of the capture buffer.  While here,
fix a spelling nit.

Reported by:	Mikolaj Golub  to my trociny of gmail
MFC after:	3 days
This commit is contained in:
John Baldwin 2009-10-29 13:44:58 +00:00
parent e5310f3310
commit 742765c971

View File

@ -95,24 +95,24 @@ kread_symbol(kvm_t *kvm, int index, void *address, size_t size,
static void
ddb_capture_print_kvm(kvm_t *kvm)
{
u_int db_capture_bufsize;
u_int db_capture_bufoff;
char *buffer, *db_capture_buf;
if (kread_symbol(kvm, X_DB_CAPTURE_BUF, &db_capture_buf,
sizeof(db_capture_buf), 0) < 0)
errx(-1, "kvm: unable to read db_capture_buf");
if (kread_symbol(kvm, X_DB_CAPTURE_BUFSIZE, &db_capture_bufsize,
sizeof(db_capture_bufsize), 0) < 0)
errx(-1, "kvm: unable to read db_capture_bufsize");
if (kread_symbol(kvm, X_DB_CAPTURE_BUFOFF, &db_capture_bufoff,
sizeof(db_capture_bufoff), 0) < 0)
errx(-1, "kvm: unable to read db_capture_bufoff");
buffer = malloc(db_capture_bufsize + 1);
buffer = malloc(db_capture_bufoff + 1);
if (buffer == NULL)
err(-1, "malloc: db_capture_bufsize (%u)",
db_capture_bufsize);
bzero(buffer, db_capture_bufsize + 1);
err(-1, "malloc: db_capture_bufoff (%u)",
db_capture_bufoff);
bzero(buffer, db_capture_bufoff + 1);
if (kread(kvm, db_capture_buf, buffer, db_capture_bufsize, 0) < 0)
if (kread(kvm, db_capture_buf, buffer, db_capture_bufoff, 0) < 0)
errx(-1, "kvm: unable to read buffer");
printf("%s\n", buffer);
@ -161,7 +161,7 @@ ddb_capture_status_kvm(kvm_t *kvm)
errx(-1, "kvm: unable to read db_capture_bufsize");
if (kread_symbol(kvm, X_DB_CAPTURE_INPROGRESS,
&db_capture_inprogress, sizeof(db_capture_inprogress), 0) < 0)
err(-1, "kvm: unable to read db_capture_inpgoress");
err(-1, "kvm: unable to read db_capture_inprogress");
printf("%u/%u bytes used\n", db_capture_bufoff, db_capture_bufsize);
if (db_capture_inprogress)
printf("capture is on\n");