mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-16 02:14:58 +00:00
[NETFILTER] nfnetlink: nfattr_parse() can never fail, make it void
nfattr_parse (and thus nfattr_parse_nested) always returns success. So we can make them 'void' and remove all the checking at the caller side. Based on original patch by Pablo Neira Ayuso <pablo@netfilter.org> Signed-off-by: Harald Welte <laforge@netfilter.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
eaae4fa45e
commit
a2506c0432
@ -146,7 +146,7 @@ extern void nfnl_unlock(void);
|
|||||||
extern int nfnetlink_subsys_register(struct nfnetlink_subsystem *n);
|
extern int nfnetlink_subsys_register(struct nfnetlink_subsystem *n);
|
||||||
extern int nfnetlink_subsys_unregister(struct nfnetlink_subsystem *n);
|
extern int nfnetlink_subsys_unregister(struct nfnetlink_subsystem *n);
|
||||||
|
|
||||||
extern int nfattr_parse(struct nfattr *tb[], int maxattr,
|
extern void nfattr_parse(struct nfattr *tb[], int maxattr,
|
||||||
struct nfattr *nfa, int len);
|
struct nfattr *nfa, int len);
|
||||||
|
|
||||||
#define nfattr_parse_nested(tb, max, nfa) \
|
#define nfattr_parse_nested(tb, max, nfa) \
|
||||||
|
@ -482,9 +482,7 @@ ctnetlink_parse_tuple_ip(struct nfattr *attr, struct ip_conntrack_tuple *tuple)
|
|||||||
|
|
||||||
DEBUGP("entered %s\n", __FUNCTION__);
|
DEBUGP("entered %s\n", __FUNCTION__);
|
||||||
|
|
||||||
|
nfattr_parse_nested(tb, CTA_IP_MAX, attr);
|
||||||
if (nfattr_parse_nested(tb, CTA_IP_MAX, attr) < 0)
|
|
||||||
goto nfattr_failure;
|
|
||||||
|
|
||||||
if (nfattr_bad_size(tb, CTA_IP_MAX, cta_min_ip))
|
if (nfattr_bad_size(tb, CTA_IP_MAX, cta_min_ip))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
@ -500,9 +498,6 @@ ctnetlink_parse_tuple_ip(struct nfattr *attr, struct ip_conntrack_tuple *tuple)
|
|||||||
DEBUGP("leaving\n");
|
DEBUGP("leaving\n");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
nfattr_failure:
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const int cta_min_proto[CTA_PROTO_MAX] = {
|
static const int cta_min_proto[CTA_PROTO_MAX] = {
|
||||||
@ -524,8 +519,7 @@ ctnetlink_parse_tuple_proto(struct nfattr *attr,
|
|||||||
|
|
||||||
DEBUGP("entered %s\n", __FUNCTION__);
|
DEBUGP("entered %s\n", __FUNCTION__);
|
||||||
|
|
||||||
if (nfattr_parse_nested(tb, CTA_PROTO_MAX, attr) < 0)
|
nfattr_parse_nested(tb, CTA_PROTO_MAX, attr);
|
||||||
goto nfattr_failure;
|
|
||||||
|
|
||||||
if (nfattr_bad_size(tb, CTA_PROTO_MAX, cta_min_proto))
|
if (nfattr_bad_size(tb, CTA_PROTO_MAX, cta_min_proto))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
@ -542,9 +536,6 @@ ctnetlink_parse_tuple_proto(struct nfattr *attr,
|
|||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
nfattr_failure:
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int
|
static inline int
|
||||||
@ -558,8 +549,7 @@ ctnetlink_parse_tuple(struct nfattr *cda[], struct ip_conntrack_tuple *tuple,
|
|||||||
|
|
||||||
memset(tuple, 0, sizeof(*tuple));
|
memset(tuple, 0, sizeof(*tuple));
|
||||||
|
|
||||||
if (nfattr_parse_nested(tb, CTA_TUPLE_MAX, cda[type-1]) < 0)
|
nfattr_parse_nested(tb, CTA_TUPLE_MAX, cda[type-1]);
|
||||||
goto nfattr_failure;
|
|
||||||
|
|
||||||
if (!tb[CTA_TUPLE_IP-1])
|
if (!tb[CTA_TUPLE_IP-1])
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
@ -586,9 +576,6 @@ ctnetlink_parse_tuple(struct nfattr *cda[], struct ip_conntrack_tuple *tuple,
|
|||||||
DEBUGP("leaving\n");
|
DEBUGP("leaving\n");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
nfattr_failure:
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_IP_NF_NAT_NEEDED
|
#ifdef CONFIG_IP_NF_NAT_NEEDED
|
||||||
@ -606,11 +593,10 @@ static int ctnetlink_parse_nat_proto(struct nfattr *attr,
|
|||||||
|
|
||||||
DEBUGP("entered %s\n", __FUNCTION__);
|
DEBUGP("entered %s\n", __FUNCTION__);
|
||||||
|
|
||||||
if (nfattr_parse_nested(tb, CTA_PROTONAT_MAX, attr) < 0)
|
nfattr_parse_nested(tb, CTA_PROTONAT_MAX, attr);
|
||||||
goto nfattr_failure;
|
|
||||||
|
|
||||||
if (nfattr_bad_size(tb, CTA_PROTONAT_MAX, cta_min_protonat))
|
if (nfattr_bad_size(tb, CTA_PROTONAT_MAX, cta_min_protonat))
|
||||||
goto nfattr_failure;
|
return -1;
|
||||||
|
|
||||||
npt = ip_nat_proto_find_get(ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.dst.protonum);
|
npt = ip_nat_proto_find_get(ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.dst.protonum);
|
||||||
if (!npt)
|
if (!npt)
|
||||||
@ -629,9 +615,6 @@ static int ctnetlink_parse_nat_proto(struct nfattr *attr,
|
|||||||
|
|
||||||
DEBUGP("leaving\n");
|
DEBUGP("leaving\n");
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
nfattr_failure:
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int
|
static inline int
|
||||||
@ -645,8 +628,7 @@ ctnetlink_parse_nat(struct nfattr *cda[],
|
|||||||
|
|
||||||
memset(range, 0, sizeof(*range));
|
memset(range, 0, sizeof(*range));
|
||||||
|
|
||||||
if (nfattr_parse_nested(tb, CTA_NAT_MAX, cda[CTA_NAT-1]) < 0)
|
nfattr_parse_nested(tb, CTA_NAT_MAX, cda[CTA_NAT-1]);
|
||||||
goto nfattr_failure;
|
|
||||||
|
|
||||||
if (tb[CTA_NAT_MINIP-1])
|
if (tb[CTA_NAT_MINIP-1])
|
||||||
range->min_ip = *(u_int32_t *)NFA_DATA(tb[CTA_NAT_MINIP-1]);
|
range->min_ip = *(u_int32_t *)NFA_DATA(tb[CTA_NAT_MINIP-1]);
|
||||||
@ -668,9 +650,6 @@ ctnetlink_parse_nat(struct nfattr *cda[],
|
|||||||
|
|
||||||
DEBUGP("leaving\n");
|
DEBUGP("leaving\n");
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
nfattr_failure:
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -681,8 +660,7 @@ ctnetlink_parse_help(struct nfattr *attr, char **helper_name)
|
|||||||
|
|
||||||
DEBUGP("entered %s\n", __FUNCTION__);
|
DEBUGP("entered %s\n", __FUNCTION__);
|
||||||
|
|
||||||
if (nfattr_parse_nested(tb, CTA_HELP_MAX, attr) < 0)
|
nfattr_parse_nested(tb, CTA_HELP_MAX, attr);
|
||||||
goto nfattr_failure;
|
|
||||||
|
|
||||||
if (!tb[CTA_HELP_NAME-1])
|
if (!tb[CTA_HELP_NAME-1])
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
@ -690,9 +668,6 @@ ctnetlink_parse_help(struct nfattr *attr, char **helper_name)
|
|||||||
*helper_name = NFA_DATA(tb[CTA_HELP_NAME-1]);
|
*helper_name = NFA_DATA(tb[CTA_HELP_NAME-1]);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
nfattr_failure:
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@ -960,8 +935,7 @@ ctnetlink_change_protoinfo(struct ip_conntrack *ct, struct nfattr *cda[])
|
|||||||
u_int16_t npt = ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.dst.protonum;
|
u_int16_t npt = ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.dst.protonum;
|
||||||
int err = 0;
|
int err = 0;
|
||||||
|
|
||||||
if (nfattr_parse_nested(tb, CTA_PROTOINFO_MAX, attr) < 0)
|
nfattr_parse_nested(tb, CTA_PROTOINFO_MAX, attr);
|
||||||
goto nfattr_failure;
|
|
||||||
|
|
||||||
proto = ip_conntrack_proto_find_get(npt);
|
proto = ip_conntrack_proto_find_get(npt);
|
||||||
if (!proto)
|
if (!proto)
|
||||||
@ -972,9 +946,6 @@ ctnetlink_change_protoinfo(struct ip_conntrack *ct, struct nfattr *cda[])
|
|||||||
ip_conntrack_proto_put(proto);
|
ip_conntrack_proto_put(proto);
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
nfattr_failure:
|
|
||||||
return -ENOMEM;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -362,8 +362,7 @@ static int nfattr_to_tcp(struct nfattr *cda[], struct ip_conntrack *ct)
|
|||||||
struct nfattr *attr = cda[CTA_PROTOINFO_TCP-1];
|
struct nfattr *attr = cda[CTA_PROTOINFO_TCP-1];
|
||||||
struct nfattr *tb[CTA_PROTOINFO_TCP_MAX];
|
struct nfattr *tb[CTA_PROTOINFO_TCP_MAX];
|
||||||
|
|
||||||
if (nfattr_parse_nested(tb, CTA_PROTOINFO_TCP_MAX, attr) < 0)
|
nfattr_parse_nested(tb, CTA_PROTOINFO_TCP_MAX, attr);
|
||||||
goto nfattr_failure;
|
|
||||||
|
|
||||||
if (!tb[CTA_PROTOINFO_TCP_STATE-1])
|
if (!tb[CTA_PROTOINFO_TCP_STATE-1])
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
@ -374,9 +373,6 @@ static int nfattr_to_tcp(struct nfattr *cda[], struct ip_conntrack *ct)
|
|||||||
write_unlock_bh(&tcp_lock);
|
write_unlock_bh(&tcp_lock);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
nfattr_failure:
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -128,7 +128,7 @@ void __nfa_fill(struct sk_buff *skb, int attrtype, int attrlen,
|
|||||||
memset(NFA_DATA(nfa) + attrlen, 0, NFA_ALIGN(size) - size);
|
memset(NFA_DATA(nfa) + attrlen, 0, NFA_ALIGN(size) - size);
|
||||||
}
|
}
|
||||||
|
|
||||||
int nfattr_parse(struct nfattr *tb[], int maxattr, struct nfattr *nfa, int len)
|
void nfattr_parse(struct nfattr *tb[], int maxattr, struct nfattr *nfa, int len)
|
||||||
{
|
{
|
||||||
memset(tb, 0, sizeof(struct nfattr *) * maxattr);
|
memset(tb, 0, sizeof(struct nfattr *) * maxattr);
|
||||||
|
|
||||||
@ -138,8 +138,6 @@ int nfattr_parse(struct nfattr *tb[], int maxattr, struct nfattr *nfa, int len)
|
|||||||
tb[flavor-1] = nfa;
|
tb[flavor-1] = nfa;
|
||||||
nfa = NFA_NEXT(nfa, len);
|
nfa = NFA_NEXT(nfa, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user