]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - net/netfilter/nf_conntrack_netlink.c
netfilter: conntrack: don't cache nlattr_tuple_size result in nla_size
[mirror_ubuntu-bionic-kernel.git] / net / netfilter / nf_conntrack_netlink.c
index de4053d84364b245e1593f7fa7d1d3cbff2de4fe..6e0adfefb9ed4fa8256c1ece604c05ef117c1e68 100644 (file)
@@ -533,11 +533,11 @@ nla_put_failure:
        return -1;
 }
 
-static inline size_t ctnetlink_proto_size(const struct nf_conn *ct)
+static size_t ctnetlink_proto_size(const struct nf_conn *ct)
 {
        const struct nf_conntrack_l3proto *l3proto;
        const struct nf_conntrack_l4proto *l4proto;
-       size_t len;
+       size_t len, len4 = 0;
 
        l3proto = __nf_ct_l3proto_find(nf_ct_l3num(ct));
        len = l3proto->nla_size;
@@ -545,8 +545,12 @@ static inline size_t ctnetlink_proto_size(const struct nf_conn *ct)
 
        l4proto = __nf_ct_l4proto_find(nf_ct_l3num(ct), nf_ct_protonum(ct));
        len += l4proto->nla_size;
+       if (l4proto->nlattr_tuple_size) {
+               len4 = l4proto->nlattr_tuple_size();
+               len4 *= 3u; /* ORIG, REPLY, MASTER */
+       }
 
-       return len;
+       return len + len4;
 }
 
 static inline size_t ctnetlink_acct_size(const struct nf_conn *ct)