Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/kaber/nf-2.6
This commit is contained in:
@@ -203,7 +203,8 @@ ipq_build_packet_message(struct nf_queue_entry *entry, int *errp)
|
||||
else
|
||||
pmsg->outdev_name[0] = '\0';
|
||||
|
||||
if (entry->indev && entry->skb->dev) {
|
||||
if (entry->indev && entry->skb->dev &&
|
||||
entry->skb->mac_header != entry->skb->network_header) {
|
||||
pmsg->hw_type = entry->skb->dev->type;
|
||||
pmsg->hw_addrlen = dev_parse_header(entry->skb,
|
||||
pmsg->hw_addr);
|
||||
|
@@ -566,7 +566,7 @@ check_entry(const struct ipt_entry *e, const char *name)
|
||||
const struct xt_entry_target *t;
|
||||
|
||||
if (!ip_checkentry(&e->ip)) {
|
||||
duprintf("ip check failed %p %s.\n", e, par->match->name);
|
||||
duprintf("ip check failed %p %s.\n", e, name);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
@@ -25,7 +25,8 @@ MODULE_LICENSE("GPL");
|
||||
static inline bool match_ip(const struct sk_buff *skb,
|
||||
const struct ipt_ecn_info *einfo)
|
||||
{
|
||||
return (ip_hdr(skb)->tos & IPT_ECN_IP_MASK) == einfo->ip_ect;
|
||||
return ((ip_hdr(skb)->tos & IPT_ECN_IP_MASK) == einfo->ip_ect) ^
|
||||
!!(einfo->invert & IPT_ECN_OP_MATCH_IP);
|
||||
}
|
||||
|
||||
static inline bool match_tcp(const struct sk_buff *skb,
|
||||
@@ -76,8 +77,6 @@ static bool ecn_mt(const struct sk_buff *skb, struct xt_action_param *par)
|
||||
return false;
|
||||
|
||||
if (info->operation & (IPT_ECN_OP_MATCH_ECE|IPT_ECN_OP_MATCH_CWR)) {
|
||||
if (ip_hdr(skb)->protocol != IPPROTO_TCP)
|
||||
return false;
|
||||
if (!match_tcp(skb, info, &par->hotdrop))
|
||||
return false;
|
||||
}
|
||||
@@ -97,7 +96,7 @@ static int ecn_mt_check(const struct xt_mtchk_param *par)
|
||||
return -EINVAL;
|
||||
|
||||
if (info->operation & (IPT_ECN_OP_MATCH_ECE|IPT_ECN_OP_MATCH_CWR) &&
|
||||
ip->proto != IPPROTO_TCP) {
|
||||
(ip->proto != IPPROTO_TCP || ip->invflags & IPT_INV_PROTO)) {
|
||||
pr_info("cannot match TCP bits in rule for non-tcp packets\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
@@ -121,7 +121,9 @@ static unsigned int ipv4_confirm(unsigned int hooknum,
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (test_bit(IPS_SEQ_ADJUST_BIT, &ct->status)) {
|
||||
/* adjust seqs for loopback traffic only in outgoing direction */
|
||||
if (test_bit(IPS_SEQ_ADJUST_BIT, &ct->status) &&
|
||||
!nf_is_loopback_packet(skb)) {
|
||||
typeof(nf_nat_seq_adjust_hook) seq_adjust;
|
||||
|
||||
seq_adjust = rcu_dereference(nf_nat_seq_adjust_hook);
|
||||
|
Reference in New Issue
Block a user