xfrm: Remove useless secid field from xfrm_audit.
It seems to me that commit ab5f5e8b
"[XFRM]: xfrm audit calls" is doing
something strange at xfrm_audit_helper_usrinfo().
If secid != 0 && security_secid_to_secctx(secid) != 0, the caller calls
audit_log_task_context() which basically does
secid != 0 && security_secid_to_secctx(secid) == 0 case
except that secid is obtained from current thread's context.
Oh, what happens if secid passed to xfrm_audit_helper_usrinfo() was
obtained from other thread's context? It might audit current thread's
context rather than other thread's context if security_secid_to_secctx()
in xfrm_audit_helper_usrinfo() failed for some reason.
Then, are all the caller of xfrm_audit_helper_usrinfo() passing either
secid obtained from current thread's context or secid == 0?
It seems to me that they are.
If I didn't miss something, we don't need to pass secid to
xfrm_audit_helper_usrinfo() because audit_log_task_context() will
obtain secid from current thread's context.
Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
This commit is contained in:

committed by
Steffen Klassert

parent
5a9d19ab76
commit
f1370cc4a0
@@ -465,7 +465,7 @@ expired:
|
||||
|
||||
xfrm_audit_state_delete(x, err ? 0 : 1,
|
||||
audit_get_loginuid(current),
|
||||
audit_get_sessionid(current), 0);
|
||||
audit_get_sessionid(current));
|
||||
|
||||
out:
|
||||
spin_unlock(&x->lock);
|
||||
@@ -574,8 +574,7 @@ xfrm_state_flush_secctx_check(struct net *net, u8 proto, struct xfrm_audit *audi
|
||||
(err = security_xfrm_state_delete(x)) != 0) {
|
||||
xfrm_audit_state_delete(x, 0,
|
||||
audit_info->loginuid,
|
||||
audit_info->sessionid,
|
||||
audit_info->secid);
|
||||
audit_info->sessionid);
|
||||
return err;
|
||||
}
|
||||
}
|
||||
@@ -613,8 +612,7 @@ restart:
|
||||
err = xfrm_state_delete(x);
|
||||
xfrm_audit_state_delete(x, err ? 0 : 1,
|
||||
audit_info->loginuid,
|
||||
audit_info->sessionid,
|
||||
audit_info->secid);
|
||||
audit_info->sessionid);
|
||||
xfrm_state_put(x);
|
||||
if (!err)
|
||||
cnt++;
|
||||
@@ -2134,7 +2132,6 @@ void xfrm_state_fini(struct net *net)
|
||||
flush_work(&net->xfrm.state_hash_work);
|
||||
audit_info.loginuid = INVALID_UID;
|
||||
audit_info.sessionid = (unsigned int)-1;
|
||||
audit_info.secid = 0;
|
||||
xfrm_state_flush(net, IPSEC_PROTO_ANY, &audit_info);
|
||||
flush_work(&net->xfrm.state_gc_work);
|
||||
|
||||
@@ -2199,14 +2196,14 @@ static void xfrm_audit_helper_pktinfo(struct sk_buff *skb, u16 family,
|
||||
}
|
||||
|
||||
void xfrm_audit_state_add(struct xfrm_state *x, int result,
|
||||
kuid_t auid, unsigned int sessionid, u32 secid)
|
||||
kuid_t auid, unsigned int sessionid)
|
||||
{
|
||||
struct audit_buffer *audit_buf;
|
||||
|
||||
audit_buf = xfrm_audit_start("SAD-add");
|
||||
if (audit_buf == NULL)
|
||||
return;
|
||||
xfrm_audit_helper_usrinfo(auid, sessionid, secid, audit_buf);
|
||||
xfrm_audit_helper_usrinfo(auid, sessionid, audit_buf);
|
||||
xfrm_audit_helper_sainfo(x, audit_buf);
|
||||
audit_log_format(audit_buf, " res=%u", result);
|
||||
audit_log_end(audit_buf);
|
||||
@@ -2214,14 +2211,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,
|
||||
kuid_t auid, unsigned int sessionid, u32 secid)
|
||||
kuid_t auid, unsigned int sessionid)
|
||||
{
|
||||
struct audit_buffer *audit_buf;
|
||||
|
||||
audit_buf = xfrm_audit_start("SAD-delete");
|
||||
if (audit_buf == NULL)
|
||||
return;
|
||||
xfrm_audit_helper_usrinfo(auid, sessionid, secid, audit_buf);
|
||||
xfrm_audit_helper_usrinfo(auid, sessionid, audit_buf);
|
||||
xfrm_audit_helper_sainfo(x, audit_buf);
|
||||
audit_log_format(audit_buf, " res=%u", result);
|
||||
audit_log_end(audit_buf);
|
||||
|
Reference in New Issue
Block a user