summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoel Fernandes (Google) <joel@joelfernandes.org>2018-11-03 16:38:18 -0700
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2019-01-26 09:38:33 +0100
commitfffdbf586866e9500b53c9d4b061d3983720375a (patch)
tree58988885b2d8411f55ff7e48ee181ed49a1ff93a
parent93611460f355f43ddad0338c05c24b9f699832da (diff)
downloadlinux-stable-fffdbf586866e9500b53c9d4b061d3983720375a.tar.gz
linux-stable-fffdbf586866e9500b53c9d4b061d3983720375a.tar.bz2
linux-stable-fffdbf586866e9500b53c9d4b061d3983720375a.zip
pstore/ram: Do not treat empty buffers as valid
[ Upstream commit 30696378f68a9e3dad6bfe55938b112e72af00c2 ] The ramoops backend currently calls persistent_ram_save_old() even if a buffer is empty. While this appears to work, it is does not seem like the right thing to do and could lead to future bugs so lets avoid that. It also prevents misleading prints in the logs which claim the buffer is valid. I got something like: found existing buffer, size 0, start 0 When I was expecting: no valid data in buffer (sig = ...) This bails out early (and reports with pr_debug()), since it's an acceptable state. Signed-off-by: Joel Fernandes (Google) <joel@joelfernandes.org> Co-developed-by: Kees Cook <keescook@chromium.org> Signed-off-by: Kees Cook <keescook@chromium.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
-rw-r--r--fs/pstore/ram_core.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/fs/pstore/ram_core.c b/fs/pstore/ram_core.c
index ecdb3baa1283..11e558efd61e 100644
--- a/fs/pstore/ram_core.c
+++ b/fs/pstore/ram_core.c
@@ -488,6 +488,11 @@ static int persistent_ram_post_init(struct persistent_ram_zone *prz, u32 sig,
sig ^= PERSISTENT_RAM_SIG;
if (prz->buffer->sig == sig) {
+ if (buffer_size(prz) == 0) {
+ pr_debug("found existing empty buffer\n");
+ return 0;
+ }
+
if (buffer_size(prz) > prz->buffer_size ||
buffer_start(prz) > buffer_size(prz))
pr_info("found existing invalid buffer, size %zu, start %zu\n",