2022-08-10 21:11:25

by Marc Aurèle La France

[permalink] [raw]
Subject: [PATCH] printk: Export log_buf_len to userland

Make the kernel log's buffer size available to userland so it can be used with
`dmesg -s`.

This change is not eligible for stable@.

Please Reply-To-All.

Thanks and have a great day.

Marc.

Signed-off-by: Marc Aurèle La France <[email protected]>

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),


2022-08-15 02:51:34

by Sergey Senozhatsky

[permalink] [raw]
Subject: Re: [PATCH] printk: Export log_buf_len to userland

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 <[email protected]>
>
> 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),

2022-08-15 16:15:41

by John Ogness

[permalink] [raw]
Subject: Re: [PATCH] printk: Export log_buf_len to userland

On 2022-08-15, Sergey Senozhatsky <[email protected]> wrote:
> 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`.

This information is already available via:

klogctl(SYSLOG_ACTION_SIZE_BUFFER, NULL, 0)

And dmesg already uses this with "dmesg -S".

John Ogness

2022-08-15 23:30:04

by Marc Aurèle La France

[permalink] [raw]
Subject: Re: [PATCH] printk: Export log_buf_len to userland

On Mon, 15 Aug 2022, John Ogness wrote:
> On 2022-08-15, Sergey Senozhatsky <[email protected]> wrote:
>> 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`.

> This information is already available via:

> klogctl(SYSLOG_ACTION_SIZE_BUFFER, NULL, 0)

> And dmesg already uses this with "dmesg -S".

Thanks for the much more helpful reply.

Have a great day.

Marc.