umh: simplify the capability pointer logic
The usermodehelper code uses two fake pointers for the two capability cases: CAP_BSET for reading and writing 'usermodehelper_bset', and CAP_PI to read and write 'usermodehelper_inheritable'. This seems to be a completely unnecessary indirection, since we could instead just use the pointers themselves, and never have to do any "if this then that" kind of logic. So just get rid of the fake pointer values, and use the real pointer values instead. Reviewed-by: Luis Chamberlain <mcgrof@kernel.org> Cc: Eric Biederman <ebiederm@xmission.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Christoph Hellwig <hch@lst.de> Cc: Kees Cook <keescook@chromium.org> Cc: Iurii Zaikin <yzaikin@google.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Родитель
fb35342f0a
Коммит
e778361555
18
kernel/umh.c
18
kernel/umh.c
|
@ -32,9 +32,6 @@
|
|||
|
||||
#include <trace/events/module.h>
|
||||
|
||||
#define CAP_BSET (void *)1
|
||||
#define CAP_PI (void *)2
|
||||
|
||||
static kernel_cap_t usermodehelper_bset = CAP_FULL_SET;
|
||||
static kernel_cap_t usermodehelper_inheritable = CAP_FULL_SET;
|
||||
static DEFINE_SPINLOCK(umh_sysctl_lock);
|
||||
|
@ -512,16 +509,11 @@ static int proc_cap_handler(struct ctl_table *table, int write,
|
|||
/*
|
||||
* convert from the global kernel_cap_t to the ulong array to print to
|
||||
* userspace if this is a read.
|
||||
*
|
||||
* Legacy format: capabilities are exposed as two 32-bit values
|
||||
*/
|
||||
cap = table->data;
|
||||
spin_lock(&umh_sysctl_lock);
|
||||
if (table->data == CAP_BSET)
|
||||
cap = &usermodehelper_bset;
|
||||
else if (table->data == CAP_PI)
|
||||
cap = &usermodehelper_inheritable;
|
||||
else
|
||||
BUG();
|
||||
|
||||
/* Legacy format: capabilities are exposed as two 32-bit values */
|
||||
cap_array[0] = (u32) cap->val;
|
||||
cap_array[1] = cap->val >> 32;
|
||||
spin_unlock(&umh_sysctl_lock);
|
||||
|
@ -555,14 +547,14 @@ static int proc_cap_handler(struct ctl_table *table, int write,
|
|||
struct ctl_table usermodehelper_table[] = {
|
||||
{
|
||||
.procname = "bset",
|
||||
.data = CAP_BSET,
|
||||
.data = &usermodehelper_bset,
|
||||
.maxlen = 2 * sizeof(unsigned long),
|
||||
.mode = 0600,
|
||||
.proc_handler = proc_cap_handler,
|
||||
},
|
||||
{
|
||||
.procname = "inheritable",
|
||||
.data = CAP_PI,
|
||||
.data = &usermodehelper_inheritable,
|
||||
.maxlen = 2 * sizeof(unsigned long),
|
||||
.mode = 0600,
|
||||
.proc_handler = proc_cap_handler,
|
||||
|
|
Загрузка…
Ссылка в новой задаче