]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commit
pstore/ram: Correctly calculate usable PRZ bytes
authorKees Cook <keescook@chromium.org>
Thu, 1 Nov 2018 23:17:22 +0000 (16:17 -0700)
committerSultan Alsawaf <sultan.alsawaf@canonical.com>
Wed, 24 Jul 2019 15:45:09 +0000 (09:45 -0600)
commitd8db87d29ddd8d1f041137be16d8c285eecae557
tree07f15f6436794ab0f31d11ad0cf0a19b0e874f15
parent33f4a08f9765cfd63bf03619b189856b2801672e
pstore/ram: Correctly calculate usable PRZ bytes

BugLink: https://bugs.launchpad.net/bugs/1837161
[ Upstream commit 89d328f637b9904b6d4c9af73c8a608b8dd4d6f8 ]

The actual number of bytes stored in a PRZ is smaller than the
bytes requested by platform data, since there is a header on each
PRZ. Additionally, if ECC is enabled, there are trailing bytes used
as well. Normally this mismatch doesn't matter since PRZs are circular
buffers and the leading "overflow" bytes are just thrown away. However, in
the case of a compressed record, this rather badly corrupts the results.

This corruption was visible with "ramoops.mem_size=204800 ramoops.ecc=1".
Any stored crashes would not be uncompressable (producing a pstorefs
"dmesg-*.enc.z" file), and triggering errors at boot:

  [    2.790759] pstore: crypto_comp_decompress failed, ret = -22!

Backporting this depends on commit 70ad35db3321 ("pstore: Convert console
write to use ->write_buf")

Reported-by: Joel Fernandes <joel@joelfernandes.org>
Fixes: b0aad7a99c1d ("pstore: Add compression support to pstore")
Signed-off-by: Kees Cook <keescook@chromium.org>
Reviewed-by: Joel Fernandes (Google) <joel@joelfernandes.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
Signed-off-by: Khalid Elmously <khalid.elmously@canonical.com>
fs/pstore/ram.c
include/linux/pstore.h