mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-24 20:54:10 +08:00
438b805003
Pstore supports compression using a variety of algorithms exposed by the crypto API. This uses the deprecated comp (as opposed to scomp/acomp) API, and so we should stop using that, and either move to the new API, or switch to a different approach entirely. Given that we only compress ASCII text in pstore, and considering that this happens when the system is likely to be in an unstable state, the flexibility that the complex crypto API provides does not outweigh its impact on the risk that we might encounter additional problems when trying to commit the kernel log contents to the pstore backend. So let's switch [back] to the zlib deflate library API, and remove all the complexity that really has no place in a low-level diagnostic facility. Note that, while more modern compression algorithms have been added to the kernel in recent years, the code size of zlib deflate is substantially smaller than, e.g., zstd, while its performance in terms of compression ratio is comparable for ASCII text, and speed is deemed irrelevant in this context. Note that this means that compressed pstore records may no longer be accessible after a kernel upgrade, but this has never been part of the contract. (The choice of compression algorithm is not stored in the pstore records either) Tested-by: "Guilherme G. Piccoli" <gpiccoli@igalia.com> # Steam Deck Signed-off-by: Ard Biesheuvel <ardb@kernel.org> Reviewed-by: Eric Biggers <ebiggers@google.com> Link: https://lore.kernel.org/r/20230712162332.2670437-3-ardb@kernel.org Signed-off-by: Kees Cook <keescook@chromium.org>
192 lines
6.3 KiB
Plaintext
192 lines
6.3 KiB
Plaintext
# SPDX-License-Identifier: GPL-2.0-only
|
|
config PSTORE
|
|
tristate "Persistent store support"
|
|
default n
|
|
help
|
|
This option enables generic access to platform level
|
|
persistent storage via "pstore" filesystem that can
|
|
be mounted as /dev/pstore. Only useful if you have
|
|
a platform level driver that registers with pstore to
|
|
provide the data, so you probably should just go say "Y"
|
|
(or "M") to a platform specific persistent store driver
|
|
(e.g. ACPI_APEI on X86) which will select this for you.
|
|
If you don't have a platform persistent store driver,
|
|
say N.
|
|
|
|
config PSTORE_DEFAULT_KMSG_BYTES
|
|
int "Default kernel log storage space" if EXPERT
|
|
depends on PSTORE
|
|
default "10240"
|
|
help
|
|
Defines default size of pstore kernel log storage.
|
|
Can be enlarged if needed, not recommended to shrink it.
|
|
|
|
config PSTORE_COMPRESS
|
|
bool "Pstore compression (deflate)"
|
|
depends on PSTORE
|
|
select ZLIB_INFLATE
|
|
select ZLIB_DEFLATE
|
|
default y
|
|
help
|
|
Whether pstore records should be compressed before being written to
|
|
the backing store. This is implemented using the zlib 'deflate'
|
|
algorithm, using the library implementation instead of using the full
|
|
blown crypto API. This reduces the risk of secondary oopses or other
|
|
problems while pstore is recording panic metadata.
|
|
|
|
config PSTORE_CONSOLE
|
|
bool "Log kernel console messages"
|
|
depends on PSTORE
|
|
help
|
|
When the option is enabled, pstore will log all kernel
|
|
messages, even if no oops or panic happened.
|
|
|
|
config PSTORE_PMSG
|
|
bool "Log user space messages"
|
|
depends on PSTORE
|
|
select RT_MUTEXES
|
|
help
|
|
When the option is enabled, pstore will export a character
|
|
interface /dev/pmsg0 to log user space messages. On reboot
|
|
data can be retrieved from /sys/fs/pstore/pmsg-ramoops-[ID].
|
|
|
|
If unsure, say N.
|
|
|
|
config PSTORE_FTRACE
|
|
bool "Persistent function tracer"
|
|
depends on PSTORE
|
|
depends on FUNCTION_TRACER
|
|
depends on DEBUG_FS
|
|
help
|
|
With this option kernel traces function calls into a persistent
|
|
ram buffer that can be decoded and dumped after reboot through
|
|
pstore filesystem. It can be used to determine what function
|
|
was last called before a reset or panic.
|
|
|
|
If unsure, say N.
|
|
|
|
config PSTORE_RAM
|
|
tristate "Log panic/oops to a RAM buffer"
|
|
depends on PSTORE
|
|
depends on HAS_IOMEM
|
|
select REED_SOLOMON
|
|
select REED_SOLOMON_ENC8
|
|
select REED_SOLOMON_DEC8
|
|
help
|
|
This enables panic and oops messages to be logged to a circular
|
|
buffer in RAM where it can be read back at some later point.
|
|
|
|
Note that for historical reasons, the module will be named
|
|
"ramoops.ko".
|
|
|
|
For more information, see Documentation/admin-guide/ramoops.rst.
|
|
|
|
config PSTORE_ZONE
|
|
tristate
|
|
depends on PSTORE
|
|
help
|
|
The common layer for pstore/blk (and pstore/ram in the future)
|
|
to manage storage in zones.
|
|
|
|
config PSTORE_BLK
|
|
tristate "Log panic/oops to a block device"
|
|
depends on PSTORE
|
|
depends on BLOCK
|
|
select PSTORE_ZONE
|
|
default n
|
|
help
|
|
This enables panic and oops message to be logged to a block dev
|
|
where it can be read back at some later point.
|
|
|
|
For more information, see Documentation/admin-guide/pstore-blk.rst
|
|
|
|
If unsure, say N.
|
|
|
|
config PSTORE_BLK_BLKDEV
|
|
string "block device identifier"
|
|
depends on PSTORE_BLK
|
|
default ""
|
|
help
|
|
Which block device should be used for pstore/blk.
|
|
|
|
It accepts the following variants:
|
|
1) <hex_major><hex_minor> device number in hexadecimal representation,
|
|
with no leading 0x, for example b302.
|
|
2) /dev/<disk_name> represents the device name of disk
|
|
3) /dev/<disk_name><decimal> represents the device name and number
|
|
of partition - device number of disk plus the partition number
|
|
4) /dev/<disk_name>p<decimal> - same as the above, this form is
|
|
used when disk name of partitioned disk ends with a digit.
|
|
5) PARTUUID=00112233-4455-6677-8899-AABBCCDDEEFF representing the
|
|
unique id of a partition if the partition table provides it.
|
|
The UUID may be either an EFI/GPT UUID, or refer to an MSDOS
|
|
partition using the format SSSSSSSS-PP, where SSSSSSSS is a zero-
|
|
filled hex representation of the 32-bit "NT disk signature", and PP
|
|
is a zero-filled hex representation of the 1-based partition number.
|
|
6) PARTUUID=<UUID>/PARTNROFF=<int> to select a partition in relation
|
|
to a partition with a known unique id.
|
|
7) <major>:<minor> major and minor number of the device separated by
|
|
a colon.
|
|
|
|
NOTE that, both Kconfig and module parameters can configure
|
|
pstore/blk, but module parameters have priority over Kconfig.
|
|
|
|
config PSTORE_BLK_KMSG_SIZE
|
|
int "Size in Kbytes of kmsg dump log to store"
|
|
depends on PSTORE_BLK
|
|
default 64
|
|
help
|
|
This just sets size of kmsg dump (oops, panic, etc) log for
|
|
pstore/blk. The size is in KB and must be a multiple of 4.
|
|
|
|
NOTE that, both Kconfig and module parameters can configure
|
|
pstore/blk, but module parameters have priority over Kconfig.
|
|
|
|
config PSTORE_BLK_MAX_REASON
|
|
int "Maximum kmsg dump reason to store"
|
|
depends on PSTORE_BLK
|
|
default 2
|
|
help
|
|
The maximum reason for kmsg dumps to store. The default is
|
|
2 (KMSG_DUMP_OOPS), see include/linux/kmsg_dump.h's
|
|
enum kmsg_dump_reason for more details.
|
|
|
|
NOTE that, both Kconfig and module parameters can configure
|
|
pstore/blk, but module parameters have priority over Kconfig.
|
|
|
|
config PSTORE_BLK_PMSG_SIZE
|
|
int "Size in Kbytes of pmsg to store"
|
|
depends on PSTORE_BLK
|
|
depends on PSTORE_PMSG
|
|
default 64
|
|
help
|
|
This just sets size of pmsg (pmsg_size) for pstore/blk. The size is
|
|
in KB and must be a multiple of 4.
|
|
|
|
NOTE that, both Kconfig and module parameters can configure
|
|
pstore/blk, but module parameters have priority over Kconfig.
|
|
|
|
config PSTORE_BLK_CONSOLE_SIZE
|
|
int "Size in Kbytes of console log to store"
|
|
depends on PSTORE_BLK
|
|
depends on PSTORE_CONSOLE
|
|
default 64
|
|
help
|
|
This just sets size of console log (console_size) to store via
|
|
pstore/blk. The size is in KB and must be a multiple of 4.
|
|
|
|
NOTE that, both Kconfig and module parameters can configure
|
|
pstore/blk, but module parameters have priority over Kconfig.
|
|
|
|
config PSTORE_BLK_FTRACE_SIZE
|
|
int "Size in Kbytes of ftrace log to store"
|
|
depends on PSTORE_BLK
|
|
depends on PSTORE_FTRACE
|
|
default 64
|
|
help
|
|
This just sets size of ftrace log (ftrace_size) for pstore/blk. The
|
|
size is in KB and must be a multiple of 4.
|
|
|
|
NOTE that, both Kconfig and module parameters can configure
|
|
pstore/blk, but module parameters have priority over Kconfig.
|