Commit a2506c04 authored by Harald Welte's avatar Harald Welte Committed by David S. Miller

[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: default avatarHarald Welte <laforge@netfilter.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent eaae4fa4
...@@ -146,7 +146,7 @@ extern void nfnl_unlock(void); ...@@ -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) ...@@ -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) ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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[], ...@@ -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[], ...@@ -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) ...@@ -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) ...@@ -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[]) ...@@ -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[]) ...@@ -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) ...@@ -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) ...@@ -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, ...@@ -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) ...@@ -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;
} }
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment