]> git.baikalelectronics.ru Git - 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)
committerKees Cook <keescook@chromium.org>
Thu, 29 Nov 2018 21:46:43 +0000 (13:46 -0800)
commitc8ee2b6080ac25a36b921670e9e19a0af4881f4f
tree57b3e1dbdff2aff069cb59aa9414fbeb6bd430ea
parentb083fdb517714129f034849d1c9b634980b6f819
pstore/ram: Correctly calculate usable PRZ bytes

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 b97a2f39f2f8 ("pstore: Convert console
write to use ->write_buf")

Reported-by: Joel Fernandes <joel@joelfernandes.org>
Fixes: 9e306e25a459 ("pstore: Add compression support to pstore")
Signed-off-by: Kees Cook <keescook@chromium.org>
Reviewed-by: Joel Fernandes (Google) <joel@joelfernandes.org>
fs/pstore/ram.c
include/linux/pstore.h