|
@@ -145,6 +145,19 @@ static int dump_tcp_header(struct sbuff *m, const struct sk_buff *skb,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static void dump_sk_uid_gid(struct sbuff *m, struct sock *sk)
|
|
|
+{
|
|
|
+ if (!sk || sk->sk_state == TCP_TIME_WAIT)
|
|
|
+ return;
|
|
|
+
|
|
|
+ read_lock_bh(&sk->sk_callback_lock);
|
|
|
+ if (sk->sk_socket && sk->sk_socket->file)
|
|
|
+ sb_add(m, "UID=%u GID=%u ",
|
|
|
+ sk->sk_socket->file->f_cred->fsuid,
|
|
|
+ sk->sk_socket->file->f_cred->fsgid);
|
|
|
+ read_unlock_bh(&sk->sk_callback_lock);
|
|
|
+}
|
|
|
+
|
|
|
/* One level of recursion won't kill us */
|
|
|
static void dump_ipv4_packet(struct sbuff *m,
|
|
|
const struct nf_loginfo *info,
|
|
@@ -361,14 +374,8 @@ static void dump_ipv4_packet(struct sbuff *m,
|
|
|
}
|
|
|
|
|
|
/* Max length: 15 "UID=4294967295 " */
|
|
|
- if ((logflags & XT_LOG_UID) && !iphoff && skb->sk) {
|
|
|
- read_lock_bh(&skb->sk->sk_callback_lock);
|
|
|
- if (skb->sk->sk_socket && skb->sk->sk_socket->file)
|
|
|
- sb_add(m, "UID=%u GID=%u ",
|
|
|
- skb->sk->sk_socket->file->f_cred->fsuid,
|
|
|
- skb->sk->sk_socket->file->f_cred->fsgid);
|
|
|
- read_unlock_bh(&skb->sk->sk_callback_lock);
|
|
|
- }
|
|
|
+ if ((logflags & XT_LOG_UID) && !iphoff)
|
|
|
+ dump_sk_uid_gid(m, skb->sk);
|
|
|
|
|
|
/* Max length: 16 "MARK=0xFFFFFFFF " */
|
|
|
if (!iphoff && skb->mark)
|
|
@@ -717,14 +724,8 @@ static void dump_ipv6_packet(struct sbuff *m,
|
|
|
}
|
|
|
|
|
|
/* Max length: 15 "UID=4294967295 " */
|
|
|
- if ((logflags & XT_LOG_UID) && recurse && skb->sk) {
|
|
|
- read_lock_bh(&skb->sk->sk_callback_lock);
|
|
|
- if (skb->sk->sk_socket && skb->sk->sk_socket->file)
|
|
|
- sb_add(m, "UID=%u GID=%u ",
|
|
|
- skb->sk->sk_socket->file->f_cred->fsuid,
|
|
|
- skb->sk->sk_socket->file->f_cred->fsgid);
|
|
|
- read_unlock_bh(&skb->sk->sk_callback_lock);
|
|
|
- }
|
|
|
+ if ((logflags & XT_LOG_UID) && recurse)
|
|
|
+ dump_sk_uid_gid(m, skb->sk);
|
|
|
|
|
|
/* Max length: 16 "MARK=0xFFFFFFFF " */
|
|
|
if (!recurse && skb->mark)
|