RxRPC: Error handling for rxrpc_alloc_connection()
[safe/jmp/linux-2.6] / net / netfilter / xt_u32.c
index 04b677a..24a5276 100644 (file)
@@ -2,7 +2,8 @@
  *     xt_u32 - kernel module to match u32 packet content
  *
  *     Original author: Don Cohen <don@isis.cs3-inc.com>
- *     © Jan Engelhardt <jengelh@gmx.de>, 2007
+ *     (C) CC Computer Consultants GmbH, 2007
+ *     Contact: <jengelh@computergmbh.de>
  */
 
 #include <linux/module.h>
@@ -21,10 +22,10 @@ static bool u32_match_it(const struct xt_u32 *data,
        unsigned int nnums;
        unsigned int nvals;
        unsigned int i;
+       __be32 n;
        u_int32_t pos;
        u_int32_t val;
        u_int32_t at;
-       int ret;
 
        /*
         * Small example: "0 >> 28 == 4 && 8 & 0xFF0000 >> 16 = 6, 17"
@@ -35,12 +36,12 @@ static bool u32_match_it(const struct xt_u32 *data,
                at  = 0;
                pos = ct->location[0].number;
 
-               if (skb->len < 4 || pos > skb->len - 4);
+               if (skb->len < 4 || pos > skb->len - 4)
                        return false;
 
-               ret   = skb_copy_bits(skb, pos, &val, sizeof(val));
-               BUG_ON(ret < 0);
-               val   = ntohl(val);
+               if (skb_copy_bits(skb, pos, &n, sizeof(n)) < 0)
+                       BUG();
+               val   = ntohl(n);
                nnums = ct->nnums;
 
                /* Inner loop runs over "&", "<<", ">>" and "@" operands */
@@ -65,10 +66,10 @@ static bool u32_match_it(const struct xt_u32 *data,
                                    pos > skb->len - at - 4)
                                        return false;
 
-                               ret = skb_copy_bits(skb, at + pos, &val,
-                                                   sizeof(val));
-                               BUG_ON(ret < 0);
-                               val = ntohl(val);
+                               if (skb_copy_bits(skb, at + pos, &n,
+                                                   sizeof(n)) < 0)
+                                       BUG();
+                               val = ntohl(n);
                                break;
                        }
                }
@@ -86,50 +87,38 @@ static bool u32_match_it(const struct xt_u32 *data,
        return true;
 }
 
-static bool u32_match(const struct sk_buff *skb,
-                     const struct net_device *in,
-                     const struct net_device *out,
-                     const struct xt_match *match, const void *matchinfo,
-                     int offset, unsigned int protoff, bool *hotdrop)
+static bool u32_mt(const struct sk_buff *skb, const struct xt_match_param *par)
 {
-       const struct xt_u32 *data = matchinfo;
+       const struct xt_u32 *data = par->matchinfo;
        bool ret;
 
        ret = u32_match_it(data, skb);
        return ret ^ data->invert;
 }
 
-static struct xt_match u32_reg[] __read_mostly = {
-       {
-               .name       = "u32",
-               .family     = AF_INET,
-               .match      = u32_match,
-               .matchsize  = sizeof(struct xt_u32),
-               .me         = THIS_MODULE,
-       },
-       {
-               .name       = "u32",
-               .family     = AF_INET6,
-               .match      = u32_match,
-               .matchsize  = sizeof(struct xt_u32),
-               .me         = THIS_MODULE,
-       },
+static struct xt_match xt_u32_mt_reg __read_mostly = {
+       .name       = "u32",
+       .revision   = 0,
+       .family     = NFPROTO_UNSPEC,
+       .match      = u32_mt,
+       .matchsize  = sizeof(struct xt_u32),
+       .me         = THIS_MODULE,
 };
 
-static int __init xt_u32_init(void)
+static int __init u32_mt_init(void)
 {
-       return xt_register_matches(u32_reg, ARRAY_SIZE(u32_reg));
+       return xt_register_match(&xt_u32_mt_reg);
 }
 
-static void __exit xt_u32_exit(void)
+static void __exit u32_mt_exit(void)
 {
-       xt_unregister_matches(u32_reg, ARRAY_SIZE(u32_reg));
+       xt_unregister_match(&xt_u32_mt_reg);
 }
 
-module_init(xt_u32_init);
-module_exit(xt_u32_exit);
-MODULE_AUTHOR("Jan Engelhardt <jengelh@gmx.de>");
-MODULE_DESCRIPTION("netfilter u32 match module");
+module_init(u32_mt_init);
+module_exit(u32_mt_exit);
+MODULE_AUTHOR("Jan Engelhardt <jengelh@computergmbh.de>");
+MODULE_DESCRIPTION("Xtables: arbitrary byte matching");
 MODULE_LICENSE("GPL");
 MODULE_ALIAS("ipt_u32");
 MODULE_ALIAS("ip6t_u32");