diff options
author | Darrel Goeddel <dgoeddel@trustedcs.com> | 2006-06-27 16:26:11 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2006-06-29 19:57:55 -0400 |
commit | c7bdb545d23026b18be53289fd866d1ac07f5f8c (patch) | |
tree | 6d9a218871d88f7579dd53f14692df2529b6e712 /kernel/audit.c | |
parent | 576a30eb6453439b3c37ba24455ac7090c247b5a (diff) |
[NETLINK]: Encapsulate eff_cap usage within security framework.
This patch encapsulates the usage of eff_cap (in netlink_skb_params) within
the security framework by extending security_netlink_recv to include a required
capability parameter and converting all direct usage of eff_caps outside
of the lsm modules to use the interface. It also updates the SELinux
implementation of the security_netlink_send and security_netlink_recv
hooks to take advantage of the sid in the netlink_skb_params struct.
This also enables SELinux to perform auditing of netlink capability checks.
Please apply, for 2.6.18 if possible.
Signed-off-by: Darrel Goeddel <dgoeddel@trustedcs.com>
Signed-off-by: Stephen Smalley <sds@tycho.nsa.gov>
Acked-by: James Morris <jmorris@namei.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'kernel/audit.c')
-rw-r--r-- | kernel/audit.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/kernel/audit.c b/kernel/audit.c index 82443fb433ef..d417ca1db79b 100644 --- a/kernel/audit.c +++ b/kernel/audit.c | |||
@@ -445,7 +445,7 @@ void audit_send_reply(int pid, int seq, int type, int done, int multi, | |||
445 | * Check for appropriate CAP_AUDIT_ capabilities on incoming audit | 445 | * Check for appropriate CAP_AUDIT_ capabilities on incoming audit |
446 | * control messages. | 446 | * control messages. |
447 | */ | 447 | */ |
448 | static int audit_netlink_ok(kernel_cap_t eff_cap, u16 msg_type) | 448 | static int audit_netlink_ok(struct sk_buff *skb, u16 msg_type) |
449 | { | 449 | { |
450 | int err = 0; | 450 | int err = 0; |
451 | 451 | ||
@@ -459,13 +459,13 @@ static int audit_netlink_ok(kernel_cap_t eff_cap, u16 msg_type) | |||
459 | case AUDIT_DEL: | 459 | case AUDIT_DEL: |
460 | case AUDIT_DEL_RULE: | 460 | case AUDIT_DEL_RULE: |
461 | case AUDIT_SIGNAL_INFO: | 461 | case AUDIT_SIGNAL_INFO: |
462 | if (!cap_raised(eff_cap, CAP_AUDIT_CONTROL)) | 462 | if (security_netlink_recv(skb, CAP_AUDIT_CONTROL)) |
463 | err = -EPERM; | 463 | err = -EPERM; |
464 | break; | 464 | break; |
465 | case AUDIT_USER: | 465 | case AUDIT_USER: |
466 | case AUDIT_FIRST_USER_MSG...AUDIT_LAST_USER_MSG: | 466 | case AUDIT_FIRST_USER_MSG...AUDIT_LAST_USER_MSG: |
467 | case AUDIT_FIRST_USER_MSG2...AUDIT_LAST_USER_MSG2: | 467 | case AUDIT_FIRST_USER_MSG2...AUDIT_LAST_USER_MSG2: |
468 | if (!cap_raised(eff_cap, CAP_AUDIT_WRITE)) | 468 | if (security_netlink_recv(skb, CAP_AUDIT_WRITE)) |
469 | err = -EPERM; | 469 | err = -EPERM; |
470 | break; | 470 | break; |
471 | default: /* bad msg */ | 471 | default: /* bad msg */ |
@@ -488,7 +488,7 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh) | |||
488 | char *ctx; | 488 | char *ctx; |
489 | u32 len; | 489 | u32 len; |
490 | 490 | ||
491 | err = audit_netlink_ok(NETLINK_CB(skb).eff_cap, msg_type); | 491 | err = audit_netlink_ok(skb, msg_type); |
492 | if (err) | 492 | if (err) |
493 | return err; | 493 | return err; |
494 | 494 | ||