aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2016-11-26 16:05:05 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2016-11-26 16:05:05 -0500
commita0d60e62ea5c88a9823410e9d0929a513e29dea2 (patch)
treeefbacfdcf8f06a6928128fcec79697233c86deeb /net
parent30e2b7cfc54c1efa0aa4c75eb8aa19318e3932e3 (diff)
parent6998cc6ec23740347670da13186d2979c5401903 (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Pull networking fixes from David Miller: 1) Fix leak in fsl/fman driver, from Dan Carpenter. 2) Call flow dissector initcall earlier than any networking driver can register and start to use it, from Eric Dumazet. 3) Some dup header fixes from Geliang Tang. 4) TIPC link monitoring compat fix from Jon Paul Maloy. 5) Link changes require EEE re-negotiation in bcm_sf2 driver, from Florian Fainelli. 6) Fix bogus handle ID passed into tfilter_notify_chain(), from Roman Mashak. 7) Fix dump size calculation in rtnl_calcit(), from Zhang Shengju. * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (26 commits) tipc: resolve connection flow control compatibility problem mvpp2: use correct size for memset net/mlx5: drop duplicate header delay.h net: ieee802154: drop duplicate header delay.h ibmvnic: drop duplicate header seq_file.h fsl/fman: fix a leak in tgec_free() net: ethtool: don't require CAP_NET_ADMIN for ETHTOOL_GLINKSETTINGS tipc: improve sanity check for received domain records tipc: fix compatibility bug in link monitoring net: ethernet: mvneta: Remove IFF_UNICAST_FLT which is not implemented dwc_eth_qos: drop duplicate headers net sched filters: fix filter handle ID in tfilter_notify_chain() net: dsa: bcm_sf2: Ensure we re-negotiate EEE during after link change bnxt: do not busy-poll when link is down udplite: call proper backlog handlers ipv6: bump genid when the IFA_F_TENTATIVE flag is clear net/mlx4_en: Free netdev resources under state lock net: revert "net: l2tp: Treat NET_XMIT_CN as success in l2tp_eth_dev_xmit" rtnetlink: fix the wrong minimal dump size getting from rtnl_calcit() bnxt_en: Fix a VXLAN vs GENEVE issue ...
Diffstat (limited to 'net')
-rw-r--r--net/bluetooth/6lowpan.c4
-rw-r--r--net/bluetooth/hci_conn.c26
-rw-r--r--net/bluetooth/l2cap_core.c2
-rw-r--r--net/bluetooth/rfcomm/tty.c2
-rw-r--r--net/bluetooth/sco.c2
-rw-r--r--net/can/bcm.c18
-rw-r--r--net/core/ethtool.c1
-rw-r--r--net/core/flow_dissector.c2
-rw-r--r--net/core/rtnetlink.c2
-rw-r--r--net/ipv4/udp.c2
-rw-r--r--net/ipv4/udp_impl.h2
-rw-r--r--net/ipv4/udplite.c2
-rw-r--r--net/ipv6/addrconf.c18
-rw-r--r--net/ipv6/udp.c2
-rw-r--r--net/ipv6/udp_impl.h2
-rw-r--r--net/ipv6/udplite.c2
-rw-r--r--net/l2tp/l2tp_eth.c2
-rw-r--r--net/sched/cls_api.c2
-rw-r--r--net/tipc/link.c5
-rw-r--r--net/tipc/monitor.c10
-rw-r--r--net/tipc/socket.c2
21 files changed, 71 insertions, 39 deletions
diff --git a/net/bluetooth/6lowpan.c b/net/bluetooth/6lowpan.c
index d020299baba4..1904a93f47d5 100644
--- a/net/bluetooth/6lowpan.c
+++ b/net/bluetooth/6lowpan.c
@@ -1090,7 +1090,6 @@ static int get_l2cap_conn(char *buf, bdaddr_t *addr, u8 *addr_type,
1090{ 1090{
1091 struct hci_conn *hcon; 1091 struct hci_conn *hcon;
1092 struct hci_dev *hdev; 1092 struct hci_dev *hdev;
1093 bdaddr_t *src = BDADDR_ANY;
1094 int n; 1093 int n;
1095 1094
1096 n = sscanf(buf, "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx %hhu", 1095 n = sscanf(buf, "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx %hhu",
@@ -1101,7 +1100,8 @@ static int get_l2cap_conn(char *buf, bdaddr_t *addr, u8 *addr_type,
1101 if (n < 7) 1100 if (n < 7)
1102 return -EINVAL; 1101 return -EINVAL;
1103 1102
1104 hdev = hci_get_route(addr, src); 1103 /* The LE_PUBLIC address type is ignored because of BDADDR_ANY */
1104 hdev = hci_get_route(addr, BDADDR_ANY, BDADDR_LE_PUBLIC);
1105 if (!hdev) 1105 if (!hdev)
1106 return -ENOENT; 1106 return -ENOENT;
1107 1107
diff --git a/net/bluetooth/hci_conn.c b/net/bluetooth/hci_conn.c
index 3809617aa98d..dc59eae54717 100644
--- a/net/bluetooth/hci_conn.c
+++ b/net/bluetooth/hci_conn.c
@@ -613,7 +613,7 @@ int hci_conn_del(struct hci_conn *conn)
613 return 0; 613 return 0;
614} 614}
615 615
616struct hci_dev *hci_get_route(bdaddr_t *dst, bdaddr_t *src) 616struct hci_dev *hci_get_route(bdaddr_t *dst, bdaddr_t *src, uint8_t src_type)
617{ 617{
618 int use_src = bacmp(src, BDADDR_ANY); 618 int use_src = bacmp(src, BDADDR_ANY);
619 struct hci_dev *hdev = NULL, *d; 619 struct hci_dev *hdev = NULL, *d;
@@ -634,7 +634,29 @@ struct hci_dev *hci_get_route(bdaddr_t *dst, bdaddr_t *src)
634 */ 634 */
635 635
636 if (use_src) { 636 if (use_src) {
637 if (!bacmp(&d->bdaddr, src)) { 637 bdaddr_t id_addr;
638 u8 id_addr_type;
639
640 if (src_type == BDADDR_BREDR) {
641 if (!lmp_bredr_capable(d))
642 continue;
643 bacpy(&id_addr, &d->bdaddr);
644 id_addr_type = BDADDR_BREDR;
645 } else {
646 if (!lmp_le_capable(d))
647 continue;
648
649 hci_copy_identity_address(d, &id_addr,
650 &id_addr_type);
651
652 /* Convert from HCI to three-value type */
653 if (id_addr_type == ADDR_LE_DEV_PUBLIC)
654 id_addr_type = BDADDR_LE_PUBLIC;
655 else
656 id_addr_type = BDADDR_LE_RANDOM;
657 }
658
659 if (!bacmp(&id_addr, src) && id_addr_type == src_type) {
638 hdev = d; break; 660 hdev = d; break;
639 } 661 }
640 } else { 662 } else {
diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
index d4cad29b033f..577f1c01454a 100644
--- a/net/bluetooth/l2cap_core.c
+++ b/net/bluetooth/l2cap_core.c
@@ -7060,7 +7060,7 @@ int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid,
7060 BT_DBG("%pMR -> %pMR (type %u) psm 0x%2.2x", &chan->src, dst, 7060 BT_DBG("%pMR -> %pMR (type %u) psm 0x%2.2x", &chan->src, dst,
7061 dst_type, __le16_to_cpu(psm)); 7061 dst_type, __le16_to_cpu(psm));
7062 7062
7063 hdev = hci_get_route(dst, &chan->src); 7063 hdev = hci_get_route(dst, &chan->src, chan->src_type);
7064 if (!hdev) 7064 if (!hdev)
7065 return -EHOSTUNREACH; 7065 return -EHOSTUNREACH;
7066 7066
diff --git a/net/bluetooth/rfcomm/tty.c b/net/bluetooth/rfcomm/tty.c
index 8e385a0ae60e..2f2cb5e27cdd 100644
--- a/net/bluetooth/rfcomm/tty.c
+++ b/net/bluetooth/rfcomm/tty.c
@@ -178,7 +178,7 @@ static void rfcomm_reparent_device(struct rfcomm_dev *dev)
178 struct hci_dev *hdev; 178 struct hci_dev *hdev;
179 struct hci_conn *conn; 179 struct hci_conn *conn;
180 180
181 hdev = hci_get_route(&dev->dst, &dev->src); 181 hdev = hci_get_route(&dev->dst, &dev->src, BDADDR_BREDR);
182 if (!hdev) 182 if (!hdev)
183 return; 183 return;
184 184
diff --git a/net/bluetooth/sco.c b/net/bluetooth/sco.c
index f52bcbf2e58c..3125ce670c2f 100644
--- a/net/bluetooth/sco.c
+++ b/net/bluetooth/sco.c
@@ -219,7 +219,7 @@ static int sco_connect(struct sock *sk)
219 219
220 BT_DBG("%pMR -> %pMR", &sco_pi(sk)->src, &sco_pi(sk)->dst); 220 BT_DBG("%pMR -> %pMR", &sco_pi(sk)->src, &sco_pi(sk)->dst);
221 221
222 hdev = hci_get_route(&sco_pi(sk)->dst, &sco_pi(sk)->src); 222 hdev = hci_get_route(&sco_pi(sk)->dst, &sco_pi(sk)->src, BDADDR_BREDR);
223 if (!hdev) 223 if (!hdev)
224 return -EHOSTUNREACH; 224 return -EHOSTUNREACH;
225 225
diff --git a/net/can/bcm.c b/net/can/bcm.c
index 8af9d25ff988..436a7537e6a9 100644
--- a/net/can/bcm.c
+++ b/net/can/bcm.c
@@ -77,7 +77,7 @@
77 (CAN_EFF_MASK | CAN_EFF_FLAG | CAN_RTR_FLAG) : \ 77 (CAN_EFF_MASK | CAN_EFF_FLAG | CAN_RTR_FLAG) : \
78 (CAN_SFF_MASK | CAN_EFF_FLAG | CAN_RTR_FLAG)) 78 (CAN_SFF_MASK | CAN_EFF_FLAG | CAN_RTR_FLAG))
79 79
80#define CAN_BCM_VERSION "20160617" 80#define CAN_BCM_VERSION "20161123"
81 81
82MODULE_DESCRIPTION("PF_CAN broadcast manager protocol"); 82MODULE_DESCRIPTION("PF_CAN broadcast manager protocol");
83MODULE_LICENSE("Dual BSD/GPL"); 83MODULE_LICENSE("Dual BSD/GPL");
@@ -109,8 +109,9 @@ struct bcm_op {
109 u32 count; 109 u32 count;
110 u32 nframes; 110 u32 nframes;
111 u32 currframe; 111 u32 currframe;
112 struct canfd_frame *frames; 112 /* void pointers to arrays of struct can[fd]_frame */
113 struct canfd_frame *last_frames; 113 void *frames;
114 void *last_frames;
114 struct canfd_frame sframe; 115 struct canfd_frame sframe;
115 struct canfd_frame last_sframe; 116 struct canfd_frame last_sframe;
116 struct sock *sk; 117 struct sock *sk;
@@ -681,7 +682,7 @@ static void bcm_rx_handler(struct sk_buff *skb, void *data)
681 682
682 if (op->flags & RX_FILTER_ID) { 683 if (op->flags & RX_FILTER_ID) {
683 /* the easiest case */ 684 /* the easiest case */
684 bcm_rx_update_and_send(op, &op->last_frames[0], rxframe); 685 bcm_rx_update_and_send(op, op->last_frames, rxframe);
685 goto rx_starttimer; 686 goto rx_starttimer;
686 } 687 }
687 688
@@ -1068,7 +1069,7 @@ static int bcm_rx_setup(struct bcm_msg_head *msg_head, struct msghdr *msg,
1068 1069
1069 if (msg_head->nframes) { 1070 if (msg_head->nframes) {
1070 /* update CAN frames content */ 1071 /* update CAN frames content */
1071 err = memcpy_from_msg((u8 *)op->frames, msg, 1072 err = memcpy_from_msg(op->frames, msg,
1072 msg_head->nframes * op->cfsiz); 1073 msg_head->nframes * op->cfsiz);
1073 if (err < 0) 1074 if (err < 0)
1074 return err; 1075 return err;
@@ -1118,7 +1119,7 @@ static int bcm_rx_setup(struct bcm_msg_head *msg_head, struct msghdr *msg,
1118 } 1119 }
1119 1120
1120 if (msg_head->nframes) { 1121 if (msg_head->nframes) {
1121 err = memcpy_from_msg((u8 *)op->frames, msg, 1122 err = memcpy_from_msg(op->frames, msg,
1122 msg_head->nframes * op->cfsiz); 1123 msg_head->nframes * op->cfsiz);
1123 if (err < 0) { 1124 if (err < 0) {
1124 if (op->frames != &op->sframe) 1125 if (op->frames != &op->sframe)
@@ -1163,6 +1164,7 @@ static int bcm_rx_setup(struct bcm_msg_head *msg_head, struct msghdr *msg,
1163 /* check flags */ 1164 /* check flags */
1164 1165
1165 if (op->flags & RX_RTR_FRAME) { 1166 if (op->flags & RX_RTR_FRAME) {
1167 struct canfd_frame *frame0 = op->frames;
1166 1168
1167 /* no timers in RTR-mode */ 1169 /* no timers in RTR-mode */
1168 hrtimer_cancel(&op->thrtimer); 1170 hrtimer_cancel(&op->thrtimer);
@@ -1174,8 +1176,8 @@ static int bcm_rx_setup(struct bcm_msg_head *msg_head, struct msghdr *msg,
1174 * prevent a full-load-loopback-test ... ;-] 1176 * prevent a full-load-loopback-test ... ;-]
1175 */ 1177 */
1176 if ((op->flags & TX_CP_CAN_ID) || 1178 if ((op->flags & TX_CP_CAN_ID) ||
1177 (op->frames[0].can_id == op->can_id)) 1179 (frame0->can_id == op->can_id))
1178 op->frames[0].can_id = op->can_id & ~CAN_RTR_FLAG; 1180 frame0->can_id = op->can_id & ~CAN_RTR_FLAG;
1179 1181
1180 } else { 1182 } else {
1181 if (op->flags & SETTIMER) { 1183 if (op->flags & SETTIMER) {
diff --git a/net/core/ethtool.c b/net/core/ethtool.c
index 977489820eb9..047a1752ece1 100644
--- a/net/core/ethtool.c
+++ b/net/core/ethtool.c
@@ -2479,6 +2479,7 @@ int dev_ethtool(struct net *net, struct ifreq *ifr)
2479 case ETHTOOL_GET_TS_INFO: 2479 case ETHTOOL_GET_TS_INFO:
2480 case ETHTOOL_GEEE: 2480 case ETHTOOL_GEEE:
2481 case ETHTOOL_GTUNABLE: 2481 case ETHTOOL_GTUNABLE:
2482 case ETHTOOL_GLINKSETTINGS:
2482 break; 2483 break;
2483 default: 2484 default:
2484 if (!ns_capable(net->user_ns, CAP_NET_ADMIN)) 2485 if (!ns_capable(net->user_ns, CAP_NET_ADMIN))
diff --git a/net/core/flow_dissector.c b/net/core/flow_dissector.c
index 69e4463a4b1b..c6d8207ffa7e 100644
--- a/net/core/flow_dissector.c
+++ b/net/core/flow_dissector.c
@@ -1013,4 +1013,4 @@ static int __init init_default_flow_dissectors(void)
1013 return 0; 1013 return 0;
1014} 1014}
1015 1015
1016late_initcall_sync(init_default_flow_dissectors); 1016core_initcall(init_default_flow_dissectors);
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
index a99917b5de33..deb35acbefd0 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -2737,7 +2737,7 @@ static u16 rtnl_calcit(struct sk_buff *skb, struct nlmsghdr *nlh)
2737 ext_filter_mask)); 2737 ext_filter_mask));
2738 } 2738 }
2739 2739
2740 return min_ifinfo_dump_size; 2740 return nlmsg_total_size(min_ifinfo_dump_size);
2741} 2741}
2742 2742
2743static int rtnl_dump_all(struct sk_buff *skb, struct netlink_callback *cb) 2743static int rtnl_dump_all(struct sk_buff *skb, struct netlink_callback *cb)
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
index 0de9d5d2b9ae..5bab6c3f7a2f 100644
--- a/net/ipv4/udp.c
+++ b/net/ipv4/udp.c
@@ -1455,7 +1455,7 @@ static void udp_v4_rehash(struct sock *sk)
1455 udp_lib_rehash(sk, new_hash); 1455 udp_lib_rehash(sk, new_hash);
1456} 1456}
1457 1457
1458static int __udp_queue_rcv_skb(struct sock *sk, struct sk_buff *skb) 1458int __udp_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
1459{ 1459{
1460 int rc; 1460 int rc;
1461 1461
diff --git a/net/ipv4/udp_impl.h b/net/ipv4/udp_impl.h
index 7e0fe4bdd967..feb50a16398d 100644
--- a/net/ipv4/udp_impl.h
+++ b/net/ipv4/udp_impl.h
@@ -25,7 +25,7 @@ int udp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int noblock,
25 int flags, int *addr_len); 25 int flags, int *addr_len);
26int udp_sendpage(struct sock *sk, struct page *page, int offset, size_t size, 26int udp_sendpage(struct sock *sk, struct page *page, int offset, size_t size,
27 int flags); 27 int flags);
28int udp_queue_rcv_skb(struct sock *sk, struct sk_buff *skb); 28int __udp_queue_rcv_skb(struct sock *sk, struct sk_buff *skb);
29void udp_destroy_sock(struct sock *sk); 29void udp_destroy_sock(struct sock *sk);
30 30
31#ifdef CONFIG_PROC_FS 31#ifdef CONFIG_PROC_FS
diff --git a/net/ipv4/udplite.c b/net/ipv4/udplite.c
index af817158d830..ff450c2aad9b 100644
--- a/net/ipv4/udplite.c
+++ b/net/ipv4/udplite.c
@@ -50,7 +50,7 @@ struct proto udplite_prot = {
50 .sendmsg = udp_sendmsg, 50 .sendmsg = udp_sendmsg,
51 .recvmsg = udp_recvmsg, 51 .recvmsg = udp_recvmsg,
52 .sendpage = udp_sendpage, 52 .sendpage = udp_sendpage,
53 .backlog_rcv = udp_queue_rcv_skb, 53 .backlog_rcv = __udp_queue_rcv_skb,
54 .hash = udp_lib_hash, 54 .hash = udp_lib_hash,
55 .unhash = udp_lib_unhash, 55 .unhash = udp_lib_unhash,
56 .get_port = udp_v4_get_port, 56 .get_port = udp_v4_get_port,
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index 060dd9922018..4bc5ba3ae452 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -183,7 +183,7 @@ static struct rt6_info *addrconf_get_prefix_route(const struct in6_addr *pfx,
183 183
184static void addrconf_dad_start(struct inet6_ifaddr *ifp); 184static void addrconf_dad_start(struct inet6_ifaddr *ifp);
185static void addrconf_dad_work(struct work_struct *w); 185static void addrconf_dad_work(struct work_struct *w);
186static void addrconf_dad_completed(struct inet6_ifaddr *ifp); 186static void addrconf_dad_completed(struct inet6_ifaddr *ifp, bool bump_id);
187static void addrconf_dad_run(struct inet6_dev *idev); 187static void addrconf_dad_run(struct inet6_dev *idev);
188static void addrconf_rs_timer(unsigned long data); 188static void addrconf_rs_timer(unsigned long data);
189static void __ipv6_ifa_notify(int event, struct inet6_ifaddr *ifa); 189static void __ipv6_ifa_notify(int event, struct inet6_ifaddr *ifa);
@@ -2898,6 +2898,7 @@ static void add_addr(struct inet6_dev *idev, const struct in6_addr *addr,
2898 spin_lock_bh(&ifp->lock); 2898 spin_lock_bh(&ifp->lock);
2899 ifp->flags &= ~IFA_F_TENTATIVE; 2899 ifp->flags &= ~IFA_F_TENTATIVE;
2900 spin_unlock_bh(&ifp->lock); 2900 spin_unlock_bh(&ifp->lock);
2901 rt_genid_bump_ipv6(dev_net(idev->dev));
2901 ipv6_ifa_notify(RTM_NEWADDR, ifp); 2902 ipv6_ifa_notify(RTM_NEWADDR, ifp);
2902 in6_ifa_put(ifp); 2903 in6_ifa_put(ifp);
2903 } 2904 }
@@ -3740,7 +3741,7 @@ static void addrconf_dad_begin(struct inet6_ifaddr *ifp)
3740{ 3741{
3741 struct inet6_dev *idev = ifp->idev; 3742 struct inet6_dev *idev = ifp->idev;
3742 struct net_device *dev = idev->dev; 3743 struct net_device *dev = idev->dev;
3743 bool notify = false; 3744 bool bump_id, notify = false;
3744 3745
3745 addrconf_join_solict(dev, &ifp->addr); 3746 addrconf_join_solict(dev, &ifp->addr);
3746 3747
@@ -3755,11 +3756,12 @@ static void addrconf_dad_begin(struct inet6_ifaddr *ifp)
3755 idev->cnf.accept_dad < 1 || 3756 idev->cnf.accept_dad < 1 ||
3756 !(ifp->flags&IFA_F_TENTATIVE) || 3757 !(ifp->flags&IFA_F_TENTATIVE) ||
3757 ifp->flags & IFA_F_NODAD) { 3758 ifp->flags & IFA_F_NODAD) {
3759 bump_id = ifp->flags & IFA_F_TENTATIVE;
3758 ifp->flags &= ~(IFA_F_TENTATIVE|IFA_F_OPTIMISTIC|IFA_F_DADFAILED); 3760 ifp->flags &= ~(IFA_F_TENTATIVE|IFA_F_OPTIMISTIC|IFA_F_DADFAILED);
3759 spin_unlock(&ifp->lock); 3761 spin_unlock(&ifp->lock);
3760 read_unlock_bh(&idev->lock); 3762 read_unlock_bh(&idev->lock);
3761 3763
3762 addrconf_dad_completed(ifp); 3764 addrconf_dad_completed(ifp, bump_id);
3763 return; 3765 return;
3764 } 3766 }
3765 3767
@@ -3819,8 +3821,8 @@ static void addrconf_dad_work(struct work_struct *w)
3819 struct inet6_ifaddr, 3821 struct inet6_ifaddr,
3820 dad_work); 3822 dad_work);
3821 struct inet6_dev *idev = ifp->idev; 3823 struct inet6_dev *idev = ifp->idev;
3824 bool bump_id, disable_ipv6 = false;
3822 struct in6_addr mcaddr; 3825 struct in6_addr mcaddr;
3823 bool disable_ipv6 = false;
3824 3826
3825 enum { 3827 enum {
3826 DAD_PROCESS, 3828 DAD_PROCESS,
@@ -3890,11 +3892,12 @@ static void addrconf_dad_work(struct work_struct *w)
3890 * DAD was successful 3892 * DAD was successful
3891 */ 3893 */
3892 3894
3895 bump_id = ifp->flags & IFA_F_TENTATIVE;
3893 ifp->flags &= ~(IFA_F_TENTATIVE|IFA_F_OPTIMISTIC|IFA_F_DADFAILED); 3896 ifp->flags &= ~(IFA_F_TENTATIVE|IFA_F_OPTIMISTIC|IFA_F_DADFAILED);
3894 spin_unlock(&ifp->lock); 3897 spin_unlock(&ifp->lock);
3895 write_unlock_bh(&idev->lock); 3898 write_unlock_bh(&idev->lock);
3896 3899
3897 addrconf_dad_completed(ifp); 3900 addrconf_dad_completed(ifp, bump_id);
3898 3901
3899 goto out; 3902 goto out;
3900 } 3903 }
@@ -3931,7 +3934,7 @@ static bool ipv6_lonely_lladdr(struct inet6_ifaddr *ifp)
3931 return true; 3934 return true;
3932} 3935}
3933 3936
3934static void addrconf_dad_completed(struct inet6_ifaddr *ifp) 3937static void addrconf_dad_completed(struct inet6_ifaddr *ifp, bool bump_id)
3935{ 3938{
3936 struct net_device *dev = ifp->idev->dev; 3939 struct net_device *dev = ifp->idev->dev;
3937 struct in6_addr lladdr; 3940 struct in6_addr lladdr;
@@ -3983,6 +3986,9 @@ static void addrconf_dad_completed(struct inet6_ifaddr *ifp)
3983 spin_unlock(&ifp->lock); 3986 spin_unlock(&ifp->lock);
3984 write_unlock_bh(&ifp->idev->lock); 3987 write_unlock_bh(&ifp->idev->lock);
3985 } 3988 }
3989
3990 if (bump_id)
3991 rt_genid_bump_ipv6(dev_net(dev));
3986} 3992}
3987 3993
3988static void addrconf_dad_run(struct inet6_dev *idev) 3994static void addrconf_dad_run(struct inet6_dev *idev)
diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
index e5056d4873d1..e4a8000d59ad 100644
--- a/net/ipv6/udp.c
+++ b/net/ipv6/udp.c
@@ -514,7 +514,7 @@ out:
514 return; 514 return;
515} 515}
516 516
517static int __udpv6_queue_rcv_skb(struct sock *sk, struct sk_buff *skb) 517int __udpv6_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
518{ 518{
519 int rc; 519 int rc;
520 520
diff --git a/net/ipv6/udp_impl.h b/net/ipv6/udp_impl.h
index f6eb1ab34f4b..e78bdc76dcc3 100644
--- a/net/ipv6/udp_impl.h
+++ b/net/ipv6/udp_impl.h
@@ -26,7 +26,7 @@ int compat_udpv6_getsockopt(struct sock *sk, int level, int optname,
26int udpv6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len); 26int udpv6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len);
27int udpv6_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int noblock, 27int udpv6_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int noblock,
28 int flags, int *addr_len); 28 int flags, int *addr_len);
29int udpv6_queue_rcv_skb(struct sock *sk, struct sk_buff *skb); 29int __udpv6_queue_rcv_skb(struct sock *sk, struct sk_buff *skb);
30void udpv6_destroy_sock(struct sock *sk); 30void udpv6_destroy_sock(struct sock *sk);
31 31
32#ifdef CONFIG_PROC_FS 32#ifdef CONFIG_PROC_FS
diff --git a/net/ipv6/udplite.c b/net/ipv6/udplite.c
index 47d0d2b87106..2f5101a12283 100644
--- a/net/ipv6/udplite.c
+++ b/net/ipv6/udplite.c
@@ -45,7 +45,7 @@ struct proto udplitev6_prot = {
45 .getsockopt = udpv6_getsockopt, 45 .getsockopt = udpv6_getsockopt,
46 .sendmsg = udpv6_sendmsg, 46 .sendmsg = udpv6_sendmsg,
47 .recvmsg = udpv6_recvmsg, 47 .recvmsg = udpv6_recvmsg,
48 .backlog_rcv = udpv6_queue_rcv_skb, 48 .backlog_rcv = __udpv6_queue_rcv_skb,
49 .hash = udp_lib_hash, 49 .hash = udp_lib_hash,
50 .unhash = udp_lib_unhash, 50 .unhash = udp_lib_unhash,
51 .get_port = udp_v6_get_port, 51 .get_port = udp_v6_get_port,
diff --git a/net/l2tp/l2tp_eth.c b/net/l2tp/l2tp_eth.c
index 3dc97b4f982b..965f7e344cef 100644
--- a/net/l2tp/l2tp_eth.c
+++ b/net/l2tp/l2tp_eth.c
@@ -97,7 +97,7 @@ static int l2tp_eth_dev_xmit(struct sk_buff *skb, struct net_device *dev)
97 unsigned int len = skb->len; 97 unsigned int len = skb->len;
98 int ret = l2tp_xmit_skb(session, skb, session->hdr_len); 98 int ret = l2tp_xmit_skb(session, skb, session->hdr_len);
99 99
100 if (likely(ret == NET_XMIT_SUCCESS || ret == NET_XMIT_CN)) { 100 if (likely(ret == NET_XMIT_SUCCESS)) {
101 atomic_long_add(len, &priv->tx_bytes); 101 atomic_long_add(len, &priv->tx_bytes);
102 atomic_long_inc(&priv->tx_packets); 102 atomic_long_inc(&priv->tx_packets);
103 } else { 103 } else {
diff --git a/net/sched/cls_api.c b/net/sched/cls_api.c
index 8e93d4afe5ea..b05d4a2155b0 100644
--- a/net/sched/cls_api.c
+++ b/net/sched/cls_api.c
@@ -112,7 +112,7 @@ static void tfilter_notify_chain(struct net *net, struct sk_buff *oskb,
112 112
113 for (it_chain = chain; (tp = rtnl_dereference(*it_chain)) != NULL; 113 for (it_chain = chain; (tp = rtnl_dereference(*it_chain)) != NULL;
114 it_chain = &tp->next) 114 it_chain = &tp->next)
115 tfilter_notify(net, oskb, n, tp, n->nlmsg_flags, event, false); 115 tfilter_notify(net, oskb, n, tp, 0, event, false);
116} 116}
117 117
118/* Select new prio value from the range, managed by kernel. */ 118/* Select new prio value from the range, managed by kernel. */
diff --git a/net/tipc/link.c b/net/tipc/link.c
index 1055164c6232..ecc12411155e 100644
--- a/net/tipc/link.c
+++ b/net/tipc/link.c
@@ -1492,8 +1492,9 @@ static int tipc_link_proto_rcv(struct tipc_link *l, struct sk_buff *skb,
1492 if (in_range(peers_tol, TIPC_MIN_LINK_TOL, TIPC_MAX_LINK_TOL)) 1492 if (in_range(peers_tol, TIPC_MIN_LINK_TOL, TIPC_MAX_LINK_TOL))
1493 l->tolerance = peers_tol; 1493 l->tolerance = peers_tol;
1494 1494
1495 if (peers_prio && in_range(peers_prio, TIPC_MIN_LINK_PRI, 1495 /* Update own prio if peer indicates a different value */
1496 TIPC_MAX_LINK_PRI)) { 1496 if ((peers_prio != l->priority) &&
1497 in_range(peers_prio, 1, TIPC_MAX_LINK_PRI)) {
1497 l->priority = peers_prio; 1498 l->priority = peers_prio;
1498 rc = tipc_link_fsm_evt(l, LINK_FAILURE_EVT); 1499 rc = tipc_link_fsm_evt(l, LINK_FAILURE_EVT);
1499 } 1500 }
diff --git a/net/tipc/monitor.c b/net/tipc/monitor.c
index ed97a5876ebe..9e109bb1a207 100644
--- a/net/tipc/monitor.c
+++ b/net/tipc/monitor.c
@@ -455,14 +455,14 @@ void tipc_mon_rcv(struct net *net, void *data, u16 dlen, u32 addr,
455 int i, applied_bef; 455 int i, applied_bef;
456 456
457 state->probing = false; 457 state->probing = false;
458 if (!dlen)
459 return;
460 458
461 /* Sanity check received domain record */ 459 /* Sanity check received domain record */
462 if ((dlen < new_dlen) || ntohs(arrv_dom->len) != new_dlen) { 460 if (dlen < dom_rec_len(arrv_dom, 0))
463 pr_warn_ratelimited("Received illegal domain record\n"); 461 return;
462 if (dlen != dom_rec_len(arrv_dom, new_member_cnt))
463 return;
464 if ((dlen < new_dlen) || ntohs(arrv_dom->len) != new_dlen)
464 return; 465 return;
465 }
466 466
467 /* Synch generation numbers with peer if link just came up */ 467 /* Synch generation numbers with peer if link just came up */
468 if (!state->synched) { 468 if (!state->synched) {
diff --git a/net/tipc/socket.c b/net/tipc/socket.c
index db32777ab591..41f013888f07 100644
--- a/net/tipc/socket.c
+++ b/net/tipc/socket.c
@@ -186,7 +186,7 @@ static struct tipc_sock *tipc_sk(const struct sock *sk)
186 186
187static bool tsk_conn_cong(struct tipc_sock *tsk) 187static bool tsk_conn_cong(struct tipc_sock *tsk)
188{ 188{
189 return tsk->snt_unacked >= tsk->snd_win; 189 return tsk->snt_unacked > tsk->snd_win;
190} 190}
191 191
192/* tsk_blocks(): translate a buffer size in bytes to number of 192/* tsk_blocks(): translate a buffer size in bytes to number of