* [patch 1/4] Add <linux/klog.h>
@ 2006-12-20 0:34 Vincent Legoll
0 siblings, 0 replies; 8+ messages in thread
From: Vincent Legoll @ 2006-12-20 0:34 UTC (permalink / raw)
To: zackw; +Cc: linux-kernel
[-- Attachment #1: Type: text/plain, Size: 181 bytes --]
Hello,
what about something along the lines of the following,
on top of your patch ?
Or should the kernel-doc be put on another function
instead of that one ?
--
Vincent Legoll
[-- Attachment #2: do-syslog-kernel-doc --]
[-- Type: text/plain, Size: 1178 bytes --]
Add do_syslog() kernel-doc
---
commit 95b0721d8b4b46ddf83113fe49492810d7d92060
tree e2715a8cf7eb0d71b3bee2185a5cf98639d79d90
parent de794d2dfd6dd0c38dd552020ac00c46e1df5293
author Vincent Legoll <vincent.legoll@gmail.com> Wed, 20 Dec 2006 01:29:34 +0100
committer Vincent Legoll <vincent.legoll@gmail.com> Wed, 20 Dec 2006 01:29:34 +0100
kernel/printk.c | 11 ++++++++++-
1 files changed, 10 insertions(+), 1 deletions(-)
diff --git a/kernel/printk.c b/kernel/printk.c
index 232467e..5416d07 100644
--- a/kernel/printk.c
+++ b/kernel/printk.c
@@ -164,7 +164,16 @@ out:
__setup("log_buf_len=", log_buf_len_setup);
-/* See linux/klog.h for the command numbers passed as the first argument. */
+/**
+ * do_syslog - operate on kernel messages log
+ * @type: operation to perform
+ * @buf: user-space buffer to copy data into
+ * @len: length of data to copy from log into @buf
+ *
+ * See include/linux/klog.h for the command numbers passed as @type.
+ * Parameters @buf & @len are only used for operations of type %KLOG_READ,
+ * %KLOG_READ_HIST and %KLOG_READ_CLEAR_HIST.
+ */
int do_syslog(int type, char __user *buf, int len)
{
unsigned long i, j, limit, count;
^ permalink raw reply related [flat|nested] 8+ messages in thread* [patch 0/4] /proc/kmsg permissions, take four
@ 2006-12-24 20:22 Zack Weinberg
2006-12-24 20:22 ` [patch 1/4] Add <linux/klog.h> Zack Weinberg
0 siblings, 1 reply; 8+ messages in thread
From: Zack Weinberg @ 2006-12-24 20:22 UTC (permalink / raw)
To: Stephen Smalley, jmorris, Chris Wright, Vincent Legoll; +Cc: linux-kernel
Here's yet another revision of the /proc/kmsg permissions patch
series. To recap, the point is to allow klogd to drop privileges
and continue reading from /proc/kmsg (currently, even if klogd has a
legitimately opened fd on /proc/kmsg, it cannot read from it unless
it has CAP_SYS_ADMIN asserted). SELinux's pickier and finer-grained
privilege rules for /proc/kmsg are unchanged.
There are two significant changes from the previous revision. First,
in keeping with the recommended style, I have eliminated the
security_syslog_or_fail() macro. Instead there is a static array mapping
KLOG_* opcodes to LSM_KLOG_* privilege classes. This requires slightly
different coding in the security hooks but I think it's clearer overall.
Second, I've incorporated Vincent Legoll's kerneldoc comment for sys_syslog
(nee do_syslog) with some wording improvements and expansion to cover the
klog_* functions introduced part-way through the patch. I don't think
proc/kmsg.c needs kerneldoc, it's very simple after this patch series.
I've been through Documentation/CodingStyle and satisfied myself that
everything is now in the proper mode. I don't suppose anyone has comments
on the *content* of the changes...?
zw
^ permalink raw reply [flat|nested] 8+ messages in thread
* [patch 1/4] Add <linux/klog.h>
2006-12-24 20:22 [patch 0/4] /proc/kmsg permissions, take four Zack Weinberg
@ 2006-12-24 20:22 ` Zack Weinberg
2006-12-24 21:00 ` Jan Engelhardt
2006-12-27 23:25 ` Vincent Legoll
0 siblings, 2 replies; 8+ messages in thread
From: Zack Weinberg @ 2006-12-24 20:22 UTC (permalink / raw)
To: Stephen Smalley, jmorris, Chris Wright, Vincent Legoll; +Cc: linux-kernel
[-- Attachment #1: add_klog_h.diff --]
[-- Type: text/plain, Size: 6322 bytes --]
This patch introduces <linux/klog.h> with symbolic constants for the
various sys_syslog() opcodes, and changes all in-kernel references to
those opcodes to use the constants. The header is added to the set of
user/kernel interface headers.
zw
Index: linux-2.6/include/linux/Kbuild
===================================================================
--- linux-2.6.orig/include/linux/Kbuild 2006-12-23 08:56:15.000000000 -0800
+++ linux-2.6/include/linux/Kbuild 2006-12-24 11:43:14.000000000 -0800
@@ -100,6 +100,7 @@
header-y += ixjuser.h
header-y += jffs2.h
header-y += keyctl.h
+header-y += klog.h
header-y += limits.h
header-y += lock_dlm_plock.h
header-y += magic.h
Index: linux-2.6/include/linux/klog.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6/include/linux/klog.h 2006-12-24 11:43:14.000000000 -0800
@@ -0,0 +1,28 @@
+#ifndef _LINUX_KLOG_H
+#define _LINUX_KLOG_H
+
+/*
+ * Constants for the first argument to the syslog() system call
+ * (aka klogctl()). These numbers are part of the user space ABI!
+ */
+enum {
+ KLOG_CLOSE = 0, /* close log */
+ KLOG_OPEN = 1, /* open log */
+ KLOG_READ = 2, /* read from log (klogd) */
+
+ KLOG_READ_HIST = 3, /* read history of log messages (dmesg) */
+ KLOG_READ_CLEAR_HIST = 4, /* read and clear history */
+ KLOG_CLEAR_HIST = 5, /* just clear history */
+
+ KLOG_DISABLE_CONSOLE = 6, /* disable printk to console */
+ KLOG_ENABLE_CONSOLE = 7, /* enable printk to console */
+ KLOG_SET_CONSOLE_LVL = 8, /* set minimum severity of messages to be
+ * printed to console */
+
+ KLOG_GET_UNREAD = 9, /* return number of unread characters */
+ KLOG_GET_SIZE = 10, /* return size of log buffer */
+
+ KLOG_OPCODE_MAX
+};
+
+#endif /* klog.h */
Index: linux-2.6/kernel/printk.c
===================================================================
--- linux-2.6.orig/kernel/printk.c 2006-12-23 08:56:15.000000000 -0800
+++ linux-2.6/kernel/printk.c 2006-12-24 11:43:14.000000000 -0800
@@ -32,6 +32,7 @@
#include <linux/bootmem.h>
#include <linux/syscalls.h>
#include <linux/jiffies.h>
+#include <linux/klog.h>
#include <asm/uaccess.h>
@@ -163,20 +164,21 @@
__setup("log_buf_len=", log_buf_len_setup);
-/*
- * Commands to do_syslog:
+/**
+ * do_syslog - operate on the log of kernel messages
+ * @type: operation to perform
+ * @buf: user-space buffer to copy data into
+ * @len: number of bytes of space available at @buf
+ *
+ * See include/linux/klog.h for the command numbers passed as @type.
+ * The @buf and @len parameters are used with the above meanings for
+ * @type values %KLOG_READ, %KLOG_READ_HIST and %KLOG_READ_CLEAR_HIST.
+ * @len is reused with a different meaning, and @buf ignored, for
+ * %KLOG_SET_CONSOLE_LVL. Both @buf and @len are ignored for all
+ * other @type values.
*
- * 0 -- Close the log. Currently a NOP.
- * 1 -- Open the log. Currently a NOP.
- * 2 -- Read from the log.
- * 3 -- Read all messages remaining in the ring buffer.
- * 4 -- Read and clear all messages remaining in the ring buffer
- * 5 -- Clear ring buffer.
- * 6 -- Disable printk's to console
- * 7 -- Enable printk's to console
- * 8 -- Set level of messages printed to console
- * 9 -- Return number of unread characters in the log buffer
- * 10 -- Return size of the log buffer
+ * On failure, returns a negative errno code. On success, returns a
+ * nonnegative integer whose meaning depends on @type.
*/
int do_syslog(int type, char __user *buf, int len)
{
@@ -190,11 +192,11 @@
return error;
switch (type) {
- case 0: /* Close log */
+ case KLOG_CLOSE:
break;
- case 1: /* Open log */
+ case KLOG_OPEN:
break;
- case 2: /* Read from log */
+ case KLOG_READ:
error = -EINVAL;
if (!buf || len < 0)
goto out;
@@ -225,10 +227,10 @@
if (!error)
error = i;
break;
- case 4: /* Read/clear last kernel messages */
+ case KLOG_READ_CLEAR_HIST:
do_clear = 1;
/* FALL THRU */
- case 3: /* Read last kernel messages */
+ case KLOG_READ_HIST:
error = -EINVAL;
if (!buf || len < 0)
goto out;
@@ -281,16 +283,16 @@
}
}
break;
- case 5: /* Clear ring buffer */
+ case KLOG_CLEAR_HIST:
logged_chars = 0;
break;
- case 6: /* Disable logging to console */
+ case KLOG_DISABLE_CONSOLE:
console_loglevel = minimum_console_loglevel;
break;
- case 7: /* Enable logging to console */
+ case KLOG_ENABLE_CONSOLE:
console_loglevel = default_console_loglevel;
break;
- case 8: /* Set level of messages printed to console */
+ case KLOG_SET_CONSOLE_LVL:
error = -EINVAL;
if (len < 1 || len > 8)
goto out;
@@ -299,10 +301,10 @@
console_loglevel = len;
error = 0;
break;
- case 9: /* Number of chars in the log buffer */
+ case KLOG_GET_UNREAD:
error = log_end - log_start;
break;
- case 10: /* Size of the log buffer */
+ case KLOG_GET_SIZE:
error = log_buf_len;
break;
default:
Index: linux-2.6/fs/proc/kmsg.c
===================================================================
--- linux-2.6.orig/fs/proc/kmsg.c 2006-12-23 08:55:17.000000000 -0800
+++ linux-2.6/fs/proc/kmsg.c 2006-12-24 11:43:14.000000000 -0800
@@ -11,6 +11,7 @@
#include <linux/kernel.h>
#include <linux/poll.h>
#include <linux/fs.h>
+#include <linux/klog.h>
#include <asm/uaccess.h>
#include <asm/io.h>
@@ -21,27 +22,28 @@
static int kmsg_open(struct inode * inode, struct file * file)
{
- return do_syslog(1,NULL,0);
+ return do_syslog(KLOG_OPEN, NULL, 0);
}
static int kmsg_release(struct inode * inode, struct file * file)
{
- (void) do_syslog(0,NULL,0);
+ (void) do_syslog(KLOG_CLOSE, NULL, 0);
return 0;
}
static ssize_t kmsg_read(struct file *file, char __user *buf,
size_t count, loff_t *ppos)
{
- if ((file->f_flags & O_NONBLOCK) && !do_syslog(9, NULL, 0))
+ if ((file->f_flags & O_NONBLOCK)
+ && !do_syslog(KLOG_GET_UNREAD, NULL, 0))
return -EAGAIN;
- return do_syslog(2, buf, count);
+ return do_syslog(KLOG_READ, buf, count);
}
static unsigned int kmsg_poll(struct file *file, poll_table *wait)
{
poll_wait(file, &log_wait, wait);
- if (do_syslog(9, NULL, 0))
+ if (do_syslog(KLOG_GET_UNREAD, NULL, 0))
return POLLIN | POLLRDNORM;
return 0;
}
--
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [patch 1/4] Add <linux/klog.h>
2006-12-24 20:22 ` [patch 1/4] Add <linux/klog.h> Zack Weinberg
@ 2006-12-24 21:00 ` Jan Engelhardt
2006-12-27 23:25 ` Vincent Legoll
1 sibling, 0 replies; 8+ messages in thread
From: Jan Engelhardt @ 2006-12-24 21:00 UTC (permalink / raw)
To: Zack Weinberg
Cc: Stephen Smalley, jmorris, Chris Wright, Vincent Legoll,
linux-kernel
On Dec 24 2006 12:22, Zack Weinberg wrote:
>===================================================================
>--- linux-2.6.orig/fs/proc/kmsg.c 2006-12-23 08:55:17.000000000 -0800
>+++ linux-2.6/fs/proc/kmsg.c 2006-12-24 11:43:14.000000000 -0800
>@@ -11,6 +11,7 @@
> #include <linux/kernel.h>
> #include <linux/poll.h>
> #include <linux/fs.h>
>+#include <linux/klog.h>
>
> #include <asm/uaccess.h>
> #include <asm/io.h>
>@@ -21,27 +22,28 @@
>
> static int kmsg_open(struct inode * inode, struct file * file)
> {
>- return do_syslog(1,NULL,0);
>+ return do_syslog(KLOG_OPEN, NULL, 0);
> }
>
> static int kmsg_release(struct inode * inode, struct file * file)
> {
>- (void) do_syslog(0,NULL,0);
>+ (void) do_syslog(KLOG_CLOSE, NULL, 0);
^^^^^^
I bet you can get rid of that in the process.
-`J'
--
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [patch 1/4] Add <linux/klog.h>
2006-12-24 20:22 ` [patch 1/4] Add <linux/klog.h> Zack Weinberg
2006-12-24 21:00 ` Jan Engelhardt
@ 2006-12-27 23:25 ` Vincent Legoll
1 sibling, 0 replies; 8+ messages in thread
From: Vincent Legoll @ 2006-12-27 23:25 UTC (permalink / raw)
To: Zack Weinberg; +Cc: Stephen Smalley, jmorris, Chris Wright, linux-kernel
Zack Weinberg wrote:
> This patch introduces <linux/klog.h> with symbolic constants for the
> various sys_syslog() opcodes, and changes all in-kernel references to
> those opcodes to use the constants. The header is added to the set of
> user/kernel interface headers.
[...]
> -/*
> - * Commands to do_syslog:
> +/**
> + * do_syslog - operate on the log of kernel messages
> + * @type: operation to perform
> + * @buf: user-space buffer to copy data into
> + * @len: number of bytes of space available at @buf
> + *
> + * See include/linux/klog.h for the command numbers passed as @type.
> + * The @buf and @len parameters are used with the above meanings for
> + * @type values %KLOG_READ, %KLOG_READ_HIST and %KLOG_READ_CLEAR_HIST.
> + * @len is reused with a different meaning, and @buf ignored, for
> + * %KLOG_SET_CONSOLE_LVL. Both @buf and @len are ignored for all
> + * other @type values.
> *
> - * 0 -- Close the log. Currently a NOP.
> - * 1 -- Open the log. Currently a NOP.
> - * 2 -- Read from the log.
> - * 3 -- Read all messages remaining in the ring buffer.
> - * 4 -- Read and clear all messages remaining in the ring buffer
> - * 5 -- Clear ring buffer.
> - * 6 -- Disable printk's to console
> - * 7 -- Enable printk's to console
> - * 8 -- Set level of messages printed to console
> - * 9 -- Return number of unread characters in the log buffer
> - * 10 -- Return size of the log buffer
> + * On failure, returns a negative errno code. On success, returns a
> + * nonnegative integer whose meaning depends on @type.
> */
> int do_syslog(int type, char __user *buf, int len)
> {
> @@ -190,11 +192,11 @@
That part looks good to me, and the kernel-doc hunks from
"[patch 3/4] Refactor do_syslog interface"
too, are:
Acked-by: Vincent Legoll <vincent.legoll@gmail.com>
thanks for handling that.
--
Vincent Legoll
^ permalink raw reply [flat|nested] 8+ messages in thread
* [patch 0/4] /proc/kmsg permissions, take three
@ 2006-12-15 0:16 Zack Weinberg
2006-12-15 0:16 ` [patch 1/4] Add <linux/klog.h> Zack Weinberg
0 siblings, 1 reply; 8+ messages in thread
From: Zack Weinberg @ 2006-12-15 0:16 UTC (permalink / raw)
To: Stephen Smalley, jmorris, Chris Wright; +Cc: linux-kernel
Here's a re-revised version of my patch set to allow klogd to drop
privileges and continue reading from /proc/kmsg (currently, even if klogd
has a legitimately opened fd on /proc/kmsg, it cannot read from it unless
it has CAP_SYS_ADMIN asserted). SELinux's pickier and finer-grained
privilege rules for /proc/kmsg are unchanged.
The major change from the previous patchset
[q.v. http://comments.gmane.org/gmane.linux.kernel/466034 ] is that,
as Arjan van de Ven requested, the new header linux/klog.h contains only
userspace-visible definitions (the constants for sys_syslog()). Thanks to
Alexey Dobriyan for telling me the proper place to put the KLOGSEC_*
constants (now renamed LSM_KLOG_* in keeping with other such constants).
They have also been rediffed versus yesterday's git. They should be
applied in sequence; each step compiles, and the complete set has been
booted and tested to work as intended.
Any comments, as usual, appreciated. I would very much like to see this
in 2.6.20.
zw
^ permalink raw reply [flat|nested] 8+ messages in thread
* [patch 1/4] Add <linux/klog.h>
2006-12-15 0:16 [patch 0/4] /proc/kmsg permissions, take three Zack Weinberg
@ 2006-12-15 0:16 ` Zack Weinberg
2006-12-15 0:59 ` Randy Dunlap
0 siblings, 1 reply; 8+ messages in thread
From: Zack Weinberg @ 2006-12-15 0:16 UTC (permalink / raw)
To: Stephen Smalley, jmorris, Chris Wright; +Cc: linux-kernel
[-- Attachment #1: add_klog_h.diff --]
[-- Type: text/plain, Size: 5835 bytes --]
This patch introduces <linux/klog.h> with symbolic constants for the
various sys_syslog() opcodes, and changes all in-kernel references to
those opcodes to use the constants. The header is added to the set of
user/kernel interface headers. (Unlike the previous revision of this
patch series, no kernel-private additions to this file are contemplated.)
zw
Index: linux-2.6/include/linux/Kbuild
===================================================================
--- linux-2.6.orig/include/linux/Kbuild 2006-12-13 15:58:13.000000000 -0800
+++ linux-2.6/include/linux/Kbuild 2006-12-13 16:06:57.000000000 -0800
@@ -100,6 +100,7 @@
header-y += ixjuser.h
header-y += jffs2.h
header-y += keyctl.h
+header-y += klog.h
header-y += limits.h
header-y += lock_dlm_plock.h
header-y += magic.h
Index: linux-2.6/include/linux/klog.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6/include/linux/klog.h 2006-12-13 16:06:22.000000000 -0800
@@ -0,0 +1,26 @@
+#ifndef _LINUX_KLOG_H
+#define _LINUX_KLOG_H
+
+/*
+ * Constants for the first argument to the syslog() system call
+ * (aka klogctl()). These numbers are part of the user space ABI!
+ */
+enum {
+ KLOG_CLOSE = 0, /* close log */
+ KLOG_OPEN = 1, /* open log */
+ KLOG_READ = 2, /* read from log (klogd) */
+
+ KLOG_READ_HIST = 3, /* read history of log messages (dmesg) */
+ KLOG_READ_CLEAR_HIST = 4, /* read and clear history */
+ KLOG_CLEAR_HIST = 5, /* just clear history */
+
+ KLOG_DISABLE_CONSOLE = 6, /* disable printk to console */
+ KLOG_ENABLE_CONSOLE = 7, /* enable printk to console */
+ KLOG_SET_CONSOLE_LVL = 8, /* set minimum severity of messages to be
+ * printed to console */
+
+ KLOG_GET_UNREAD = 9, /* return number of unread characters */
+ KLOG_GET_SIZE = 10 /* return size of log buffer */
+};
+
+#endif /* klog.h */
Index: linux-2.6/kernel/printk.c
===================================================================
--- linux-2.6.orig/kernel/printk.c 2006-12-13 15:58:16.000000000 -0800
+++ linux-2.6/kernel/printk.c 2006-12-13 16:06:22.000000000 -0800
@@ -32,6 +32,7 @@
#include <linux/bootmem.h>
#include <linux/syscalls.h>
#include <linux/jiffies.h>
+#include <linux/klog.h>
#include <asm/uaccess.h>
@@ -163,21 +164,7 @@
__setup("log_buf_len=", log_buf_len_setup);
-/*
- * Commands to do_syslog:
- *
- * 0 -- Close the log. Currently a NOP.
- * 1 -- Open the log. Currently a NOP.
- * 2 -- Read from the log.
- * 3 -- Read all messages remaining in the ring buffer.
- * 4 -- Read and clear all messages remaining in the ring buffer
- * 5 -- Clear ring buffer.
- * 6 -- Disable printk's to console
- * 7 -- Enable printk's to console
- * 8 -- Set level of messages printed to console
- * 9 -- Return number of unread characters in the log buffer
- * 10 -- Return size of the log buffer
- */
+/* See linux/klog.h for the command numbers passed as the first argument. */
int do_syslog(int type, char __user *buf, int len)
{
unsigned long i, j, limit, count;
@@ -190,11 +177,11 @@
return error;
switch (type) {
- case 0: /* Close log */
+ case KLOG_CLOSE:
break;
- case 1: /* Open log */
+ case KLOG_OPEN:
break;
- case 2: /* Read from log */
+ case KLOG_READ:
error = -EINVAL;
if (!buf || len < 0)
goto out;
@@ -225,10 +212,10 @@
if (!error)
error = i;
break;
- case 4: /* Read/clear last kernel messages */
+ case KLOG_READ_CLEAR_HIST:
do_clear = 1;
/* FALL THRU */
- case 3: /* Read last kernel messages */
+ case KLOG_READ_HIST:
error = -EINVAL;
if (!buf || len < 0)
goto out;
@@ -281,16 +268,16 @@
}
}
break;
- case 5: /* Clear ring buffer */
+ case KLOG_CLEAR_HIST:
logged_chars = 0;
break;
- case 6: /* Disable logging to console */
+ case KLOG_DISABLE_CONSOLE:
console_loglevel = minimum_console_loglevel;
break;
- case 7: /* Enable logging to console */
+ case KLOG_ENABLE_CONSOLE:
console_loglevel = default_console_loglevel;
break;
- case 8: /* Set level of messages printed to console */
+ case KLOG_SET_CONSOLE_LVL:
error = -EINVAL;
if (len < 1 || len > 8)
goto out;
@@ -299,10 +286,10 @@
console_loglevel = len;
error = 0;
break;
- case 9: /* Number of chars in the log buffer */
+ case KLOG_GET_UNREAD:
error = log_end - log_start;
break;
- case 10: /* Size of the log buffer */
+ case KLOG_GET_SIZE:
error = log_buf_len;
break;
default:
Index: linux-2.6/fs/proc/kmsg.c
===================================================================
--- linux-2.6.orig/fs/proc/kmsg.c 2006-12-13 15:53:29.000000000 -0800
+++ linux-2.6/fs/proc/kmsg.c 2006-12-13 16:04:46.000000000 -0800
@@ -11,6 +11,7 @@
#include <linux/kernel.h>
#include <linux/poll.h>
#include <linux/fs.h>
+#include <linux/klog.h>
#include <asm/uaccess.h>
#include <asm/io.h>
@@ -21,27 +22,28 @@
static int kmsg_open(struct inode * inode, struct file * file)
{
- return do_syslog(1,NULL,0);
+ return do_syslog(KLOG_OPEN,NULL,0);
}
static int kmsg_release(struct inode * inode, struct file * file)
{
- (void) do_syslog(0,NULL,0);
+ (void) do_syslog(KLOG_CLOSE,NULL,0);
return 0;
}
static ssize_t kmsg_read(struct file *file, char __user *buf,
size_t count, loff_t *ppos)
{
- if ((file->f_flags & O_NONBLOCK) && !do_syslog(9, NULL, 0))
+ if ((file->f_flags & O_NONBLOCK)
+ && !do_syslog(KLOG_GET_UNREAD, NULL, 0))
return -EAGAIN;
- return do_syslog(2, buf, count);
+ return do_syslog(KLOG_READ, buf, count);
}
static unsigned int kmsg_poll(struct file *file, poll_table *wait)
{
poll_wait(file, &log_wait, wait);
- if (do_syslog(9, NULL, 0))
+ if (do_syslog(KLOG_GET_UNREAD, NULL, 0))
return POLLIN | POLLRDNORM;
return 0;
}
--
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [patch 1/4] Add <linux/klog.h>
2006-12-15 0:16 ` [patch 1/4] Add <linux/klog.h> Zack Weinberg
@ 2006-12-15 0:59 ` Randy Dunlap
2006-12-15 1:21 ` Zack Weinberg
0 siblings, 1 reply; 8+ messages in thread
From: Randy Dunlap @ 2006-12-15 0:59 UTC (permalink / raw)
To: Zack Weinberg; +Cc: Stephen Smalley, jmorris, Chris Wright, linux-kernel
On Thu, 14 Dec 2006 16:16:40 -0800 Zack Weinberg wrote:
> This patch introduces <linux/klog.h> with symbolic constants for the
> various sys_syslog() opcodes, and changes all in-kernel references to
> those opcodes to use the constants. The header is added to the set of
> user/kernel interface headers. (Unlike the previous revision of this
> patch series, no kernel-private additions to this file are contemplated.)
Hi Zack,
This patch looks good except for one nit:
> --- linux-2.6.orig/fs/proc/kmsg.c 2006-12-13 15:53:29.000000000 -0800
> +++ linux-2.6/fs/proc/kmsg.c 2006-12-13 16:04:46.000000000 -0800
> @@ -21,27 +22,28 @@
>
> static int kmsg_open(struct inode * inode, struct file * file)
> {
> - return do_syslog(1,NULL,0);
> + return do_syslog(KLOG_OPEN,NULL,0);
> }
>
> static int kmsg_release(struct inode * inode, struct file * file)
> {
> - (void) do_syslog(0,NULL,0);
> + (void) do_syslog(KLOG_CLOSE,NULL,0);
> return 0;
> }
Please use a space after the commas (even though you just left it
as it already was).
---
~Randy
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [patch 1/4] Add <linux/klog.h>
2006-12-15 0:59 ` Randy Dunlap
@ 2006-12-15 1:21 ` Zack Weinberg
0 siblings, 0 replies; 8+ messages in thread
From: Zack Weinberg @ 2006-12-15 1:21 UTC (permalink / raw)
To: Randy Dunlap; +Cc: Stephen Smalley, jmorris, Chris Wright, linux-kernel
On 12/14/06, Randy Dunlap <randy.dunlap@oracle.com> wrote:
> > - (void) do_syslog(0,NULL,0);
> > + (void) do_syslog(KLOG_CLOSE,NULL,0);
>
> Please use a space after the commas (even though you just left it
> as it already was).
Will change for the next revision.
zw
^ permalink raw reply [flat|nested] 8+ messages in thread
* [patch 0/4] Syslog permissions, revised
@ 2006-11-13 6:40 Zack Weinberg
2006-11-13 6:40 ` [patch 1/4] Add <linux/klog.h> Zack Weinberg
0 siblings, 1 reply; 8+ messages in thread
From: Zack Weinberg @ 2006-11-13 6:40 UTC (permalink / raw)
To: Chris Wright, Stephen Smalley, jmorris; +Cc: linux-kernel
This patchset revises my attempt from last week to allow running klogd
unprivileged without a root shim. I believe I have addressed all
outstanding objections: in particular, the privilege model enforced by
SELinux is unchanged (you have to have system__syslog_mod to read
/proc/kmsg). I have also included some nice refactorings (symbolic
constants for sys_syslog opcodes, that sort of thing) and a few
bugfixes (minor and unlikely to affect any live application, but
still).
I hope that this can be considered for 2.6.19; it is low risk in my
opinion and it would be nice to get this functionality into the hands
of the distributors sooner.
zw
^ permalink raw reply [flat|nested] 8+ messages in thread
* [patch 1/4] Add <linux/klog.h>
2006-11-13 6:40 [patch 0/4] Syslog permissions, revised Zack Weinberg
@ 2006-11-13 6:40 ` Zack Weinberg
0 siblings, 0 replies; 8+ messages in thread
From: Zack Weinberg @ 2006-11-13 6:40 UTC (permalink / raw)
To: Chris Wright, Stephen Smalley, jmorris; +Cc: linux-kernel
[-- Attachment #1: add_klog_h.diff --]
[-- Type: text/plain, Size: 5846 bytes --]
This patch introduces <linux/klog.h> with symbolic constants for the
various sys_syslog() opcodes, and changes all in-kernel references to
those opcodes to use the constants. The header is added to the set of
user/kernel interface headers; there is no #ifdef __KERNEL__ block in
it yet, but there will be in subsequent patches, so I put it in as an
'unifdef' header.
zw
Index: linux-2.6/include/linux/Kbuild
===================================================================
--- linux-2.6.orig/include/linux/Kbuild 2006-11-10 13:36:58.000000000 -0800
+++ linux-2.6/include/linux/Kbuild 2006-11-10 13:37:13.000000000 -0800
@@ -253,6 +253,7 @@
unifdef-y += kernelcapi.h
unifdef-y += kernel.h
unifdef-y += keyboard.h
+unifdef-y += klog.h
unifdef-y += llc.h
unifdef-y += loop.h
unifdef-y += lp.h
Index: linux-2.6/include/linux/klog.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6/include/linux/klog.h 2006-11-10 14:16:35.000000000 -0800
@@ -0,0 +1,26 @@
+#ifndef _LINUX_KLOG_H
+#define _LINUX_KLOG_H
+
+/*
+ * Constants for the first argument to the syslog() system call
+ * (aka klogctl()). These numbers are part of the user space ABI!
+ */
+enum {
+ KLOG_CLOSE = 0, /* close log */
+ KLOG_OPEN = 1, /* open log */
+ KLOG_READ = 2, /* read from log (klogd) */
+
+ KLOG_READ_HIST = 3, /* read history of log messages (dmesg) */
+ KLOG_READ_CLEAR_HIST = 4, /* read and clear history */
+ KLOG_CLEAR_HIST = 5, /* just clear history */
+
+ KLOG_DISABLE_CONSOLE = 6, /* disable printk to console */
+ KLOG_ENABLE_CONSOLE = 7, /* enable printk to console */
+ KLOG_SET_CONSOLE_LVL = 8, /* set minimum severity of messages to be
+ * printed to console */
+
+ KLOG_GET_UNREAD = 9, /* return number of unread characters */
+ KLOG_GET_SIZE = 10 /* return size of log buffer */
+};
+
+#endif /* klog.h */
Index: linux-2.6/kernel/printk.c
===================================================================
--- linux-2.6.orig/kernel/printk.c 2006-11-10 13:16:47.000000000 -0800
+++ linux-2.6/kernel/printk.c 2006-11-10 14:16:34.000000000 -0800
@@ -32,6 +32,7 @@
#include <linux/bootmem.h>
#include <linux/syscalls.h>
#include <linux/jiffies.h>
+#include <linux/klog.h>
#include <asm/uaccess.h>
@@ -165,21 +166,7 @@
__setup("log_buf_len=", log_buf_len_setup);
-/*
- * Commands to do_syslog:
- *
- * 0 -- Close the log. Currently a NOP.
- * 1 -- Open the log. Currently a NOP.
- * 2 -- Read from the log.
- * 3 -- Read all messages remaining in the ring buffer.
- * 4 -- Read and clear all messages remaining in the ring buffer
- * 5 -- Clear ring buffer.
- * 6 -- Disable printk's to console
- * 7 -- Enable printk's to console
- * 8 -- Set level of messages printed to console
- * 9 -- Return number of unread characters in the log buffer
- * 10 -- Return size of the log buffer
- */
+/* See linux/klog.h for the command numbers passed as the first argument. */
int do_syslog(int type, char __user *buf, int len)
{
unsigned long i, j, limit, count;
@@ -192,11 +179,11 @@
return error;
switch (type) {
- case 0: /* Close log */
+ case KLOG_CLOSE:
break;
- case 1: /* Open log */
+ case KLOG_OPEN:
break;
- case 2: /* Read from log */
+ case KLOG_READ:
error = -EINVAL;
if (!buf || len < 0)
goto out;
@@ -227,10 +214,10 @@
if (!error)
error = i;
break;
- case 4: /* Read/clear last kernel messages */
+ case KLOG_READ_CLEAR_HIST:
do_clear = 1;
/* FALL THRU */
- case 3: /* Read last kernel messages */
+ case KLOG_READ_HIST:
error = -EINVAL;
if (!buf || len < 0)
goto out;
@@ -283,16 +270,16 @@
}
}
break;
- case 5: /* Clear ring buffer */
+ case KLOG_CLEAR_HIST:
logged_chars = 0;
break;
- case 6: /* Disable logging to console */
+ case KLOG_DISABLE_CONSOLE:
console_loglevel = minimum_console_loglevel;
break;
- case 7: /* Enable logging to console */
+ case KLOG_ENABLE_CONSOLE:
console_loglevel = default_console_loglevel;
break;
- case 8: /* Set level of messages printed to console */
+ case KLOG_SET_CONSOLE_LVL:
error = -EINVAL;
if (len < 1 || len > 8)
goto out;
@@ -301,10 +288,10 @@
console_loglevel = len;
error = 0;
break;
- case 9: /* Number of chars in the log buffer */
+ case KLOG_GET_UNREAD:
error = log_end - log_start;
break;
- case 10: /* Size of the log buffer */
+ case KLOG_GET_SIZE:
error = log_buf_len;
break;
default:
Index: linux-2.6/fs/proc/kmsg.c
===================================================================
--- linux-2.6.orig/fs/proc/kmsg.c 2006-11-10 14:16:41.000000000 -0800
+++ linux-2.6/fs/proc/kmsg.c 2006-11-10 14:22:56.000000000 -0800
@@ -11,6 +11,7 @@
#include <linux/kernel.h>
#include <linux/poll.h>
#include <linux/fs.h>
+#include <linux/klog.h>
#include <asm/uaccess.h>
#include <asm/io.h>
@@ -21,27 +22,28 @@
static int kmsg_open(struct inode * inode, struct file * file)
{
- return do_syslog(1,NULL,0);
+ return do_syslog(KLOG_OPEN,NULL,0);
}
static int kmsg_release(struct inode * inode, struct file * file)
{
- (void) do_syslog(0,NULL,0);
+ (void) do_syslog(KLOG_CLOSE,NULL,0);
return 0;
}
static ssize_t kmsg_read(struct file *file, char __user *buf,
size_t count, loff_t *ppos)
{
- if ((file->f_flags & O_NONBLOCK) && !do_syslog(9, NULL, 0))
+ if ((file->f_flags & O_NONBLOCK)
+ && !do_syslog(KLOG_GET_UNREAD, NULL, 0))
return -EAGAIN;
- return do_syslog(2, buf, count);
+ return do_syslog(KLOG_READ, buf, count);
}
static unsigned int kmsg_poll(struct file *file, poll_table *wait)
{
poll_wait(file, &log_wait, wait);
- if (do_syslog(9, NULL, 0))
+ if (do_syslog(KLOG_GET_UNREAD, NULL, 0))
return POLLIN | POLLRDNORM;
return 0;
}
--
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2006-12-27 23:26 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-12-20 0:34 [patch 1/4] Add <linux/klog.h> Vincent Legoll
-- strict thread matches above, loose matches on Subject: below --
2006-12-24 20:22 [patch 0/4] /proc/kmsg permissions, take four Zack Weinberg
2006-12-24 20:22 ` [patch 1/4] Add <linux/klog.h> Zack Weinberg
2006-12-24 21:00 ` Jan Engelhardt
2006-12-27 23:25 ` Vincent Legoll
2006-12-15 0:16 [patch 0/4] /proc/kmsg permissions, take three Zack Weinberg
2006-12-15 0:16 ` [patch 1/4] Add <linux/klog.h> Zack Weinberg
2006-12-15 0:59 ` Randy Dunlap
2006-12-15 1:21 ` Zack Weinberg
2006-11-13 6:40 [patch 0/4] Syslog permissions, revised Zack Weinberg
2006-11-13 6:40 ` [patch 1/4] Add <linux/klog.h> Zack Weinberg
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox