Re: [PATCH] printk: Export log_buf_len to userland

From: Sergey Senozhatsky
Date: Sun Aug 14 2022 - 22:15:26 EST


Cc-ing John and Steven

On (22/08/10 14:25), Marc Aurèle La France wrote:
>
> Make the kernel log's buffer size available to userland so it can be used with
> `dmesg -s`.

And what doesn't work now?

> This change is not eligible for stable@.
>
> Please Reply-To-All.
>
> Thanks and have a great day.
>
> Marc.

These lines don't belong here. Please see
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/process/submitting-patches.rst?h=v6.0-rc1

> Signed-off-by: Marc Aurèle La France <tsi@xxxxxxxxxx>
>
> diff -aNpRruz -X /etc/diff.excludes linux-5.17.1/include/linux/printk.h devel-5.17.1/include/linux/printk.h
> --- linux-5.17.1/include/linux/printk.h 2022-03-28 02:03:22.000000000 -0600
> +++ devel-5.17.1/include/linux/printk.h 2022-03-28 07:14:10.803008293 -0600
> @@ -318,6 +337,7 @@ extern void __printk_cpu_unlock(void);
> #endif /* CONFIG_SMP */
>
> extern int kptr_restrict;
> +extern u32 log_buf_len;
>
> /**
> * pr_fmt - used by the pr_*() macros to generate the printk format string
> diff -aNpRruz -X /etc/diff.excludes linux-5.17.1/kernel/printk/printk.c devel-5.17.1/kernel/printk/printk.c
> --- linux-5.17.1/kernel/printk/printk.c 2022-03-28 02:03:22.000000000 -0600
> +++ devel-5.17.1/kernel/printk/printk.c 2022-03-28 07:14:10.803008293 -0600
> @@ -404,7 +404,7 @@ static struct latched_seq clear_seq = {
> #define LOG_BUF_LEN_MAX (u32)(1 << 31)
> static char __log_buf[__LOG_BUF_LEN] __aligned(LOG_ALIGN);
> static char *log_buf = __log_buf;
> -static u32 log_buf_len = __LOG_BUF_LEN;
> +u32 log_buf_len = __LOG_BUF_LEN;
>
> /*
> * Define the average message size. This only affects the number of
> diff -aNpRruz -X /etc/diff.excludes linux-5.17.1/kernel/printk/sysctl.c devel-5.17.1/kernel/printk/sysctl.c
> --- linux-5.17.1/kernel/printk/sysctl.c 2022-03-28 02:03:22.000000000 -0600
> +++ devel-5.17.1/kernel/printk/sysctl.c 2022-03-28 07:14:10.803008293 -0600
> @@ -22,6 +22,13 @@ static int proc_dointvec_minmax_sysadmin(struct ctl_table *table, int write,
>
> static struct ctl_table printk_sysctls[] = {
> {
> + .procname = "log_buf_len",
> + .data = &log_buf_len,
> + .maxlen = sizeof(u32),
> + .mode = 0444,
> + .proc_handler = proc_dointvec,
> + },
> + {
> .procname = "printk",
> .data = &console_loglevel,
> .maxlen = 4*sizeof(int),