mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-14 15:54:15 +08:00
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/kaber/nf-2.6
This commit is contained in:
commit
3009adf5ac
@ -307,6 +307,12 @@ static inline int nf_ct_is_untracked(const struct nf_conn *ct)
|
|||||||
return test_bit(IPS_UNTRACKED_BIT, &ct->status);
|
return test_bit(IPS_UNTRACKED_BIT, &ct->status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Packet is received from loopback */
|
||||||
|
static inline bool nf_is_loopback_packet(const struct sk_buff *skb)
|
||||||
|
{
|
||||||
|
return skb->dev && skb->skb_iif && skb->dev->flags & IFF_LOOPBACK;
|
||||||
|
}
|
||||||
|
|
||||||
extern int nf_conntrack_set_hashsize(const char *val, struct kernel_param *kp);
|
extern int nf_conntrack_set_hashsize(const char *val, struct kernel_param *kp);
|
||||||
extern unsigned int nf_conntrack_htable_size;
|
extern unsigned int nf_conntrack_htable_size;
|
||||||
extern unsigned int nf_conntrack_max;
|
extern unsigned int nf_conntrack_max;
|
||||||
|
@ -203,7 +203,8 @@ ipq_build_packet_message(struct nf_queue_entry *entry, int *errp)
|
|||||||
else
|
else
|
||||||
pmsg->outdev_name[0] = '\0';
|
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_type = entry->skb->dev->type;
|
||||||
pmsg->hw_addrlen = dev_parse_header(entry->skb,
|
pmsg->hw_addrlen = dev_parse_header(entry->skb,
|
||||||
pmsg->hw_addr);
|
pmsg->hw_addr);
|
||||||
|
@ -566,7 +566,7 @@ check_entry(const struct ipt_entry *e, const char *name)
|
|||||||
const struct xt_entry_target *t;
|
const struct xt_entry_target *t;
|
||||||
|
|
||||||
if (!ip_checkentry(&e->ip)) {
|
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;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,7 +25,8 @@ MODULE_LICENSE("GPL");
|
|||||||
static inline bool match_ip(const struct sk_buff *skb,
|
static inline bool match_ip(const struct sk_buff *skb,
|
||||||
const struct ipt_ecn_info *einfo)
|
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,
|
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;
|
return false;
|
||||||
|
|
||||||
if (info->operation & (IPT_ECN_OP_MATCH_ECE|IPT_ECN_OP_MATCH_CWR)) {
|
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))
|
if (!match_tcp(skb, info, &par->hotdrop))
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -97,7 +96,7 @@ static int ecn_mt_check(const struct xt_mtchk_param *par)
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
if (info->operation & (IPT_ECN_OP_MATCH_ECE|IPT_ECN_OP_MATCH_CWR) &&
|
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");
|
pr_info("cannot match TCP bits in rule for non-tcp packets\n");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
@ -121,7 +121,9 @@ static unsigned int ipv4_confirm(unsigned int hooknum,
|
|||||||
return ret;
|
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;
|
typeof(nf_nat_seq_adjust_hook) seq_adjust;
|
||||||
|
|
||||||
seq_adjust = rcu_dereference(nf_nat_seq_adjust_hook);
|
seq_adjust = rcu_dereference(nf_nat_seq_adjust_hook);
|
||||||
|
@ -204,7 +204,8 @@ ipq_build_packet_message(struct nf_queue_entry *entry, int *errp)
|
|||||||
else
|
else
|
||||||
pmsg->outdev_name[0] = '\0';
|
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_type = entry->skb->dev->type;
|
||||||
pmsg->hw_addrlen = dev_parse_header(entry->skb, pmsg->hw_addr);
|
pmsg->hw_addrlen = dev_parse_header(entry->skb, pmsg->hw_addr);
|
||||||
}
|
}
|
||||||
|
@ -776,8 +776,16 @@ static void ip_vs_conn_expire(unsigned long data)
|
|||||||
if (cp->control)
|
if (cp->control)
|
||||||
ip_vs_control_del(cp);
|
ip_vs_control_del(cp);
|
||||||
|
|
||||||
if (cp->flags & IP_VS_CONN_F_NFCT)
|
if (cp->flags & IP_VS_CONN_F_NFCT) {
|
||||||
ip_vs_conn_drop_conntrack(cp);
|
ip_vs_conn_drop_conntrack(cp);
|
||||||
|
/* Do not access conntracks during subsys cleanup
|
||||||
|
* because nf_conntrack_find_get can not be used after
|
||||||
|
* conntrack cleanup for the net.
|
||||||
|
*/
|
||||||
|
smp_rmb();
|
||||||
|
if (ipvs->enable)
|
||||||
|
ip_vs_conn_drop_conntrack(cp);
|
||||||
|
}
|
||||||
|
|
||||||
ip_vs_pe_put(cp->pe);
|
ip_vs_pe_put(cp->pe);
|
||||||
kfree(cp->pe_data);
|
kfree(cp->pe_data);
|
||||||
|
@ -1945,6 +1945,7 @@ static void __net_exit __ip_vs_dev_cleanup(struct net *net)
|
|||||||
{
|
{
|
||||||
EnterFunction(2);
|
EnterFunction(2);
|
||||||
net_ipvs(net)->enable = 0; /* Disable packet reception */
|
net_ipvs(net)->enable = 0; /* Disable packet reception */
|
||||||
|
smp_wmb();
|
||||||
__ip_vs_sync_cleanup(net);
|
__ip_vs_sync_cleanup(net);
|
||||||
LeaveFunction(2);
|
LeaveFunction(2);
|
||||||
}
|
}
|
||||||
|
@ -456,7 +456,8 @@ __build_packet_message(struct nfulnl_instance *inst,
|
|||||||
if (skb->mark)
|
if (skb->mark)
|
||||||
NLA_PUT_BE32(inst->skb, NFULA_MARK, htonl(skb->mark));
|
NLA_PUT_BE32(inst->skb, NFULA_MARK, htonl(skb->mark));
|
||||||
|
|
||||||
if (indev && skb->dev) {
|
if (indev && skb->dev &&
|
||||||
|
skb->mac_header != skb->network_header) {
|
||||||
struct nfulnl_msg_packet_hw phw;
|
struct nfulnl_msg_packet_hw phw;
|
||||||
int len = dev_parse_header(skb, phw.hw_addr);
|
int len = dev_parse_header(skb, phw.hw_addr);
|
||||||
if (len > 0) {
|
if (len > 0) {
|
||||||
|
@ -335,7 +335,8 @@ nfqnl_build_packet_message(struct nfqnl_instance *queue,
|
|||||||
if (entskb->mark)
|
if (entskb->mark)
|
||||||
NLA_PUT_BE32(skb, NFQA_MARK, htonl(entskb->mark));
|
NLA_PUT_BE32(skb, NFQA_MARK, htonl(entskb->mark));
|
||||||
|
|
||||||
if (indev && entskb->dev) {
|
if (indev && entskb->dev &&
|
||||||
|
entskb->mac_header != entskb->network_header) {
|
||||||
struct nfqnl_msg_packet_hw phw;
|
struct nfqnl_msg_packet_hw phw;
|
||||||
int len = dev_parse_header(entskb, phw.hw_addr);
|
int len = dev_parse_header(entskb, phw.hw_addr);
|
||||||
if (len) {
|
if (len) {
|
||||||
|
Loading…
Reference in New Issue
Block a user