Magellan Linux

Contents of /trunk/kernel-alx/patches-3.14/0121-3.14.22-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2506 - (show annotations) (download)
Fri Oct 17 07:55:45 2014 UTC (9 years, 6 months ago) by niro
File size: 58204 byte(s)
-patches for 3.14
1 diff --git a/Makefile b/Makefile
2 index 41e6e19fe2e9..a59980eb4557 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,6 +1,6 @@
6 VERSION = 3
7 PATCHLEVEL = 14
8 -SUBLEVEL = 21
9 +SUBLEVEL = 22
10 EXTRAVERSION =
11 NAME = Remembering Coco
12
13 diff --git a/drivers/crypto/caam/caamhash.c b/drivers/crypto/caam/caamhash.c
14 index 0378328f47a7..a4127453baae 100644
15 --- a/drivers/crypto/caam/caamhash.c
16 +++ b/drivers/crypto/caam/caamhash.c
17 @@ -1348,9 +1348,9 @@ static int ahash_update_first(struct ahash_request *req)
18 struct device *jrdev = ctx->jrdev;
19 gfp_t flags = (req->base.flags & (CRYPTO_TFM_REQ_MAY_BACKLOG |
20 CRYPTO_TFM_REQ_MAY_SLEEP)) ? GFP_KERNEL : GFP_ATOMIC;
21 - u8 *next_buf = state->buf_0 + state->current_buf *
22 - CAAM_MAX_HASH_BLOCK_SIZE;
23 - int *next_buflen = &state->buflen_0 + state->current_buf;
24 + u8 *next_buf = state->current_buf ? state->buf_1 : state->buf_0;
25 + int *next_buflen = state->current_buf ?
26 + &state->buflen_1 : &state->buflen_0;
27 int to_hash;
28 u32 *sh_desc = ctx->sh_desc_update_first, *desc;
29 dma_addr_t ptr = ctx->sh_desc_update_first_dma;
30 diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
31 index a95b322f0924..cc38948cf65d 100644
32 --- a/drivers/net/bonding/bond_main.c
33 +++ b/drivers/net/bonding/bond_main.c
34 @@ -3624,8 +3624,14 @@ static int bond_xmit_roundrobin(struct sk_buff *skb, struct net_device *bond_dev
35 else
36 bond_xmit_slave_id(bond, skb, 0);
37 } else {
38 - slave_id = bond_rr_gen_slave_id(bond);
39 - bond_xmit_slave_id(bond, skb, slave_id % bond->slave_cnt);
40 + int slave_cnt = ACCESS_ONCE(bond->slave_cnt);
41 +
42 + if (likely(slave_cnt)) {
43 + slave_id = bond_rr_gen_slave_id(bond);
44 + bond_xmit_slave_id(bond, skb, slave_id % slave_cnt);
45 + } else {
46 + dev_kfree_skb_any(skb);
47 + }
48 }
49
50 return NETDEV_TX_OK;
51 @@ -3656,8 +3662,13 @@ static int bond_xmit_activebackup(struct sk_buff *skb, struct net_device *bond_d
52 static int bond_xmit_xor(struct sk_buff *skb, struct net_device *bond_dev)
53 {
54 struct bonding *bond = netdev_priv(bond_dev);
55 + int slave_cnt = ACCESS_ONCE(bond->slave_cnt);
56
57 - bond_xmit_slave_id(bond, skb, bond_xmit_hash(bond, skb, bond->slave_cnt));
58 + if (likely(slave_cnt))
59 + bond_xmit_slave_id(bond, skb,
60 + bond_xmit_hash(bond, skb, bond->slave_cnt));
61 + else
62 + dev_kfree_skb_any(skb);
63
64 return NETDEV_TX_OK;
65 }
66 diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c
67 index a210766279d3..9373f1f59605 100644
68 --- a/drivers/net/ethernet/broadcom/tg3.c
69 +++ b/drivers/net/ethernet/broadcom/tg3.c
70 @@ -6923,7 +6923,8 @@ static int tg3_rx(struct tg3_napi *tnapi, int budget)
71 skb->protocol = eth_type_trans(skb, tp->dev);
72
73 if (len > (tp->dev->mtu + ETH_HLEN) &&
74 - skb->protocol != htons(ETH_P_8021Q)) {
75 + skb->protocol != htons(ETH_P_8021Q) &&
76 + skb->protocol != htons(ETH_P_8021AD)) {
77 dev_kfree_skb(skb);
78 goto drop_it_no_recycle;
79 }
80 @@ -7915,8 +7916,6 @@ static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
81
82 entry = tnapi->tx_prod;
83 base_flags = 0;
84 - if (skb->ip_summed == CHECKSUM_PARTIAL)
85 - base_flags |= TXD_FLAG_TCPUDP_CSUM;
86
87 mss = skb_shinfo(skb)->gso_size;
88 if (mss) {
89 @@ -7932,6 +7931,13 @@ static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
90
91 hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb) - ETH_HLEN;
92
93 + /* HW/FW can not correctly segment packets that have been
94 + * vlan encapsulated.
95 + */
96 + if (skb->protocol == htons(ETH_P_8021Q) ||
97 + skb->protocol == htons(ETH_P_8021AD))
98 + return tg3_tso_bug(tp, skb);
99 +
100 if (!skb_is_gso_v6(skb)) {
101 iph->check = 0;
102 iph->tot_len = htons(mss + hdr_len);
103 @@ -7978,6 +7984,17 @@ static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
104 base_flags |= tsflags << 12;
105 }
106 }
107 + } else if (skb->ip_summed == CHECKSUM_PARTIAL) {
108 + /* HW/FW can not correctly checksum packets that have been
109 + * vlan encapsulated.
110 + */
111 + if (skb->protocol == htons(ETH_P_8021Q) ||
112 + skb->protocol == htons(ETH_P_8021AD)) {
113 + if (skb_checksum_help(skb))
114 + goto drop;
115 + } else {
116 + base_flags |= TXD_FLAG_TCPUDP_CSUM;
117 + }
118 }
119
120 if (tg3_flag(tp, USE_JUMBO_BDFLAG) &&
121 diff --git a/drivers/net/ethernet/cadence/macb.c b/drivers/net/ethernet/cadence/macb.c
122 index d0c38e01e99f..0085476a0258 100644
123 --- a/drivers/net/ethernet/cadence/macb.c
124 +++ b/drivers/net/ethernet/cadence/macb.c
125 @@ -30,7 +30,6 @@
126 #include <linux/of_device.h>
127 #include <linux/of_mdio.h>
128 #include <linux/of_net.h>
129 -#include <linux/pinctrl/consumer.h>
130
131 #include "macb.h"
132
133 @@ -1810,7 +1809,6 @@ static int __init macb_probe(struct platform_device *pdev)
134 struct phy_device *phydev;
135 u32 config;
136 int err = -ENXIO;
137 - struct pinctrl *pinctrl;
138 const char *mac;
139
140 regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);
141 @@ -1819,15 +1817,6 @@ static int __init macb_probe(struct platform_device *pdev)
142 goto err_out;
143 }
144
145 - pinctrl = devm_pinctrl_get_select_default(&pdev->dev);
146 - if (IS_ERR(pinctrl)) {
147 - err = PTR_ERR(pinctrl);
148 - if (err == -EPROBE_DEFER)
149 - goto err_out;
150 -
151 - dev_warn(&pdev->dev, "No pinctrl provided\n");
152 - }
153 -
154 err = -ENOMEM;
155 dev = alloc_etherdev(sizeof(*bp));
156 if (!dev)
157 diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
158 index b901371ca361..5d3206d5cb07 100644
159 --- a/drivers/net/ethernet/intel/i40e/i40e_main.c
160 +++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
161 @@ -4024,6 +4024,9 @@ static int i40e_init_pf_dcb(struct i40e_pf *pf)
162 DCB_CAP_DCBX_VER_IEEE;
163 pf->flags |= I40E_FLAG_DCB_ENABLED;
164 }
165 + } else {
166 + dev_info(&pf->pdev->dev, "AQ Querying DCB configuration failed: %d\n",
167 + pf->hw.aq.asq_last_status);
168 }
169
170 out:
171 @@ -8003,7 +8006,7 @@ static int i40e_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
172 if (err) {
173 dev_info(&pdev->dev, "init_pf_dcb failed: %d\n", err);
174 pf->flags &= ~I40E_FLAG_DCB_ENABLED;
175 - goto err_init_dcb;
176 + /* Continue without DCB enabled */
177 }
178 #endif /* CONFIG_I40E_DCB */
179
180 @@ -8119,9 +8122,6 @@ err_vsis:
181 err_switch_setup:
182 i40e_reset_interrupt_capability(pf);
183 del_timer_sync(&pf->service_timer);
184 -#ifdef CONFIG_I40E_DCB
185 -err_init_dcb:
186 -#endif /* CONFIG_I40E_DCB */
187 err_mac_addr:
188 err_configure_lan_hmc:
189 (void)i40e_shutdown_lan_hmc(hw);
190 diff --git a/drivers/net/ethernet/myricom/myri10ge/myri10ge.c b/drivers/net/ethernet/myricom/myri10ge/myri10ge.c
191 index 68026f7e8ba3..4a474dd9c910 100644
192 --- a/drivers/net/ethernet/myricom/myri10ge/myri10ge.c
193 +++ b/drivers/net/ethernet/myricom/myri10ge/myri10ge.c
194 @@ -872,6 +872,10 @@ static int myri10ge_dma_test(struct myri10ge_priv *mgp, int test_type)
195 return -ENOMEM;
196 dmatest_bus = pci_map_page(mgp->pdev, dmatest_page, 0, PAGE_SIZE,
197 DMA_BIDIRECTIONAL);
198 + if (unlikely(pci_dma_mapping_error(mgp->pdev, dmatest_bus))) {
199 + __free_page(dmatest_page);
200 + return -ENOMEM;
201 + }
202
203 /* Run a small DMA test.
204 * The magic multipliers to the length tell the firmware
205 @@ -1293,6 +1297,7 @@ myri10ge_alloc_rx_pages(struct myri10ge_priv *mgp, struct myri10ge_rx_buf *rx,
206 int bytes, int watchdog)
207 {
208 struct page *page;
209 + dma_addr_t bus;
210 int idx;
211 #if MYRI10GE_ALLOC_SIZE > 4096
212 int end_offset;
213 @@ -1317,11 +1322,21 @@ myri10ge_alloc_rx_pages(struct myri10ge_priv *mgp, struct myri10ge_rx_buf *rx,
214 rx->watchdog_needed = 1;
215 return;
216 }
217 +
218 + bus = pci_map_page(mgp->pdev, page, 0,
219 + MYRI10GE_ALLOC_SIZE,
220 + PCI_DMA_FROMDEVICE);
221 + if (unlikely(pci_dma_mapping_error(mgp->pdev, bus))) {
222 + __free_pages(page, MYRI10GE_ALLOC_ORDER);
223 + if (rx->fill_cnt - rx->cnt < 16)
224 + rx->watchdog_needed = 1;
225 + return;
226 + }
227 +
228 rx->page = page;
229 rx->page_offset = 0;
230 - rx->bus = pci_map_page(mgp->pdev, page, 0,
231 - MYRI10GE_ALLOC_SIZE,
232 - PCI_DMA_FROMDEVICE);
233 + rx->bus = bus;
234 +
235 }
236 rx->info[idx].page = rx->page;
237 rx->info[idx].page_offset = rx->page_offset;
238 @@ -2765,6 +2780,35 @@ myri10ge_submit_req(struct myri10ge_tx_buf *tx, struct mcp_kreq_ether_send *src,
239 mb();
240 }
241
242 +static void myri10ge_unmap_tx_dma(struct myri10ge_priv *mgp,
243 + struct myri10ge_tx_buf *tx, int idx)
244 +{
245 + unsigned int len;
246 + int last_idx;
247 +
248 + /* Free any DMA resources we've alloced and clear out the skb slot */
249 + last_idx = (idx + 1) & tx->mask;
250 + idx = tx->req & tx->mask;
251 + do {
252 + len = dma_unmap_len(&tx->info[idx], len);
253 + if (len) {
254 + if (tx->info[idx].skb != NULL)
255 + pci_unmap_single(mgp->pdev,
256 + dma_unmap_addr(&tx->info[idx],
257 + bus), len,
258 + PCI_DMA_TODEVICE);
259 + else
260 + pci_unmap_page(mgp->pdev,
261 + dma_unmap_addr(&tx->info[idx],
262 + bus), len,
263 + PCI_DMA_TODEVICE);
264 + dma_unmap_len_set(&tx->info[idx], len, 0);
265 + tx->info[idx].skb = NULL;
266 + }
267 + idx = (idx + 1) & tx->mask;
268 + } while (idx != last_idx);
269 +}
270 +
271 /*
272 * Transmit a packet. We need to split the packet so that a single
273 * segment does not cross myri10ge->tx_boundary, so this makes segment
274 @@ -2788,7 +2832,7 @@ static netdev_tx_t myri10ge_xmit(struct sk_buff *skb,
275 u32 low;
276 __be32 high_swapped;
277 unsigned int len;
278 - int idx, last_idx, avail, frag_cnt, frag_idx, count, mss, max_segments;
279 + int idx, avail, frag_cnt, frag_idx, count, mss, max_segments;
280 u16 pseudo_hdr_offset, cksum_offset, queue;
281 int cum_len, seglen, boundary, rdma_count;
282 u8 flags, odd_flag;
283 @@ -2885,9 +2929,12 @@ again:
284
285 /* map the skb for DMA */
286 len = skb_headlen(skb);
287 + bus = pci_map_single(mgp->pdev, skb->data, len, PCI_DMA_TODEVICE);
288 + if (unlikely(pci_dma_mapping_error(mgp->pdev, bus)))
289 + goto drop;
290 +
291 idx = tx->req & tx->mask;
292 tx->info[idx].skb = skb;
293 - bus = pci_map_single(mgp->pdev, skb->data, len, PCI_DMA_TODEVICE);
294 dma_unmap_addr_set(&tx->info[idx], bus, bus);
295 dma_unmap_len_set(&tx->info[idx], len, len);
296
297 @@ -2986,12 +3033,16 @@ again:
298 break;
299
300 /* map next fragment for DMA */
301 - idx = (count + tx->req) & tx->mask;
302 frag = &skb_shinfo(skb)->frags[frag_idx];
303 frag_idx++;
304 len = skb_frag_size(frag);
305 bus = skb_frag_dma_map(&mgp->pdev->dev, frag, 0, len,
306 DMA_TO_DEVICE);
307 + if (unlikely(pci_dma_mapping_error(mgp->pdev, bus))) {
308 + myri10ge_unmap_tx_dma(mgp, tx, idx);
309 + goto drop;
310 + }
311 + idx = (count + tx->req) & tx->mask;
312 dma_unmap_addr_set(&tx->info[idx], bus, bus);
313 dma_unmap_len_set(&tx->info[idx], len, len);
314 }
315 @@ -3022,31 +3073,8 @@ again:
316 return NETDEV_TX_OK;
317
318 abort_linearize:
319 - /* Free any DMA resources we've alloced and clear out the skb
320 - * slot so as to not trip up assertions, and to avoid a
321 - * double-free if linearizing fails */
322 + myri10ge_unmap_tx_dma(mgp, tx, idx);
323
324 - last_idx = (idx + 1) & tx->mask;
325 - idx = tx->req & tx->mask;
326 - tx->info[idx].skb = NULL;
327 - do {
328 - len = dma_unmap_len(&tx->info[idx], len);
329 - if (len) {
330 - if (tx->info[idx].skb != NULL)
331 - pci_unmap_single(mgp->pdev,
332 - dma_unmap_addr(&tx->info[idx],
333 - bus), len,
334 - PCI_DMA_TODEVICE);
335 - else
336 - pci_unmap_page(mgp->pdev,
337 - dma_unmap_addr(&tx->info[idx],
338 - bus), len,
339 - PCI_DMA_TODEVICE);
340 - dma_unmap_len_set(&tx->info[idx], len, 0);
341 - tx->info[idx].skb = NULL;
342 - }
343 - idx = (idx + 1) & tx->mask;
344 - } while (idx != last_idx);
345 if (skb_is_gso(skb)) {
346 netdev_err(mgp->dev, "TSO but wanted to linearize?!?!?\n");
347 goto drop;
348 diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
349 index d6fce9750b95..3c1c33ceffba 100644
350 --- a/drivers/net/hyperv/netvsc_drv.c
351 +++ b/drivers/net/hyperv/netvsc_drv.c
352 @@ -146,6 +146,7 @@ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net)
353 struct hv_netvsc_packet *packet;
354 int ret;
355 unsigned int i, num_pages, npg_data;
356 + u32 skb_length = skb->len;
357
358 /* Add multipages for skb->data and additional 2 for RNDIS */
359 npg_data = (((unsigned long)skb->data + skb_headlen(skb) - 1)
360 @@ -216,7 +217,7 @@ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net)
361 ret = rndis_filter_send(net_device_ctx->device_ctx,
362 packet);
363 if (ret == 0) {
364 - net->stats.tx_bytes += skb->len;
365 + net->stats.tx_bytes += skb_length;
366 net->stats.tx_packets++;
367 } else {
368 kfree(packet);
369 diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c
370 index 7f1abb7c18f2..fbf7dcdc22b0 100644
371 --- a/drivers/net/macvlan.c
372 +++ b/drivers/net/macvlan.c
373 @@ -709,6 +709,7 @@ static netdev_features_t macvlan_fix_features(struct net_device *dev,
374 features,
375 mask);
376 features |= ALWAYS_ON_FEATURES;
377 + features &= ~NETIF_F_NETNS_LOCAL;
378
379 return features;
380 }
381 diff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c
382 index 3381c4f91a8c..0c6adaaf898c 100644
383 --- a/drivers/net/macvtap.c
384 +++ b/drivers/net/macvtap.c
385 @@ -112,17 +112,15 @@ out:
386 return err;
387 }
388
389 +/* Requires RTNL */
390 static int macvtap_set_queue(struct net_device *dev, struct file *file,
391 struct macvtap_queue *q)
392 {
393 struct macvlan_dev *vlan = netdev_priv(dev);
394 - int err = -EBUSY;
395
396 - rtnl_lock();
397 if (vlan->numqueues == MAX_MACVTAP_QUEUES)
398 - goto out;
399 + return -EBUSY;
400
401 - err = 0;
402 rcu_assign_pointer(q->vlan, vlan);
403 rcu_assign_pointer(vlan->taps[vlan->numvtaps], q);
404 sock_hold(&q->sk);
405 @@ -136,9 +134,7 @@ static int macvtap_set_queue(struct net_device *dev, struct file *file,
406 vlan->numvtaps++;
407 vlan->numqueues++;
408
409 -out:
410 - rtnl_unlock();
411 - return err;
412 + return 0;
413 }
414
415 static int macvtap_disable_queue(struct macvtap_queue *q)
416 @@ -454,11 +450,12 @@ static void macvtap_sock_destruct(struct sock *sk)
417 static int macvtap_open(struct inode *inode, struct file *file)
418 {
419 struct net *net = current->nsproxy->net_ns;
420 - struct net_device *dev = dev_get_by_macvtap_minor(iminor(inode));
421 + struct net_device *dev;
422 struct macvtap_queue *q;
423 - int err;
424 + int err = -ENODEV;
425
426 - err = -ENODEV;
427 + rtnl_lock();
428 + dev = dev_get_by_macvtap_minor(iminor(inode));
429 if (!dev)
430 goto out;
431
432 @@ -498,6 +495,7 @@ out:
433 if (dev)
434 dev_put(dev);
435
436 + rtnl_unlock();
437 return err;
438 }
439
440 diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c
441 index 26d8c29b59de..979fe433278c 100644
442 --- a/drivers/net/team/team.c
443 +++ b/drivers/net/team/team.c
444 @@ -647,7 +647,7 @@ static void team_notify_peers(struct team *team)
445 {
446 if (!team->notify_peers.count || !netif_running(team->dev))
447 return;
448 - atomic_set(&team->notify_peers.count_pending, team->notify_peers.count);
449 + atomic_add(team->notify_peers.count, &team->notify_peers.count_pending);
450 schedule_delayed_work(&team->notify_peers.dw, 0);
451 }
452
453 @@ -687,7 +687,7 @@ static void team_mcast_rejoin(struct team *team)
454 {
455 if (!team->mcast_rejoin.count || !netif_running(team->dev))
456 return;
457 - atomic_set(&team->mcast_rejoin.count_pending, team->mcast_rejoin.count);
458 + atomic_add(team->mcast_rejoin.count, &team->mcast_rejoin.count_pending);
459 schedule_delayed_work(&team->mcast_rejoin.dw, 0);
460 }
461
462 diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
463 index 40ad25d7f28b..9b40532041cb 100644
464 --- a/drivers/net/vxlan.c
465 +++ b/drivers/net/vxlan.c
466 @@ -1334,7 +1334,7 @@ static int arp_reduce(struct net_device *dev, struct sk_buff *skb)
467 } else if (vxlan->flags & VXLAN_F_L3MISS) {
468 union vxlan_addr ipa = {
469 .sin.sin_addr.s_addr = tip,
470 - .sa.sa_family = AF_INET,
471 + .sin.sin_family = AF_INET,
472 };
473
474 vxlan_ip_miss(dev, &ipa);
475 @@ -1495,7 +1495,7 @@ static int neigh_reduce(struct net_device *dev, struct sk_buff *skb)
476 } else if (vxlan->flags & VXLAN_F_L3MISS) {
477 union vxlan_addr ipa = {
478 .sin6.sin6_addr = msg->target,
479 - .sa.sa_family = AF_INET6,
480 + .sin6.sin6_family = AF_INET6,
481 };
482
483 vxlan_ip_miss(dev, &ipa);
484 @@ -1528,7 +1528,7 @@ static bool route_shortcircuit(struct net_device *dev, struct sk_buff *skb)
485 if (!n && (vxlan->flags & VXLAN_F_L3MISS)) {
486 union vxlan_addr ipa = {
487 .sin.sin_addr.s_addr = pip->daddr,
488 - .sa.sa_family = AF_INET,
489 + .sin.sin_family = AF_INET,
490 };
491
492 vxlan_ip_miss(dev, &ipa);
493 @@ -1549,7 +1549,7 @@ static bool route_shortcircuit(struct net_device *dev, struct sk_buff *skb)
494 if (!n && (vxlan->flags & VXLAN_F_L3MISS)) {
495 union vxlan_addr ipa = {
496 .sin6.sin6_addr = pip6->daddr,
497 - .sa.sa_family = AF_INET6,
498 + .sin6.sin6_family = AF_INET6,
499 };
500
501 vxlan_ip_miss(dev, &ipa);
502 diff --git a/drivers/tty/serial/8250/8250_pci.c b/drivers/tty/serial/8250/8250_pci.c
503 index 0ff3e3624d4c..feda34404ed0 100644
504 --- a/drivers/tty/serial/8250/8250_pci.c
505 +++ b/drivers/tty/serial/8250/8250_pci.c
506 @@ -1766,6 +1766,7 @@ pci_wch_ch353_setup(struct serial_private *priv,
507 #define PCI_DEVICE_ID_COMMTECH_4222PCIE 0x0022
508 #define PCI_DEVICE_ID_BROADCOM_TRUMANAGE 0x160a
509 #define PCI_DEVICE_ID_AMCC_ADDIDATA_APCI7800 0x818e
510 +#define PCI_DEVICE_ID_INTEL_QRK_UART 0x0936
511
512 #define PCI_VENDOR_ID_SUNIX 0x1fd4
513 #define PCI_DEVICE_ID_SUNIX_1999 0x1999
514 @@ -1876,6 +1877,13 @@ static struct pci_serial_quirk pci_serial_quirks[] __refdata = {
515 .subdevice = PCI_ANY_ID,
516 .setup = byt_serial_setup,
517 },
518 + {
519 + .vendor = PCI_VENDOR_ID_INTEL,
520 + .device = PCI_DEVICE_ID_INTEL_QRK_UART,
521 + .subvendor = PCI_ANY_ID,
522 + .subdevice = PCI_ANY_ID,
523 + .setup = pci_default_setup,
524 + },
525 /*
526 * ITE
527 */
528 @@ -2710,6 +2718,7 @@ enum pci_board_num_t {
529 pbn_ADDIDATA_PCIe_8_3906250,
530 pbn_ce4100_1_115200,
531 pbn_byt,
532 + pbn_qrk,
533 pbn_omegapci,
534 pbn_NETMOS9900_2s_115200,
535 pbn_brcm_trumanage,
536 @@ -3456,6 +3465,12 @@ static struct pciserial_board pci_boards[] = {
537 .uart_offset = 0x80,
538 .reg_shift = 2,
539 },
540 + [pbn_qrk] = {
541 + .flags = FL_BASE0,
542 + .num_ports = 1,
543 + .base_baud = 2764800,
544 + .reg_shift = 2,
545 + },
546 [pbn_omegapci] = {
547 .flags = FL_BASE0,
548 .num_ports = 8,
549 @@ -5150,6 +5165,12 @@ static struct pci_device_id serial_pci_tbl[] = {
550 pbn_byt },
551
552 /*
553 + * Intel Quark x1000
554 + */
555 + { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_QRK_UART,
556 + PCI_ANY_ID, PCI_ANY_ID, 0, 0,
557 + pbn_qrk },
558 + /*
559 * Cronyx Omega PCI
560 */
561 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_CRONYX_OMEGA,
562 diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
563 index 263612ce1f62..445d62a4316a 100644
564 --- a/drivers/usb/core/hub.c
565 +++ b/drivers/usb/core/hub.c
566 @@ -1948,8 +1948,10 @@ void usb_set_device_state(struct usb_device *udev,
567 || new_state == USB_STATE_SUSPENDED)
568 ; /* No change to wakeup settings */
569 else if (new_state == USB_STATE_CONFIGURED)
570 - wakeup = udev->actconfig->desc.bmAttributes
571 - & USB_CONFIG_ATT_WAKEUP;
572 + wakeup = (udev->quirks &
573 + USB_QUIRK_IGNORE_REMOTE_WAKEUP) ? 0 :
574 + udev->actconfig->desc.bmAttributes &
575 + USB_CONFIG_ATT_WAKEUP;
576 else
577 wakeup = 0;
578 }
579 diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
580 index 739ee8e8bdfd..5144d11d032c 100644
581 --- a/drivers/usb/core/quirks.c
582 +++ b/drivers/usb/core/quirks.c
583 @@ -160,6 +160,10 @@ static const struct usb_device_id usb_interface_quirk_list[] = {
584 { USB_VENDOR_AND_INTERFACE_INFO(0x046d, USB_CLASS_VIDEO, 1, 0),
585 .driver_info = USB_QUIRK_RESET_RESUME },
586
587 + /* ASUS Base Station(T100) */
588 + { USB_DEVICE(0x0b05, 0x17e0), .driver_info =
589 + USB_QUIRK_IGNORE_REMOTE_WAKEUP },
590 +
591 { } /* terminating entry must be last */
592 };
593
594 diff --git a/drivers/usb/musb/musb_dsps.c b/drivers/usb/musb/musb_dsps.c
595 index 7a109eae9b9a..85f5215871de 100644
596 --- a/drivers/usb/musb/musb_dsps.c
597 +++ b/drivers/usb/musb/musb_dsps.c
598 @@ -707,6 +707,7 @@ static int dsps_suspend(struct device *dev)
599 struct musb *musb = platform_get_drvdata(glue->musb);
600 void __iomem *mbase = musb->ctrl_base;
601
602 + del_timer_sync(&glue->timer);
603 glue->context.control = dsps_readl(mbase, wrp->control);
604 glue->context.epintr = dsps_readl(mbase, wrp->epintr_set);
605 glue->context.coreintr = dsps_readl(mbase, wrp->coreintr_set);
606 @@ -732,6 +733,7 @@ static int dsps_resume(struct device *dev)
607 dsps_writel(mbase, wrp->mode, glue->context.mode);
608 dsps_writel(mbase, wrp->tx_mode, glue->context.tx_mode);
609 dsps_writel(mbase, wrp->rx_mode, glue->context.rx_mode);
610 + setup_timer(&glue->timer, otg_timer, (unsigned long) musb);
611
612 return 0;
613 }
614 diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c
615 index 330df5ce435b..63b2af2a87c0 100644
616 --- a/drivers/usb/serial/cp210x.c
617 +++ b/drivers/usb/serial/cp210x.c
618 @@ -122,6 +122,7 @@ static const struct usb_device_id id_table[] = {
619 { USB_DEVICE(0x10C4, 0x8665) }, /* AC-Services OBD-IF */
620 { USB_DEVICE(0x10C4, 0x88A4) }, /* MMB Networks ZigBee USB Device */
621 { USB_DEVICE(0x10C4, 0x88A5) }, /* Planet Innovation Ingeni ZigBee USB Device */
622 + { USB_DEVICE(0x10C4, 0x8946) }, /* Ketra N1 Wireless Interface */
623 { USB_DEVICE(0x10C4, 0xEA60) }, /* Silicon Labs factory default */
624 { USB_DEVICE(0x10C4, 0xEA61) }, /* Silicon Labs factory default */
625 { USB_DEVICE(0x10C4, 0xEA70) }, /* Silicon Labs factory default */
626 @@ -155,6 +156,7 @@ static const struct usb_device_id id_table[] = {
627 { USB_DEVICE(0x1ADB, 0x0001) }, /* Schweitzer Engineering C662 Cable */
628 { USB_DEVICE(0x1B1C, 0x1C00) }, /* Corsair USB Dongle */
629 { USB_DEVICE(0x1BE3, 0x07A6) }, /* WAGO 750-923 USB Service Cable */
630 + { USB_DEVICE(0x1D6F, 0x0010) }, /* Seluxit ApS RF Dongle */
631 { USB_DEVICE(0x1E29, 0x0102) }, /* Festo CPX-USB */
632 { USB_DEVICE(0x1E29, 0x0501) }, /* Festo CMSP */
633 { USB_DEVICE(0x1FB9, 0x0100) }, /* Lake Shore Model 121 Current Source */
634 diff --git a/include/linux/if_vlan.h b/include/linux/if_vlan.h
635 index 72ba6f5cbc8d..2abe67bd4df8 100644
636 --- a/include/linux/if_vlan.h
637 +++ b/include/linux/if_vlan.h
638 @@ -186,7 +186,6 @@ vlan_dev_get_egress_qos_mask(struct net_device *dev, u32 skprio)
639 }
640
641 extern bool vlan_do_receive(struct sk_buff **skb);
642 -extern struct sk_buff *vlan_untag(struct sk_buff *skb);
643
644 extern int vlan_vid_add(struct net_device *dev, __be16 proto, u16 vid);
645 extern void vlan_vid_del(struct net_device *dev, __be16 proto, u16 vid);
646 @@ -228,11 +227,6 @@ static inline bool vlan_do_receive(struct sk_buff **skb)
647 return false;
648 }
649
650 -static inline struct sk_buff *vlan_untag(struct sk_buff *skb)
651 -{
652 - return skb;
653 -}
654 -
655 static inline int vlan_vid_add(struct net_device *dev, __be16 proto, u16 vid)
656 {
657 return 0;
658 diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
659 index 15ede6a823a6..ad8f85908a56 100644
660 --- a/include/linux/skbuff.h
661 +++ b/include/linux/skbuff.h
662 @@ -2458,6 +2458,7 @@ int skb_shift(struct sk_buff *tgt, struct sk_buff *skb, int shiftlen);
663 void skb_scrub_packet(struct sk_buff *skb, bool xnet);
664 unsigned int skb_gso_transport_seglen(const struct sk_buff *skb);
665 struct sk_buff *skb_segment(struct sk_buff *skb, netdev_features_t features);
666 +struct sk_buff *skb_vlan_untag(struct sk_buff *skb);
667
668 struct skb_checksum_ops {
669 __wsum (*update)(const void *mem, int len, __wsum wsum);
670 diff --git a/include/linux/usb/quirks.h b/include/linux/usb/quirks.h
671 index 52f944dfe2fd..49587dc22f5d 100644
672 --- a/include/linux/usb/quirks.h
673 +++ b/include/linux/usb/quirks.h
674 @@ -30,4 +30,7 @@
675 descriptor */
676 #define USB_QUIRK_DELAY_INIT 0x00000040
677
678 +/* device generates spurious wakeup, ignore remote wakeup capability */
679 +#define USB_QUIRK_IGNORE_REMOTE_WAKEUP 0x00000200
680 +
681 #endif /* __LINUX_USB_QUIRKS_H */
682 diff --git a/include/net/dst.h b/include/net/dst.h
683 index 77eb53fabfb0..909032821c37 100644
684 --- a/include/net/dst.h
685 +++ b/include/net/dst.h
686 @@ -466,6 +466,7 @@ void dst_init(void);
687 /* Flags for xfrm_lookup flags argument. */
688 enum {
689 XFRM_LOOKUP_ICMP = 1 << 0,
690 + XFRM_LOOKUP_QUEUE = 1 << 1,
691 };
692
693 struct flowi;
694 @@ -476,7 +477,16 @@ static inline struct dst_entry *xfrm_lookup(struct net *net,
695 int flags)
696 {
697 return dst_orig;
698 -}
699 +}
700 +
701 +static inline struct dst_entry *xfrm_lookup_route(struct net *net,
702 + struct dst_entry *dst_orig,
703 + const struct flowi *fl,
704 + struct sock *sk,
705 + int flags)
706 +{
707 + return dst_orig;
708 +}
709
710 static inline struct xfrm_state *dst_xfrm(const struct dst_entry *dst)
711 {
712 @@ -488,6 +498,10 @@ struct dst_entry *xfrm_lookup(struct net *net, struct dst_entry *dst_orig,
713 const struct flowi *fl, struct sock *sk,
714 int flags);
715
716 +struct dst_entry *xfrm_lookup_route(struct net *net, struct dst_entry *dst_orig,
717 + const struct flowi *fl, struct sock *sk,
718 + int flags);
719 +
720 /* skb attached with this dst needs transformation if dst->xfrm is valid */
721 static inline struct xfrm_state *dst_xfrm(const struct dst_entry *dst)
722 {
723 diff --git a/include/net/inet_connection_sock.h b/include/net/inet_connection_sock.h
724 index c55aeed41ace..cf9272807788 100644
725 --- a/include/net/inet_connection_sock.h
726 +++ b/include/net/inet_connection_sock.h
727 @@ -62,6 +62,7 @@ struct inet_connection_sock_af_ops {
728 void (*addr2sockaddr)(struct sock *sk, struct sockaddr *);
729 int (*bind_conflict)(const struct sock *sk,
730 const struct inet_bind_bucket *tb, bool relax);
731 + void (*mtu_reduced)(struct sock *sk);
732 };
733
734 /** inet_connection_sock - INET connection oriented sock
735 diff --git a/include/net/sctp/command.h b/include/net/sctp/command.h
736 index 4b7cd695e431..cfcbc3f627bd 100644
737 --- a/include/net/sctp/command.h
738 +++ b/include/net/sctp/command.h
739 @@ -115,7 +115,7 @@ typedef enum {
740 * analysis of the state functions, but in reality just taken from
741 * thin air in the hopes othat we don't trigger a kernel panic.
742 */
743 -#define SCTP_MAX_NUM_COMMANDS 14
744 +#define SCTP_MAX_NUM_COMMANDS 20
745
746 typedef union {
747 __s32 i32;
748 diff --git a/include/net/sock.h b/include/net/sock.h
749 index 2f7bc435c93d..f66b2b19a6e4 100644
750 --- a/include/net/sock.h
751 +++ b/include/net/sock.h
752 @@ -969,7 +969,6 @@ struct proto {
753 struct sk_buff *skb);
754
755 void (*release_cb)(struct sock *sk);
756 - void (*mtu_reduced)(struct sock *sk);
757
758 /* Keeping track of sk's, looking them up, and port selection methods. */
759 void (*hash)(struct sock *sk);
760 diff --git a/include/net/tcp.h b/include/net/tcp.h
761 index 743accec6c76..1f0d8479e15f 100644
762 --- a/include/net/tcp.h
763 +++ b/include/net/tcp.h
764 @@ -453,6 +453,7 @@ const u8 *tcp_parse_md5sig_option(const struct tcphdr *th);
765 */
766
767 void tcp_v4_send_check(struct sock *sk, struct sk_buff *skb);
768 +void tcp_v4_mtu_reduced(struct sock *sk);
769 int tcp_v4_conn_request(struct sock *sk, struct sk_buff *skb);
770 struct sock *tcp_create_openreq_child(struct sock *sk,
771 struct request_sock *req,
772 @@ -720,8 +721,10 @@ struct tcp_skb_cb {
773 #define TCPCB_SACKED_RETRANS 0x02 /* SKB retransmitted */
774 #define TCPCB_LOST 0x04 /* SKB is lost */
775 #define TCPCB_TAGBITS 0x07 /* All tag bits */
776 +#define TCPCB_REPAIRED 0x10 /* SKB repaired (no skb_mstamp) */
777 #define TCPCB_EVER_RETRANS 0x80 /* Ever retransmitted frame */
778 -#define TCPCB_RETRANS (TCPCB_SACKED_RETRANS|TCPCB_EVER_RETRANS)
779 +#define TCPCB_RETRANS (TCPCB_SACKED_RETRANS|TCPCB_EVER_RETRANS| \
780 + TCPCB_REPAIRED)
781
782 __u8 ip_dsfield; /* IPv4 tos or IPv6 dsfield */
783 /* 1 byte hole */
784 diff --git a/net/8021q/vlan_core.c b/net/8021q/vlan_core.c
785 index 7e57135c7cc4..5d56e05d83dd 100644
786 --- a/net/8021q/vlan_core.c
787 +++ b/net/8021q/vlan_core.c
788 @@ -106,59 +106,6 @@ u16 vlan_dev_vlan_id(const struct net_device *dev)
789 }
790 EXPORT_SYMBOL(vlan_dev_vlan_id);
791
792 -static struct sk_buff *vlan_reorder_header(struct sk_buff *skb)
793 -{
794 - if (skb_cow(skb, skb_headroom(skb)) < 0) {
795 - kfree_skb(skb);
796 - return NULL;
797 - }
798 -
799 - memmove(skb->data - ETH_HLEN, skb->data - VLAN_ETH_HLEN, 2 * ETH_ALEN);
800 - skb->mac_header += VLAN_HLEN;
801 - return skb;
802 -}
803 -
804 -struct sk_buff *vlan_untag(struct sk_buff *skb)
805 -{
806 - struct vlan_hdr *vhdr;
807 - u16 vlan_tci;
808 -
809 - if (unlikely(vlan_tx_tag_present(skb))) {
810 - /* vlan_tci is already set-up so leave this for another time */
811 - return skb;
812 - }
813 -
814 - skb = skb_share_check(skb, GFP_ATOMIC);
815 - if (unlikely(!skb))
816 - goto err_free;
817 -
818 - if (unlikely(!pskb_may_pull(skb, VLAN_HLEN)))
819 - goto err_free;
820 -
821 - vhdr = (struct vlan_hdr *) skb->data;
822 - vlan_tci = ntohs(vhdr->h_vlan_TCI);
823 - __vlan_hwaccel_put_tag(skb, skb->protocol, vlan_tci);
824 -
825 - skb_pull_rcsum(skb, VLAN_HLEN);
826 - vlan_set_encap_proto(skb, vhdr);
827 -
828 - skb = vlan_reorder_header(skb);
829 - if (unlikely(!skb))
830 - goto err_free;
831 -
832 - skb_reset_network_header(skb);
833 - skb_reset_transport_header(skb);
834 - skb_reset_mac_len(skb);
835 -
836 - return skb;
837 -
838 -err_free:
839 - kfree_skb(skb);
840 - return NULL;
841 -}
842 -EXPORT_SYMBOL(vlan_untag);
843 -
844 -
845 /*
846 * vlan info and vid list
847 */
848 diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h
849 index f2d254b69353..4acfc3eef56a 100644
850 --- a/net/bridge/br_private.h
851 +++ b/net/bridge/br_private.h
852 @@ -302,6 +302,9 @@ struct br_input_skb_cb {
853 int igmp;
854 int mrouters_only;
855 #endif
856 +#ifdef CONFIG_BRIDGE_VLAN_FILTERING
857 + bool vlan_filtered;
858 +#endif
859 };
860
861 #define BR_INPUT_SKB_CB(__skb) ((struct br_input_skb_cb *)(__skb)->cb)
862 diff --git a/net/bridge/br_vlan.c b/net/bridge/br_vlan.c
863 index b1c637208497..e1bd2539f9dc 100644
864 --- a/net/bridge/br_vlan.c
865 +++ b/net/bridge/br_vlan.c
866 @@ -125,7 +125,8 @@ struct sk_buff *br_handle_vlan(struct net_bridge *br,
867 {
868 u16 vid;
869
870 - if (!br->vlan_enabled)
871 + /* If this packet was not filtered at input, let it pass */
872 + if (!BR_INPUT_SKB_CB(skb)->vlan_filtered)
873 goto out;
874
875 /* Vlan filter table must be configured at this point. The
876 @@ -163,8 +164,10 @@ bool br_allowed_ingress(struct net_bridge *br, struct net_port_vlans *v,
877 /* If VLAN filtering is disabled on the bridge, all packets are
878 * permitted.
879 */
880 - if (!br->vlan_enabled)
881 + if (!br->vlan_enabled) {
882 + BR_INPUT_SKB_CB(skb)->vlan_filtered = false;
883 return true;
884 + }
885
886 /* If there are no vlan in the permitted list, all packets are
887 * rejected.
888 @@ -172,6 +175,8 @@ bool br_allowed_ingress(struct net_bridge *br, struct net_port_vlans *v,
889 if (!v)
890 goto drop;
891
892 + BR_INPUT_SKB_CB(skb)->vlan_filtered = true;
893 +
894 /* If vlan tx offload is disabled on bridge device and frame was
895 * sent from vlan device on the bridge device, it does not have
896 * HW accelerated vlan tag.
897 @@ -179,7 +184,7 @@ bool br_allowed_ingress(struct net_bridge *br, struct net_port_vlans *v,
898 if (unlikely(!vlan_tx_tag_present(skb) &&
899 (skb->protocol == htons(ETH_P_8021Q) ||
900 skb->protocol == htons(ETH_P_8021AD)))) {
901 - skb = vlan_untag(skb);
902 + skb = skb_vlan_untag(skb);
903 if (unlikely(!skb))
904 return false;
905 }
906 @@ -228,7 +233,8 @@ bool br_allowed_egress(struct net_bridge *br,
907 {
908 u16 vid;
909
910 - if (!br->vlan_enabled)
911 + /* If this packet was not filtered at input, let it pass */
912 + if (!BR_INPUT_SKB_CB(skb)->vlan_filtered)
913 return true;
914
915 if (!v)
916 @@ -247,6 +253,7 @@ bool br_should_learn(struct net_bridge_port *p, struct sk_buff *skb, u16 *vid)
917 struct net_bridge *br = p->br;
918 struct net_port_vlans *v;
919
920 + /* If filtering was disabled at input, let it pass. */
921 if (!br->vlan_enabled)
922 return true;
923
924 diff --git a/net/core/dev.c b/net/core/dev.c
925 index 37bddf729e77..3ed11a555834 100644
926 --- a/net/core/dev.c
927 +++ b/net/core/dev.c
928 @@ -3554,7 +3554,7 @@ another_round:
929
930 if (skb->protocol == cpu_to_be16(ETH_P_8021Q) ||
931 skb->protocol == cpu_to_be16(ETH_P_8021AD)) {
932 - skb = vlan_untag(skb);
933 + skb = skb_vlan_untag(skb);
934 if (unlikely(!skb))
935 goto unlock;
936 }
937 diff --git a/net/core/netpoll.c b/net/core/netpoll.c
938 index df9e6b1a9759..723fa7da8025 100644
939 --- a/net/core/netpoll.c
940 +++ b/net/core/netpoll.c
941 @@ -788,7 +788,7 @@ int __netpoll_rx(struct sk_buff *skb, struct netpoll_info *npinfo)
942 }
943
944 if (skb->protocol == cpu_to_be16(ETH_P_8021Q)) {
945 - skb = vlan_untag(skb);
946 + skb = skb_vlan_untag(skb);
947 if (unlikely(!skb))
948 goto out;
949 }
950 diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
951 index aef1500ebc05..b0db904f083d 100644
952 --- a/net/core/rtnetlink.c
953 +++ b/net/core/rtnetlink.c
954 @@ -799,7 +799,8 @@ static inline int rtnl_vfinfo_size(const struct net_device *dev,
955 (nla_total_size(sizeof(struct ifla_vf_mac)) +
956 nla_total_size(sizeof(struct ifla_vf_vlan)) +
957 nla_total_size(sizeof(struct ifla_vf_tx_rate)) +
958 - nla_total_size(sizeof(struct ifla_vf_spoofchk)));
959 + nla_total_size(sizeof(struct ifla_vf_spoofchk)) +
960 + nla_total_size(sizeof(struct ifla_vf_link_state)));
961 return size;
962 } else
963 return 0;
964 diff --git a/net/core/skbuff.c b/net/core/skbuff.c
965 index 8f6391bbf509..baf6fc457df9 100644
966 --- a/net/core/skbuff.c
967 +++ b/net/core/skbuff.c
968 @@ -62,6 +62,7 @@
969 #include <linux/scatterlist.h>
970 #include <linux/errqueue.h>
971 #include <linux/prefetch.h>
972 +#include <linux/if_vlan.h>
973
974 #include <net/protocol.h>
975 #include <net/dst.h>
976 @@ -3139,6 +3140,9 @@ int skb_gro_receive(struct sk_buff **head, struct sk_buff *skb)
977 NAPI_GRO_CB(skb)->free = NAPI_GRO_FREE_STOLEN_HEAD;
978 goto done;
979 }
980 + /* switch back to head shinfo */
981 + pinfo = skb_shinfo(p);
982 +
983 if (pinfo->frag_list)
984 goto merge;
985 if (skb_gro_len(p) != pinfo->gso_size)
986 @@ -3963,3 +3967,55 @@ unsigned int skb_gso_transport_seglen(const struct sk_buff *skb)
987 return shinfo->gso_size;
988 }
989 EXPORT_SYMBOL_GPL(skb_gso_transport_seglen);
990 +
991 +static struct sk_buff *skb_reorder_vlan_header(struct sk_buff *skb)
992 +{
993 + if (skb_cow(skb, skb_headroom(skb)) < 0) {
994 + kfree_skb(skb);
995 + return NULL;
996 + }
997 +
998 + memmove(skb->data - ETH_HLEN, skb->data - VLAN_ETH_HLEN, 2 * ETH_ALEN);
999 + skb->mac_header += VLAN_HLEN;
1000 + return skb;
1001 +}
1002 +
1003 +struct sk_buff *skb_vlan_untag(struct sk_buff *skb)
1004 +{
1005 + struct vlan_hdr *vhdr;
1006 + u16 vlan_tci;
1007 +
1008 + if (unlikely(vlan_tx_tag_present(skb))) {
1009 + /* vlan_tci is already set-up so leave this for another time */
1010 + return skb;
1011 + }
1012 +
1013 + skb = skb_share_check(skb, GFP_ATOMIC);
1014 + if (unlikely(!skb))
1015 + goto err_free;
1016 +
1017 + if (unlikely(!pskb_may_pull(skb, VLAN_HLEN)))
1018 + goto err_free;
1019 +
1020 + vhdr = (struct vlan_hdr *)skb->data;
1021 + vlan_tci = ntohs(vhdr->h_vlan_TCI);
1022 + __vlan_hwaccel_put_tag(skb, skb->protocol, vlan_tci);
1023 +
1024 + skb_pull_rcsum(skb, VLAN_HLEN);
1025 + vlan_set_encap_proto(skb, vhdr);
1026 +
1027 + skb = skb_reorder_vlan_header(skb);
1028 + if (unlikely(!skb))
1029 + goto err_free;
1030 +
1031 + skb_reset_network_header(skb);
1032 + skb_reset_transport_header(skb);
1033 + skb_reset_mac_len(skb);
1034 +
1035 + return skb;
1036 +
1037 +err_free:
1038 + kfree_skb(skb);
1039 + return NULL;
1040 +}
1041 +EXPORT_SYMBOL(skb_vlan_untag);
1042 diff --git a/net/ipv4/route.c b/net/ipv4/route.c
1043 index ca5a01ed8ed6..487bb6252520 100644
1044 --- a/net/ipv4/route.c
1045 +++ b/net/ipv4/route.c
1046 @@ -2268,9 +2268,9 @@ struct rtable *ip_route_output_flow(struct net *net, struct flowi4 *flp4,
1047 return rt;
1048
1049 if (flp4->flowi4_proto)
1050 - rt = (struct rtable *) xfrm_lookup(net, &rt->dst,
1051 - flowi4_to_flowi(flp4),
1052 - sk, 0);
1053 + rt = (struct rtable *)xfrm_lookup_route(net, &rt->dst,
1054 + flowi4_to_flowi(flp4),
1055 + sk, 0);
1056
1057 return rt;
1058 }
1059 diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
1060 index b48fba0aaa92..f7d71ec72a47 100644
1061 --- a/net/ipv4/tcp.c
1062 +++ b/net/ipv4/tcp.c
1063 @@ -1175,13 +1175,6 @@ new_segment:
1064 goto wait_for_memory;
1065
1066 /*
1067 - * All packets are restored as if they have
1068 - * already been sent.
1069 - */
1070 - if (tp->repair)
1071 - TCP_SKB_CB(skb)->when = tcp_time_stamp;
1072 -
1073 - /*
1074 * Check whether we can use HW checksum.
1075 */
1076 if (sk->sk_route_caps & NETIF_F_ALL_CSUM)
1077 @@ -1190,6 +1183,13 @@ new_segment:
1078 skb_entail(sk, skb);
1079 copy = size_goal;
1080 max = size_goal;
1081 +
1082 + /* All packets are restored as if they have
1083 + * already been sent. skb_mstamp isn't set to
1084 + * avoid wrong rtt estimation.
1085 + */
1086 + if (tp->repair)
1087 + TCP_SKB_CB(skb)->sacked |= TCPCB_REPAIRED;
1088 }
1089
1090 /* Try to append data to the end of skb. */
1091 diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
1092 index 3898694d0300..22917918fa80 100644
1093 --- a/net/ipv4/tcp_input.c
1094 +++ b/net/ipv4/tcp_input.c
1095 @@ -2678,7 +2678,6 @@ static void tcp_enter_recovery(struct sock *sk, bool ece_ack)
1096 */
1097 static void tcp_process_loss(struct sock *sk, int flag, bool is_dupack)
1098 {
1099 - struct inet_connection_sock *icsk = inet_csk(sk);
1100 struct tcp_sock *tp = tcp_sk(sk);
1101 bool recovered = !before(tp->snd_una, tp->high_seq);
1102
1103 @@ -2704,12 +2703,9 @@ static void tcp_process_loss(struct sock *sk, int flag, bool is_dupack)
1104
1105 if (recovered) {
1106 /* F-RTO RFC5682 sec 3.1 step 2.a and 1st part of step 3.a */
1107 - icsk->icsk_retransmits = 0;
1108 tcp_try_undo_recovery(sk);
1109 return;
1110 }
1111 - if (flag & FLAG_DATA_ACKED)
1112 - icsk->icsk_retransmits = 0;
1113 if (tcp_is_reno(tp)) {
1114 /* A Reno DUPACK means new data in F-RTO step 2.b above are
1115 * delivered. Lower inflight to clock out (re)tranmissions.
1116 @@ -3398,8 +3394,10 @@ static int tcp_ack(struct sock *sk, const struct sk_buff *skb, int flag)
1117 icsk->icsk_pending == ICSK_TIME_LOSS_PROBE)
1118 tcp_rearm_rto(sk);
1119
1120 - if (after(ack, prior_snd_una))
1121 + if (after(ack, prior_snd_una)) {
1122 flag |= FLAG_SND_UNA_ADVANCED;
1123 + icsk->icsk_retransmits = 0;
1124 + }
1125
1126 prior_fackets = tp->fackets_out;
1127 prior_in_flight = tcp_packets_in_flight(tp);
1128 diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
1129 index 1e4eac779f51..a782d5be132e 100644
1130 --- a/net/ipv4/tcp_ipv4.c
1131 +++ b/net/ipv4/tcp_ipv4.c
1132 @@ -269,7 +269,7 @@ EXPORT_SYMBOL(tcp_v4_connect);
1133 * It can be called through tcp_release_cb() if socket was owned by user
1134 * at the time tcp_v4_err() was called to handle ICMP message.
1135 */
1136 -static void tcp_v4_mtu_reduced(struct sock *sk)
1137 +void tcp_v4_mtu_reduced(struct sock *sk)
1138 {
1139 struct dst_entry *dst;
1140 struct inet_sock *inet = inet_sk(sk);
1141 @@ -300,6 +300,7 @@ static void tcp_v4_mtu_reduced(struct sock *sk)
1142 tcp_simple_retransmit(sk);
1143 } /* else let the usual retransmit timer handle it */
1144 }
1145 +EXPORT_SYMBOL(tcp_v4_mtu_reduced);
1146
1147 static void do_redirect(struct sk_buff *skb, struct sock *sk)
1148 {
1149 @@ -2117,6 +2118,7 @@ const struct inet_connection_sock_af_ops ipv4_specific = {
1150 .compat_setsockopt = compat_ip_setsockopt,
1151 .compat_getsockopt = compat_ip_getsockopt,
1152 #endif
1153 + .mtu_reduced = tcp_v4_mtu_reduced,
1154 };
1155 EXPORT_SYMBOL(ipv4_specific);
1156
1157 @@ -2736,7 +2738,6 @@ struct proto tcp_prot = {
1158 .sendpage = tcp_sendpage,
1159 .backlog_rcv = tcp_v4_do_rcv,
1160 .release_cb = tcp_release_cb,
1161 - .mtu_reduced = tcp_v4_mtu_reduced,
1162 .hash = inet_hash,
1163 .unhash = inet_unhash,
1164 .get_port = inet_csk_get_port,
1165 diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
1166 index b3d1addd816b..91b98e5a17aa 100644
1167 --- a/net/ipv4/tcp_output.c
1168 +++ b/net/ipv4/tcp_output.c
1169 @@ -787,7 +787,7 @@ void tcp_release_cb(struct sock *sk)
1170 __sock_put(sk);
1171 }
1172 if (flags & (1UL << TCP_MTU_REDUCED_DEFERRED)) {
1173 - sk->sk_prot->mtu_reduced(sk);
1174 + inet_csk(sk)->icsk_af_ops->mtu_reduced(sk);
1175 __sock_put(sk);
1176 }
1177 }
1178 @@ -1876,8 +1876,11 @@ static bool tcp_write_xmit(struct sock *sk, unsigned int mss_now, int nonagle,
1179 tso_segs = tcp_init_tso_segs(sk, skb, mss_now);
1180 BUG_ON(!tso_segs);
1181
1182 - if (unlikely(tp->repair) && tp->repair_queue == TCP_SEND_QUEUE)
1183 + if (unlikely(tp->repair) && tp->repair_queue == TCP_SEND_QUEUE) {
1184 + /* "when" is used as a start point for the retransmit timer */
1185 + TCP_SKB_CB(skb)->when = tcp_time_stamp;
1186 goto repair; /* Skip network transmission */
1187 + }
1188
1189 cwnd_quota = tcp_cwnd_test(tp, skb);
1190 if (!cwnd_quota) {
1191 @@ -2066,9 +2069,7 @@ void tcp_send_loss_probe(struct sock *sk)
1192 if (WARN_ON(!skb || !tcp_skb_pcount(skb)))
1193 goto rearm_timer;
1194
1195 - /* Probe with zero data doesn't trigger fast recovery. */
1196 - if (skb->len > 0)
1197 - err = __tcp_retransmit_skb(sk, skb);
1198 + err = __tcp_retransmit_skb(sk, skb);
1199
1200 /* Record snd_nxt for loss detection. */
1201 if (likely(!err))
1202 diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
1203 index 6c7fa0853fc7..3f0ec063d7f8 100644
1204 --- a/net/ipv6/addrconf.c
1205 +++ b/net/ipv6/addrconf.c
1206 @@ -1684,14 +1684,12 @@ void addrconf_dad_failure(struct inet6_ifaddr *ifp)
1207 addrconf_mod_dad_work(ifp, 0);
1208 }
1209
1210 -/* Join to solicited addr multicast group. */
1211 -
1212 +/* Join to solicited addr multicast group.
1213 + * caller must hold RTNL */
1214 void addrconf_join_solict(struct net_device *dev, const struct in6_addr *addr)
1215 {
1216 struct in6_addr maddr;
1217
1218 - ASSERT_RTNL();
1219 -
1220 if (dev->flags&(IFF_LOOPBACK|IFF_NOARP))
1221 return;
1222
1223 @@ -1699,12 +1697,11 @@ void addrconf_join_solict(struct net_device *dev, const struct in6_addr *addr)
1224 ipv6_dev_mc_inc(dev, &maddr);
1225 }
1226
1227 +/* caller must hold RTNL */
1228 void addrconf_leave_solict(struct inet6_dev *idev, const struct in6_addr *addr)
1229 {
1230 struct in6_addr maddr;
1231
1232 - ASSERT_RTNL();
1233 -
1234 if (idev->dev->flags&(IFF_LOOPBACK|IFF_NOARP))
1235 return;
1236
1237 @@ -1712,12 +1709,11 @@ void addrconf_leave_solict(struct inet6_dev *idev, const struct in6_addr *addr)
1238 __ipv6_dev_mc_dec(idev, &maddr);
1239 }
1240
1241 +/* caller must hold RTNL */
1242 static void addrconf_join_anycast(struct inet6_ifaddr *ifp)
1243 {
1244 struct in6_addr addr;
1245
1246 - ASSERT_RTNL();
1247 -
1248 if (ifp->prefix_len >= 127) /* RFC 6164 */
1249 return;
1250 ipv6_addr_prefix(&addr, &ifp->addr, ifp->prefix_len);
1251 @@ -1726,12 +1722,11 @@ static void addrconf_join_anycast(struct inet6_ifaddr *ifp)
1252 ipv6_dev_ac_inc(ifp->idev->dev, &addr);
1253 }
1254
1255 +/* caller must hold RTNL */
1256 static void addrconf_leave_anycast(struct inet6_ifaddr *ifp)
1257 {
1258 struct in6_addr addr;
1259
1260 - ASSERT_RTNL();
1261 -
1262 if (ifp->prefix_len >= 127) /* RFC 6164 */
1263 return;
1264 ipv6_addr_prefix(&addr, &ifp->addr, ifp->prefix_len);
1265 diff --git a/net/ipv6/anycast.c b/net/ipv6/anycast.c
1266 index 210183244689..ff2de7d9d8e6 100644
1267 --- a/net/ipv6/anycast.c
1268 +++ b/net/ipv6/anycast.c
1269 @@ -77,6 +77,7 @@ int ipv6_sock_ac_join(struct sock *sk, int ifindex, const struct in6_addr *addr)
1270 pac->acl_next = NULL;
1271 pac->acl_addr = *addr;
1272
1273 + rtnl_lock();
1274 rcu_read_lock();
1275 if (ifindex == 0) {
1276 struct rt6_info *rt;
1277 @@ -137,6 +138,7 @@ int ipv6_sock_ac_join(struct sock *sk, int ifindex, const struct in6_addr *addr)
1278
1279 error:
1280 rcu_read_unlock();
1281 + rtnl_unlock();
1282 if (pac)
1283 sock_kfree_s(sk, pac, sizeof(*pac));
1284 return err;
1285 @@ -171,11 +173,13 @@ int ipv6_sock_ac_drop(struct sock *sk, int ifindex, const struct in6_addr *addr)
1286
1287 spin_unlock_bh(&ipv6_sk_ac_lock);
1288
1289 + rtnl_lock();
1290 rcu_read_lock();
1291 dev = dev_get_by_index_rcu(net, pac->acl_ifindex);
1292 if (dev)
1293 ipv6_dev_ac_dec(dev, &pac->acl_addr);
1294 rcu_read_unlock();
1295 + rtnl_unlock();
1296
1297 sock_kfree_s(sk, pac, sizeof(*pac));
1298 return 0;
1299 @@ -198,6 +202,7 @@ void ipv6_sock_ac_close(struct sock *sk)
1300 spin_unlock_bh(&ipv6_sk_ac_lock);
1301
1302 prev_index = 0;
1303 + rtnl_lock();
1304 rcu_read_lock();
1305 while (pac) {
1306 struct ipv6_ac_socklist *next = pac->acl_next;
1307 @@ -212,6 +217,7 @@ void ipv6_sock_ac_close(struct sock *sk)
1308 pac = next;
1309 }
1310 rcu_read_unlock();
1311 + rtnl_unlock();
1312 }
1313
1314 static void aca_put(struct ifacaddr6 *ac)
1315 @@ -233,6 +239,8 @@ int ipv6_dev_ac_inc(struct net_device *dev, const struct in6_addr *addr)
1316 struct rt6_info *rt;
1317 int err;
1318
1319 + ASSERT_RTNL();
1320 +
1321 idev = in6_dev_get(dev);
1322
1323 if (idev == NULL)
1324 @@ -302,6 +310,8 @@ int __ipv6_dev_ac_dec(struct inet6_dev *idev, const struct in6_addr *addr)
1325 {
1326 struct ifacaddr6 *aca, *prev_aca;
1327
1328 + ASSERT_RTNL();
1329 +
1330 write_lock_bh(&idev->lock);
1331 prev_aca = NULL;
1332 for (aca = idev->ac_list; aca; aca = aca->aca_next) {
1333 diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c
1334 index 2465d18e8a26..cb57aa862177 100644
1335 --- a/net/ipv6/ip6_gre.c
1336 +++ b/net/ipv6/ip6_gre.c
1337 @@ -787,7 +787,7 @@ static inline int ip6gre_xmit_ipv4(struct sk_buff *skb, struct net_device *dev)
1338 encap_limit = t->parms.encap_limit;
1339
1340 memcpy(&fl6, &t->fl.u.ip6, sizeof(fl6));
1341 - fl6.flowi6_proto = IPPROTO_IPIP;
1342 + fl6.flowi6_proto = IPPROTO_GRE;
1343
1344 dsfield = ipv4_get_dsfield(iph);
1345
1346 @@ -837,7 +837,7 @@ static inline int ip6gre_xmit_ipv6(struct sk_buff *skb, struct net_device *dev)
1347 encap_limit = t->parms.encap_limit;
1348
1349 memcpy(&fl6, &t->fl.u.ip6, sizeof(fl6));
1350 - fl6.flowi6_proto = IPPROTO_IPV6;
1351 + fl6.flowi6_proto = IPPROTO_GRE;
1352
1353 dsfield = ipv6_get_dsfield(ipv6h);
1354 if (t->parms.flags & IP6_TNL_F_USE_ORIG_TCLASS)
1355 diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
1356 index 073e5a6fc631..12f7ef0f243a 100644
1357 --- a/net/ipv6/ip6_output.c
1358 +++ b/net/ipv6/ip6_output.c
1359 @@ -1008,7 +1008,7 @@ struct dst_entry *ip6_dst_lookup_flow(struct sock *sk, struct flowi6 *fl6,
1360 if (final_dst)
1361 fl6->daddr = *final_dst;
1362
1363 - return xfrm_lookup(sock_net(sk), dst, flowi6_to_flowi(fl6), sk, 0);
1364 + return xfrm_lookup_route(sock_net(sk), dst, flowi6_to_flowi(fl6), sk, 0);
1365 }
1366 EXPORT_SYMBOL_GPL(ip6_dst_lookup_flow);
1367
1368 @@ -1040,7 +1040,7 @@ struct dst_entry *ip6_sk_dst_lookup_flow(struct sock *sk, struct flowi6 *fl6,
1369 if (final_dst)
1370 fl6->daddr = *final_dst;
1371
1372 - return xfrm_lookup(sock_net(sk), dst, flowi6_to_flowi(fl6), sk, 0);
1373 + return xfrm_lookup_route(sock_net(sk), dst, flowi6_to_flowi(fl6), sk, 0);
1374 }
1375 EXPORT_SYMBOL_GPL(ip6_sk_dst_lookup_flow);
1376
1377 diff --git a/net/ipv6/mcast.c b/net/ipv6/mcast.c
1378 index 08b367c6b9cf..761e4586ab5f 100644
1379 --- a/net/ipv6/mcast.c
1380 +++ b/net/ipv6/mcast.c
1381 @@ -172,6 +172,7 @@ int ipv6_sock_mc_join(struct sock *sk, int ifindex, const struct in6_addr *addr)
1382 mc_lst->next = NULL;
1383 mc_lst->addr = *addr;
1384
1385 + rtnl_lock();
1386 rcu_read_lock();
1387 if (ifindex == 0) {
1388 struct rt6_info *rt;
1389 @@ -185,6 +186,7 @@ int ipv6_sock_mc_join(struct sock *sk, int ifindex, const struct in6_addr *addr)
1390
1391 if (dev == NULL) {
1392 rcu_read_unlock();
1393 + rtnl_unlock();
1394 sock_kfree_s(sk, mc_lst, sizeof(*mc_lst));
1395 return -ENODEV;
1396 }
1397 @@ -202,6 +204,7 @@ int ipv6_sock_mc_join(struct sock *sk, int ifindex, const struct in6_addr *addr)
1398
1399 if (err) {
1400 rcu_read_unlock();
1401 + rtnl_unlock();
1402 sock_kfree_s(sk, mc_lst, sizeof(*mc_lst));
1403 return err;
1404 }
1405 @@ -212,6 +215,7 @@ int ipv6_sock_mc_join(struct sock *sk, int ifindex, const struct in6_addr *addr)
1406 spin_unlock(&ipv6_sk_mc_lock);
1407
1408 rcu_read_unlock();
1409 + rtnl_unlock();
1410
1411 return 0;
1412 }
1413 @@ -229,6 +233,7 @@ int ipv6_sock_mc_drop(struct sock *sk, int ifindex, const struct in6_addr *addr)
1414 if (!ipv6_addr_is_multicast(addr))
1415 return -EINVAL;
1416
1417 + rtnl_lock();
1418 spin_lock(&ipv6_sk_mc_lock);
1419 for (lnk = &np->ipv6_mc_list;
1420 (mc_lst = rcu_dereference_protected(*lnk,
1421 @@ -252,12 +257,15 @@ int ipv6_sock_mc_drop(struct sock *sk, int ifindex, const struct in6_addr *addr)
1422 } else
1423 (void) ip6_mc_leave_src(sk, mc_lst, NULL);
1424 rcu_read_unlock();
1425 + rtnl_unlock();
1426 +
1427 atomic_sub(sizeof(*mc_lst), &sk->sk_omem_alloc);
1428 kfree_rcu(mc_lst, rcu);
1429 return 0;
1430 }
1431 }
1432 spin_unlock(&ipv6_sk_mc_lock);
1433 + rtnl_unlock();
1434
1435 return -EADDRNOTAVAIL;
1436 }
1437 @@ -302,6 +310,7 @@ void ipv6_sock_mc_close(struct sock *sk)
1438 if (!rcu_access_pointer(np->ipv6_mc_list))
1439 return;
1440
1441 + rtnl_lock();
1442 spin_lock(&ipv6_sk_mc_lock);
1443 while ((mc_lst = rcu_dereference_protected(np->ipv6_mc_list,
1444 lockdep_is_held(&ipv6_sk_mc_lock))) != NULL) {
1445 @@ -328,6 +337,7 @@ void ipv6_sock_mc_close(struct sock *sk)
1446 spin_lock(&ipv6_sk_mc_lock);
1447 }
1448 spin_unlock(&ipv6_sk_mc_lock);
1449 + rtnl_unlock();
1450 }
1451
1452 int ip6_mc_source(int add, int omode, struct sock *sk,
1453 @@ -845,6 +855,8 @@ int ipv6_dev_mc_inc(struct net_device *dev, const struct in6_addr *addr)
1454 struct ifmcaddr6 *mc;
1455 struct inet6_dev *idev;
1456
1457 + ASSERT_RTNL();
1458 +
1459 /* we need to take a reference on idev */
1460 idev = in6_dev_get(dev);
1461
1462 @@ -916,6 +928,8 @@ int __ipv6_dev_mc_dec(struct inet6_dev *idev, const struct in6_addr *addr)
1463 {
1464 struct ifmcaddr6 *ma, **map;
1465
1466 + ASSERT_RTNL();
1467 +
1468 write_lock_bh(&idev->lock);
1469 for (map = &idev->mc_list; (ma=*map) != NULL; map = &ma->next) {
1470 if (ipv6_addr_equal(&ma->mca_addr, addr)) {
1471 diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c
1472 index fe548ba72687..b12b11b123ff 100644
1473 --- a/net/ipv6/sit.c
1474 +++ b/net/ipv6/sit.c
1475 @@ -101,19 +101,19 @@ static struct ip_tunnel *ipip6_tunnel_lookup(struct net *net,
1476 for_each_ip_tunnel_rcu(t, sitn->tunnels_r_l[h0 ^ h1]) {
1477 if (local == t->parms.iph.saddr &&
1478 remote == t->parms.iph.daddr &&
1479 - (!dev || !t->parms.link || dev->iflink == t->parms.link) &&
1480 + (!dev || !t->parms.link || dev->ifindex == t->parms.link) &&
1481 (t->dev->flags & IFF_UP))
1482 return t;
1483 }
1484 for_each_ip_tunnel_rcu(t, sitn->tunnels_r[h0]) {
1485 if (remote == t->parms.iph.daddr &&
1486 - (!dev || !t->parms.link || dev->iflink == t->parms.link) &&
1487 + (!dev || !t->parms.link || dev->ifindex == t->parms.link) &&
1488 (t->dev->flags & IFF_UP))
1489 return t;
1490 }
1491 for_each_ip_tunnel_rcu(t, sitn->tunnels_l[h1]) {
1492 if (local == t->parms.iph.saddr &&
1493 - (!dev || !t->parms.link || dev->iflink == t->parms.link) &&
1494 + (!dev || !t->parms.link || dev->ifindex == t->parms.link) &&
1495 (t->dev->flags & IFF_UP))
1496 return t;
1497 }
1498 diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c
1499 index 889079b2ea85..a4f890dd223a 100644
1500 --- a/net/ipv6/tcp_ipv6.c
1501 +++ b/net/ipv6/tcp_ipv6.c
1502 @@ -1668,6 +1668,7 @@ static const struct inet_connection_sock_af_ops ipv6_specific = {
1503 .compat_setsockopt = compat_ipv6_setsockopt,
1504 .compat_getsockopt = compat_ipv6_getsockopt,
1505 #endif
1506 + .mtu_reduced = tcp_v6_mtu_reduced,
1507 };
1508
1509 #ifdef CONFIG_TCP_MD5SIG
1510 @@ -1699,6 +1700,7 @@ static const struct inet_connection_sock_af_ops ipv6_mapped = {
1511 .compat_setsockopt = compat_ipv6_setsockopt,
1512 .compat_getsockopt = compat_ipv6_getsockopt,
1513 #endif
1514 + .mtu_reduced = tcp_v4_mtu_reduced,
1515 };
1516
1517 #ifdef CONFIG_TCP_MD5SIG
1518 @@ -1935,7 +1937,6 @@ struct proto tcpv6_prot = {
1519 .sendpage = tcp_sendpage,
1520 .backlog_rcv = tcp_v6_do_rcv,
1521 .release_cb = tcp_release_cb,
1522 - .mtu_reduced = tcp_v6_mtu_reduced,
1523 .hash = tcp_v6_hash,
1524 .unhash = inet_unhash,
1525 .get_port = inet_csk_get_port,
1526 diff --git a/net/l2tp/l2tp_ppp.c b/net/l2tp/l2tp_ppp.c
1527 index 1e05bbde47ba..da8d067d6107 100644
1528 --- a/net/l2tp/l2tp_ppp.c
1529 +++ b/net/l2tp/l2tp_ppp.c
1530 @@ -758,7 +758,8 @@ static int pppol2tp_connect(struct socket *sock, struct sockaddr *uservaddr,
1531 /* If PMTU discovery was enabled, use the MTU that was discovered */
1532 dst = sk_dst_get(tunnel->sock);
1533 if (dst != NULL) {
1534 - u32 pmtu = dst_mtu(__sk_dst_get(tunnel->sock));
1535 + u32 pmtu = dst_mtu(dst);
1536 +
1537 if (pmtu != 0)
1538 session->mtu = session->mru = pmtu -
1539 PPPOL2TP_HEADER_OVERHEAD;
1540 diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
1541 index 0dfe894afd48..c375d731587f 100644
1542 --- a/net/netlink/af_netlink.c
1543 +++ b/net/netlink/af_netlink.c
1544 @@ -205,7 +205,7 @@ static int __netlink_deliver_tap_skb(struct sk_buff *skb,
1545 nskb->protocol = htons((u16) sk->sk_protocol);
1546 nskb->pkt_type = netlink_is_kernel(sk) ?
1547 PACKET_KERNEL : PACKET_USER;
1548 -
1549 + skb_reset_network_header(nskb);
1550 ret = dev_queue_xmit(nskb);
1551 if (unlikely(ret > 0))
1552 ret = net_xmit_errno(ret);
1553 diff --git a/net/openvswitch/actions.c b/net/openvswitch/actions.c
1554 index 2c77e7b1a913..600c7646b3d3 100644
1555 --- a/net/openvswitch/actions.c
1556 +++ b/net/openvswitch/actions.c
1557 @@ -42,6 +42,9 @@ static int do_execute_actions(struct datapath *dp, struct sk_buff *skb,
1558
1559 static int make_writable(struct sk_buff *skb, int write_len)
1560 {
1561 + if (!pskb_may_pull(skb, write_len))
1562 + return -ENOMEM;
1563 +
1564 if (!skb_cloned(skb) || skb_clone_writable(skb, write_len))
1565 return 0;
1566
1567 @@ -70,6 +73,8 @@ static int __pop_vlan_tci(struct sk_buff *skb, __be16 *current_tci)
1568
1569 vlan_set_encap_proto(skb, vhdr);
1570 skb->mac_header += VLAN_HLEN;
1571 + if (skb_network_offset(skb) < ETH_HLEN)
1572 + skb_set_network_header(skb, ETH_HLEN);
1573 skb_reset_mac_len(skb);
1574
1575 return 0;
1576 diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
1577 index 48a6a93db296..48b181797d7b 100644
1578 --- a/net/packet/af_packet.c
1579 +++ b/net/packet/af_packet.c
1580 @@ -635,6 +635,7 @@ static void init_prb_bdqc(struct packet_sock *po,
1581 p1->tov_in_jiffies = msecs_to_jiffies(p1->retire_blk_tov);
1582 p1->blk_sizeof_priv = req_u->req3.tp_sizeof_priv;
1583
1584 + p1->max_frame_len = p1->kblk_size - BLK_PLUS_PRIV(p1->blk_sizeof_priv);
1585 prb_init_ft_ops(p1, req_u);
1586 prb_setup_retire_blk_timer(po, tx_ring);
1587 prb_open_block(p1, pbd);
1588 @@ -1946,6 +1947,18 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev,
1589 if ((int)snaplen < 0)
1590 snaplen = 0;
1591 }
1592 + } else if (unlikely(macoff + snaplen >
1593 + GET_PBDQC_FROM_RB(&po->rx_ring)->max_frame_len)) {
1594 + u32 nval;
1595 +
1596 + nval = GET_PBDQC_FROM_RB(&po->rx_ring)->max_frame_len - macoff;
1597 + pr_err_once("tpacket_rcv: packet too big, clamped from %u to %u. macoff=%u\n",
1598 + snaplen, nval, macoff);
1599 + snaplen = nval;
1600 + if (unlikely((int)snaplen < 0)) {
1601 + snaplen = 0;
1602 + macoff = GET_PBDQC_FROM_RB(&po->rx_ring)->max_frame_len;
1603 + }
1604 }
1605 spin_lock(&sk->sk_receive_queue.lock);
1606 h.raw = packet_current_rx_frame(po, skb,
1607 @@ -3779,6 +3792,10 @@ static int packet_set_ring(struct sock *sk, union tpacket_req_u *req_u,
1608 goto out;
1609 if (unlikely(req->tp_block_size & (PAGE_SIZE - 1)))
1610 goto out;
1611 + if (po->tp_version >= TPACKET_V3 &&
1612 + (int)(req->tp_block_size -
1613 + BLK_PLUS_PRIV(req_u->req3.tp_sizeof_priv)) <= 0)
1614 + goto out;
1615 if (unlikely(req->tp_frame_size < po->tp_hdrlen +
1616 po->tp_reserve))
1617 goto out;
1618 diff --git a/net/packet/internal.h b/net/packet/internal.h
1619 index eb9580a6b25f..cdddf6a30399 100644
1620 --- a/net/packet/internal.h
1621 +++ b/net/packet/internal.h
1622 @@ -29,6 +29,7 @@ struct tpacket_kbdq_core {
1623 char *pkblk_start;
1624 char *pkblk_end;
1625 int kblk_size;
1626 + unsigned int max_frame_len;
1627 unsigned int knum_blocks;
1628 uint64_t knxt_seq_num;
1629 char *prev;
1630 diff --git a/net/sctp/sm_statefuns.c b/net/sctp/sm_statefuns.c
1631 index 5170a1ff95a1..7194fe8589b0 100644
1632 --- a/net/sctp/sm_statefuns.c
1633 +++ b/net/sctp/sm_statefuns.c
1634 @@ -1775,9 +1775,22 @@ static sctp_disposition_t sctp_sf_do_dupcook_a(struct net *net,
1635 /* Update the content of current association. */
1636 sctp_add_cmd_sf(commands, SCTP_CMD_UPDATE_ASSOC, SCTP_ASOC(new_asoc));
1637 sctp_add_cmd_sf(commands, SCTP_CMD_EVENT_ULP, SCTP_ULPEVENT(ev));
1638 - sctp_add_cmd_sf(commands, SCTP_CMD_NEW_STATE,
1639 - SCTP_STATE(SCTP_STATE_ESTABLISHED));
1640 - sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(repl));
1641 + if (sctp_state(asoc, SHUTDOWN_PENDING) &&
1642 + (sctp_sstate(asoc->base.sk, CLOSING) ||
1643 + sock_flag(asoc->base.sk, SOCK_DEAD))) {
1644 + /* if were currently in SHUTDOWN_PENDING, but the socket
1645 + * has been closed by user, don't transition to ESTABLISHED.
1646 + * Instead trigger SHUTDOWN bundled with COOKIE_ACK.
1647 + */
1648 + sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(repl));
1649 + return sctp_sf_do_9_2_start_shutdown(net, ep, asoc,
1650 + SCTP_ST_CHUNK(0), NULL,
1651 + commands);
1652 + } else {
1653 + sctp_add_cmd_sf(commands, SCTP_CMD_NEW_STATE,
1654 + SCTP_STATE(SCTP_STATE_ESTABLISHED));
1655 + sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(repl));
1656 + }
1657 return SCTP_DISPOSITION_CONSUME;
1658
1659 nomem_ev:
1660 diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c
1661 index 1d5c7bf29938..59cf325f2772 100644
1662 --- a/net/xfrm/xfrm_policy.c
1663 +++ b/net/xfrm/xfrm_policy.c
1664 @@ -41,6 +41,11 @@
1665
1666 static struct dst_entry *xfrm_policy_sk_bundles;
1667
1668 +struct xfrm_flo {
1669 + struct dst_entry *dst_orig;
1670 + u8 flags;
1671 +};
1672 +
1673 static DEFINE_SPINLOCK(xfrm_policy_afinfo_lock);
1674 static struct xfrm_policy_afinfo __rcu *xfrm_policy_afinfo[NPROTO]
1675 __read_mostly;
1676 @@ -1889,13 +1894,14 @@ static int xdst_queue_output(struct sk_buff *skb)
1677 }
1678
1679 static struct xfrm_dst *xfrm_create_dummy_bundle(struct net *net,
1680 - struct dst_entry *dst,
1681 + struct xfrm_flo *xflo,
1682 const struct flowi *fl,
1683 int num_xfrms,
1684 u16 family)
1685 {
1686 int err;
1687 struct net_device *dev;
1688 + struct dst_entry *dst;
1689 struct dst_entry *dst1;
1690 struct xfrm_dst *xdst;
1691
1692 @@ -1903,9 +1909,12 @@ static struct xfrm_dst *xfrm_create_dummy_bundle(struct net *net,
1693 if (IS_ERR(xdst))
1694 return xdst;
1695
1696 - if (net->xfrm.sysctl_larval_drop || num_xfrms <= 0)
1697 + if (!(xflo->flags & XFRM_LOOKUP_QUEUE) ||
1698 + net->xfrm.sysctl_larval_drop ||
1699 + num_xfrms <= 0)
1700 return xdst;
1701
1702 + dst = xflo->dst_orig;
1703 dst1 = &xdst->u.dst;
1704 dst_hold(dst);
1705 xdst->route = dst;
1706 @@ -1947,7 +1956,7 @@ static struct flow_cache_object *
1707 xfrm_bundle_lookup(struct net *net, const struct flowi *fl, u16 family, u8 dir,
1708 struct flow_cache_object *oldflo, void *ctx)
1709 {
1710 - struct dst_entry *dst_orig = (struct dst_entry *)ctx;
1711 + struct xfrm_flo *xflo = (struct xfrm_flo *)ctx;
1712 struct xfrm_policy *pols[XFRM_POLICY_TYPE_MAX];
1713 struct xfrm_dst *xdst, *new_xdst;
1714 int num_pols = 0, num_xfrms = 0, i, err, pol_dead;
1715 @@ -1988,7 +1997,8 @@ xfrm_bundle_lookup(struct net *net, const struct flowi *fl, u16 family, u8 dir,
1716 goto make_dummy_bundle;
1717 }
1718
1719 - new_xdst = xfrm_resolve_and_create_bundle(pols, num_pols, fl, family, dst_orig);
1720 + new_xdst = xfrm_resolve_and_create_bundle(pols, num_pols, fl, family,
1721 + xflo->dst_orig);
1722 if (IS_ERR(new_xdst)) {
1723 err = PTR_ERR(new_xdst);
1724 if (err != -EAGAIN)
1725 @@ -2022,7 +2032,7 @@ make_dummy_bundle:
1726 /* We found policies, but there's no bundles to instantiate:
1727 * either because the policy blocks, has no transformations or
1728 * we could not build template (no xfrm_states).*/
1729 - xdst = xfrm_create_dummy_bundle(net, dst_orig, fl, num_xfrms, family);
1730 + xdst = xfrm_create_dummy_bundle(net, xflo, fl, num_xfrms, family);
1731 if (IS_ERR(xdst)) {
1732 xfrm_pols_put(pols, num_pols);
1733 return ERR_CAST(xdst);
1734 @@ -2121,13 +2131,18 @@ struct dst_entry *xfrm_lookup(struct net *net, struct dst_entry *dst_orig,
1735 }
1736
1737 if (xdst == NULL) {
1738 + struct xfrm_flo xflo;
1739 +
1740 + xflo.dst_orig = dst_orig;
1741 + xflo.flags = flags;
1742 +
1743 /* To accelerate a bit... */
1744 if ((dst_orig->flags & DST_NOXFRM) ||
1745 !net->xfrm.policy_count[XFRM_POLICY_OUT])
1746 goto nopol;
1747
1748 flo = flow_cache_lookup(net, fl, family, dir,
1749 - xfrm_bundle_lookup, dst_orig);
1750 + xfrm_bundle_lookup, &xflo);
1751 if (flo == NULL)
1752 goto nopol;
1753 if (IS_ERR(flo)) {
1754 @@ -2155,7 +2170,7 @@ struct dst_entry *xfrm_lookup(struct net *net, struct dst_entry *dst_orig,
1755 xfrm_pols_put(pols, drop_pols);
1756 XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTNOSTATES);
1757
1758 - return make_blackhole(net, family, dst_orig);
1759 + return ERR_PTR(-EREMOTE);
1760 }
1761
1762 err = -EAGAIN;
1763 @@ -2212,6 +2227,23 @@ dropdst:
1764 }
1765 EXPORT_SYMBOL(xfrm_lookup);
1766
1767 +/* Callers of xfrm_lookup_route() must ensure a call to dst_output().
1768 + * Otherwise we may send out blackholed packets.
1769 + */
1770 +struct dst_entry *xfrm_lookup_route(struct net *net, struct dst_entry *dst_orig,
1771 + const struct flowi *fl,
1772 + struct sock *sk, int flags)
1773 +{
1774 + struct dst_entry *dst = xfrm_lookup(net, dst_orig, fl, sk,
1775 + flags | XFRM_LOOKUP_QUEUE);
1776 +
1777 + if (IS_ERR(dst) && PTR_ERR(dst) == -EREMOTE)
1778 + return make_blackhole(net, dst_orig->ops->family, dst_orig);
1779 +
1780 + return dst;
1781 +}
1782 +EXPORT_SYMBOL(xfrm_lookup_route);
1783 +
1784 static inline int
1785 xfrm_secpath_reject(int idx, struct sk_buff *skb, const struct flowi *fl)
1786 {
1787 @@ -2477,7 +2509,7 @@ int __xfrm_route_forward(struct sk_buff *skb, unsigned short family)
1788
1789 skb_dst_force(skb);
1790
1791 - dst = xfrm_lookup(net, skb_dst(skb), &fl, NULL, 0);
1792 + dst = xfrm_lookup(net, skb_dst(skb), &fl, NULL, XFRM_LOOKUP_QUEUE);
1793 if (IS_ERR(dst)) {
1794 res = 0;
1795 dst = NULL;