Skip to content

Commit

Permalink
umh: simplify the capability pointer logic
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
torvalds committed Mar 4, 2023
1 parent fb35342 commit e778361
Showing 1 changed file with 5 additions and 13 deletions.
18 changes: 5 additions & 13 deletions kernel/umh.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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,
Expand Down

0 comments on commit e778361

Please sign in to comment.