• Enlin Mu's avatar
    pstore/ram: Check start of empty przs during init · fe8c3623
    Enlin Mu authored
    After commit 30696378 ("pstore/ram: Do not treat empty buffers as
    valid"), initialization would assume a prz was valid after seeing that
    the buffer_size is zero (regardless of the buffer start position). This
    unchecked start value means it could be outside the bounds of the buffer,
    leading to future access panics when written to:
    
     sysdump_panic_event+0x3b4/0x5b8
     atomic_notifier_call_chain+0x54/0x90
     panic+0x1c8/0x42c
     die+0x29c/0x2a8
     die_kernel_fault+0x68/0x78
     __do_kernel_fault+0x1c4/0x1e0
     do_bad_area+0x40/0x100
     do_translation_fault+0x68/0x80
     do_mem_abort+0x68/0xf8
     el1_da+0x1c/0xc0
     __raw_writeb+0x38/0x174
     __memcpy_toio+0x40/0xac
     persistent_ram_update+0x44/0x12c
     persistent_ram_write+0x1a8/0x1b8
     ramoops_pstore_write+0x198/0x1e8
     pstore_console_write+0x94/0xe0
     ...
    
    To avoid this, also check if the prz start is 0 during the initialization
    phase. If not, the next prz sanity check case will discover it (start >
    size) and zap the buffer back to a sane state.
    
    Fixes: 30696378 ("pstore/ram: Do not treat empty buffers as valid")
    Cc: Yunlong Xing <yunlong.xing@unisoc.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarEnlin Mu <enlin.mu@unisoc.com>
    Link: https://lore.kernel.org/r/20230801060432.1307717-1-yunlong.xing@unisoc.com
    [kees: update commit log with backtrace and clarifications]
    Signed-off-by: default avatarKees Cook <keescook@chromium.org>
    fe8c3623
ram_core.c 15.2 KB