Skip to content

Commit c71b02e

Browse files
committed
Revert "pstore: Honor dmesg_restrict sysctl on dmesg dumps"
This reverts commit 68c4a4f, with various conflict clean-ups. The capability check required too much privilege compared to simple DAC controls. A system builder was forced to have crash handler processes run with CAP_SYSLOG which would give it the ability to read (and wipe) the _current_ dmesg, which is much more access than being given access only to the historical log stored in pstorefs. With the prior commit to make the root directory 0750, the files are protected by default but a system builder can now opt to give access to a specific group (via chgrp on the pstorefs root directory) without being forced to also give away CAP_SYSLOG. Suggested-by: Nick Kralevich <[email protected]> Signed-off-by: Kees Cook <[email protected]> Reviewed-by: Petr Mladek <[email protected]> Reviewed-by: Sergey Senozhatsky <[email protected]>
1 parent d7caa33 commit c71b02e

File tree

3 files changed

+1
-33
lines changed

3 files changed

+1
-33
lines changed

fs/pstore/inode.c

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@
3636
#include <linux/slab.h>
3737
#include <linux/spinlock.h>
3838
#include <linux/uaccess.h>
39-
#include <linux/syslog.h>
4039

4140
#include "internal.h"
4241

@@ -132,18 +131,6 @@ static const struct seq_operations pstore_ftrace_seq_ops = {
132131
.show = pstore_ftrace_seq_show,
133132
};
134133

135-
static int pstore_check_syslog_permissions(struct pstore_private *ps)
136-
{
137-
switch (ps->record->type) {
138-
case PSTORE_TYPE_DMESG:
139-
case PSTORE_TYPE_CONSOLE:
140-
return check_syslog_permissions(SYSLOG_ACTION_READ_ALL,
141-
SYSLOG_FROM_READER);
142-
default:
143-
return 0;
144-
}
145-
}
146-
147134
static ssize_t pstore_file_read(struct file *file, char __user *userbuf,
148135
size_t count, loff_t *ppos)
149136
{
@@ -163,10 +150,6 @@ static int pstore_file_open(struct inode *inode, struct file *file)
163150
int err;
164151
const struct seq_operations *sops = NULL;
165152

166-
err = pstore_check_syslog_permissions(ps);
167-
if (err)
168-
return err;
169-
170153
if (ps->record->type == PSTORE_TYPE_FTRACE)
171154
sops = &pstore_ftrace_seq_ops;
172155

@@ -204,11 +187,6 @@ static int pstore_unlink(struct inode *dir, struct dentry *dentry)
204187
{
205188
struct pstore_private *p = d_inode(dentry)->i_private;
206189
struct pstore_record *record = p->record;
207-
int err;
208-
209-
err = pstore_check_syslog_permissions(p);
210-
if (err)
211-
return err;
212190

213191
if (!record->psi->erase)
214192
return -EPERM;

include/linux/syslog.h

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,4 @@
4949

5050
int do_syslog(int type, char __user *buf, int count, int source);
5151

52-
#ifdef CONFIG_PRINTK
53-
int check_syslog_permissions(int type, int source);
54-
#else
55-
static inline int check_syslog_permissions(int type, int source)
56-
{
57-
return 0;
58-
}
59-
#endif
60-
6152
#endif /* _LINUX_SYSLOG_H */

kernel/printk/printk.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -649,7 +649,7 @@ static int syslog_action_restricted(int type)
649649
type != SYSLOG_ACTION_SIZE_BUFFER;
650650
}
651651

652-
int check_syslog_permissions(int type, int source)
652+
static int check_syslog_permissions(int type, int source)
653653
{
654654
/*
655655
* If this is from /proc/kmsg and we've already opened it, then we've
@@ -677,7 +677,6 @@ int check_syslog_permissions(int type, int source)
677677
ok:
678678
return security_syslog(type);
679679
}
680-
EXPORT_SYMBOL_GPL(check_syslog_permissions);
681680

682681
static void append_char(char **pp, char *e, char c)
683682
{

0 commit comments

Comments
 (0)