forked from linuxppc/linux-ci
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
security: add trace event for cap_capable
In cases where we want a stable way to observe/trace cap_capable (e.g. protection from inlining and API updates) add a tracepoint that passes: - The credentials used - The user namespace of the resource being accessed - The user namespace in which the credential provides the capability to access the targeted resource - The capability to check for - The return value of the check Signed-off-by: Jordan Rome <[email protected]> Acked-by: Andrii Nakryiko <[email protected]> Reviewed-by: Paul Moore <[email protected]> Reviewed-by: Serge Hallyn <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Serge Hallyn <[email protected]>
- Loading branch information
Jordan Rome
authored and
Serge Hallyn
committed
Dec 5, 2024
1 parent
3f4f1f8
commit d48da4d
Showing
3 changed files
with
99 additions
and
13 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -5147,6 +5147,7 @@ M: Serge Hallyn <[email protected]> | |
L: [email protected] | ||
S: Supported | ||
F: include/linux/capability.h | ||
F: include/trace/events/capability.h | ||
F: include/uapi/linux/capability.h | ||
F: kernel/capability.c | ||
F: security/commoncap.c | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
/* SPDX-License-Identifier: GPL-2.0 */ | ||
#undef TRACE_SYSTEM | ||
#define TRACE_SYSTEM capability | ||
|
||
#if !defined(_TRACE_CAPABILITY_H) || defined(TRACE_HEADER_MULTI_READ) | ||
#define _TRACE_CAPABILITY_H | ||
|
||
#include <linux/cred.h> | ||
#include <linux/tracepoint.h> | ||
#include <linux/user_namespace.h> | ||
|
||
/** | ||
* cap_capable - called after it's determined if a task has a particular | ||
* effective capability | ||
* | ||
* @cred: The credentials used | ||
* @target_ns: The user namespace of the resource being accessed | ||
* @capable_ns: The user namespace in which the credential provides the | ||
* capability to access the targeted resource. | ||
* This will be NULL if ret is not 0. | ||
* @cap: The capability to check for | ||
* @ret: The return value of the check: 0 if it does, -ve if it does not | ||
* | ||
* Allows to trace calls to cap_capable in commoncap.c | ||
*/ | ||
TRACE_EVENT(cap_capable, | ||
|
||
TP_PROTO(const struct cred *cred, struct user_namespace *target_ns, | ||
const struct user_namespace *capable_ns, int cap, int ret), | ||
|
||
TP_ARGS(cred, target_ns, capable_ns, cap, ret), | ||
|
||
TP_STRUCT__entry( | ||
__field(const struct cred *, cred) | ||
__field(struct user_namespace *, target_ns) | ||
__field(const struct user_namespace *, capable_ns) | ||
__field(int, cap) | ||
__field(int, ret) | ||
), | ||
|
||
TP_fast_assign( | ||
__entry->cred = cred; | ||
__entry->target_ns = target_ns; | ||
__entry->capable_ns = ret == 0 ? capable_ns : NULL; | ||
__entry->cap = cap; | ||
__entry->ret = ret; | ||
), | ||
|
||
TP_printk("cred %p, target_ns %p, capable_ns %p, cap %d, ret %d", | ||
__entry->cred, __entry->target_ns, __entry->capable_ns, __entry->cap, | ||
__entry->ret) | ||
); | ||
|
||
#endif /* _TRACE_CAPABILITY_H */ | ||
|
||
/* This part must be outside protection */ | ||
#include <trace/define_trace.h> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters