Ignore:
Timestamp:
2011-08-06T14:39:31+02:00 (5 years ago)
Author:
nbd
Message:

kernel: add missing checks in the netfilter optimization patch which broke some rules containing only source/destination address checks

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/generic/patches-3.0/610-netfilter_match_bypass_default_checks.patch

    r27879 r27923  
    2121                  IPT_INV_SRCIP) || 
    2222            FWINV((ip->daddr&ipinfo->dmsk.s_addr) != ipinfo->dst.s_addr, 
    23 @@ -134,6 +137,26 @@ ip_packet_match(const struct iphdr *ip, 
     23@@ -134,6 +137,29 @@ ip_packet_match(const struct iphdr *ip, 
    2424        return true; 
    2525 } 
     
    3939+               return; 
    4040+ 
     41+       if (ip->smsk.s_addr || ip->dmsk.s_addr) 
     42+               return; 
     43+ 
    4144+       if (ip->proto) 
    4245+               return; 
     
    4851 ip_checkentry(const struct ipt_ip *ip) 
    4952 { 
    50 @@ -561,7 +584,7 @@ static void cleanup_match(struct xt_entr 
     53@@ -561,7 +587,7 @@ static void cleanup_match(struct xt_entr 
    5154 } 
    5255  
     
    5760        const struct xt_entry_target *t; 
    5861  
    59 @@ -570,6 +593,8 @@ check_entry(const struct ipt_entry *e, c 
     62@@ -570,6 +596,8 @@ check_entry(const struct ipt_entry *e, c 
    6063                return -EINVAL; 
    6164        } 
     
    6669            e->next_offset) 
    6770                return -EINVAL; 
    68 @@ -931,6 +956,7 @@ copy_entries_to_user(unsigned int total_ 
     71@@ -931,6 +959,7 @@ copy_entries_to_user(unsigned int total_ 
    6972        const struct xt_table_info *private = table->private; 
    7073        int ret = 0; 
     
    7477        counters = alloc_counters(table); 
    7578        if (IS_ERR(counters)) 
    76 @@ -961,6 +987,14 @@ copy_entries_to_user(unsigned int total_ 
    77                         ret = -EFAULT; 
     79@@ -962,6 +991,14 @@ copy_entries_to_user(unsigned int total_ 
    7880                        goto free_counters; 
    7981                } 
    80 + 
     82  
    8183+               flags = e->ip.flags & IPT_F_MASK; 
    8284+               if (copy_to_user(userptr + off 
     
    8688+                       goto free_counters; 
    8789+               } 
    88   
     90+ 
    8991                for (i = sizeof(struct ipt_entry); 
    9092                     i < e->target_offset; 
     93                     i += m->u.match_size) { 
Note: See TracChangeset for help on using the changeset viewer.