diff options
author | avg <avg@FreeBSD.org> | 2013-02-08 07:29:07 +0000 |
---|---|---|
committer | avg <avg@FreeBSD.org> | 2013-02-08 07:29:07 +0000 |
commit | ce73fe0e978453dce99555cea3e42b111ab3bb45 (patch) | |
tree | 87ca74fe0982f91d2ebeed91d4ad770cab165d68 /sys/kern/kern_ktr.c | |
parent | 89d287b04017254988cbc3d9d57a802dc0ba92b3 (diff) | |
download | FreeBSD-src-ce73fe0e978453dce99555cea3e42b111ab3bb45.zip FreeBSD-src-ce73fe0e978453dce99555cea3e42b111ab3bb45.tar.gz |
ktr: correctly handle possible wrap-around in the boot buffer
Older entries should be 'before' newer entries in the new buffer too
and there should be no zero-filled gap between them.
Pointed out by: jhb
MFC after: 3 days
X-MFC with: r246282
Diffstat (limited to 'sys/kern/kern_ktr.c')
-rw-r--r-- | sys/kern/kern_ktr.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/sys/kern/kern_ktr.c b/sys/kern/kern_ktr.c index a11c76c..3202b9b 100644 --- a/sys/kern/kern_ktr.c +++ b/sys/kern/kern_ktr.c @@ -213,7 +213,11 @@ ktr_entries_initializer(void *dummy __unused) ktr_mask = 0; ktr_buf = malloc(sizeof(*ktr_buf) * KTR_ENTRIES, M_KTR, M_WAITOK | M_ZERO); - memcpy(ktr_buf, ktr_buf_init, sizeof(ktr_buf_init)); + memcpy(ktr_buf, ktr_buf_init + ktr_idx, + (KTR_BOOT_ENTRIES - ktr_idx) * sizeof(*ktr_buf)); + if (ktr_idx != 0) + memcpy(ktr_buf + KTR_BOOT_ENTRIES - ktr_idx, ktr_buf_init, + ktr_idx * sizeof(*ktr_buf)); ktr_entries = KTR_ENTRIES; ktr_mask = mask; } |