aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorEric W. Biederman <ebiederm@xmission.com>2012-09-11 03:24:49 -0400
committerEric W. Biederman <ebiederm@xmission.com>2012-09-17 21:07:40 -0400
commit860c0aaff75e714c21d325f32d36a37572b4fffb (patch)
tree2cbe5e79108da3a44ba5e5af7fbe07d22f1ed35a /kernel
parent017143fecb3364e5fed8107d206799899f5dd684 (diff)
audit: Don't pass pid or uid to audit_log_common_recv_msg
The only place we use the uid and the pid that we calculate in audit_receive_msg is in audit_log_common_recv_msg so move the calculation of these values into the audit_log_common_recv_msg. Simplify the calcuation of the current pid and uid by reading them from current instead of reading them from NETLINK_CREDS. Cc: Al Viro <viro@zeniv.linux.org.uk> Cc: Eric Paris <eparis@redhat.com> Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
Diffstat (limited to 'kernel')
-rw-r--r--kernel/audit.c29
1 files changed, 14 insertions, 15 deletions
diff --git a/kernel/audit.c b/kernel/audit.c
index a31e31bba2d3..2e0dd5edf69b 100644
--- a/kernel/audit.c
+++ b/kernel/audit.c
@@ -607,8 +607,7 @@ static int audit_netlink_ok(struct sk_buff *skb, u16 msg_type)
607} 607}
608 608
609static int audit_log_common_recv_msg(struct audit_buffer **ab, u16 msg_type, 609static int audit_log_common_recv_msg(struct audit_buffer **ab, u16 msg_type,
610 u32 pid, u32 uid, uid_t auid, u32 ses, 610 uid_t auid, u32 ses, u32 sid)
611 u32 sid)
612{ 611{
613 int rc = 0; 612 int rc = 0;
614 char *ctx = NULL; 613 char *ctx = NULL;
@@ -621,7 +620,9 @@ static int audit_log_common_recv_msg(struct audit_buffer **ab, u16 msg_type,
621 620
622 *ab = audit_log_start(NULL, GFP_KERNEL, msg_type); 621 *ab = audit_log_start(NULL, GFP_KERNEL, msg_type);
623 audit_log_format(*ab, "pid=%d uid=%u auid=%u ses=%u", 622 audit_log_format(*ab, "pid=%d uid=%u auid=%u ses=%u",
624 pid, uid, auid, ses); 623 task_tgid_vnr(current),
624 from_kuid(&init_user_ns, current_uid()),
625 auid, ses);
625 if (sid) { 626 if (sid) {
626 rc = security_secid_to_secctx(sid, &ctx, &len); 627 rc = security_secid_to_secctx(sid, &ctx, &len);
627 if (rc) 628 if (rc)
@@ -637,7 +638,7 @@ static int audit_log_common_recv_msg(struct audit_buffer **ab, u16 msg_type,
637 638
638static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh) 639static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
639{ 640{
640 u32 uid, pid, seq, sid; 641 u32 seq, sid;
641 void *data; 642 void *data;
642 struct audit_status *status_get, status_set; 643 struct audit_status *status_get, status_set;
643 int err; 644 int err;
@@ -663,8 +664,6 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
663 return err; 664 return err;
664 } 665 }
665 666
666 pid = NETLINK_CREDS(skb)->pid;
667 uid = NETLINK_CREDS(skb)->uid;
668 loginuid = audit_get_loginuid(current); 667 loginuid = audit_get_loginuid(current);
669 sessionid = audit_get_sessionid(current); 668 sessionid = audit_get_sessionid(current);
670 security_task_getsecid(current, &sid); 669 security_task_getsecid(current, &sid);
@@ -735,7 +734,7 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
735 if (err) 734 if (err)
736 break; 735 break;
737 } 736 }
738 audit_log_common_recv_msg(&ab, msg_type, pid, uid, 737 audit_log_common_recv_msg(&ab, msg_type,
739 loginuid, sessionid, sid); 738 loginuid, sessionid, sid);
740 739
741 if (msg_type != AUDIT_USER_TTY) 740 if (msg_type != AUDIT_USER_TTY)
@@ -760,8 +759,8 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
760 if (nlmsg_len(nlh) < sizeof(struct audit_rule)) 759 if (nlmsg_len(nlh) < sizeof(struct audit_rule))
761 return -EINVAL; 760 return -EINVAL;
762 if (audit_enabled == AUDIT_LOCKED) { 761 if (audit_enabled == AUDIT_LOCKED) {
763 audit_log_common_recv_msg(&ab, AUDIT_CONFIG_CHANGE, pid, 762 audit_log_common_recv_msg(&ab, AUDIT_CONFIG_CHANGE,
764 uid, loginuid, sessionid, sid); 763 loginuid, sessionid, sid);
765 764
766 audit_log_format(ab, " audit_enabled=%d res=0", 765 audit_log_format(ab, " audit_enabled=%d res=0",
767 audit_enabled); 766 audit_enabled);
@@ -779,8 +778,8 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
779 if (nlmsg_len(nlh) < sizeof(struct audit_rule_data)) 778 if (nlmsg_len(nlh) < sizeof(struct audit_rule_data))
780 return -EINVAL; 779 return -EINVAL;
781 if (audit_enabled == AUDIT_LOCKED) { 780 if (audit_enabled == AUDIT_LOCKED) {
782 audit_log_common_recv_msg(&ab, AUDIT_CONFIG_CHANGE, pid, 781 audit_log_common_recv_msg(&ab, AUDIT_CONFIG_CHANGE,
783 uid, loginuid, sessionid, sid); 782 loginuid, sessionid, sid);
784 783
785 audit_log_format(ab, " audit_enabled=%d res=0", 784 audit_log_format(ab, " audit_enabled=%d res=0",
786 audit_enabled); 785 audit_enabled);
@@ -796,8 +795,8 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
796 case AUDIT_TRIM: 795 case AUDIT_TRIM:
797 audit_trim_trees(); 796 audit_trim_trees();
798 797
799 audit_log_common_recv_msg(&ab, AUDIT_CONFIG_CHANGE, pid, 798 audit_log_common_recv_msg(&ab, AUDIT_CONFIG_CHANGE,
800 uid, loginuid, sessionid, sid); 799 loginuid, sessionid, sid);
801 800
802 audit_log_format(ab, " op=trim res=1"); 801 audit_log_format(ab, " op=trim res=1");
803 audit_log_end(ab); 802 audit_log_end(ab);
@@ -828,8 +827,8 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
828 /* OK, here comes... */ 827 /* OK, here comes... */
829 err = audit_tag_tree(old, new); 828 err = audit_tag_tree(old, new);
830 829
831 audit_log_common_recv_msg(&ab, AUDIT_CONFIG_CHANGE, pid, 830 audit_log_common_recv_msg(&ab, AUDIT_CONFIG_CHANGE,
832 uid, loginuid, sessionid, sid); 831 loginuid, sessionid, sid);
833 832
834 audit_log_format(ab, " op=make_equiv old="); 833 audit_log_format(ab, " op=make_equiv old=");
835 audit_log_untrustedstring(ab, old); 834 audit_log_untrustedstring(ab, old);