mac80211: fix vlan and optimise RX
[safe/jmp/linux-2.6] / net / netfilter / xt_dccp.c
index 7aa30bb..0989f29 100644 (file)
@@ -45,10 +45,8 @@ dccp_find_option(u_int8_t option,
        unsigned int optlen = dh->dccph_doff*4 - __dccp_hdr_len(dh);
        unsigned int i;
 
-       if (dh->dccph_doff * 4 < __dccp_hdr_len(dh)) {
-               *hotdrop = true;
-               return false;
-       }
+       if (dh->dccph_doff * 4 < __dccp_hdr_len(dh))
+               goto invalid;
 
        if (!optlen)
                return false;
@@ -57,9 +55,7 @@ dccp_find_option(u_int8_t option,
        op = skb_header_pointer(skb, protoff + optoff, optlen, dccp_optbuf);
        if (op == NULL) {
                /* If we don't have the whole header, drop packet. */
-               spin_unlock_bh(&dccp_buflock);
-               *hotdrop = true;
-               return false;
+               goto partial;
        }
 
        for (i = 0; i < optlen; ) {
@@ -76,6 +72,12 @@ dccp_find_option(u_int8_t option,
 
        spin_unlock_bh(&dccp_buflock);
        return false;
+
+partial:
+       spin_unlock_bh(&dccp_buflock);
+invalid:
+       *hotdrop = true;
+       return false;
 }
 
 
@@ -121,12 +123,9 @@ dccp_mt(const struct sk_buff *skb, const struct xt_match_param *par)
                           XT_DCCP_OPTION, info->flags, info->invflags);
 }
 
-static bool
-dccp_mt_check(const char *tablename, const void *inf,
-              const struct xt_match *match, void *matchinfo,
-              unsigned int hook_mask)
+static bool dccp_mt_check(const struct xt_mtchk_param *par)
 {
-       const struct xt_dccp_info *info = matchinfo;
+       const struct xt_dccp_info *info = par->matchinfo;
 
        return !(info->flags & ~XT_DCCP_VALID_FLAGS)
                && !(info->invflags & ~XT_DCCP_VALID_FLAGS)