Merge tag 'xfs-4.20-merge-1' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux
[linux-2.6-block.git] / net / netfilter / nfnetlink_cttimeout.c
index a30f8ba4b89ac427053281936ad3e70750e3a2f0..e7a50af1b3d61a6e12fb74eaa9a9ba02f0a8d22b 100644 (file)
@@ -53,9 +53,6 @@ ctnl_timeout_parse_policy(void *timeout,
        struct nlattr **tb;
        int ret = 0;
 
-       if (!l4proto->ctnl_timeout.nlattr_to_obj)
-               return 0;
-
        tb = kcalloc(l4proto->ctnl_timeout.nlattr_max + 1, sizeof(*tb),
                     GFP_KERNEL);
 
@@ -125,7 +122,7 @@ static int cttimeout_new_timeout(struct net *net, struct sock *ctnl,
                return -EBUSY;
        }
 
-       l4proto = nf_ct_l4proto_find_get(l3num, l4num);
+       l4proto = nf_ct_l4proto_find_get(l4num);
 
        /* This protocol is not supportted, skip. */
        if (l4proto->l4proto != l4num) {
@@ -167,6 +164,8 @@ ctnl_timeout_fill_info(struct sk_buff *skb, u32 portid, u32 seq, u32 type,
        struct nfgenmsg *nfmsg;
        unsigned int flags = portid ? NLM_F_MULTI : 0;
        const struct nf_conntrack_l4proto *l4proto = timeout->timeout.l4proto;
+       struct nlattr *nest_parms;
+       int ret;
 
        event = nfnl_msg_type(NFNL_SUBSYS_CTNETLINK_TIMEOUT, event);
        nlh = nlmsg_put(skb, portid, seq, event, sizeof(*nfmsg), flags);
@@ -186,22 +185,15 @@ ctnl_timeout_fill_info(struct sk_buff *skb, u32 portid, u32 seq, u32 type,
                         htonl(refcount_read(&timeout->refcnt))))
                goto nla_put_failure;
 
-       if (likely(l4proto->ctnl_timeout.obj_to_nlattr)) {
-               struct nlattr *nest_parms;
-               int ret;
-
-               nest_parms = nla_nest_start(skb,
-                                           CTA_TIMEOUT_DATA | NLA_F_NESTED);
-               if (!nest_parms)
-                       goto nla_put_failure;
+       nest_parms = nla_nest_start(skb, CTA_TIMEOUT_DATA | NLA_F_NESTED);
+       if (!nest_parms)
+               goto nla_put_failure;
 
-               ret = l4proto->ctnl_timeout.obj_to_nlattr(skb,
-                                                       &timeout->timeout.data);
-               if (ret < 0)
-                       goto nla_put_failure;
+       ret = l4proto->ctnl_timeout.obj_to_nlattr(skb, &timeout->timeout.data);
+       if (ret < 0)
+               goto nla_put_failure;
 
-               nla_nest_end(skb, nest_parms);
-       }
+       nla_nest_end(skb, nest_parms);
 
        nlmsg_end(skb, nlh);
        return skb->len;
@@ -358,7 +350,6 @@ static int cttimeout_default_set(struct net *net, struct sock *ctnl,
                                 struct netlink_ext_ack *extack)
 {
        const struct nf_conntrack_l4proto *l4proto;
-       __u16 l3num;
        __u8 l4num;
        int ret;
 
@@ -367,9 +358,8 @@ static int cttimeout_default_set(struct net *net, struct sock *ctnl,
            !cda[CTA_TIMEOUT_DATA])
                return -EINVAL;
 
-       l3num = ntohs(nla_get_be16(cda[CTA_TIMEOUT_L3PROTO]));
        l4num = nla_get_u8(cda[CTA_TIMEOUT_L4PROTO]);
-       l4proto = nf_ct_l4proto_find_get(l3num, l4num);
+       l4proto = nf_ct_l4proto_find_get(l4num);
 
        /* This protocol is not supported, skip. */
        if (l4proto->l4proto != l4num) {
@@ -391,12 +381,14 @@ err:
 
 static int
 cttimeout_default_fill_info(struct net *net, struct sk_buff *skb, u32 portid,
-                           u32 seq, u32 type, int event,
+                           u32 seq, u32 type, int event, u16 l3num,
                            const struct nf_conntrack_l4proto *l4proto)
 {
        struct nlmsghdr *nlh;
        struct nfgenmsg *nfmsg;
        unsigned int flags = portid ? NLM_F_MULTI : 0;
+       struct nlattr *nest_parms;
+       int ret;
 
        event = nfnl_msg_type(NFNL_SUBSYS_CTNETLINK_TIMEOUT, event);
        nlh = nlmsg_put(skb, portid, seq, event, sizeof(*nfmsg), flags);
@@ -408,25 +400,19 @@ cttimeout_default_fill_info(struct net *net, struct sk_buff *skb, u32 portid,
        nfmsg->version = NFNETLINK_V0;
        nfmsg->res_id = 0;
 
-       if (nla_put_be16(skb, CTA_TIMEOUT_L3PROTO, htons(l4proto->l3proto)) ||
+       if (nla_put_be16(skb, CTA_TIMEOUT_L3PROTO, htons(l3num)) ||
            nla_put_u8(skb, CTA_TIMEOUT_L4PROTO, l4proto->l4proto))
                goto nla_put_failure;
 
-       if (likely(l4proto->ctnl_timeout.obj_to_nlattr)) {
-               struct nlattr *nest_parms;
-               int ret;
-
-               nest_parms = nla_nest_start(skb,
-                                           CTA_TIMEOUT_DATA | NLA_F_NESTED);
-               if (!nest_parms)
-                       goto nla_put_failure;
+       nest_parms = nla_nest_start(skb, CTA_TIMEOUT_DATA | NLA_F_NESTED);
+       if (!nest_parms)
+               goto nla_put_failure;
 
-               ret = l4proto->ctnl_timeout.obj_to_nlattr(skb, NULL);
-               if (ret < 0)
-                       goto nla_put_failure;
+       ret = l4proto->ctnl_timeout.obj_to_nlattr(skb, NULL);
+       if (ret < 0)
+               goto nla_put_failure;
 
-               nla_nest_end(skb, nest_parms);
-       }
+       nla_nest_end(skb, nest_parms);
 
        nlmsg_end(skb, nlh);
        return skb->len;
@@ -454,7 +440,7 @@ static int cttimeout_default_get(struct net *net, struct sock *ctnl,
 
        l3num = ntohs(nla_get_be16(cda[CTA_TIMEOUT_L3PROTO]));
        l4num = nla_get_u8(cda[CTA_TIMEOUT_L4PROTO]);
-       l4proto = nf_ct_l4proto_find_get(l3num, l4num);
+       l4proto = nf_ct_l4proto_find_get(l4num);
 
        /* This protocol is not supported, skip. */
        if (l4proto->l4proto != l4num) {
@@ -472,6 +458,7 @@ static int cttimeout_default_get(struct net *net, struct sock *ctnl,
                                          nlh->nlmsg_seq,
                                          NFNL_MSG_TYPE(nlh->nlmsg_type),
                                          IPCTNL_MSG_TIMEOUT_DEFAULT_SET,
+                                         l3num,
                                          l4proto);
        if (ret <= 0) {
                kfree_skb(skb2);