return tsec->sid;
 }
 
+static void __ad_net_init(struct common_audit_data *ad,
+                         struct lsm_network_audit *net,
+                         int ifindex, struct sock *sk, u16 family)
+{
+       ad->type = LSM_AUDIT_DATA_NET;
+       ad->u.net = net;
+       net->netif = ifindex;
+       net->sk = sk;
+       net->family = family;
+}
+
+static void ad_net_init_from_sk(struct common_audit_data *ad,
+                               struct lsm_network_audit *net,
+                               struct sock *sk)
+{
+       __ad_net_init(ad, net, 0, sk, 0);
+}
+
+static void ad_net_init_from_iif(struct common_audit_data *ad,
+                                struct lsm_network_audit *net,
+                                int ifindex, u16 family)
+{
+       __ad_net_init(ad, net, ifindex, 0, family);
+}
+
 /*
  * get the objective security ID of a task
  */
 {
        struct sk_security_struct *sksec = sk->sk_security;
        struct common_audit_data ad;
-       struct lsm_network_audit net = {0,};
+       struct lsm_network_audit net;
 
        if (sksec->sid == SECINITSID_KERNEL)
                return 0;
            sksec->sid == SECINITSID_INIT)
                return 0;
 
-       ad.type = LSM_AUDIT_DATA_NET;
-       ad.u.net = &net;
-       ad.u.net->sk = sk;
+       ad_net_init_from_sk(&ad, &net, sk);
 
        return avc_has_perm(current_sid(), sksec->sid, sksec->sclass, perms,
                            &ad);
        struct sk_security_struct *sksec_other = other->sk_security;
        struct sk_security_struct *sksec_new = newsk->sk_security;
        struct common_audit_data ad;
-       struct lsm_network_audit net = {0,};
+       struct lsm_network_audit net;
        int err;
 
-       ad.type = LSM_AUDIT_DATA_NET;
-       ad.u.net = &net;
-       ad.u.net->sk = other;
+       ad_net_init_from_sk(&ad, &net, other);
 
        err = avc_has_perm(sksec_sock->sid, sksec_other->sid,
                           sksec_other->sclass,
        struct sk_security_struct *ssec = sock->sk->sk_security;
        struct sk_security_struct *osec = other->sk->sk_security;
        struct common_audit_data ad;
-       struct lsm_network_audit net = {0,};
+       struct lsm_network_audit net;
 
-       ad.type = LSM_AUDIT_DATA_NET;
-       ad.u.net = &net;
-       ad.u.net->sk = other->sk;
+       ad_net_init_from_sk(&ad, &net, other->sk);
 
        return avc_has_perm(ssec->sid, osec->sid, osec->sclass, SOCKET__SENDTO,
                            &ad);
        struct sk_security_struct *sksec = sk->sk_security;
        u32 sk_sid = sksec->sid;
        struct common_audit_data ad;
-       struct lsm_network_audit net = {0,};
+       struct lsm_network_audit net;
        char *addrp;
 
-       ad.type = LSM_AUDIT_DATA_NET;
-       ad.u.net = &net;
-       ad.u.net->netif = skb->skb_iif;
-       ad.u.net->family = family;
+       ad_net_init_from_iif(&ad, &net, skb->skb_iif, family);
        err = selinux_parse_skb(skb, &ad, &addrp, 1, NULL);
        if (err)
                return err;
        u16 family = sk->sk_family;
        u32 sk_sid = sksec->sid;
        struct common_audit_data ad;
-       struct lsm_network_audit net = {0,};
+       struct lsm_network_audit net;
        char *addrp;
 
        if (family != PF_INET && family != PF_INET6)
        if (!secmark_active && !peerlbl_active)
                return 0;
 
-       ad.type = LSM_AUDIT_DATA_NET;
-       ad.u.net = &net;
-       ad.u.net->netif = skb->skb_iif;
-       ad.u.net->family = family;
+       ad_net_init_from_iif(&ad, &net, skb->skb_iif, family);
        err = selinux_parse_skb(skb, &ad, &addrp, 1, NULL);
        if (err)
                return err;
        u16 family = sk->sk_family;
        struct sk_security_struct *sksec = sk->sk_security;
        struct common_audit_data ad;
-       struct lsm_network_audit net = {0,};
+       struct lsm_network_audit net;
        int err;
 
        /* handle mapped IPv4 packets arriving via IPv6 sockets */
                /* Other association peer SIDs are checked to enforce
                 * consistency among the peer SIDs.
                 */
-               ad.type = LSM_AUDIT_DATA_NET;
-               ad.u.net = &net;
-               ad.u.net->sk = asoc->base.sk;
+               ad_net_init_from_sk(&ad, &net, asoc->base.sk);
                err = avc_has_perm(sksec->peer_sid, asoc->peer_secid,
                                   sksec->sclass, SCTP_SOCKET__ASSOCIATION,
                                   &ad);
        char *addrp;
        u32 peer_sid;
        struct common_audit_data ad;
-       struct lsm_network_audit net = {0,};
+       struct lsm_network_audit net;
        int secmark_active, peerlbl_active;
 
        if (!selinux_policycap_netpeer())
                return NF_DROP;
 
        ifindex = state->in->ifindex;
-       ad.type = LSM_AUDIT_DATA_NET;
-       ad.u.net = &net;
-       ad.u.net->netif = ifindex;
-       ad.u.net->family = family;
+       ad_net_init_from_iif(&ad, &net, ifindex, family);
        if (selinux_parse_skb(skb, &ad, &addrp, 1, NULL) != 0)
                return NF_DROP;
 
        struct sock *sk;
        struct sk_security_struct *sksec;
        struct common_audit_data ad;
-       struct lsm_network_audit net = {0,};
+       struct lsm_network_audit net;
        u8 proto = 0;
 
        sk = skb_to_full_sk(skb);
                return NF_ACCEPT;
        sksec = sk->sk_security;
 
-       ad.type = LSM_AUDIT_DATA_NET;
-       ad.u.net = &net;
-       ad.u.net->netif = state->out->ifindex;
-       ad.u.net->family = state->pf;
+       ad_net_init_from_iif(&ad, &net, state->out->ifindex, state->pf);
        if (selinux_parse_skb(skb, &ad, NULL, 0, &proto))
                return NF_DROP;
 
        int ifindex;
        struct sock *sk;
        struct common_audit_data ad;
-       struct lsm_network_audit net = {0,};
+       struct lsm_network_audit net;
        char *addrp;
        int secmark_active, peerlbl_active;
 
        }
 
        ifindex = state->out->ifindex;
-       ad.type = LSM_AUDIT_DATA_NET;
-       ad.u.net = &net;
-       ad.u.net->netif = ifindex;
-       ad.u.net->family = family;
+       ad_net_init_from_iif(&ad, &net, ifindex, family);
        if (selinux_parse_skb(skb, &ad, &addrp, 0, NULL))
                return NF_DROP;