Commit 135367b8 authored by Jan Engelhardt's avatar Jan Engelhardt

netfilter: xtables: change xt_target.checkentry return type

Restore function signatures from bool to int so that we can report
memory allocation failures or similar using -ENOMEM rather than
always having to pass -EINVAL back.

// <smpl>
@@
type bool;
identifier check, par;
@@
-bool check
+int check
 (struct xt_tgchk_param *par) { ... }
// </smpl>

Minus the change it does to xt_ct_find_proto.
Signed-off-by: default avatarJan Engelhardt <jengelh@medozas.de>
parent b0f38452
...@@ -342,8 +342,8 @@ struct xt_target { ...@@ -342,8 +342,8 @@ struct xt_target {
/* Called when user tries to insert an entry of this type: /* Called when user tries to insert an entry of this type:
hook_mask is a bitmask of hooks from which it can be hook_mask is a bitmask of hooks from which it can be
called. */ called. */
/* Should return true or false. */ /* Should return true or false, or an error code (-Exxxx). */
bool (*checkentry)(const struct xt_tgchk_param *); int (*checkentry)(const struct xt_tgchk_param *);
/* Called when entry of this type deleted. */ /* Called when entry of this type deleted. */
void (*destroy)(const struct xt_tgdtor_param *); void (*destroy)(const struct xt_tgdtor_param *);
......
...@@ -57,7 +57,7 @@ ebt_arpreply_tg(struct sk_buff *skb, const struct xt_target_param *par) ...@@ -57,7 +57,7 @@ ebt_arpreply_tg(struct sk_buff *skb, const struct xt_target_param *par)
return info->target; return info->target;
} }
static bool ebt_arpreply_tg_check(const struct xt_tgchk_param *par) static int ebt_arpreply_tg_check(const struct xt_tgchk_param *par)
{ {
const struct ebt_arpreply_info *info = par->targinfo; const struct ebt_arpreply_info *info = par->targinfo;
const struct ebt_entry *e = par->entryinfo; const struct ebt_entry *e = par->entryinfo;
......
...@@ -26,7 +26,7 @@ ebt_dnat_tg(struct sk_buff *skb, const struct xt_target_param *par) ...@@ -26,7 +26,7 @@ ebt_dnat_tg(struct sk_buff *skb, const struct xt_target_param *par)
return info->target; return info->target;
} }
static bool ebt_dnat_tg_check(const struct xt_tgchk_param *par) static int ebt_dnat_tg_check(const struct xt_tgchk_param *par)
{ {
const struct ebt_nat_info *info = par->targinfo; const struct ebt_nat_info *info = par->targinfo;
unsigned int hook_mask; unsigned int hook_mask;
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
static DEFINE_SPINLOCK(ebt_log_lock); static DEFINE_SPINLOCK(ebt_log_lock);
static bool ebt_log_tg_check(const struct xt_tgchk_param *par) static int ebt_log_tg_check(const struct xt_tgchk_param *par)
{ {
struct ebt_log_info *info = par->targinfo; struct ebt_log_info *info = par->targinfo;
......
...@@ -36,7 +36,7 @@ ebt_mark_tg(struct sk_buff *skb, const struct xt_target_param *par) ...@@ -36,7 +36,7 @@ ebt_mark_tg(struct sk_buff *skb, const struct xt_target_param *par)
return info->target | ~EBT_VERDICT_BITS; return info->target | ~EBT_VERDICT_BITS;
} }
static bool ebt_mark_tg_check(const struct xt_tgchk_param *par) static int ebt_mark_tg_check(const struct xt_tgchk_param *par)
{ {
const struct ebt_mark_t_info *info = par->targinfo; const struct ebt_mark_t_info *info = par->targinfo;
int tmp; int tmp;
......
...@@ -35,7 +35,7 @@ ebt_nflog_tg(struct sk_buff *skb, const struct xt_target_param *par) ...@@ -35,7 +35,7 @@ ebt_nflog_tg(struct sk_buff *skb, const struct xt_target_param *par)
return EBT_CONTINUE; return EBT_CONTINUE;
} }
static bool ebt_nflog_tg_check(const struct xt_tgchk_param *par) static int ebt_nflog_tg_check(const struct xt_tgchk_param *par)
{ {
struct ebt_nflog_info *info = par->targinfo; struct ebt_nflog_info *info = par->targinfo;
......
...@@ -32,7 +32,7 @@ ebt_redirect_tg(struct sk_buff *skb, const struct xt_target_param *par) ...@@ -32,7 +32,7 @@ ebt_redirect_tg(struct sk_buff *skb, const struct xt_target_param *par)
return info->target; return info->target;
} }
static bool ebt_redirect_tg_check(const struct xt_tgchk_param *par) static int ebt_redirect_tg_check(const struct xt_tgchk_param *par)
{ {
const struct ebt_redirect_info *info = par->targinfo; const struct ebt_redirect_info *info = par->targinfo;
unsigned int hook_mask; unsigned int hook_mask;
......
...@@ -42,7 +42,7 @@ ebt_snat_tg(struct sk_buff *skb, const struct xt_target_param *par) ...@@ -42,7 +42,7 @@ ebt_snat_tg(struct sk_buff *skb, const struct xt_target_param *par)
return info->target | ~EBT_VERDICT_BITS; return info->target | ~EBT_VERDICT_BITS;
} }
static bool ebt_snat_tg_check(const struct xt_tgchk_param *par) static int ebt_snat_tg_check(const struct xt_tgchk_param *par)
{ {
const struct ebt_nat_info *info = par->targinfo; const struct ebt_nat_info *info = par->targinfo;
int tmp; int tmp;
......
...@@ -249,7 +249,7 @@ ebt_ulog_tg(struct sk_buff *skb, const struct xt_target_param *par) ...@@ -249,7 +249,7 @@ ebt_ulog_tg(struct sk_buff *skb, const struct xt_target_param *par)
return EBT_CONTINUE; return EBT_CONTINUE;
} }
static bool ebt_ulog_tg_check(const struct xt_tgchk_param *par) static int ebt_ulog_tg_check(const struct xt_tgchk_param *par)
{ {
struct ebt_ulog_info *uloginfo = par->targinfo; struct ebt_ulog_info *uloginfo = par->targinfo;
......
...@@ -54,7 +54,7 @@ target(struct sk_buff *skb, const struct xt_target_param *par) ...@@ -54,7 +54,7 @@ target(struct sk_buff *skb, const struct xt_target_param *par)
return mangle->target; return mangle->target;
} }
static bool checkentry(const struct xt_tgchk_param *par) static int checkentry(const struct xt_tgchk_param *par)
{ {
const struct arpt_mangle *mangle = par->targinfo; const struct arpt_mangle *mangle = par->targinfo;
......
...@@ -347,7 +347,7 @@ clusterip_tg(struct sk_buff *skb, const struct xt_target_param *par) ...@@ -347,7 +347,7 @@ clusterip_tg(struct sk_buff *skb, const struct xt_target_param *par)
return XT_CONTINUE; return XT_CONTINUE;
} }
static bool clusterip_tg_check(const struct xt_tgchk_param *par) static int clusterip_tg_check(const struct xt_tgchk_param *par)
{ {
struct ipt_clusterip_tgt_info *cipinfo = par->targinfo; struct ipt_clusterip_tgt_info *cipinfo = par->targinfo;
const struct ipt_entry *e = par->entryinfo; const struct ipt_entry *e = par->entryinfo;
......
...@@ -93,7 +93,7 @@ ecn_tg(struct sk_buff *skb, const struct xt_target_param *par) ...@@ -93,7 +93,7 @@ ecn_tg(struct sk_buff *skb, const struct xt_target_param *par)
return XT_CONTINUE; return XT_CONTINUE;
} }
static bool ecn_tg_check(const struct xt_tgchk_param *par) static int ecn_tg_check(const struct xt_tgchk_param *par)
{ {
const struct ipt_ECN_info *einfo = par->targinfo; const struct ipt_ECN_info *einfo = par->targinfo;
const struct ipt_entry *e = par->entryinfo; const struct ipt_entry *e = par->entryinfo;
......
...@@ -439,7 +439,7 @@ log_tg(struct sk_buff *skb, const struct xt_target_param *par) ...@@ -439,7 +439,7 @@ log_tg(struct sk_buff *skb, const struct xt_target_param *par)
return XT_CONTINUE; return XT_CONTINUE;
} }
static bool log_tg_check(const struct xt_tgchk_param *par) static int log_tg_check(const struct xt_tgchk_param *par)
{ {
const struct ipt_log_info *loginfo = par->targinfo; const struct ipt_log_info *loginfo = par->targinfo;
......
...@@ -28,7 +28,7 @@ MODULE_AUTHOR("Netfilter Core Team <coreteam@netfilter.org>"); ...@@ -28,7 +28,7 @@ MODULE_AUTHOR("Netfilter Core Team <coreteam@netfilter.org>");
MODULE_DESCRIPTION("Xtables: automatic-address SNAT"); MODULE_DESCRIPTION("Xtables: automatic-address SNAT");
/* FIXME: Multiple targets. --RR */ /* FIXME: Multiple targets. --RR */
static bool masquerade_tg_check(const struct xt_tgchk_param *par) static int masquerade_tg_check(const struct xt_tgchk_param *par)
{ {
const struct nf_nat_multi_range_compat *mr = par->targinfo; const struct nf_nat_multi_range_compat *mr = par->targinfo;
......
...@@ -22,7 +22,7 @@ MODULE_LICENSE("GPL"); ...@@ -22,7 +22,7 @@ MODULE_LICENSE("GPL");
MODULE_AUTHOR("Svenning Soerensen <svenning@post5.tele.dk>"); MODULE_AUTHOR("Svenning Soerensen <svenning@post5.tele.dk>");
MODULE_DESCRIPTION("Xtables: 1:1 NAT mapping of IPv4 subnets"); MODULE_DESCRIPTION("Xtables: 1:1 NAT mapping of IPv4 subnets");
static bool netmap_tg_check(const struct xt_tgchk_param *par) static int netmap_tg_check(const struct xt_tgchk_param *par)
{ {
const struct nf_nat_multi_range_compat *mr = par->targinfo; const struct nf_nat_multi_range_compat *mr = par->targinfo;
......
...@@ -26,7 +26,7 @@ MODULE_AUTHOR("Netfilter Core Team <coreteam@netfilter.org>"); ...@@ -26,7 +26,7 @@ MODULE_AUTHOR("Netfilter Core Team <coreteam@netfilter.org>");
MODULE_DESCRIPTION("Xtables: Connection redirection to localhost"); MODULE_DESCRIPTION("Xtables: Connection redirection to localhost");
/* FIXME: Take multiple ranges --RR */ /* FIXME: Take multiple ranges --RR */
static bool redirect_tg_check(const struct xt_tgchk_param *par) static int redirect_tg_check(const struct xt_tgchk_param *par)
{ {
const struct nf_nat_multi_range_compat *mr = par->targinfo; const struct nf_nat_multi_range_compat *mr = par->targinfo;
......
...@@ -174,7 +174,7 @@ reject_tg(struct sk_buff *skb, const struct xt_target_param *par) ...@@ -174,7 +174,7 @@ reject_tg(struct sk_buff *skb, const struct xt_target_param *par)
return NF_DROP; return NF_DROP;
} }
static bool reject_tg_check(const struct xt_tgchk_param *par) static int reject_tg_check(const struct xt_tgchk_param *par)
{ {
const struct ipt_reject_info *rejinfo = par->targinfo; const struct ipt_reject_info *rejinfo = par->targinfo;
const struct ipt_entry *e = par->entryinfo; const struct ipt_entry *e = par->entryinfo;
......
...@@ -307,7 +307,7 @@ static void ipt_logfn(u_int8_t pf, ...@@ -307,7 +307,7 @@ static void ipt_logfn(u_int8_t pf,
ipt_ulog_packet(hooknum, skb, in, out, &loginfo, prefix); ipt_ulog_packet(hooknum, skb, in, out, &loginfo, prefix);
} }
static bool ulog_tg_check(const struct xt_tgchk_param *par) static int ulog_tg_check(const struct xt_tgchk_param *par)
{ {
const struct ipt_ulog_info *loginfo = par->targinfo; const struct ipt_ulog_info *loginfo = par->targinfo;
......
...@@ -74,7 +74,7 @@ ipt_dnat_target(struct sk_buff *skb, const struct xt_target_param *par) ...@@ -74,7 +74,7 @@ ipt_dnat_target(struct sk_buff *skb, const struct xt_target_param *par)
return nf_nat_setup_info(ct, &mr->range[0], IP_NAT_MANIP_DST); return nf_nat_setup_info(ct, &mr->range[0], IP_NAT_MANIP_DST);
} }
static bool ipt_snat_checkentry(const struct xt_tgchk_param *par) static int ipt_snat_checkentry(const struct xt_tgchk_param *par)
{ {
const struct nf_nat_multi_range_compat *mr = par->targinfo; const struct nf_nat_multi_range_compat *mr = par->targinfo;
...@@ -86,7 +86,7 @@ static bool ipt_snat_checkentry(const struct xt_tgchk_param *par) ...@@ -86,7 +86,7 @@ static bool ipt_snat_checkentry(const struct xt_tgchk_param *par)
return true; return true;
} }
static bool ipt_dnat_checkentry(const struct xt_tgchk_param *par) static int ipt_dnat_checkentry(const struct xt_tgchk_param *par)
{ {
const struct nf_nat_multi_range_compat *mr = par->targinfo; const struct nf_nat_multi_range_compat *mr = par->targinfo;
......
...@@ -451,7 +451,7 @@ log_tg6(struct sk_buff *skb, const struct xt_target_param *par) ...@@ -451,7 +451,7 @@ log_tg6(struct sk_buff *skb, const struct xt_target_param *par)
} }
static bool log_tg6_check(const struct xt_tgchk_param *par) static int log_tg6_check(const struct xt_tgchk_param *par)
{ {
const struct ip6t_log_info *loginfo = par->targinfo; const struct ip6t_log_info *loginfo = par->targinfo;
......
...@@ -213,7 +213,7 @@ reject_tg6(struct sk_buff *skb, const struct xt_target_param *par) ...@@ -213,7 +213,7 @@ reject_tg6(struct sk_buff *skb, const struct xt_target_param *par)
return NF_DROP; return NF_DROP;
} }
static bool reject_tg6_check(const struct xt_tgchk_param *par) static int reject_tg6_check(const struct xt_tgchk_param *par)
{ {
const struct ip6t_reject_info *rejinfo = par->targinfo; const struct ip6t_reject_info *rejinfo = par->targinfo;
const struct ip6t_entry *e = par->entryinfo; const struct ip6t_entry *e = par->entryinfo;
......
...@@ -84,7 +84,7 @@ connsecmark_tg(struct sk_buff *skb, const struct xt_target_param *par) ...@@ -84,7 +84,7 @@ connsecmark_tg(struct sk_buff *skb, const struct xt_target_param *par)
return XT_CONTINUE; return XT_CONTINUE;
} }
static bool connsecmark_tg_check(const struct xt_tgchk_param *par) static int connsecmark_tg_check(const struct xt_tgchk_param *par)
{ {
const struct xt_connsecmark_target_info *info = par->targinfo; const struct xt_connsecmark_target_info *info = par->targinfo;
......
...@@ -53,7 +53,7 @@ static u8 xt_ct_find_proto(const struct xt_tgchk_param *par) ...@@ -53,7 +53,7 @@ static u8 xt_ct_find_proto(const struct xt_tgchk_param *par)
return 0; return 0;
} }
static bool xt_ct_tg_check(const struct xt_tgchk_param *par) static int xt_ct_tg_check(const struct xt_tgchk_param *par)
{ {
struct xt_ct_target_info *info = par->targinfo; struct xt_ct_target_info *info = par->targinfo;
struct nf_conntrack_tuple t; struct nf_conntrack_tuple t;
......
...@@ -60,7 +60,7 @@ dscp_tg6(struct sk_buff *skb, const struct xt_target_param *par) ...@@ -60,7 +60,7 @@ dscp_tg6(struct sk_buff *skb, const struct xt_target_param *par)
return XT_CONTINUE; return XT_CONTINUE;
} }
static bool dscp_tg_check(const struct xt_tgchk_param *par) static int dscp_tg_check(const struct xt_tgchk_param *par)
{ {
const struct xt_DSCP_info *info = par->targinfo; const struct xt_DSCP_info *info = par->targinfo;
......
...@@ -101,7 +101,7 @@ hl_tg6(struct sk_buff *skb, const struct xt_target_param *par) ...@@ -101,7 +101,7 @@ hl_tg6(struct sk_buff *skb, const struct xt_target_param *par)
return XT_CONTINUE; return XT_CONTINUE;
} }
static bool ttl_tg_check(const struct xt_tgchk_param *par) static int ttl_tg_check(const struct xt_tgchk_param *par)
{ {
const struct ipt_TTL_info *info = par->targinfo; const struct ipt_TTL_info *info = par->targinfo;
...@@ -114,7 +114,7 @@ static bool ttl_tg_check(const struct xt_tgchk_param *par) ...@@ -114,7 +114,7 @@ static bool ttl_tg_check(const struct xt_tgchk_param *par)
return true; return true;
} }
static bool hl_tg6_check(const struct xt_tgchk_param *par) static int hl_tg6_check(const struct xt_tgchk_param *par)
{ {
const struct ip6t_HL_info *info = par->targinfo; const struct ip6t_HL_info *info = par->targinfo;
......
...@@ -80,7 +80,7 @@ static void led_timeout_callback(unsigned long data) ...@@ -80,7 +80,7 @@ static void led_timeout_callback(unsigned long data)
led_trigger_event(&ledinternal->netfilter_led_trigger, LED_OFF); led_trigger_event(&ledinternal->netfilter_led_trigger, LED_OFF);
} }
static bool led_tg_check(const struct xt_tgchk_param *par) static int led_tg_check(const struct xt_tgchk_param *par)
{ {
struct xt_led_info *ledinfo = par->targinfo; struct xt_led_info *ledinfo = par->targinfo;
struct xt_led_info_internal *ledinternal; struct xt_led_info_internal *ledinternal;
......
...@@ -37,7 +37,7 @@ nflog_tg(struct sk_buff *skb, const struct xt_target_param *par) ...@@ -37,7 +37,7 @@ nflog_tg(struct sk_buff *skb, const struct xt_target_param *par)
return XT_CONTINUE; return XT_CONTINUE;
} }
static bool nflog_tg_check(const struct xt_tgchk_param *par) static int nflog_tg_check(const struct xt_tgchk_param *par)
{ {
const struct xt_nflog_info *info = par->targinfo; const struct xt_nflog_info *info = par->targinfo;
......
...@@ -81,7 +81,7 @@ nfqueue_tg_v1(struct sk_buff *skb, const struct xt_target_param *par) ...@@ -81,7 +81,7 @@ nfqueue_tg_v1(struct sk_buff *skb, const struct xt_target_param *par)
return NF_QUEUE_NR(queue); return NF_QUEUE_NR(queue);
} }
static bool nfqueue_tg_v1_check(const struct xt_tgchk_param *par) static int nfqueue_tg_v1_check(const struct xt_tgchk_param *par)
{ {
const struct xt_NFQ_info_v1 *info = par->targinfo; const struct xt_NFQ_info_v1 *info = par->targinfo;
u32 maxid; u32 maxid;
......
...@@ -85,7 +85,7 @@ xt_rateest_tg(struct sk_buff *skb, const struct xt_target_param *par) ...@@ -85,7 +85,7 @@ xt_rateest_tg(struct sk_buff *skb, const struct xt_target_param *par)
return XT_CONTINUE; return XT_CONTINUE;
} }
static bool xt_rateest_tg_checkentry(const struct xt_tgchk_param *par) static int xt_rateest_tg_checkentry(const struct xt_tgchk_param *par)
{ {
struct xt_rateest_target_info *info = par->targinfo; struct xt_rateest_target_info *info = par->targinfo;
struct xt_rateest *est; struct xt_rateest *est;
......
...@@ -80,7 +80,7 @@ static bool checkentry_selinux(struct xt_secmark_target_info *info) ...@@ -80,7 +80,7 @@ static bool checkentry_selinux(struct xt_secmark_target_info *info)
return true; return true;
} }
static bool secmark_tg_check(const struct xt_tgchk_param *par) static int secmark_tg_check(const struct xt_tgchk_param *par)
{ {
struct xt_secmark_target_info *info = par->targinfo; struct xt_secmark_target_info *info = par->targinfo;
......
...@@ -234,7 +234,7 @@ static inline bool find_syn_match(const struct xt_entry_match *m) ...@@ -234,7 +234,7 @@ static inline bool find_syn_match(const struct xt_entry_match *m)
return false; return false;
} }
static bool tcpmss_tg4_check(const struct xt_tgchk_param *par) static int tcpmss_tg4_check(const struct xt_tgchk_param *par)
{ {
const struct xt_tcpmss_info *info = par->targinfo; const struct xt_tcpmss_info *info = par->targinfo;
const struct ipt_entry *e = par->entryinfo; const struct ipt_entry *e = par->entryinfo;
...@@ -256,7 +256,7 @@ static bool tcpmss_tg4_check(const struct xt_tgchk_param *par) ...@@ -256,7 +256,7 @@ static bool tcpmss_tg4_check(const struct xt_tgchk_param *par)
} }
#if defined(CONFIG_IP6_NF_IPTABLES) || defined(CONFIG_IP6_NF_IPTABLES_MODULE) #if defined(CONFIG_IP6_NF_IPTABLES) || defined(CONFIG_IP6_NF_IPTABLES_MODULE)
static bool tcpmss_tg6_check(const struct xt_tgchk_param *par) static int tcpmss_tg6_check(const struct xt_tgchk_param *par)
{ {
const struct xt_tcpmss_info *info = par->targinfo; const struct xt_tcpmss_info *info = par->targinfo;
const struct ip6t_entry *e = par->entryinfo; const struct ip6t_entry *e = par->entryinfo;
......
...@@ -59,7 +59,7 @@ tproxy_tg(struct sk_buff *skb, const struct xt_target_param *par) ...@@ -59,7 +59,7 @@ tproxy_tg(struct sk_buff *skb, const struct xt_target_param *par)
return NF_DROP; return NF_DROP;
} }
static bool tproxy_tg_check(const struct xt_tgchk_param *par) static int tproxy_tg_check(const struct xt_tgchk_param *par)
{ {
const struct ipt_ip *i = par->entryinfo; const struct ipt_ip *i = par->entryinfo;
......
...@@ -74,7 +74,7 @@ connmark_tg(struct sk_buff *skb, const struct xt_target_param *par) ...@@ -74,7 +74,7 @@ connmark_tg(struct sk_buff *skb, const struct xt_target_param *par)
return XT_CONTINUE; return XT_CONTINUE;
} }
static bool connmark_tg_check(const struct xt_tgchk_param *par) static int connmark_tg_check(const struct xt_tgchk_param *par)
{ {
if (nf_ct_l3proto_try_module_get(par->family) < 0) { if (nf_ct_l3proto_try_module_get(par->family) < 0) {
pr_info("cannot load conntrack support for proto=%u\n", pr_info("cannot load conntrack support for proto=%u\n",
......
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