]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
fixes for 4.4
authorSasha Levin <sashal@kernel.org>
Tue, 7 Jan 2020 20:27:26 +0000 (15:27 -0500)
committerSasha Levin <sashal@kernel.org>
Tue, 7 Jan 2020 20:31:32 +0000 (15:31 -0500)
Signed-off-by: Sasha Levin <sashal@kernel.org>
queue-4.4/pstore-ram-write-new-dumps-to-start-of-recycled-zone.patch [new file with mode: 0644]
queue-4.4/series

diff --git a/queue-4.4/pstore-ram-write-new-dumps-to-start-of-recycled-zone.patch b/queue-4.4/pstore-ram-write-new-dumps-to-start-of-recycled-zone.patch
new file mode 100644 (file)
index 0000000..3042f34
--- /dev/null
@@ -0,0 +1,53 @@
+From a45f72e8fa47d0c37c692e291cd3f8817e3ea596 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 7 Jan 2020 10:26:55 -0800
+Subject: pstore/ram: Write new dumps to start of recycled zones
+
+From: Aleksandr Yashkin <a.yashkin@inango-systems.com>
+
+[ Upstream commit 9e5f1c19800b808a37fb9815a26d382132c26c3d ]
+
+The ram_core.c routines treat przs as circular buffers. When writing a
+new crash dump, the old buffer needs to be cleared so that the new dump
+doesn't end up in the wrong place (i.e. at the end).
+
+The solution to this problem is to reset the circular buffer state before
+writing a new Oops dump.
+
+Signed-off-by: Aleksandr Yashkin <a.yashkin@inango-systems.com>
+Signed-off-by: Nikolay Merinov <n.merinov@inango-systems.com>
+Signed-off-by: Ariel Gilman <a.gilman@inango-systems.com>
+Link: https://lore.kernel.org/r/20191223133816.28155-1-n.merinov@inango-systems.com
+Fixes: 896fc1f0c4c6 ("pstore/ram: Switch to persistent_ram routines")
+[kees: backport to v4.9]
+Signed-off-by: Kees Cook <keescook@chromium.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/pstore/ram.c | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+diff --git a/fs/pstore/ram.c b/fs/pstore/ram.c
+index 59d93acc29c7..fa0e89edb62d 100644
+--- a/fs/pstore/ram.c
++++ b/fs/pstore/ram.c
+@@ -319,6 +319,17 @@ static int notrace ramoops_pstore_write_buf(enum pstore_type_id type,
+       prz = cxt->przs[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);
++
+       hlen = ramoops_write_kmsg_hdr(prz, compressed);
+       if (size + hlen > prz->buffer_size)
+               size = prz->buffer_size - hlen;
+-- 
+2.20.1
+
index f0592a987699d17a512e67288b2d9d829770fa4c..131b318dc6d2d4a27dee04d1946c345c54cc72cb 100644 (file)
@@ -31,3 +31,4 @@ ath9k_htc-discard-undersized-packets.patch
 net-add-annotations-on-hh-hh_len-lockless-accesses.patch
 s390-smp-fix-physical-to-logical-cpu-map-for-smt.patch
 locking-x86-remove-the-unused-atomic_inc_short-methd.patch
+pstore-ram-write-new-dumps-to-start-of-recycled-zone.patch