Commit 278b14eb authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'pstore-v5.5-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux

Pull pstore bug fixes from Kees Cook:

 - always reset circular buffer state when writing new dump (Aleksandr
   Yashkin)

 - fix rare error-path memory leak (Kees Cook)

* tag 'pstore-v5.5-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux:
  pstore/ram: Write new dumps to start of recycled zones
  pstore/ram: Fix error-path memory leak in persistent_ram_new() callers
parents 74f1a299 9e5f1c19
...@@ -407,6 +407,17 @@ static int notrace ramoops_pstore_write(struct pstore_record *record) ...@@ -407,6 +407,17 @@ static int notrace ramoops_pstore_write(struct pstore_record *record)
prz = cxt->dprzs[cxt->dump_write_cnt]; prz = cxt->dprzs[cxt->dump_write_cnt];
/*
* Since this is a new crash dump, we need to reset the buffer in
* case it still has an old dump present. Without this, the new dump
* will get appended, which would seriously confuse anything trying
* to check dump file contents. Specifically, ramoops_read_kmsg_hdr()
* expects to find a dump header in the beginning of buffer data, so
* we must to reset the buffer values, in order to ensure that the
* header will be written to the beginning of the buffer.
*/
persistent_ram_zap(prz);
/* Build header and append record contents. */ /* Build header and append record contents. */
hlen = ramoops_write_kmsg_hdr(prz, record); hlen = ramoops_write_kmsg_hdr(prz, record);
if (!hlen) if (!hlen)
...@@ -577,6 +588,7 @@ static int ramoops_init_przs(const char *name, ...@@ -577,6 +588,7 @@ static int ramoops_init_przs(const char *name,
dev_err(dev, "failed to request %s mem region (0x%zx@0x%llx): %d\n", dev_err(dev, "failed to request %s mem region (0x%zx@0x%llx): %d\n",
name, record_size, name, record_size,
(unsigned long long)*paddr, err); (unsigned long long)*paddr, err);
kfree(label);
while (i > 0) { while (i > 0) {
i--; i--;
...@@ -622,6 +634,7 @@ static int ramoops_init_prz(const char *name, ...@@ -622,6 +634,7 @@ static int ramoops_init_prz(const char *name,
dev_err(dev, "failed to request %s mem region (0x%zx@0x%llx): %d\n", dev_err(dev, "failed to request %s mem region (0x%zx@0x%llx): %d\n",
name, sz, (unsigned long long)*paddr, err); name, sz, (unsigned long long)*paddr, err);
kfree(label);
return err; return err;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment