• Kees Cook's avatar
    pstore/ram: Correctly calculate usable PRZ bytes · b718d6be
    Kees Cook authored
    [ Upstream commit 89d328f6 ]
    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 70ad35db
     ("pstore: Convert console
    write to use ->write_buf")
    Reported-by: default avatarJoel Fernandes <joel@joelfernandes.org>
    Fixes: b0aad7a9
     ("pstore: Add compression support to pstore")
    Signed-off-by: default avatarKees Cook <keescook@chromium.org>
    Reviewed-by: default avatarJoel Fernandes (Google) <joel@joelfernandes.org>
    Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
ram.c 24 KB