diff options
author | David S. Miller <davem@davemloft.net> | 2013-07-03 17:50:41 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-07-03 17:55:13 -0400 |
commit | 0c1072ae0242fbdffd9a0bba36e7a7033d287f9c (patch) | |
tree | e0f4dbdbf5078d4a707911177e7bdc17a70bdce5 /net | |
parent | c50cd357887acf9fd7af3a5d492911bd825555a2 (diff) | |
parent | 8bb495e3f02401ee6f76d1b1d77f3ac9f079e376 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts:
drivers/net/ethernet/freescale/fec_main.c
drivers/net/ethernet/renesas/sh_eth.c
net/ipv4/gre.c
The GRE conflict is between a bug fix (kfree_skb --> kfree_skb_list)
and the splitting of the gre.c code into seperate files.
The FEC conflict was two sets of changes adding ethtool support code
in an "!CONFIG_M5272" CPP protected block.
Finally the sh_eth.c conflict was between one commit add bits set
in the .eesr_err_check mask whilst another commit removed the
.tx_error_check member and assignments.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/core/dev.c | 34 | ||||
-rw-r--r-- | net/core/dev_ioctl.c | 19 | ||||
-rw-r--r-- | net/core/skbuff.c | 20 | ||||
-rw-r--r-- | net/core/sock.c | 17 | ||||
-rw-r--r-- | net/ipv4/gre_offload.c | 2 | ||||
-rw-r--r-- | net/ipv4/netfilter/ipt_ULOG.c | 12 | ||||
-rw-r--r-- | net/ipv4/tcp_ipv4.c | 4 | ||||
-rw-r--r-- | net/ipv6/addrconf.c | 12 | ||||
-rw-r--r-- | net/ipv6/ip6_output.c | 13 | ||||
-rw-r--r-- | net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c | 2 | ||||
-rw-r--r-- | net/key/af_key.c | 2 | ||||
-rw-r--r-- | net/netfilter/ipvs/ip_vs_core.c | 3 | ||||
-rw-r--r-- | net/netfilter/nf_conntrack_labels.c | 2 | ||||
-rw-r--r-- | net/netfilter/nf_conntrack_netlink.c | 1 | ||||
-rw-r--r-- | net/netfilter/nf_nat_sip.c | 3 |
15 files changed, 88 insertions, 58 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index 6a93cd8cd264..560dafd83adf 100644 --- a/net/core/dev.c +++ b/net/core/dev.c | |||
@@ -800,6 +800,40 @@ struct net_device *dev_get_by_index(struct net *net, int ifindex) | |||
800 | EXPORT_SYMBOL(dev_get_by_index); | 800 | EXPORT_SYMBOL(dev_get_by_index); |
801 | 801 | ||
802 | /** | 802 | /** |
803 | * netdev_get_name - get a netdevice name, knowing its ifindex. | ||
804 | * @net: network namespace | ||
805 | * @name: a pointer to the buffer where the name will be stored. | ||
806 | * @ifindex: the ifindex of the interface to get the name from. | ||
807 | * | ||
808 | * The use of raw_seqcount_begin() and cond_resched() before | ||
809 | * retrying is required as we want to give the writers a chance | ||
810 | * to complete when CONFIG_PREEMPT is not set. | ||
811 | */ | ||
812 | int netdev_get_name(struct net *net, char *name, int ifindex) | ||
813 | { | ||
814 | struct net_device *dev; | ||
815 | unsigned int seq; | ||
816 | |||
817 | retry: | ||
818 | seq = raw_seqcount_begin(&devnet_rename_seq); | ||
819 | rcu_read_lock(); | ||
820 | dev = dev_get_by_index_rcu(net, ifindex); | ||
821 | if (!dev) { | ||
822 | rcu_read_unlock(); | ||
823 | return -ENODEV; | ||
824 | } | ||
825 | |||
826 | strcpy(name, dev->name); | ||
827 | rcu_read_unlock(); | ||
828 | if (read_seqcount_retry(&devnet_rename_seq, seq)) { | ||
829 | cond_resched(); | ||
830 | goto retry; | ||
831 | } | ||
832 | |||
833 | return 0; | ||
834 | } | ||
835 | |||
836 | /** | ||
803 | * dev_getbyhwaddr_rcu - find a device by its hardware address | 837 | * dev_getbyhwaddr_rcu - find a device by its hardware address |
804 | * @net: the applicable net namespace | 838 | * @net: the applicable net namespace |
805 | * @type: media type of device | 839 | * @type: media type of device |
diff --git a/net/core/dev_ioctl.c b/net/core/dev_ioctl.c index 6cc0481faade..5b7d0e1d0664 100644 --- a/net/core/dev_ioctl.c +++ b/net/core/dev_ioctl.c | |||
@@ -19,9 +19,8 @@ | |||
19 | 19 | ||
20 | static int dev_ifname(struct net *net, struct ifreq __user *arg) | 20 | static int dev_ifname(struct net *net, struct ifreq __user *arg) |
21 | { | 21 | { |
22 | struct net_device *dev; | ||
23 | struct ifreq ifr; | 22 | struct ifreq ifr; |
24 | unsigned seq; | 23 | int error; |
25 | 24 | ||
26 | /* | 25 | /* |
27 | * Fetch the caller's info block. | 26 | * Fetch the caller's info block. |
@@ -30,19 +29,9 @@ static int dev_ifname(struct net *net, struct ifreq __user *arg) | |||
30 | if (copy_from_user(&ifr, arg, sizeof(struct ifreq))) | 29 | if (copy_from_user(&ifr, arg, sizeof(struct ifreq))) |
31 | return -EFAULT; | 30 | return -EFAULT; |
32 | 31 | ||
33 | retry: | 32 | error = netdev_get_name(net, ifr.ifr_name, ifr.ifr_ifindex); |
34 | seq = read_seqcount_begin(&devnet_rename_seq); | 33 | if (error) |
35 | rcu_read_lock(); | 34 | return error; |
36 | dev = dev_get_by_index_rcu(net, ifr.ifr_ifindex); | ||
37 | if (!dev) { | ||
38 | rcu_read_unlock(); | ||
39 | return -ENODEV; | ||
40 | } | ||
41 | |||
42 | strcpy(ifr.ifr_name, dev->name); | ||
43 | rcu_read_unlock(); | ||
44 | if (read_seqcount_retry(&devnet_rename_seq, seq)) | ||
45 | goto retry; | ||
46 | 35 | ||
47 | if (copy_to_user(arg, &ifr, sizeof(struct ifreq))) | 36 | if (copy_to_user(arg, &ifr, sizeof(struct ifreq))) |
48 | return -EFAULT; | 37 | return -EFAULT; |
diff --git a/net/core/skbuff.c b/net/core/skbuff.c index b1fcb8727e56..77971a35d6e1 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c | |||
@@ -477,15 +477,8 @@ EXPORT_SYMBOL(skb_add_rx_frag); | |||
477 | 477 | ||
478 | static void skb_drop_list(struct sk_buff **listp) | 478 | static void skb_drop_list(struct sk_buff **listp) |
479 | { | 479 | { |
480 | struct sk_buff *list = *listp; | 480 | kfree_skb_list(*listp); |
481 | |||
482 | *listp = NULL; | 481 | *listp = NULL; |
483 | |||
484 | do { | ||
485 | struct sk_buff *this = list; | ||
486 | list = list->next; | ||
487 | kfree_skb(this); | ||
488 | } while (list); | ||
489 | } | 482 | } |
490 | 483 | ||
491 | static inline void skb_drop_fraglist(struct sk_buff *skb) | 484 | static inline void skb_drop_fraglist(struct sk_buff *skb) |
@@ -645,6 +638,17 @@ void kfree_skb(struct sk_buff *skb) | |||
645 | } | 638 | } |
646 | EXPORT_SYMBOL(kfree_skb); | 639 | EXPORT_SYMBOL(kfree_skb); |
647 | 640 | ||
641 | void kfree_skb_list(struct sk_buff *segs) | ||
642 | { | ||
643 | while (segs) { | ||
644 | struct sk_buff *next = segs->next; | ||
645 | |||
646 | kfree_skb(segs); | ||
647 | segs = next; | ||
648 | } | ||
649 | } | ||
650 | EXPORT_SYMBOL(kfree_skb_list); | ||
651 | |||
648 | /** | 652 | /** |
649 | * skb_tx_error - report an sk_buff xmit error | 653 | * skb_tx_error - report an sk_buff xmit error |
650 | * @skb: buffer that triggered an error | 654 | * @skb: buffer that triggered an error |
diff --git a/net/core/sock.c b/net/core/sock.c index b6c619f4d47b..ab06b719f5b1 100644 --- a/net/core/sock.c +++ b/net/core/sock.c | |||
@@ -573,9 +573,7 @@ static int sock_getbindtodevice(struct sock *sk, char __user *optval, | |||
573 | int ret = -ENOPROTOOPT; | 573 | int ret = -ENOPROTOOPT; |
574 | #ifdef CONFIG_NETDEVICES | 574 | #ifdef CONFIG_NETDEVICES |
575 | struct net *net = sock_net(sk); | 575 | struct net *net = sock_net(sk); |
576 | struct net_device *dev; | ||
577 | char devname[IFNAMSIZ]; | 576 | char devname[IFNAMSIZ]; |
578 | unsigned seq; | ||
579 | 577 | ||
580 | if (sk->sk_bound_dev_if == 0) { | 578 | if (sk->sk_bound_dev_if == 0) { |
581 | len = 0; | 579 | len = 0; |
@@ -586,20 +584,9 @@ static int sock_getbindtodevice(struct sock *sk, char __user *optval, | |||
586 | if (len < IFNAMSIZ) | 584 | if (len < IFNAMSIZ) |
587 | goto out; | 585 | goto out; |
588 | 586 | ||
589 | retry: | 587 | ret = netdev_get_name(net, devname, sk->sk_bound_dev_if); |
590 | seq = read_seqcount_begin(&devnet_rename_seq); | 588 | if (ret) |
591 | rcu_read_lock(); | ||
592 | dev = dev_get_by_index_rcu(net, sk->sk_bound_dev_if); | ||
593 | ret = -ENODEV; | ||
594 | if (!dev) { | ||
595 | rcu_read_unlock(); | ||
596 | goto out; | 589 | goto out; |
597 | } | ||
598 | |||
599 | strcpy(devname, dev->name); | ||
600 | rcu_read_unlock(); | ||
601 | if (read_seqcount_retry(&devnet_rename_seq, seq)) | ||
602 | goto retry; | ||
603 | 590 | ||
604 | len = strlen(devname) + 1; | 591 | len = strlen(devname) + 1; |
605 | 592 | ||
diff --git a/net/ipv4/gre_offload.c b/net/ipv4/gre_offload.c index a9d8cd2bff4b..775d5b532ece 100644 --- a/net/ipv4/gre_offload.c +++ b/net/ipv4/gre_offload.c | |||
@@ -87,7 +87,7 @@ static struct sk_buff *gre_gso_segment(struct sk_buff *skb, | |||
87 | 87 | ||
88 | err = __skb_linearize(skb); | 88 | err = __skb_linearize(skb); |
89 | if (err) { | 89 | if (err) { |
90 | kfree_skb(segs); | 90 | kfree_skb_list(segs); |
91 | segs = ERR_PTR(err); | 91 | segs = ERR_PTR(err); |
92 | goto out; | 92 | goto out; |
93 | } | 93 | } |
diff --git a/net/ipv4/netfilter/ipt_ULOG.c b/net/ipv4/netfilter/ipt_ULOG.c index 57c671152c42..cbc22158af49 100644 --- a/net/ipv4/netfilter/ipt_ULOG.c +++ b/net/ipv4/netfilter/ipt_ULOG.c | |||
@@ -125,15 +125,16 @@ static void ulog_send(struct ulog_net *ulog, unsigned int nlgroupnum) | |||
125 | /* timer function to flush queue in flushtimeout time */ | 125 | /* timer function to flush queue in flushtimeout time */ |
126 | static void ulog_timer(unsigned long data) | 126 | static void ulog_timer(unsigned long data) |
127 | { | 127 | { |
128 | unsigned int groupnum = *((unsigned int *)data); | ||
128 | struct ulog_net *ulog = container_of((void *)data, | 129 | struct ulog_net *ulog = container_of((void *)data, |
129 | struct ulog_net, | 130 | struct ulog_net, |
130 | nlgroup[*(unsigned int *)data]); | 131 | nlgroup[groupnum]); |
131 | pr_debug("timer function called, calling ulog_send\n"); | 132 | pr_debug("timer function called, calling ulog_send\n"); |
132 | 133 | ||
133 | /* lock to protect against somebody modifying our structure | 134 | /* lock to protect against somebody modifying our structure |
134 | * from ipt_ulog_target at the same time */ | 135 | * from ipt_ulog_target at the same time */ |
135 | spin_lock_bh(&ulog->lock); | 136 | spin_lock_bh(&ulog->lock); |
136 | ulog_send(ulog, data); | 137 | ulog_send(ulog, groupnum); |
137 | spin_unlock_bh(&ulog->lock); | 138 | spin_unlock_bh(&ulog->lock); |
138 | } | 139 | } |
139 | 140 | ||
@@ -413,8 +414,11 @@ static int __net_init ulog_tg_net_init(struct net *net) | |||
413 | 414 | ||
414 | spin_lock_init(&ulog->lock); | 415 | spin_lock_init(&ulog->lock); |
415 | /* initialize ulog_buffers */ | 416 | /* initialize ulog_buffers */ |
416 | for (i = 0; i < ULOG_MAXNLGROUPS; i++) | 417 | for (i = 0; i < ULOG_MAXNLGROUPS; i++) { |
417 | setup_timer(&ulog->ulog_buffers[i].timer, ulog_timer, i); | 418 | ulog->nlgroup[i] = i; |
419 | setup_timer(&ulog->ulog_buffers[i].timer, ulog_timer, | ||
420 | (unsigned long)&ulog->nlgroup[i]); | ||
421 | } | ||
418 | 422 | ||
419 | ulog->nflognl = netlink_kernel_create(net, NETLINK_NFLOG, &cfg); | 423 | ulog->nflognl = netlink_kernel_create(net, NETLINK_NFLOG, &cfg); |
420 | if (!ulog->nflognl) | 424 | if (!ulog->nflognl) |
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c index 1063bb83e342..35675e46aff8 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c | |||
@@ -986,7 +986,7 @@ int tcp_md5_do_add(struct sock *sk, const union tcp_md5_addr *addr, | |||
986 | struct tcp_sock *tp = tcp_sk(sk); | 986 | struct tcp_sock *tp = tcp_sk(sk); |
987 | struct tcp_md5sig_info *md5sig; | 987 | struct tcp_md5sig_info *md5sig; |
988 | 988 | ||
989 | key = tcp_md5_do_lookup(sk, (union tcp_md5_addr *)&addr, AF_INET); | 989 | key = tcp_md5_do_lookup(sk, addr, family); |
990 | if (key) { | 990 | if (key) { |
991 | /* Pre-existing entry - just update that one. */ | 991 | /* Pre-existing entry - just update that one. */ |
992 | memcpy(key->key, newkey, newkeylen); | 992 | memcpy(key->key, newkey, newkeylen); |
@@ -1029,7 +1029,7 @@ int tcp_md5_do_del(struct sock *sk, const union tcp_md5_addr *addr, int family) | |||
1029 | { | 1029 | { |
1030 | struct tcp_md5sig_key *key; | 1030 | struct tcp_md5sig_key *key; |
1031 | 1031 | ||
1032 | key = tcp_md5_do_lookup(sk, (union tcp_md5_addr *)&addr, AF_INET); | 1032 | key = tcp_md5_do_lookup(sk, addr, family); |
1033 | if (!key) | 1033 | if (!key) |
1034 | return -ENOENT; | 1034 | return -ENOENT; |
1035 | hlist_del_rcu(&key->node); | 1035 | hlist_del_rcu(&key->node); |
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index 75fd93bdd0d3..cfdcf7b2daf6 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c | |||
@@ -2656,6 +2656,9 @@ static void init_loopback(struct net_device *dev) | |||
2656 | if (sp_ifa->flags & (IFA_F_DADFAILED | IFA_F_TENTATIVE)) | 2656 | if (sp_ifa->flags & (IFA_F_DADFAILED | IFA_F_TENTATIVE)) |
2657 | continue; | 2657 | continue; |
2658 | 2658 | ||
2659 | if (sp_ifa->rt) | ||
2660 | continue; | ||
2661 | |||
2659 | sp_rt = addrconf_dst_alloc(idev, &sp_ifa->addr, 0); | 2662 | sp_rt = addrconf_dst_alloc(idev, &sp_ifa->addr, 0); |
2660 | 2663 | ||
2661 | /* Failure cases are ignored */ | 2664 | /* Failure cases are ignored */ |
@@ -4340,6 +4343,7 @@ static int inet6_set_iftoken(struct inet6_dev *idev, struct in6_addr *token) | |||
4340 | struct inet6_ifaddr *ifp; | 4343 | struct inet6_ifaddr *ifp; |
4341 | struct net_device *dev = idev->dev; | 4344 | struct net_device *dev = idev->dev; |
4342 | bool update_rs = false; | 4345 | bool update_rs = false; |
4346 | struct in6_addr ll_addr; | ||
4343 | 4347 | ||
4344 | if (token == NULL) | 4348 | if (token == NULL) |
4345 | return -EINVAL; | 4349 | return -EINVAL; |
@@ -4359,11 +4363,9 @@ static int inet6_set_iftoken(struct inet6_dev *idev, struct in6_addr *token) | |||
4359 | 4363 | ||
4360 | write_unlock_bh(&idev->lock); | 4364 | write_unlock_bh(&idev->lock); |
4361 | 4365 | ||
4362 | if (!idev->dead && (idev->if_flags & IF_READY)) { | 4366 | if (!idev->dead && (idev->if_flags & IF_READY) && |
4363 | struct in6_addr ll_addr; | 4367 | !ipv6_get_lladdr(dev, &ll_addr, IFA_F_TENTATIVE | |
4364 | 4368 | IFA_F_OPTIMISTIC)) { | |
4365 | ipv6_get_lladdr(dev, &ll_addr, IFA_F_TENTATIVE | | ||
4366 | IFA_F_OPTIMISTIC); | ||
4367 | 4369 | ||
4368 | /* If we're not ready, then normal ifup will take care | 4370 | /* If we're not ready, then normal ifup will take care |
4369 | * of this. Otherwise, we need to request our rs here. | 4371 | * of this. Otherwise, we need to request our rs here. |
diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c index be7589ef5cf9..6e3ddf806ec2 100644 --- a/net/ipv6/ip6_output.c +++ b/net/ipv6/ip6_output.c | |||
@@ -381,9 +381,8 @@ int ip6_forward(struct sk_buff *skb) | |||
381 | * cannot be fragmented, because there is no warranty | 381 | * cannot be fragmented, because there is no warranty |
382 | * that different fragments will go along one path. --ANK | 382 | * that different fragments will go along one path. --ANK |
383 | */ | 383 | */ |
384 | if (opt->ra) { | 384 | if (unlikely(opt->flags & IP6SKB_ROUTERALERT)) { |
385 | u8 *ptr = skb_network_header(skb) + opt->ra; | 385 | if (ip6_call_ra_chain(skb, ntohs(opt->ra))) |
386 | if (ip6_call_ra_chain(skb, (ptr[2]<<8) + ptr[3])) | ||
387 | return 0; | 386 | return 0; |
388 | } | 387 | } |
389 | 388 | ||
@@ -822,11 +821,17 @@ static struct dst_entry *ip6_sk_dst_check(struct sock *sk, | |||
822 | const struct flowi6 *fl6) | 821 | const struct flowi6 *fl6) |
823 | { | 822 | { |
824 | struct ipv6_pinfo *np = inet6_sk(sk); | 823 | struct ipv6_pinfo *np = inet6_sk(sk); |
825 | struct rt6_info *rt = (struct rt6_info *)dst; | 824 | struct rt6_info *rt; |
826 | 825 | ||
827 | if (!dst) | 826 | if (!dst) |
828 | goto out; | 827 | goto out; |
829 | 828 | ||
829 | if (dst->ops->family != AF_INET6) { | ||
830 | dst_release(dst); | ||
831 | return NULL; | ||
832 | } | ||
833 | |||
834 | rt = (struct rt6_info *)dst; | ||
830 | /* Yes, checking route validity in not connected | 835 | /* Yes, checking route validity in not connected |
831 | * case is not very simple. Take into account, | 836 | * case is not very simple. Take into account, |
832 | * that we do not support routing by source, TOS, | 837 | * that we do not support routing by source, TOS, |
diff --git a/net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c b/net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c index 97bcf2bae857..c9b6a6e6a1e8 100644 --- a/net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c +++ b/net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c | |||
@@ -204,7 +204,7 @@ static unsigned int __ipv6_conntrack_in(struct net *net, | |||
204 | if (ct != NULL && !nf_ct_is_untracked(ct)) { | 204 | if (ct != NULL && !nf_ct_is_untracked(ct)) { |
205 | help = nfct_help(ct); | 205 | help = nfct_help(ct); |
206 | if ((help && help->helper) || !nf_ct_is_confirmed(ct)) { | 206 | if ((help && help->helper) || !nf_ct_is_confirmed(ct)) { |
207 | nf_conntrack_get_reasm(skb); | 207 | nf_conntrack_get_reasm(reasm); |
208 | NF_HOOK_THRESH(NFPROTO_IPV6, hooknum, reasm, | 208 | NF_HOOK_THRESH(NFPROTO_IPV6, hooknum, reasm, |
209 | (struct net_device *)in, | 209 | (struct net_device *)in, |
210 | (struct net_device *)out, | 210 | (struct net_device *)out, |
diff --git a/net/key/af_key.c b/net/key/af_key.c index c5fbd7589681..9da862070dd8 100644 --- a/net/key/af_key.c +++ b/net/key/af_key.c | |||
@@ -1710,6 +1710,7 @@ static int key_notify_sa_flush(const struct km_event *c) | |||
1710 | hdr->sadb_msg_version = PF_KEY_V2; | 1710 | hdr->sadb_msg_version = PF_KEY_V2; |
1711 | hdr->sadb_msg_errno = (uint8_t) 0; | 1711 | hdr->sadb_msg_errno = (uint8_t) 0; |
1712 | hdr->sadb_msg_len = (sizeof(struct sadb_msg) / sizeof(uint64_t)); | 1712 | hdr->sadb_msg_len = (sizeof(struct sadb_msg) / sizeof(uint64_t)); |
1713 | hdr->sadb_msg_reserved = 0; | ||
1713 | 1714 | ||
1714 | pfkey_broadcast(skb, GFP_ATOMIC, BROADCAST_ALL, NULL, c->net); | 1715 | pfkey_broadcast(skb, GFP_ATOMIC, BROADCAST_ALL, NULL, c->net); |
1715 | 1716 | ||
@@ -2699,6 +2700,7 @@ static int key_notify_policy_flush(const struct km_event *c) | |||
2699 | hdr->sadb_msg_errno = (uint8_t) 0; | 2700 | hdr->sadb_msg_errno = (uint8_t) 0; |
2700 | hdr->sadb_msg_satype = SADB_SATYPE_UNSPEC; | 2701 | hdr->sadb_msg_satype = SADB_SATYPE_UNSPEC; |
2701 | hdr->sadb_msg_len = (sizeof(struct sadb_msg) / sizeof(uint64_t)); | 2702 | hdr->sadb_msg_len = (sizeof(struct sadb_msg) / sizeof(uint64_t)); |
2703 | hdr->sadb_msg_reserved = 0; | ||
2702 | pfkey_broadcast(skb_out, GFP_ATOMIC, BROADCAST_ALL, NULL, c->net); | 2704 | pfkey_broadcast(skb_out, GFP_ATOMIC, BROADCAST_ALL, NULL, c->net); |
2703 | return 0; | 2705 | return 0; |
2704 | 2706 | ||
diff --git a/net/netfilter/ipvs/ip_vs_core.c b/net/netfilter/ipvs/ip_vs_core.c index e9b0330f220d..4f69e83ff836 100644 --- a/net/netfilter/ipvs/ip_vs_core.c +++ b/net/netfilter/ipvs/ip_vs_core.c | |||
@@ -1442,7 +1442,8 @@ ignore_ipip: | |||
1442 | 1442 | ||
1443 | /* do the statistics and put it back */ | 1443 | /* do the statistics and put it back */ |
1444 | ip_vs_in_stats(cp, skb); | 1444 | ip_vs_in_stats(cp, skb); |
1445 | if (IPPROTO_TCP == cih->protocol || IPPROTO_UDP == cih->protocol) | 1445 | if (IPPROTO_TCP == cih->protocol || IPPROTO_UDP == cih->protocol || |
1446 | IPPROTO_SCTP == cih->protocol) | ||
1446 | offset += 2 * sizeof(__u16); | 1447 | offset += 2 * sizeof(__u16); |
1447 | verdict = ip_vs_icmp_xmit(skb, cp, pp, offset, hooknum, &ciph); | 1448 | verdict = ip_vs_icmp_xmit(skb, cp, pp, offset, hooknum, &ciph); |
1448 | 1449 | ||
diff --git a/net/netfilter/nf_conntrack_labels.c b/net/netfilter/nf_conntrack_labels.c index 8fe2e99428b7..355d2ef08094 100644 --- a/net/netfilter/nf_conntrack_labels.c +++ b/net/netfilter/nf_conntrack_labels.c | |||
@@ -45,7 +45,7 @@ int nf_connlabel_set(struct nf_conn *ct, u16 bit) | |||
45 | if (test_bit(bit, labels->bits)) | 45 | if (test_bit(bit, labels->bits)) |
46 | return 0; | 46 | return 0; |
47 | 47 | ||
48 | if (test_and_set_bit(bit, labels->bits)) | 48 | if (!test_and_set_bit(bit, labels->bits)) |
49 | nf_conntrack_event_cache(IPCT_LABEL, ct); | 49 | nf_conntrack_event_cache(IPCT_LABEL, ct); |
50 | 50 | ||
51 | return 0; | 51 | return 0; |
diff --git a/net/netfilter/nf_conntrack_netlink.c b/net/netfilter/nf_conntrack_netlink.c index f83a52298efe..edc410e778f7 100644 --- a/net/netfilter/nf_conntrack_netlink.c +++ b/net/netfilter/nf_conntrack_netlink.c | |||
@@ -1837,6 +1837,7 @@ ctnetlink_new_conntrack(struct sock *ctnl, struct sk_buff *skb, | |||
1837 | nf_conntrack_eventmask_report((1 << IPCT_REPLY) | | 1837 | nf_conntrack_eventmask_report((1 << IPCT_REPLY) | |
1838 | (1 << IPCT_ASSURED) | | 1838 | (1 << IPCT_ASSURED) | |
1839 | (1 << IPCT_HELPER) | | 1839 | (1 << IPCT_HELPER) | |
1840 | (1 << IPCT_LABEL) | | ||
1840 | (1 << IPCT_PROTOINFO) | | 1841 | (1 << IPCT_PROTOINFO) | |
1841 | (1 << IPCT_NATSEQADJ) | | 1842 | (1 << IPCT_NATSEQADJ) | |
1842 | (1 << IPCT_MARK), | 1843 | (1 << IPCT_MARK), |
diff --git a/net/netfilter/nf_nat_sip.c b/net/netfilter/nf_nat_sip.c index 96ccdf78a29f..dac11f73868e 100644 --- a/net/netfilter/nf_nat_sip.c +++ b/net/netfilter/nf_nat_sip.c | |||
@@ -230,9 +230,10 @@ static unsigned int nf_nat_sip(struct sk_buff *skb, unsigned int protoff, | |||
230 | &ct->tuplehash[!dir].tuple.src.u3, | 230 | &ct->tuplehash[!dir].tuple.src.u3, |
231 | false); | 231 | false); |
232 | if (!mangle_packet(skb, protoff, dataoff, dptr, datalen, | 232 | if (!mangle_packet(skb, protoff, dataoff, dptr, datalen, |
233 | poff, plen, buffer, buflen)) | 233 | poff, plen, buffer, buflen)) { |
234 | nf_ct_helper_log(skb, ct, "cannot mangle received"); | 234 | nf_ct_helper_log(skb, ct, "cannot mangle received"); |
235 | return NF_DROP; | 235 | return NF_DROP; |
236 | } | ||
236 | } | 237 | } |
237 | 238 | ||
238 | /* The rport= parameter (RFC 3581) contains the port number | 239 | /* The rport= parameter (RFC 3581) contains the port number |