On Thu, May 17, 2012 at 09:34:19AM -0700, Kees Cook wrote: [...]
- memcpy(buf, cxt->pstore.buf, size);
- memset(buf + size, '\0', available - size);
- hlen = ramoops_write_kmsg_hdr(prz);
- if (size + hlen > prz->buffer_size)
- size = prz->buffer_size - hlen;
- persistent_ram_write(prz, cxt->pstore.buf, size);
This still needs to wipe out the remaining bytes in the buffer (the second memset above).
[...]
- buf = cxt->virt_addr + (id * cxt->record_size);
- memset(buf, '\0', cxt->record_size);
- persistent_ram_free_old(cxt->przs[id]);
Same here -- erasing the buffer means wiping it with NULL bytes.
Well, with persistent_ram we don't need to actually erase buffers (with persistent_ram we might even hold binary data). But yes, we'd better reset size pointer, otherwise the unlinked buffer will show up on the next reboot. Thanks for noticing!