You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge branch 'audit.b50' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/audit-current
* 'audit.b50' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/audit-current: [PATCH] new predicate - AUDIT_FILETYPE [patch 2/2] Use find_task_by_vpid in audit code [patch 1/2] audit: let userspace fully control TTY input auditing [PATCH 2/2] audit: fix sparse shadowed variable warnings [PATCH 1/2] audit: move extern declarations to audit.h Audit: MAINTAINERS update Audit: increase the maximum length of the key field Audit: standardize string audit interfaces Audit: stop deadlock from signals under load Audit: save audit_backlog_limit audit messages in case auditd comes back Audit: collect sessionid in netlink messages Audit: end printk with newline
This commit is contained in:
+12
-5
@@ -1498,7 +1498,8 @@ static int pfkey_add(struct sock *sk, struct sk_buff *skb, struct sadb_msg *hdr,
|
||||
err = xfrm_state_update(x);
|
||||
|
||||
xfrm_audit_state_add(x, err ? 0 : 1,
|
||||
audit_get_loginuid(current), 0);
|
||||
audit_get_loginuid(current),
|
||||
audit_get_sessionid(current), 0);
|
||||
|
||||
if (err < 0) {
|
||||
x->km.state = XFRM_STATE_DEAD;
|
||||
@@ -1552,7 +1553,8 @@ static int pfkey_delete(struct sock *sk, struct sk_buff *skb, struct sadb_msg *h
|
||||
km_state_notify(x, &c);
|
||||
out:
|
||||
xfrm_audit_state_delete(x, err ? 0 : 1,
|
||||
audit_get_loginuid(current), 0);
|
||||
audit_get_loginuid(current),
|
||||
audit_get_sessionid(current), 0);
|
||||
xfrm_state_put(x);
|
||||
|
||||
return err;
|
||||
@@ -1728,6 +1730,7 @@ static int pfkey_flush(struct sock *sk, struct sk_buff *skb, struct sadb_msg *hd
|
||||
return -EINVAL;
|
||||
|
||||
audit_info.loginuid = audit_get_loginuid(current);
|
||||
audit_info.sessionid = audit_get_sessionid(current);
|
||||
audit_info.secid = 0;
|
||||
err = xfrm_state_flush(proto, &audit_info);
|
||||
if (err)
|
||||
@@ -2324,7 +2327,8 @@ static int pfkey_spdadd(struct sock *sk, struct sk_buff *skb, struct sadb_msg *h
|
||||
hdr->sadb_msg_type != SADB_X_SPDUPDATE);
|
||||
|
||||
xfrm_audit_policy_add(xp, err ? 0 : 1,
|
||||
audit_get_loginuid(current), 0);
|
||||
audit_get_loginuid(current),
|
||||
audit_get_sessionid(current), 0);
|
||||
|
||||
if (err)
|
||||
goto out;
|
||||
@@ -2406,7 +2410,8 @@ static int pfkey_spddelete(struct sock *sk, struct sk_buff *skb, struct sadb_msg
|
||||
return -ENOENT;
|
||||
|
||||
xfrm_audit_policy_delete(xp, err ? 0 : 1,
|
||||
audit_get_loginuid(current), 0);
|
||||
audit_get_loginuid(current),
|
||||
audit_get_sessionid(current), 0);
|
||||
|
||||
if (err)
|
||||
goto out;
|
||||
@@ -2667,7 +2672,8 @@ static int pfkey_spdget(struct sock *sk, struct sk_buff *skb, struct sadb_msg *h
|
||||
|
||||
if (delete) {
|
||||
xfrm_audit_policy_delete(xp, err ? 0 : 1,
|
||||
audit_get_loginuid(current), 0);
|
||||
audit_get_loginuid(current),
|
||||
audit_get_sessionid(current), 0);
|
||||
|
||||
if (err)
|
||||
goto out;
|
||||
@@ -2767,6 +2773,7 @@ static int pfkey_spdflush(struct sock *sk, struct sk_buff *skb, struct sadb_msg
|
||||
int err;
|
||||
|
||||
audit_info.loginuid = audit_get_loginuid(current);
|
||||
audit_info.sessionid = audit_get_sessionid(current);
|
||||
audit_info.secid = 0;
|
||||
err = xfrm_policy_flush(XFRM_POLICY_TYPE_MAIN, &audit_info);
|
||||
if (err)
|
||||
|
||||
@@ -1780,6 +1780,7 @@ int __init netlbl_unlabel_defconf(void)
|
||||
* messages so don't worry to much about these values. */
|
||||
security_task_getsecid(current, &audit_info.secid);
|
||||
audit_info.loginuid = 0;
|
||||
audit_info.sessionid = 0;
|
||||
|
||||
entry = kzalloc(sizeof(*entry), GFP_KERNEL);
|
||||
if (entry == NULL)
|
||||
|
||||
@@ -107,7 +107,9 @@ struct audit_buffer *netlbl_audit_start_common(int type,
|
||||
if (audit_buf == NULL)
|
||||
return NULL;
|
||||
|
||||
audit_log_format(audit_buf, "netlabel: auid=%u", audit_info->loginuid);
|
||||
audit_log_format(audit_buf, "netlabel: auid=%u ses=%u",
|
||||
audit_info->loginuid,
|
||||
audit_info->sessionid);
|
||||
|
||||
if (audit_info->secid != 0 &&
|
||||
security_secid_to_secctx(audit_info->secid,
|
||||
|
||||
@@ -51,6 +51,7 @@ static inline void netlbl_netlink_auditinfo(struct sk_buff *skb,
|
||||
{
|
||||
audit_info->secid = NETLINK_CB(skb).sid;
|
||||
audit_info->loginuid = NETLINK_CB(skb).loginuid;
|
||||
audit_info->sessionid = NETLINK_CB(skb).sessionid;
|
||||
}
|
||||
|
||||
/* NetLabel NETLINK I/O functions */
|
||||
|
||||
@@ -1248,6 +1248,7 @@ static int netlink_sendmsg(struct kiocb *kiocb, struct socket *sock,
|
||||
NETLINK_CB(skb).pid = nlk->pid;
|
||||
NETLINK_CB(skb).dst_group = dst_group;
|
||||
NETLINK_CB(skb).loginuid = audit_get_loginuid(current);
|
||||
NETLINK_CB(skb).sessionid = audit_get_sessionid(current);
|
||||
security_task_getsecid(current, &(NETLINK_CB(skb).sid));
|
||||
memcpy(NETLINK_CREDS(skb), &siocb->scm->creds, sizeof(struct ucred));
|
||||
|
||||
|
||||
@@ -762,6 +762,7 @@ xfrm_policy_flush_secctx_check(u8 type, struct xfrm_audit *audit_info)
|
||||
if (err) {
|
||||
xfrm_audit_policy_delete(pol, 0,
|
||||
audit_info->loginuid,
|
||||
audit_info->sessionid,
|
||||
audit_info->secid);
|
||||
return err;
|
||||
}
|
||||
@@ -777,6 +778,7 @@ xfrm_policy_flush_secctx_check(u8 type, struct xfrm_audit *audit_info)
|
||||
if (err) {
|
||||
xfrm_audit_policy_delete(pol, 0,
|
||||
audit_info->loginuid,
|
||||
audit_info->sessionid,
|
||||
audit_info->secid);
|
||||
return err;
|
||||
}
|
||||
@@ -819,6 +821,7 @@ int xfrm_policy_flush(u8 type, struct xfrm_audit *audit_info)
|
||||
write_unlock_bh(&xfrm_policy_lock);
|
||||
|
||||
xfrm_audit_policy_delete(pol, 1, audit_info->loginuid,
|
||||
audit_info->sessionid,
|
||||
audit_info->secid);
|
||||
|
||||
xfrm_policy_kill(pol);
|
||||
@@ -841,6 +844,7 @@ int xfrm_policy_flush(u8 type, struct xfrm_audit *audit_info)
|
||||
|
||||
xfrm_audit_policy_delete(pol, 1,
|
||||
audit_info->loginuid,
|
||||
audit_info->sessionid,
|
||||
audit_info->secid);
|
||||
xfrm_policy_kill(pol);
|
||||
killed++;
|
||||
@@ -2472,14 +2476,14 @@ static void xfrm_audit_common_policyinfo(struct xfrm_policy *xp,
|
||||
}
|
||||
|
||||
void xfrm_audit_policy_add(struct xfrm_policy *xp, int result,
|
||||
u32 auid, u32 secid)
|
||||
uid_t auid, u32 sessionid, u32 secid)
|
||||
{
|
||||
struct audit_buffer *audit_buf;
|
||||
|
||||
audit_buf = xfrm_audit_start("SPD-add");
|
||||
if (audit_buf == NULL)
|
||||
return;
|
||||
xfrm_audit_helper_usrinfo(auid, secid, audit_buf);
|
||||
xfrm_audit_helper_usrinfo(auid, sessionid, secid, audit_buf);
|
||||
audit_log_format(audit_buf, " res=%u", result);
|
||||
xfrm_audit_common_policyinfo(xp, audit_buf);
|
||||
audit_log_end(audit_buf);
|
||||
@@ -2487,14 +2491,14 @@ void xfrm_audit_policy_add(struct xfrm_policy *xp, int result,
|
||||
EXPORT_SYMBOL_GPL(xfrm_audit_policy_add);
|
||||
|
||||
void xfrm_audit_policy_delete(struct xfrm_policy *xp, int result,
|
||||
u32 auid, u32 secid)
|
||||
uid_t auid, u32 sessionid, u32 secid)
|
||||
{
|
||||
struct audit_buffer *audit_buf;
|
||||
|
||||
audit_buf = xfrm_audit_start("SPD-delete");
|
||||
if (audit_buf == NULL)
|
||||
return;
|
||||
xfrm_audit_helper_usrinfo(auid, secid, audit_buf);
|
||||
xfrm_audit_helper_usrinfo(auid, sessionid, secid, audit_buf);
|
||||
audit_log_format(audit_buf, " res=%u", result);
|
||||
xfrm_audit_common_policyinfo(xp, audit_buf);
|
||||
audit_log_end(audit_buf);
|
||||
|
||||
@@ -496,7 +496,8 @@ expired:
|
||||
km_state_expired(x, 1, 0);
|
||||
|
||||
xfrm_audit_state_delete(x, err ? 0 : 1,
|
||||
audit_get_loginuid(current), 0);
|
||||
audit_get_loginuid(current),
|
||||
audit_get_sessionid(current), 0);
|
||||
|
||||
out:
|
||||
spin_unlock(&x->lock);
|
||||
@@ -603,6 +604,7 @@ xfrm_state_flush_secctx_check(u8 proto, struct xfrm_audit *audit_info)
|
||||
(err = security_xfrm_state_delete(x)) != 0) {
|
||||
xfrm_audit_state_delete(x, 0,
|
||||
audit_info->loginuid,
|
||||
audit_info->sessionid,
|
||||
audit_info->secid);
|
||||
return err;
|
||||
}
|
||||
@@ -641,6 +643,7 @@ restart:
|
||||
err = xfrm_state_delete(x);
|
||||
xfrm_audit_state_delete(x, err ? 0 : 1,
|
||||
audit_info->loginuid,
|
||||
audit_info->sessionid,
|
||||
audit_info->secid);
|
||||
xfrm_state_put(x);
|
||||
|
||||
@@ -2123,14 +2126,14 @@ static void xfrm_audit_helper_pktinfo(struct sk_buff *skb, u16 family,
|
||||
}
|
||||
|
||||
void xfrm_audit_state_add(struct xfrm_state *x, int result,
|
||||
u32 auid, u32 secid)
|
||||
uid_t auid, u32 sessionid, u32 secid)
|
||||
{
|
||||
struct audit_buffer *audit_buf;
|
||||
|
||||
audit_buf = xfrm_audit_start("SAD-add");
|
||||
if (audit_buf == NULL)
|
||||
return;
|
||||
xfrm_audit_helper_usrinfo(auid, secid, audit_buf);
|
||||
xfrm_audit_helper_usrinfo(auid, sessionid, secid, audit_buf);
|
||||
xfrm_audit_helper_sainfo(x, audit_buf);
|
||||
audit_log_format(audit_buf, " res=%u", result);
|
||||
audit_log_end(audit_buf);
|
||||
@@ -2138,14 +2141,14 @@ void xfrm_audit_state_add(struct xfrm_state *x, int result,
|
||||
EXPORT_SYMBOL_GPL(xfrm_audit_state_add);
|
||||
|
||||
void xfrm_audit_state_delete(struct xfrm_state *x, int result,
|
||||
u32 auid, u32 secid)
|
||||
uid_t auid, u32 sessionid, u32 secid)
|
||||
{
|
||||
struct audit_buffer *audit_buf;
|
||||
|
||||
audit_buf = xfrm_audit_start("SAD-delete");
|
||||
if (audit_buf == NULL)
|
||||
return;
|
||||
xfrm_audit_helper_usrinfo(auid, secid, audit_buf);
|
||||
xfrm_audit_helper_usrinfo(auid, sessionid, secid, audit_buf);
|
||||
xfrm_audit_helper_sainfo(x, audit_buf);
|
||||
audit_log_format(audit_buf, " res=%u", result);
|
||||
audit_log_end(audit_buf);
|
||||
|
||||
+28
-13
@@ -407,6 +407,9 @@ static int xfrm_add_sa(struct sk_buff *skb, struct nlmsghdr *nlh,
|
||||
struct xfrm_state *x;
|
||||
int err;
|
||||
struct km_event c;
|
||||
uid_t loginuid = NETLINK_CB(skb).loginuid;
|
||||
u32 sessionid = NETLINK_CB(skb).sessionid;
|
||||
u32 sid = NETLINK_CB(skb).sid;
|
||||
|
||||
err = verify_newsa_info(p, attrs);
|
||||
if (err)
|
||||
@@ -422,8 +425,7 @@ static int xfrm_add_sa(struct sk_buff *skb, struct nlmsghdr *nlh,
|
||||
else
|
||||
err = xfrm_state_update(x);
|
||||
|
||||
xfrm_audit_state_add(x, err ? 0 : 1, NETLINK_CB(skb).loginuid,
|
||||
NETLINK_CB(skb).sid);
|
||||
xfrm_audit_state_add(x, err ? 0 : 1, loginuid, sessionid, sid);
|
||||
|
||||
if (err < 0) {
|
||||
x->km.state = XFRM_STATE_DEAD;
|
||||
@@ -478,6 +480,9 @@ static int xfrm_del_sa(struct sk_buff *skb, struct nlmsghdr *nlh,
|
||||
int err = -ESRCH;
|
||||
struct km_event c;
|
||||
struct xfrm_usersa_id *p = nlmsg_data(nlh);
|
||||
uid_t loginuid = NETLINK_CB(skb).loginuid;
|
||||
u32 sessionid = NETLINK_CB(skb).sessionid;
|
||||
u32 sid = NETLINK_CB(skb).sid;
|
||||
|
||||
x = xfrm_user_state_lookup(p, attrs, &err);
|
||||
if (x == NULL)
|
||||
@@ -502,8 +507,7 @@ static int xfrm_del_sa(struct sk_buff *skb, struct nlmsghdr *nlh,
|
||||
km_state_notify(x, &c);
|
||||
|
||||
out:
|
||||
xfrm_audit_state_delete(x, err ? 0 : 1, NETLINK_CB(skb).loginuid,
|
||||
NETLINK_CB(skb).sid);
|
||||
xfrm_audit_state_delete(x, err ? 0 : 1, loginuid, sessionid, sid);
|
||||
xfrm_state_put(x);
|
||||
return err;
|
||||
}
|
||||
@@ -1123,6 +1127,9 @@ static int xfrm_add_policy(struct sk_buff *skb, struct nlmsghdr *nlh,
|
||||
struct km_event c;
|
||||
int err;
|
||||
int excl;
|
||||
uid_t loginuid = NETLINK_CB(skb).loginuid;
|
||||
u32 sessionid = NETLINK_CB(skb).sessionid;
|
||||
u32 sid = NETLINK_CB(skb).sid;
|
||||
|
||||
err = verify_newpolicy_info(p);
|
||||
if (err)
|
||||
@@ -1141,8 +1148,7 @@ static int xfrm_add_policy(struct sk_buff *skb, struct nlmsghdr *nlh,
|
||||
* a type XFRM_MSG_UPDPOLICY - JHS */
|
||||
excl = nlh->nlmsg_type == XFRM_MSG_NEWPOLICY;
|
||||
err = xfrm_policy_insert(p->dir, xp, excl);
|
||||
xfrm_audit_policy_add(xp, err ? 0 : 1, NETLINK_CB(skb).loginuid,
|
||||
NETLINK_CB(skb).sid);
|
||||
xfrm_audit_policy_add(xp, err ? 0 : 1, loginuid, sessionid, sid);
|
||||
|
||||
if (err) {
|
||||
security_xfrm_policy_free(xp->security);
|
||||
@@ -1371,9 +1377,12 @@ static int xfrm_get_policy(struct sk_buff *skb, struct nlmsghdr *nlh,
|
||||
NETLINK_CB(skb).pid);
|
||||
}
|
||||
} else {
|
||||
xfrm_audit_policy_delete(xp, err ? 0 : 1,
|
||||
NETLINK_CB(skb).loginuid,
|
||||
NETLINK_CB(skb).sid);
|
||||
uid_t loginuid = NETLINK_CB(skb).loginuid;
|
||||
u32 sessionid = NETLINK_CB(skb).sessionid;
|
||||
u32 sid = NETLINK_CB(skb).sid;
|
||||
|
||||
xfrm_audit_policy_delete(xp, err ? 0 : 1, loginuid, sessionid,
|
||||
sid);
|
||||
|
||||
if (err != 0)
|
||||
goto out;
|
||||
@@ -1399,6 +1408,7 @@ static int xfrm_flush_sa(struct sk_buff *skb, struct nlmsghdr *nlh,
|
||||
int err;
|
||||
|
||||
audit_info.loginuid = NETLINK_CB(skb).loginuid;
|
||||
audit_info.sessionid = NETLINK_CB(skb).sessionid;
|
||||
audit_info.secid = NETLINK_CB(skb).sid;
|
||||
err = xfrm_state_flush(p->proto, &audit_info);
|
||||
if (err)
|
||||
@@ -1546,6 +1556,7 @@ static int xfrm_flush_policy(struct sk_buff *skb, struct nlmsghdr *nlh,
|
||||
return err;
|
||||
|
||||
audit_info.loginuid = NETLINK_CB(skb).loginuid;
|
||||
audit_info.sessionid = NETLINK_CB(skb).sessionid;
|
||||
audit_info.secid = NETLINK_CB(skb).sid;
|
||||
err = xfrm_policy_flush(type, &audit_info);
|
||||
if (err)
|
||||
@@ -1604,9 +1615,11 @@ static int xfrm_add_pol_expire(struct sk_buff *skb, struct nlmsghdr *nlh,
|
||||
read_unlock(&xp->lock);
|
||||
err = 0;
|
||||
if (up->hard) {
|
||||
uid_t loginuid = NETLINK_CB(skb).loginuid;
|
||||
uid_t sessionid = NETLINK_CB(skb).sessionid;
|
||||
u32 sid = NETLINK_CB(skb).sid;
|
||||
xfrm_policy_delete(xp, p->dir);
|
||||
xfrm_audit_policy_delete(xp, 1, NETLINK_CB(skb).loginuid,
|
||||
NETLINK_CB(skb).sid);
|
||||
xfrm_audit_policy_delete(xp, 1, loginuid, sessionid, sid);
|
||||
|
||||
} else {
|
||||
// reset the timers here?
|
||||
@@ -1640,9 +1653,11 @@ static int xfrm_add_sa_expire(struct sk_buff *skb, struct nlmsghdr *nlh,
|
||||
km_state_expired(x, ue->hard, current->pid);
|
||||
|
||||
if (ue->hard) {
|
||||
uid_t loginuid = NETLINK_CB(skb).loginuid;
|
||||
uid_t sessionid = NETLINK_CB(skb).sessionid;
|
||||
u32 sid = NETLINK_CB(skb).sid;
|
||||
__xfrm_state_delete(x);
|
||||
xfrm_audit_state_delete(x, 1, NETLINK_CB(skb).loginuid,
|
||||
NETLINK_CB(skb).sid);
|
||||
xfrm_audit_state_delete(x, 1, loginuid, sessionid, sid);
|
||||
}
|
||||
err = 0;
|
||||
out:
|
||||
|
||||
Reference in New Issue
Block a user