Skip to content

Commit

Permalink
perf: Remove unnecessary parameter of security check
Browse files Browse the repository at this point in the history
It seems that the attr parameter was never been used in security
checks since it was first introduced by:

commit da97e18 ("perf_event: Add support for LSM and SELinux checks")

so remove it.

Signed-off-by: Luo Gengkun <[email protected]>
Reviewed-by: Ingo Molnar <[email protected]>
Signed-off-by: Paul Moore <[email protected]>
  • Loading branch information
Luo Gengkun authored and pcmoore committed Feb 26, 2025
1 parent 4632cd0 commit 9ec84f7
Show file tree
Hide file tree
Showing 11 changed files with 25 additions and 27 deletions.
2 changes: 1 addition & 1 deletion arch/x86/events/intel/bts.c
Original file line number Diff line number Diff line change
Expand Up @@ -559,7 +559,7 @@ static int bts_event_init(struct perf_event *event)
* to the user in a zero-copy fashion.
*/
if (event->attr.exclude_kernel) {
ret = perf_allow_kernel(&event->attr);
ret = perf_allow_kernel();
if (ret)
return ret;
}
Expand Down
2 changes: 1 addition & 1 deletion arch/x86/events/intel/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -4168,7 +4168,7 @@ static int intel_pmu_hw_config(struct perf_event *event)
if (x86_pmu.version < 3)
return -EINVAL;

ret = perf_allow_cpu(&event->attr);
ret = perf_allow_cpu();
if (ret)
return ret;

Expand Down
2 changes: 1 addition & 1 deletion arch/x86/events/intel/p4.c
Original file line number Diff line number Diff line change
Expand Up @@ -776,7 +776,7 @@ static int p4_validate_raw_event(struct perf_event *event)
* the user needs special permissions to be able to use it
*/
if (p4_ht_active() && p4_event_bind_map[v].shared) {
v = perf_allow_cpu(&event->attr);
v = perf_allow_cpu();
if (v)
return v;
}
Expand Down
4 changes: 2 additions & 2 deletions drivers/perf/arm_spe_pmu.c
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ static_assert((PERF_EVENT_FLAG_ARCH & SPE_PMU_HW_FLAGS_CX) == SPE_PMU_HW_FLAGS_C

static void set_spe_event_has_cx(struct perf_event *event)
{
if (IS_ENABLED(CONFIG_PID_IN_CONTEXTIDR) && !perf_allow_kernel(&event->attr))
if (IS_ENABLED(CONFIG_PID_IN_CONTEXTIDR) && !perf_allow_kernel())
event->hw.flags |= SPE_PMU_HW_FLAGS_CX;
}

Expand Down Expand Up @@ -765,7 +765,7 @@ static int arm_spe_pmu_event_init(struct perf_event *event)
set_spe_event_has_cx(event);
reg = arm_spe_event_to_pmscr(event);
if (reg & (PMSCR_EL1_PA | PMSCR_EL1_PCT))
return perf_allow_kernel(&event->attr);
return perf_allow_kernel();

return 0;
}
Expand Down
2 changes: 1 addition & 1 deletion include/linux/lsm_hook_defs.h
Original file line number Diff line number Diff line change
Expand Up @@ -445,7 +445,7 @@ LSM_HOOK(int, 0, bpf_token_capable, const struct bpf_token *token, int cap)
LSM_HOOK(int, 0, locked_down, enum lockdown_reason what)

#ifdef CONFIG_PERF_EVENTS
LSM_HOOK(int, 0, perf_event_open, struct perf_event_attr *attr, int type)
LSM_HOOK(int, 0, perf_event_open, int type)
LSM_HOOK(int, 0, perf_event_alloc, struct perf_event *event)
LSM_HOOK(int, 0, perf_event_read, struct perf_event *event)
LSM_HOOK(int, 0, perf_event_write, struct perf_event *event)
Expand Down
10 changes: 5 additions & 5 deletions include/linux/perf_event.h
Original file line number Diff line number Diff line change
Expand Up @@ -1672,22 +1672,22 @@ static inline int perf_is_paranoid(void)
return sysctl_perf_event_paranoid > -1;
}

int perf_allow_kernel(struct perf_event_attr *attr);
int perf_allow_kernel(void);

static inline int perf_allow_cpu(struct perf_event_attr *attr)
static inline int perf_allow_cpu(void)
{
if (sysctl_perf_event_paranoid > 0 && !perfmon_capable())
return -EACCES;

return security_perf_event_open(attr, PERF_SECURITY_CPU);
return security_perf_event_open(PERF_SECURITY_CPU);
}

static inline int perf_allow_tracepoint(struct perf_event_attr *attr)
static inline int perf_allow_tracepoint(void)
{
if (sysctl_perf_event_paranoid > -1 && !perfmon_capable())
return -EPERM;

return security_perf_event_open(attr, PERF_SECURITY_TRACEPOINT);
return security_perf_event_open(PERF_SECURITY_TRACEPOINT);
}

extern int perf_exclude_event(struct perf_event *event, struct pt_regs *regs);
Expand Down
5 changes: 2 additions & 3 deletions include/linux/security.h
Original file line number Diff line number Diff line change
Expand Up @@ -2324,14 +2324,13 @@ struct perf_event_attr;
struct perf_event;

#ifdef CONFIG_SECURITY
extern int security_perf_event_open(struct perf_event_attr *attr, int type);
extern int security_perf_event_open(int type);
extern int security_perf_event_alloc(struct perf_event *event);
extern void security_perf_event_free(struct perf_event *event);
extern int security_perf_event_read(struct perf_event *event);
extern int security_perf_event_write(struct perf_event *event);
#else
static inline int security_perf_event_open(struct perf_event_attr *attr,
int type)
static inline int security_perf_event_open(int type)
{
return 0;
}
Expand Down
14 changes: 7 additions & 7 deletions kernel/events/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -4883,7 +4883,7 @@ find_get_context(struct task_struct *task, struct perf_event *event)

if (!task) {
/* Must be root to operate on a CPU event: */
err = perf_allow_cpu(&event->attr);
err = perf_allow_cpu();
if (err)
return ERR_PTR(err);

Expand Down Expand Up @@ -12532,7 +12532,7 @@ static int perf_copy_attr(struct perf_event_attr __user *uattr,
}
/* privileged levels capture (kernel, hv): check permissions */
if (mask & PERF_SAMPLE_BRANCH_PERM_PLM) {
ret = perf_allow_kernel(attr);
ret = perf_allow_kernel();
if (ret)
return ret;
}
Expand Down Expand Up @@ -12789,12 +12789,12 @@ SYSCALL_DEFINE5(perf_event_open,
return err;

/* Do we allow access to perf_event_open(2) ? */
err = security_perf_event_open(&attr, PERF_SECURITY_OPEN);
err = security_perf_event_open(PERF_SECURITY_OPEN);
if (err)
return err;

if (!attr.exclude_kernel) {
err = perf_allow_kernel(&attr);
err = perf_allow_kernel();
if (err)
return err;
}
Expand All @@ -12814,7 +12814,7 @@ SYSCALL_DEFINE5(perf_event_open,

/* Only privileged users can get physical addresses */
if ((attr.sample_type & PERF_SAMPLE_PHYS_ADDR)) {
err = perf_allow_kernel(&attr);
err = perf_allow_kernel();
if (err)
return err;
}
Expand Down Expand Up @@ -13647,12 +13647,12 @@ const struct perf_event_attr *perf_event_attrs(struct perf_event *event)
return &event->attr;
}

int perf_allow_kernel(struct perf_event_attr *attr)
int perf_allow_kernel(void)
{
if (sysctl_perf_event_paranoid > 1 && !perfmon_capable())
return -EACCES;

return security_perf_event_open(attr, PERF_SECURITY_KERNEL);
return security_perf_event_open(PERF_SECURITY_KERNEL);
}
EXPORT_SYMBOL_GPL(perf_allow_kernel);

Expand Down
4 changes: 2 additions & 2 deletions kernel/trace/trace_event_perf.c
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ static int perf_trace_event_perm(struct trace_event_call *tp_event,

/* The ftrace function trace is allowed only for root. */
if (ftrace_event_is_function(tp_event)) {
ret = perf_allow_tracepoint(&p_event->attr);
ret = perf_allow_tracepoint();
if (ret)
return ret;

Expand Down Expand Up @@ -86,7 +86,7 @@ static int perf_trace_event_perm(struct trace_event_call *tp_event,
* ...otherwise raw tracepoint data can be a severe data leak,
* only allow root to have these.
*/
ret = perf_allow_tracepoint(&p_event->attr);
ret = perf_allow_tracepoint();
if (ret)
return ret;

Expand Down
5 changes: 2 additions & 3 deletions security/security.c
Original file line number Diff line number Diff line change
Expand Up @@ -5883,16 +5883,15 @@ EXPORT_SYMBOL(security_bdev_setintegrity);
#ifdef CONFIG_PERF_EVENTS
/**
* security_perf_event_open() - Check if a perf event open is allowed
* @attr: perf event attribute
* @type: type of event
*
* Check whether the @type of perf_event_open syscall is allowed.
*
* Return: Returns 0 if permission is granted.
*/
int security_perf_event_open(struct perf_event_attr *attr, int type)
int security_perf_event_open(int type)
{
return call_int_hook(perf_event_open, attr, type);
return call_int_hook(perf_event_open, type);
}

/**
Expand Down
2 changes: 1 addition & 1 deletion security/selinux/hooks.c
Original file line number Diff line number Diff line change
Expand Up @@ -7040,7 +7040,7 @@ struct lsm_blob_sizes selinux_blob_sizes __ro_after_init = {
};

#ifdef CONFIG_PERF_EVENTS
static int selinux_perf_event_open(struct perf_event_attr *attr, int type)
static int selinux_perf_event_open(int type)
{
u32 requested, sid = current_sid();

Expand Down

0 comments on commit 9ec84f7

Please sign in to comment.