Magellan Linux

Annotation of /trunk/kernel-alx/patches-4.1/0115-4.1.16-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2757 - (hide annotations) (download)
Wed Jan 27 10:46:59 2016 UTC (8 years, 3 months ago) by niro
File size: 45588 byte(s)
-linux-4.1.16
1 niro 2757 diff --git a/Makefile b/Makefile
2     index cf35f6bcffd8..7609f1dcdcb9 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,6 +1,6 @@
6     VERSION = 4
7     PATCHLEVEL = 1
8     -SUBLEVEL = 15
9     +SUBLEVEL = 16
10     EXTRAVERSION =
11     NAME = Series 4800
12    
13     diff --git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h
14     index f8319a0860fd..39be5acc9c48 100644
15     --- a/drivers/char/tpm/tpm.h
16     +++ b/drivers/char/tpm/tpm.h
17     @@ -115,6 +115,13 @@ enum tpm2_startup_types {
18     TPM2_SU_STATE = 0x0001,
19     };
20    
21     +enum tpm2_start_method {
22     + TPM2_START_ACPI = 2,
23     + TPM2_START_FIFO = 6,
24     + TPM2_START_CRB = 7,
25     + TPM2_START_CRB_WITH_ACPI = 8,
26     +};
27     +
28     struct tpm_chip;
29    
30     struct tpm_vendor_specific {
31     diff --git a/drivers/char/tpm/tpm_crb.c b/drivers/char/tpm/tpm_crb.c
32     index 1267322595da..2b971b3e5c1c 100644
33     --- a/drivers/char/tpm/tpm_crb.c
34     +++ b/drivers/char/tpm/tpm_crb.c
35     @@ -34,12 +34,6 @@ enum crb_defaults {
36     CRB_ACPI_START_INDEX = 1,
37     };
38    
39     -enum crb_start_method {
40     - CRB_SM_ACPI_START = 2,
41     - CRB_SM_CRB = 7,
42     - CRB_SM_CRB_WITH_ACPI_START = 8,
43     -};
44     -
45     struct acpi_tpm2 {
46     struct acpi_table_header hdr;
47     u16 platform_class;
48     @@ -220,12 +214,6 @@ static int crb_acpi_add(struct acpi_device *device)
49     u64 pa;
50     int rc;
51    
52     - chip = tpmm_chip_alloc(dev, &tpm_crb);
53     - if (IS_ERR(chip))
54     - return PTR_ERR(chip);
55     -
56     - chip->flags = TPM_CHIP_FLAG_TPM2;
57     -
58     status = acpi_get_table(ACPI_SIG_TPM2, 1,
59     (struct acpi_table_header **) &buf);
60     if (ACPI_FAILURE(status)) {
61     @@ -233,13 +221,15 @@ static int crb_acpi_add(struct acpi_device *device)
62     return -ENODEV;
63     }
64    
65     - /* At least some versions of AMI BIOS have a bug that TPM2 table has
66     - * zero address for the control area and therefore we must fail.
67     - */
68     - if (!buf->control_area_pa) {
69     - dev_err(dev, "TPM2 ACPI table has a zero address for the control area\n");
70     - return -EINVAL;
71     - }
72     + /* Should the FIFO driver handle this? */
73     + if (buf->start_method == TPM2_START_FIFO)
74     + return -ENODEV;
75     +
76     + chip = tpmm_chip_alloc(dev, &tpm_crb);
77     + if (IS_ERR(chip))
78     + return PTR_ERR(chip);
79     +
80     + chip->flags = TPM_CHIP_FLAG_TPM2;
81    
82     if (buf->hdr.length < sizeof(struct acpi_tpm2)) {
83     dev_err(dev, "TPM2 ACPI table has wrong size");
84     @@ -259,11 +249,11 @@ static int crb_acpi_add(struct acpi_device *device)
85     * report only ACPI start but in practice seems to require both
86     * ACPI start and CRB start.
87     */
88     - if (sm == CRB_SM_CRB || sm == CRB_SM_CRB_WITH_ACPI_START ||
89     + if (sm == TPM2_START_CRB || sm == TPM2_START_FIFO ||
90     !strcmp(acpi_device_hid(device), "MSFT0101"))
91     priv->flags |= CRB_FL_CRB_START;
92    
93     - if (sm == CRB_SM_ACPI_START || sm == CRB_SM_CRB_WITH_ACPI_START)
94     + if (sm == TPM2_START_ACPI || sm == TPM2_START_CRB_WITH_ACPI)
95     priv->flags |= CRB_FL_ACPI_START;
96    
97     priv->cca = (struct crb_control_area __iomem *)
98     diff --git a/drivers/char/tpm/tpm_tis.c b/drivers/char/tpm/tpm_tis.c
99     index f2dffa770b8e..696ef1d56b4f 100644
100     --- a/drivers/char/tpm/tpm_tis.c
101     +++ b/drivers/char/tpm/tpm_tis.c
102     @@ -1,6 +1,6 @@
103     /*
104     * Copyright (C) 2005, 2006 IBM Corporation
105     - * Copyright (C) 2014 Intel Corporation
106     + * Copyright (C) 2014, 2015 Intel Corporation
107     *
108     * Authors:
109     * Leendert van Doorn <leendert@watson.ibm.com>
110     @@ -28,6 +28,7 @@
111     #include <linux/wait.h>
112     #include <linux/acpi.h>
113     #include <linux/freezer.h>
114     +#include <acpi/actbl2.h>
115     #include "tpm.h"
116    
117     enum tis_access {
118     @@ -65,6 +66,17 @@ enum tis_defaults {
119     TIS_LONG_TIMEOUT = 2000, /* 2 sec */
120     };
121    
122     +struct tpm_info {
123     + unsigned long start;
124     + unsigned long len;
125     + unsigned int irq;
126     +};
127     +
128     +static struct tpm_info tis_default_info = {
129     + .start = TIS_MEM_BASE,
130     + .len = TIS_MEM_LEN,
131     + .irq = 0,
132     +};
133    
134     /* Some timeout values are needed before it is known whether the chip is
135     * TPM 1.0 or TPM 2.0.
136     @@ -91,26 +103,54 @@ struct priv_data {
137     };
138    
139     #if defined(CONFIG_PNP) && defined(CONFIG_ACPI)
140     -static int is_itpm(struct pnp_dev *dev)
141     +static int has_hid(struct acpi_device *dev, const char *hid)
142     {
143     - struct acpi_device *acpi = pnp_acpi_device(dev);
144     struct acpi_hardware_id *id;
145    
146     - if (!acpi)
147     - return 0;
148     -
149     - list_for_each_entry(id, &acpi->pnp.ids, list) {
150     - if (!strcmp("INTC0102", id->id))
151     + list_for_each_entry(id, &dev->pnp.ids, list)
152     + if (!strcmp(hid, id->id))
153     return 1;
154     - }
155    
156     return 0;
157     }
158     +
159     +static inline int is_itpm(struct acpi_device *dev)
160     +{
161     + return has_hid(dev, "INTC0102");
162     +}
163     +
164     +static inline int is_fifo(struct acpi_device *dev)
165     +{
166     + struct acpi_table_tpm2 *tbl;
167     + acpi_status st;
168     +
169     + /* TPM 1.2 FIFO */
170     + if (!has_hid(dev, "MSFT0101"))
171     + return 1;
172     +
173     + st = acpi_get_table(ACPI_SIG_TPM2, 1,
174     + (struct acpi_table_header **) &tbl);
175     + if (ACPI_FAILURE(st)) {
176     + dev_err(&dev->dev, "failed to get TPM2 ACPI table\n");
177     + return 0;
178     + }
179     +
180     + if (le32_to_cpu(tbl->start_method) != TPM2_START_FIFO)
181     + return 0;
182     +
183     + /* TPM 2.0 FIFO */
184     + return 1;
185     +}
186     #else
187     -static inline int is_itpm(struct pnp_dev *dev)
188     +static inline int is_itpm(struct acpi_device *dev)
189     {
190     return 0;
191     }
192     +
193     +static inline int is_fifo(struct acpi_device *dev)
194     +{
195     + return 1;
196     +}
197     #endif
198    
199     /* Before we attempt to access the TPM we must see that the valid bit is set.
200     @@ -600,9 +640,8 @@ static void tpm_tis_remove(struct tpm_chip *chip)
201     release_locality(chip, chip->vendor.locality, 1);
202     }
203    
204     -static int tpm_tis_init(struct device *dev, acpi_handle acpi_dev_handle,
205     - resource_size_t start, resource_size_t len,
206     - unsigned int irq)
207     +static int tpm_tis_init(struct device *dev, struct tpm_info *tpm_info,
208     + acpi_handle acpi_dev_handle)
209     {
210     u32 vendor, intfcaps, intmask;
211     int rc, i, irq_s, irq_e, probe;
212     @@ -622,7 +661,7 @@ static int tpm_tis_init(struct device *dev, acpi_handle acpi_dev_handle,
213     chip->acpi_dev_handle = acpi_dev_handle;
214     #endif
215    
216     - chip->vendor.iobase = devm_ioremap(dev, start, len);
217     + chip->vendor.iobase = devm_ioremap(dev, tpm_info->start, tpm_info->len);
218     if (!chip->vendor.iobase)
219     return -EIO;
220    
221     @@ -707,7 +746,7 @@ static int tpm_tis_init(struct device *dev, acpi_handle acpi_dev_handle,
222     chip->vendor.iobase +
223     TPM_INT_ENABLE(chip->vendor.locality));
224     if (interrupts)
225     - chip->vendor.irq = irq;
226     + chip->vendor.irq = tpm_info->irq;
227     if (interrupts && !chip->vendor.irq) {
228     irq_s =
229     ioread8(chip->vendor.iobase +
230     @@ -890,27 +929,27 @@ static SIMPLE_DEV_PM_OPS(tpm_tis_pm, tpm_pm_suspend, tpm_tis_resume);
231     static int tpm_tis_pnp_init(struct pnp_dev *pnp_dev,
232     const struct pnp_device_id *pnp_id)
233     {
234     - resource_size_t start, len;
235     - unsigned int irq = 0;
236     + struct tpm_info tpm_info = tis_default_info;
237     acpi_handle acpi_dev_handle = NULL;
238    
239     - start = pnp_mem_start(pnp_dev, 0);
240     - len = pnp_mem_len(pnp_dev, 0);
241     + tpm_info.start = pnp_mem_start(pnp_dev, 0);
242     + tpm_info.len = pnp_mem_len(pnp_dev, 0);
243    
244     if (pnp_irq_valid(pnp_dev, 0))
245     - irq = pnp_irq(pnp_dev, 0);
246     + tpm_info.irq = pnp_irq(pnp_dev, 0);
247     else
248     interrupts = false;
249    
250     - if (is_itpm(pnp_dev))
251     - itpm = true;
252     -
253     #ifdef CONFIG_ACPI
254     - if (pnp_acpi_device(pnp_dev))
255     + if (pnp_acpi_device(pnp_dev)) {
256     + if (is_itpm(pnp_acpi_device(pnp_dev)))
257     + itpm = true;
258     +
259     acpi_dev_handle = pnp_acpi_device(pnp_dev)->handle;
260     + }
261     #endif
262    
263     - return tpm_tis_init(&pnp_dev->dev, acpi_dev_handle, start, len, irq);
264     + return tpm_tis_init(&pnp_dev->dev, &tpm_info, acpi_dev_handle);
265     }
266    
267     static struct pnp_device_id tpm_pnp_tbl[] = {
268     @@ -930,6 +969,7 @@ MODULE_DEVICE_TABLE(pnp, tpm_pnp_tbl);
269     static void tpm_tis_pnp_remove(struct pnp_dev *dev)
270     {
271     struct tpm_chip *chip = pnp_get_drvdata(dev);
272     +
273     tpm_chip_unregister(chip);
274     tpm_tis_remove(chip);
275     }
276     @@ -950,6 +990,79 @@ module_param_string(hid, tpm_pnp_tbl[TIS_HID_USR_IDX].id,
277     MODULE_PARM_DESC(hid, "Set additional specific HID for this driver to probe");
278     #endif
279    
280     +#ifdef CONFIG_ACPI
281     +static int tpm_check_resource(struct acpi_resource *ares, void *data)
282     +{
283     + struct tpm_info *tpm_info = (struct tpm_info *) data;
284     + struct resource res;
285     +
286     + if (acpi_dev_resource_interrupt(ares, 0, &res)) {
287     + tpm_info->irq = res.start;
288     + } else if (acpi_dev_resource_memory(ares, &res)) {
289     + tpm_info->start = res.start;
290     + tpm_info->len = resource_size(&res);
291     + }
292     +
293     + return 1;
294     +}
295     +
296     +static int tpm_tis_acpi_init(struct acpi_device *acpi_dev)
297     +{
298     + struct list_head resources;
299     + struct tpm_info tpm_info = tis_default_info;
300     + int ret;
301     +
302     + if (!is_fifo(acpi_dev))
303     + return -ENODEV;
304     +
305     + INIT_LIST_HEAD(&resources);
306     + ret = acpi_dev_get_resources(acpi_dev, &resources, tpm_check_resource,
307     + &tpm_info);
308     + if (ret < 0)
309     + return ret;
310     +
311     + acpi_dev_free_resource_list(&resources);
312     +
313     + if (!tpm_info.irq)
314     + interrupts = false;
315     +
316     + if (is_itpm(acpi_dev))
317     + itpm = true;
318     +
319     + return tpm_tis_init(&acpi_dev->dev, &tpm_info, acpi_dev->handle);
320     +}
321     +
322     +static int tpm_tis_acpi_remove(struct acpi_device *dev)
323     +{
324     + struct tpm_chip *chip = dev_get_drvdata(&dev->dev);
325     +
326     + tpm_chip_unregister(chip);
327     + tpm_tis_remove(chip);
328     +
329     + return 0;
330     +}
331     +
332     +static struct acpi_device_id tpm_acpi_tbl[] = {
333     + {"MSFT0101", 0}, /* TPM 2.0 */
334     + /* Add new here */
335     + {"", 0}, /* User Specified */
336     + {"", 0} /* Terminator */
337     +};
338     +MODULE_DEVICE_TABLE(acpi, tpm_acpi_tbl);
339     +
340     +static struct acpi_driver tis_acpi_driver = {
341     + .name = "tpm_tis",
342     + .ids = tpm_acpi_tbl,
343     + .ops = {
344     + .add = tpm_tis_acpi_init,
345     + .remove = tpm_tis_acpi_remove,
346     + },
347     + .drv = {
348     + .pm = &tpm_tis_pm,
349     + },
350     +};
351     +#endif
352     +
353     static struct platform_driver tis_drv = {
354     .driver = {
355     .name = "tpm_tis",
356     @@ -966,9 +1079,25 @@ static int __init init_tis(void)
357     {
358     int rc;
359     #ifdef CONFIG_PNP
360     - if (!force)
361     - return pnp_register_driver(&tis_pnp_driver);
362     + if (!force) {
363     + rc = pnp_register_driver(&tis_pnp_driver);
364     + if (rc)
365     + return rc;
366     + }
367     +#endif
368     +#ifdef CONFIG_ACPI
369     + if (!force) {
370     + rc = acpi_bus_register_driver(&tis_acpi_driver);
371     + if (rc) {
372     +#ifdef CONFIG_PNP
373     + pnp_unregister_driver(&tis_pnp_driver);
374     #endif
375     + return rc;
376     + }
377     + }
378     +#endif
379     + if (!force)
380     + return 0;
381    
382     rc = platform_driver_register(&tis_drv);
383     if (rc < 0)
384     @@ -978,7 +1107,7 @@ static int __init init_tis(void)
385     rc = PTR_ERR(pdev);
386     goto err_dev;
387     }
388     - rc = tpm_tis_init(&pdev->dev, NULL, TIS_MEM_BASE, TIS_MEM_LEN, 0);
389     + rc = tpm_tis_init(&pdev->dev, &tis_default_info, NULL);
390     if (rc)
391     goto err_init;
392     return 0;
393     @@ -992,9 +1121,14 @@ err_dev:
394     static void __exit cleanup_tis(void)
395     {
396     struct tpm_chip *chip;
397     -#ifdef CONFIG_PNP
398     +#if defined(CONFIG_PNP) || defined(CONFIG_ACPI)
399     if (!force) {
400     +#ifdef CONFIG_ACPI
401     + acpi_bus_unregister_driver(&tis_acpi_driver);
402     +#endif
403     +#ifdef CONFIG_PNP
404     pnp_unregister_driver(&tis_pnp_driver);
405     +#endif
406     return;
407     }
408     #endif
409     diff --git a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
410     index 932bd1862f7a..6e9036a06515 100644
411     --- a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
412     +++ b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
413     @@ -1014,13 +1014,12 @@ static int atl1c_setup_ring_resources(struct atl1c_adapter *adapter)
414     sizeof(struct atl1c_recv_ret_status) * rx_desc_count +
415     8 * 4;
416    
417     - ring_header->desc = pci_alloc_consistent(pdev, ring_header->size,
418     - &ring_header->dma);
419     + ring_header->desc = dma_zalloc_coherent(&pdev->dev, ring_header->size,
420     + &ring_header->dma, GFP_KERNEL);
421     if (unlikely(!ring_header->desc)) {
422     - dev_err(&pdev->dev, "pci_alloc_consistend failed\n");
423     + dev_err(&pdev->dev, "could not get memory for DMA buffer\n");
424     goto err_nomem;
425     }
426     - memset(ring_header->desc, 0, ring_header->size);
427     /* init TPD ring */
428    
429     tpd_ring[0].dma = roundup(ring_header->dma, 8);
430     diff --git a/drivers/net/ethernet/qualcomm/qca_spi.c b/drivers/net/ethernet/qualcomm/qca_spi.c
431     index 6af028d5f9bc..97e4df9bf407 100644
432     --- a/drivers/net/ethernet/qualcomm/qca_spi.c
433     +++ b/drivers/net/ethernet/qualcomm/qca_spi.c
434     @@ -736,9 +736,8 @@ qcaspi_netdev_tx_timeout(struct net_device *dev)
435     netdev_info(qca->net_dev, "Transmit timeout at %ld, latency %ld\n",
436     jiffies, jiffies - dev->trans_start);
437     qca->net_dev->stats.tx_errors++;
438     - /* wake the queue if there is room */
439     - if (qcaspi_tx_ring_has_space(&qca->txr))
440     - netif_wake_queue(dev);
441     + /* Trigger tx queue flush and QCA7000 reset */
442     + qca->sync = QCASPI_SYNC_UNKNOWN;
443     }
444    
445     static int
446     diff --git a/drivers/net/ethernet/renesas/sh_eth.c b/drivers/net/ethernet/renesas/sh_eth.c
447     index 7fb244f565b2..13463c4acc86 100644
448     --- a/drivers/net/ethernet/renesas/sh_eth.c
449     +++ b/drivers/net/ethernet/renesas/sh_eth.c
450     @@ -1481,6 +1481,7 @@ static int sh_eth_rx(struct net_device *ndev, u32 intr_status, int *quota)
451     if (mdp->cd->shift_rd0)
452     desc_status >>= 16;
453    
454     + skb = mdp->rx_skbuff[entry];
455     if (desc_status & (RD_RFS1 | RD_RFS2 | RD_RFS3 | RD_RFS4 |
456     RD_RFS5 | RD_RFS6 | RD_RFS10)) {
457     ndev->stats.rx_errors++;
458     @@ -1496,12 +1497,11 @@ static int sh_eth_rx(struct net_device *ndev, u32 intr_status, int *quota)
459     ndev->stats.rx_missed_errors++;
460     if (desc_status & RD_RFS10)
461     ndev->stats.rx_over_errors++;
462     - } else {
463     + } else if (skb) {
464     if (!mdp->cd->hw_swap)
465     sh_eth_soft_swap(
466     phys_to_virt(ALIGN(rxdesc->addr, 4)),
467     pkt_len + 2);
468     - skb = mdp->rx_skbuff[entry];
469     mdp->rx_skbuff[entry] = NULL;
470     if (mdp->cd->rpadir)
471     skb_reserve(skb, NET_IP_ALIGN);
472     diff --git a/drivers/net/ppp/pppoe.c b/drivers/net/ppp/pppoe.c
473     index ab33262ed826..9c8fabed4444 100644
474     --- a/drivers/net/ppp/pppoe.c
475     +++ b/drivers/net/ppp/pppoe.c
476     @@ -568,6 +568,9 @@ static int pppoe_create(struct net *net, struct socket *sock)
477     sk->sk_family = PF_PPPOX;
478     sk->sk_protocol = PX_PROTO_OE;
479    
480     + INIT_WORK(&pppox_sk(sk)->proto.pppoe.padt_work,
481     + pppoe_unbind_sock_work);
482     +
483     return 0;
484     }
485    
486     @@ -632,8 +635,6 @@ static int pppoe_connect(struct socket *sock, struct sockaddr *uservaddr,
487    
488     lock_sock(sk);
489    
490     - INIT_WORK(&po->proto.pppoe.padt_work, pppoe_unbind_sock_work);
491     -
492     error = -EINVAL;
493     if (sp->sa_protocol != PX_PROTO_OE)
494     goto end;
495     @@ -663,8 +664,13 @@ static int pppoe_connect(struct socket *sock, struct sockaddr *uservaddr,
496     po->pppoe_dev = NULL;
497     }
498    
499     - memset(sk_pppox(po) + 1, 0,
500     - sizeof(struct pppox_sock) - sizeof(struct sock));
501     + po->pppoe_ifindex = 0;
502     + memset(&po->pppoe_pa, 0, sizeof(po->pppoe_pa));
503     + memset(&po->pppoe_relay, 0, sizeof(po->pppoe_relay));
504     + memset(&po->chan, 0, sizeof(po->chan));
505     + po->next = NULL;
506     + po->num = 0;
507     +
508     sk->sk_state = PPPOX_NONE;
509     }
510    
511     diff --git a/drivers/net/ppp/pptp.c b/drivers/net/ppp/pptp.c
512     index e3bfbd4d0136..0bacabfa486e 100644
513     --- a/drivers/net/ppp/pptp.c
514     +++ b/drivers/net/ppp/pptp.c
515     @@ -420,6 +420,9 @@ static int pptp_bind(struct socket *sock, struct sockaddr *uservaddr,
516     struct pptp_opt *opt = &po->proto.pptp;
517     int error = 0;
518    
519     + if (sockaddr_len < sizeof(struct sockaddr_pppox))
520     + return -EINVAL;
521     +
522     lock_sock(sk);
523    
524     opt->src_addr = sp->sa_addr.pptp;
525     @@ -441,6 +444,9 @@ static int pptp_connect(struct socket *sock, struct sockaddr *uservaddr,
526     struct flowi4 fl4;
527     int error = 0;
528    
529     + if (sockaddr_len < sizeof(struct sockaddr_pppox))
530     + return -EINVAL;
531     +
532     if (sp->sa_protocol != PX_PROTO_PPTP)
533     return -EINVAL;
534    
535     diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c
536     index aafa1a1898e4..ce6fad1c43e6 100644
537     --- a/drivers/net/usb/r8152.c
538     +++ b/drivers/net/usb/r8152.c
539     @@ -3006,17 +3006,6 @@ static int rtl8152_open(struct net_device *netdev)
540    
541     mutex_lock(&tp->control);
542    
543     - /* The WORK_ENABLE may be set when autoresume occurs */
544     - if (test_bit(WORK_ENABLE, &tp->flags)) {
545     - clear_bit(WORK_ENABLE, &tp->flags);
546     - usb_kill_urb(tp->intr_urb);
547     - cancel_delayed_work_sync(&tp->schedule);
548     -
549     - /* disable the tx/rx, if the workqueue has enabled them. */
550     - if (netif_carrier_ok(netdev))
551     - tp->rtl_ops.disable(tp);
552     - }
553     -
554     tp->rtl_ops.up(tp);
555    
556     rtl8152_set_speed(tp, AUTONEG_ENABLE,
557     @@ -3063,12 +3052,6 @@ static int rtl8152_close(struct net_device *netdev)
558     } else {
559     mutex_lock(&tp->control);
560    
561     - /* The autosuspend may have been enabled and wouldn't
562     - * be disable when autoresume occurs, because the
563     - * netif_running() would be false.
564     - */
565     - rtl_runtime_suspend_enable(tp, false);
566     -
567     tp->rtl_ops.down(tp);
568    
569     mutex_unlock(&tp->control);
570     @@ -3369,7 +3352,7 @@ static int rtl8152_resume(struct usb_interface *intf)
571     netif_device_attach(tp->netdev);
572     }
573    
574     - if (netif_running(tp->netdev)) {
575     + if (netif_running(tp->netdev) && tp->netdev->flags & IFF_UP) {
576     if (test_bit(SELECTIVE_SUSPEND, &tp->flags)) {
577     rtl_runtime_suspend_enable(tp, false);
578     clear_bit(SELECTIVE_SUSPEND, &tp->flags);
579     @@ -3387,6 +3370,8 @@ static int rtl8152_resume(struct usb_interface *intf)
580     }
581     usb_submit_urb(tp->intr_urb, GFP_KERNEL);
582     } else if (test_bit(SELECTIVE_SUSPEND, &tp->flags)) {
583     + if (tp->netdev->flags & IFF_UP)
584     + rtl_runtime_suspend_enable(tp, false);
585     clear_bit(SELECTIVE_SUSPEND, &tp->flags);
586     }
587    
588     diff --git a/drivers/platform/x86/toshiba_acpi.c b/drivers/platform/x86/toshiba_acpi.c
589     index 93e54a0f471a..35882dd690a6 100644
590     --- a/drivers/platform/x86/toshiba_acpi.c
591     +++ b/drivers/platform/x86/toshiba_acpi.c
592     @@ -2764,6 +2764,7 @@ static int toshiba_acpi_add(struct acpi_device *acpi_dev)
593     ret = toshiba_function_keys_get(dev, &special_functions);
594     dev->kbd_function_keys_supported = !ret;
595    
596     + dev->hotkey_event_type = 0;
597     if (toshiba_acpi_setup_keyboard(dev))
598     pr_info("Unable to activate hotkeys\n");
599    
600     diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
601     index a086e1d69bc7..0fe15aec7ed0 100644
602     --- a/drivers/usb/class/cdc-acm.c
603     +++ b/drivers/usb/class/cdc-acm.c
604     @@ -1848,6 +1848,11 @@ static const struct usb_device_id acm_ids[] = {
605     },
606     #endif
607    
608     + /* Exclude Infineon Flash Loader utility */
609     + { USB_DEVICE(0x058b, 0x0041),
610     + .driver_info = IGNORE_DEVICE,
611     + },
612     +
613     /* control interfaces without any protocol set */
614     { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
615     USB_CDC_PROTO_NONE) },
616     diff --git a/drivers/usb/core/config.c b/drivers/usb/core/config.c
617     index b9ddf0c1ffe5..894894f2ff93 100644
618     --- a/drivers/usb/core/config.c
619     +++ b/drivers/usb/core/config.c
620     @@ -115,7 +115,8 @@ static void usb_parse_ss_endpoint_companion(struct device *ddev, int cfgno,
621     USB_SS_MULT(desc->bmAttributes) > 3) {
622     dev_warn(ddev, "Isoc endpoint has Mult of %d in "
623     "config %d interface %d altsetting %d ep %d: "
624     - "setting to 3\n", desc->bmAttributes + 1,
625     + "setting to 3\n",
626     + USB_SS_MULT(desc->bmAttributes),
627     cfgno, inum, asnum, ep->desc.bEndpointAddress);
628     ep->ss_ep_comp.bmAttributes = 2;
629     }
630     diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
631     index 1e9a8c9aa531..d68c4a4db682 100644
632     --- a/drivers/usb/core/hub.c
633     +++ b/drivers/usb/core/hub.c
634     @@ -124,6 +124,10 @@ struct usb_hub *usb_hub_to_struct_hub(struct usb_device *hdev)
635    
636     int usb_device_supports_lpm(struct usb_device *udev)
637     {
638     + /* Some devices have trouble with LPM */
639     + if (udev->quirks & USB_QUIRK_NO_LPM)
640     + return 0;
641     +
642     /* USB 2.1 (and greater) devices indicate LPM support through
643     * their USB 2.0 Extended Capabilities BOS descriptor.
644     */
645     @@ -4493,6 +4497,8 @@ hub_port_init (struct usb_hub *hub, struct usb_device *udev, int port1,
646     goto fail;
647     }
648    
649     + usb_detect_quirks(udev);
650     +
651     if (udev->wusb == 0 && le16_to_cpu(udev->descriptor.bcdUSB) >= 0x0201) {
652     retval = usb_get_bos_descriptor(udev);
653     if (!retval) {
654     @@ -4691,7 +4697,6 @@ static void hub_port_connect(struct usb_hub *hub, int port1, u16 portstatus,
655     if (status < 0)
656     goto loop;
657    
658     - usb_detect_quirks(udev);
659     if (udev->quirks & USB_QUIRK_DELAY_INIT)
660     msleep(1000);
661    
662     @@ -5307,9 +5312,6 @@ static int usb_reset_and_verify_device(struct usb_device *udev)
663     if (udev->usb2_hw_lpm_enabled == 1)
664     usb_set_usb2_hardware_lpm(udev, 0);
665    
666     - bos = udev->bos;
667     - udev->bos = NULL;
668     -
669     /* Disable LPM and LTM while we reset the device and reinstall the alt
670     * settings. Device-initiated LPM settings, and system exit latency
671     * settings are cleared when the device is reset, so we have to set
672     @@ -5318,15 +5320,18 @@ static int usb_reset_and_verify_device(struct usb_device *udev)
673     ret = usb_unlocked_disable_lpm(udev);
674     if (ret) {
675     dev_err(&udev->dev, "%s Failed to disable LPM\n.", __func__);
676     - goto re_enumerate;
677     + goto re_enumerate_no_bos;
678     }
679     ret = usb_disable_ltm(udev);
680     if (ret) {
681     dev_err(&udev->dev, "%s Failed to disable LTM\n.",
682     __func__);
683     - goto re_enumerate;
684     + goto re_enumerate_no_bos;
685     }
686    
687     + bos = udev->bos;
688     + udev->bos = NULL;
689     +
690     for (i = 0; i < SET_CONFIG_TRIES; ++i) {
691    
692     /* ep0 maxpacket size may change; let the HCD know about it.
693     @@ -5423,10 +5428,11 @@ done:
694     return 0;
695    
696     re_enumerate:
697     - /* LPM state doesn't matter when we're about to destroy the device. */
698     - hub_port_logical_disconnect(parent_hub, port1);
699     usb_release_bos_descriptor(udev);
700     udev->bos = bos;
701     +re_enumerate_no_bos:
702     + /* LPM state doesn't matter when we're about to destroy the device. */
703     + hub_port_logical_disconnect(parent_hub, port1);
704     return -ENODEV;
705     }
706    
707     diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
708     index f5a381945db2..017c1de53aa5 100644
709     --- a/drivers/usb/core/quirks.c
710     +++ b/drivers/usb/core/quirks.c
711     @@ -199,6 +199,12 @@ static const struct usb_device_id usb_quirk_list[] = {
712     { USB_DEVICE(0x1a0a, 0x0200), .driver_info =
713     USB_QUIRK_LINEAR_UFRAME_INTR_BINTERVAL },
714    
715     + /* Blackmagic Design Intensity Shuttle */
716     + { USB_DEVICE(0x1edb, 0xbd3b), .driver_info = USB_QUIRK_NO_LPM },
717     +
718     + /* Blackmagic Design UltraStudio SDI */
719     + { USB_DEVICE(0x1edb, 0xbd4f), .driver_info = USB_QUIRK_NO_LPM },
720     +
721     { } /* terminating entry must be last */
722     };
723    
724     diff --git a/drivers/usb/gadget/udc/pxa27x_udc.c b/drivers/usb/gadget/udc/pxa27x_udc.c
725     index b51226abade6..7a454708e948 100644
726     --- a/drivers/usb/gadget/udc/pxa27x_udc.c
727     +++ b/drivers/usb/gadget/udc/pxa27x_udc.c
728     @@ -2535,6 +2535,9 @@ static int pxa_udc_suspend(struct platform_device *_dev, pm_message_t state)
729     udc->pullup_resume = udc->pullup_on;
730     dplus_pullup(udc, 0);
731    
732     + if (udc->driver)
733     + udc->driver->disconnect(&udc->gadget);
734     +
735     return 0;
736     }
737    
738     diff --git a/drivers/usb/host/whci/qset.c b/drivers/usb/host/whci/qset.c
739     index dc31c425ce01..9f1c0538b211 100644
740     --- a/drivers/usb/host/whci/qset.c
741     +++ b/drivers/usb/host/whci/qset.c
742     @@ -377,6 +377,10 @@ static int qset_fill_page_list(struct whc *whc, struct whc_std *std, gfp_t mem_f
743     if (std->pl_virt == NULL)
744     return -ENOMEM;
745     std->dma_addr = dma_map_single(whc->wusbhc.dev, std->pl_virt, pl_len, DMA_TO_DEVICE);
746     + if (dma_mapping_error(whc->wusbhc.dev, std->dma_addr)) {
747     + kfree(std->pl_virt);
748     + return -EFAULT;
749     + }
750    
751     for (p = 0; p < std->num_pointers; p++) {
752     std->pl_virt[p].buf_ptr = cpu_to_le64(dma_addr);
753     diff --git a/drivers/usb/musb/Kconfig b/drivers/usb/musb/Kconfig
754     index 39db8b603627..d1b9e0c7fb0d 100644
755     --- a/drivers/usb/musb/Kconfig
756     +++ b/drivers/usb/musb/Kconfig
757     @@ -147,7 +147,7 @@ config USB_TI_CPPI_DMA
758    
759     config USB_TI_CPPI41_DMA
760     bool 'TI CPPI 4.1 (AM335x)'
761     - depends on ARCH_OMAP
762     + depends on ARCH_OMAP && DMADEVICES
763     select TI_CPPI41
764    
765     config USB_TUSB_OMAP_DMA
766     diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c
767     index eac7ccaa3c85..7d4f51a32e66 100644
768     --- a/drivers/usb/serial/cp210x.c
769     +++ b/drivers/usb/serial/cp210x.c
770     @@ -132,7 +132,6 @@ static const struct usb_device_id id_table[] = {
771     { USB_DEVICE(0x10C4, 0xEA60) }, /* Silicon Labs factory default */
772     { USB_DEVICE(0x10C4, 0xEA61) }, /* Silicon Labs factory default */
773     { USB_DEVICE(0x10C4, 0xEA70) }, /* Silicon Labs factory default */
774     - { USB_DEVICE(0x10C4, 0xEA80) }, /* Silicon Labs factory default */
775     { USB_DEVICE(0x10C4, 0xEA71) }, /* Infinity GPS-MIC-1 Radio Monophone */
776     { USB_DEVICE(0x10C4, 0xF001) }, /* Elan Digital Systems USBscope50 */
777     { USB_DEVICE(0x10C4, 0xF002) }, /* Elan Digital Systems USBwave12 */
778     diff --git a/drivers/usb/serial/usb-serial-simple.c b/drivers/usb/serial/usb-serial-simple.c
779     index 3658662898fc..a204782ae530 100644
780     --- a/drivers/usb/serial/usb-serial-simple.c
781     +++ b/drivers/usb/serial/usb-serial-simple.c
782     @@ -53,6 +53,7 @@ DEVICE(funsoft, FUNSOFT_IDS);
783    
784     /* Infineon Flashloader driver */
785     #define FLASHLOADER_IDS() \
786     + { USB_DEVICE_INTERFACE_CLASS(0x058b, 0x0041, USB_CLASS_CDC_DATA) }, \
787     { USB_DEVICE(0x8087, 0x0716) }
788     DEVICE(flashloader, FLASHLOADER_IDS);
789    
790     diff --git a/drivers/usb/storage/uas.c b/drivers/usb/storage/uas.c
791     index 6d3122afeed3..75e4979e6c15 100644
792     --- a/drivers/usb/storage/uas.c
793     +++ b/drivers/usb/storage/uas.c
794     @@ -796,6 +796,10 @@ static int uas_slave_configure(struct scsi_device *sdev)
795     if (devinfo->flags & US_FL_NO_REPORT_OPCODES)
796     sdev->no_report_opcodes = 1;
797    
798     + /* A few buggy USB-ATA bridges don't understand FUA */
799     + if (devinfo->flags & US_FL_BROKEN_FUA)
800     + sdev->broken_fua = 1;
801     +
802     scsi_change_queue_depth(sdev, devinfo->qdepth - 2);
803     return 0;
804     }
805     diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h
806     index 87898ca2ed17..4095824c8c6d 100644
807     --- a/drivers/usb/storage/unusual_devs.h
808     +++ b/drivers/usb/storage/unusual_devs.h
809     @@ -1987,7 +1987,7 @@ UNUSUAL_DEV( 0x14cd, 0x6600, 0x0201, 0x0201,
810     US_FL_IGNORE_RESIDUE ),
811    
812     /* Reported by Michael Büsch <m@bues.ch> */
813     -UNUSUAL_DEV( 0x152d, 0x0567, 0x0114, 0x0114,
814     +UNUSUAL_DEV( 0x152d, 0x0567, 0x0114, 0x0116,
815     "JMicron",
816     "USB to ATA/ATAPI Bridge",
817     USB_SC_DEVICE, USB_PR_DEVICE, NULL,
818     diff --git a/drivers/usb/storage/unusual_uas.h b/drivers/usb/storage/unusual_uas.h
819     index c85ea530085f..ccc113e83d88 100644
820     --- a/drivers/usb/storage/unusual_uas.h
821     +++ b/drivers/usb/storage/unusual_uas.h
822     @@ -132,7 +132,7 @@ UNUSUAL_DEV(0x152d, 0x0567, 0x0000, 0x9999,
823     "JMicron",
824     "JMS567",
825     USB_SC_DEVICE, USB_PR_DEVICE, NULL,
826     - US_FL_NO_REPORT_OPCODES),
827     + US_FL_BROKEN_FUA | US_FL_NO_REPORT_OPCODES),
828    
829     /* Reported-by: Hans de Goede <hdegoede@redhat.com> */
830     UNUSUAL_DEV(0x2109, 0x0711, 0x0000, 0x9999,
831     diff --git a/include/linux/usb/quirks.h b/include/linux/usb/quirks.h
832     index 9948c874e3f1..1d0043dc34e4 100644
833     --- a/include/linux/usb/quirks.h
834     +++ b/include/linux/usb/quirks.h
835     @@ -47,4 +47,7 @@
836     /* device generates spurious wakeup, ignore remote wakeup capability */
837     #define USB_QUIRK_IGNORE_REMOTE_WAKEUP BIT(9)
838    
839     +/* device can't handle Link Power Management */
840     +#define USB_QUIRK_NO_LPM BIT(10)
841     +
842     #endif /* __LINUX_USB_QUIRKS_H */
843     diff --git a/include/net/dst.h b/include/net/dst.h
844     index 0fb99a26e973..182b812d45e1 100644
845     --- a/include/net/dst.h
846     +++ b/include/net/dst.h
847     @@ -312,6 +312,39 @@ static inline void skb_dst_force(struct sk_buff *skb)
848     }
849     }
850    
851     +/**
852     + * dst_hold_safe - Take a reference on a dst if possible
853     + * @dst: pointer to dst entry
854     + *
855     + * This helper returns false if it could not safely
856     + * take a reference on a dst.
857     + */
858     +static inline bool dst_hold_safe(struct dst_entry *dst)
859     +{
860     + if (dst->flags & DST_NOCACHE)
861     + return atomic_inc_not_zero(&dst->__refcnt);
862     + dst_hold(dst);
863     + return true;
864     +}
865     +
866     +/**
867     + * skb_dst_force_safe - makes sure skb dst is refcounted
868     + * @skb: buffer
869     + *
870     + * If dst is not yet refcounted and not destroyed, grab a ref on it.
871     + */
872     +static inline void skb_dst_force_safe(struct sk_buff *skb)
873     +{
874     + if (skb_dst_is_noref(skb)) {
875     + struct dst_entry *dst = skb_dst(skb);
876     +
877     + if (!dst_hold_safe(dst))
878     + dst = NULL;
879     +
880     + skb->_skb_refdst = (unsigned long)dst;
881     + }
882     +}
883     +
884    
885     /**
886     * __skb_tunnel_rx - prepare skb for rx reinsert
887     diff --git a/include/net/sock.h b/include/net/sock.h
888     index ed01a012f8d5..4c4b21c00828 100644
889     --- a/include/net/sock.h
890     +++ b/include/net/sock.h
891     @@ -386,6 +386,7 @@ struct sock {
892     sk_no_check_rx : 1,
893     sk_userlocks : 4,
894     sk_protocol : 8,
895     +#define SK_PROTOCOL_MAX U8_MAX
896     sk_type : 16;
897     kmemcheck_bitfield_end(flags);
898     int sk_wmem_queued;
899     @@ -722,6 +723,8 @@ enum sock_flags {
900     SOCK_SELECT_ERR_QUEUE, /* Wake select on error queue */
901     };
902    
903     +#define SK_FLAGS_TIMESTAMP ((1UL << SOCK_TIMESTAMP) | (1UL << SOCK_TIMESTAMPING_RX_SOFTWARE))
904     +
905     static inline void sock_copy_flags(struct sock *nsk, struct sock *osk)
906     {
907     nsk->sk_flags = osk->sk_flags;
908     @@ -796,7 +799,7 @@ void sk_stream_write_space(struct sock *sk);
909     static inline void __sk_add_backlog(struct sock *sk, struct sk_buff *skb)
910     {
911     /* dont let skb dst not refcounted, we are going to leave rcu lock */
912     - skb_dst_force(skb);
913     + skb_dst_force_safe(skb);
914    
915     if (!sk->sk_backlog.tail)
916     sk->sk_backlog.head = skb;
917     diff --git a/include/net/vxlan.h b/include/net/vxlan.h
918     index 0082b5d33d7d..7ef9272a405a 100644
919     --- a/include/net/vxlan.h
920     +++ b/include/net/vxlan.h
921     @@ -78,7 +78,7 @@ struct vxlanhdr {
922     };
923    
924     /* VXLAN header flags. */
925     -#define VXLAN_HF_RCO BIT(24)
926     +#define VXLAN_HF_RCO BIT(21)
927     #define VXLAN_HF_VNI BIT(27)
928     #define VXLAN_HF_GBP BIT(31)
929    
930     diff --git a/lib/rhashtable.c b/lib/rhashtable.c
931     index cf910e48f8f2..5b17447efa8b 100644
932     --- a/lib/rhashtable.c
933     +++ b/lib/rhashtable.c
934     @@ -506,10 +506,11 @@ int rhashtable_walk_init(struct rhashtable *ht, struct rhashtable_iter *iter)
935     if (!iter->walker)
936     return -ENOMEM;
937    
938     - mutex_lock(&ht->mutex);
939     - iter->walker->tbl = rht_dereference(ht->tbl, ht);
940     + spin_lock(&ht->lock);
941     + iter->walker->tbl =
942     + rcu_dereference_protected(ht->tbl, lockdep_is_held(&ht->lock));
943     list_add(&iter->walker->list, &iter->walker->tbl->walkers);
944     - mutex_unlock(&ht->mutex);
945     + spin_unlock(&ht->lock);
946    
947     return 0;
948     }
949     @@ -523,10 +524,10 @@ EXPORT_SYMBOL_GPL(rhashtable_walk_init);
950     */
951     void rhashtable_walk_exit(struct rhashtable_iter *iter)
952     {
953     - mutex_lock(&iter->ht->mutex);
954     + spin_lock(&iter->ht->lock);
955     if (iter->walker->tbl)
956     list_del(&iter->walker->list);
957     - mutex_unlock(&iter->ht->mutex);
958     + spin_unlock(&iter->ht->lock);
959     kfree(iter->walker);
960     }
961     EXPORT_SYMBOL_GPL(rhashtable_walk_exit);
962     @@ -550,14 +551,12 @@ int rhashtable_walk_start(struct rhashtable_iter *iter)
963     {
964     struct rhashtable *ht = iter->ht;
965    
966     - mutex_lock(&ht->mutex);
967     + rcu_read_lock();
968    
969     + spin_lock(&ht->lock);
970     if (iter->walker->tbl)
971     list_del(&iter->walker->list);
972     -
973     - rcu_read_lock();
974     -
975     - mutex_unlock(&ht->mutex);
976     + spin_unlock(&ht->lock);
977    
978     if (!iter->walker->tbl) {
979     iter->walker->tbl = rht_dereference_rcu(ht->tbl, ht);
980     @@ -730,9 +729,6 @@ int rhashtable_init(struct rhashtable *ht,
981     if (params->nulls_base && params->nulls_base < (1U << RHT_BASE_SHIFT))
982     return -EINVAL;
983    
984     - if (params->nelem_hint)
985     - size = rounded_hashtable_size(params);
986     -
987     memset(ht, 0, sizeof(*ht));
988     mutex_init(&ht->mutex);
989     spin_lock_init(&ht->lock);
990     @@ -752,6 +748,9 @@ int rhashtable_init(struct rhashtable *ht,
991    
992     ht->p.min_size = max(ht->p.min_size, HASH_MIN_SIZE);
993    
994     + if (params->nelem_hint)
995     + size = rounded_hashtable_size(&ht->p);
996     +
997     /* The maximum (not average) chain length grows with the
998     * size of the hash table, at a rate of (log N)/(log log N).
999     * The value of 16 is selected so that even if the hash
1000     diff --git a/net/ax25/af_ax25.c b/net/ax25/af_ax25.c
1001     index 330c1f4a5a0b..a64884bbf0ce 100644
1002     --- a/net/ax25/af_ax25.c
1003     +++ b/net/ax25/af_ax25.c
1004     @@ -806,6 +806,9 @@ static int ax25_create(struct net *net, struct socket *sock, int protocol,
1005     struct sock *sk;
1006     ax25_cb *ax25;
1007    
1008     + if (protocol < 0 || protocol > SK_PROTOCOL_MAX)
1009     + return -EINVAL;
1010     +
1011     if (!net_eq(net, &init_net))
1012     return -EAFNOSUPPORT;
1013    
1014     diff --git a/net/bluetooth/sco.c b/net/bluetooth/sco.c
1015     index 4322c833e748..8611bc7bdd32 100644
1016     --- a/net/bluetooth/sco.c
1017     +++ b/net/bluetooth/sco.c
1018     @@ -520,6 +520,9 @@ static int sco_sock_bind(struct socket *sock, struct sockaddr *addr, int addr_le
1019     if (!addr || addr->sa_family != AF_BLUETOOTH)
1020     return -EINVAL;
1021    
1022     + if (addr_len < sizeof(struct sockaddr_sco))
1023     + return -EINVAL;
1024     +
1025     lock_sock(sk);
1026    
1027     if (sk->sk_state != BT_OPEN) {
1028     diff --git a/net/core/skbuff.c b/net/core/skbuff.c
1029     index 075d2e78c87e..2e5fcda16570 100644
1030     --- a/net/core/skbuff.c
1031     +++ b/net/core/skbuff.c
1032     @@ -3661,7 +3661,8 @@ static void __skb_complete_tx_timestamp(struct sk_buff *skb,
1033     serr->ee.ee_info = tstype;
1034     if (sk->sk_tsflags & SOF_TIMESTAMPING_OPT_ID) {
1035     serr->ee.ee_data = skb_shinfo(skb)->tskey;
1036     - if (sk->sk_protocol == IPPROTO_TCP)
1037     + if (sk->sk_protocol == IPPROTO_TCP &&
1038     + sk->sk_type == SOCK_STREAM)
1039     serr->ee.ee_data -= sk->sk_tskey;
1040     }
1041    
1042     @@ -4200,7 +4201,8 @@ static struct sk_buff *skb_reorder_vlan_header(struct sk_buff *skb)
1043     return NULL;
1044     }
1045    
1046     - memmove(skb->data - ETH_HLEN, skb->data - VLAN_ETH_HLEN, 2 * ETH_ALEN);
1047     + memmove(skb->data - ETH_HLEN, skb->data - skb->mac_len - VLAN_HLEN,
1048     + 2 * ETH_ALEN);
1049     skb->mac_header += VLAN_HLEN;
1050     return skb;
1051     }
1052     diff --git a/net/core/sock.c b/net/core/sock.c
1053     index dc30dc5bb1b8..47fc8bb3b946 100644
1054     --- a/net/core/sock.c
1055     +++ b/net/core/sock.c
1056     @@ -421,8 +421,6 @@ static void sock_warn_obsolete_bsdism(const char *name)
1057     }
1058     }
1059    
1060     -#define SK_FLAGS_TIMESTAMP ((1UL << SOCK_TIMESTAMP) | (1UL << SOCK_TIMESTAMPING_RX_SOFTWARE))
1061     -
1062     static void sock_disable_timestamp(struct sock *sk, unsigned long flags)
1063     {
1064     if (sk->sk_flags & flags) {
1065     @@ -861,7 +859,8 @@ set_rcvbuf:
1066    
1067     if (val & SOF_TIMESTAMPING_OPT_ID &&
1068     !(sk->sk_tsflags & SOF_TIMESTAMPING_OPT_ID)) {
1069     - if (sk->sk_protocol == IPPROTO_TCP) {
1070     + if (sk->sk_protocol == IPPROTO_TCP &&
1071     + sk->sk_type == SOCK_STREAM) {
1072     if (sk->sk_state != TCP_ESTABLISHED) {
1073     ret = -EINVAL;
1074     break;
1075     diff --git a/net/decnet/af_decnet.c b/net/decnet/af_decnet.c
1076     index 754484b3cd0e..2783c538ec19 100644
1077     --- a/net/decnet/af_decnet.c
1078     +++ b/net/decnet/af_decnet.c
1079     @@ -678,6 +678,9 @@ static int dn_create(struct net *net, struct socket *sock, int protocol,
1080     {
1081     struct sock *sk;
1082    
1083     + if (protocol < 0 || protocol > SK_PROTOCOL_MAX)
1084     + return -EINVAL;
1085     +
1086     if (!net_eq(net, &init_net))
1087     return -EAFNOSUPPORT;
1088    
1089     diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c
1090     index a5aa54ea6533..0cc98b135b8f 100644
1091     --- a/net/ipv4/af_inet.c
1092     +++ b/net/ipv4/af_inet.c
1093     @@ -259,6 +259,9 @@ static int inet_create(struct net *net, struct socket *sock, int protocol,
1094     int try_loading_module = 0;
1095     int err;
1096    
1097     + if (protocol < 0 || protocol >= IPPROTO_MAX)
1098     + return -EINVAL;
1099     +
1100     sock->state = SS_UNCONNECTED;
1101    
1102     /* Look for the requested type/protocol pair. */
1103     diff --git a/net/ipv4/fou.c b/net/ipv4/fou.c
1104     index 34968cd5c146..4b67937692c9 100644
1105     --- a/net/ipv4/fou.c
1106     +++ b/net/ipv4/fou.c
1107     @@ -24,6 +24,7 @@ struct fou {
1108     u16 type;
1109     struct udp_offload udp_offloads;
1110     struct list_head list;
1111     + struct rcu_head rcu;
1112     };
1113    
1114     #define FOU_F_REMCSUM_NOPARTIAL BIT(0)
1115     @@ -421,7 +422,7 @@ static void fou_release(struct fou *fou)
1116     list_del(&fou->list);
1117     udp_tunnel_sock_release(sock);
1118    
1119     - kfree(fou);
1120     + kfree_rcu(fou, rcu);
1121     }
1122    
1123     static int fou_encap_init(struct sock *sk, struct fou *fou, struct fou_cfg *cfg)
1124     diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
1125     index 88203e755af8..cd18c3d3251e 100644
1126     --- a/net/ipv4/tcp_ipv4.c
1127     +++ b/net/ipv4/tcp_ipv4.c
1128     @@ -1509,7 +1509,7 @@ bool tcp_prequeue(struct sock *sk, struct sk_buff *skb)
1129     if (likely(sk->sk_rx_dst))
1130     skb_dst_drop(skb);
1131     else
1132     - skb_dst_force(skb);
1133     + skb_dst_force_safe(skb);
1134    
1135     __skb_queue_tail(&tp->ucopy.prequeue, skb);
1136     tp->ucopy.memory += skb->truesize;
1137     @@ -1714,8 +1714,7 @@ void inet_sk_rx_dst_set(struct sock *sk, const struct sk_buff *skb)
1138     {
1139     struct dst_entry *dst = skb_dst(skb);
1140    
1141     - if (dst) {
1142     - dst_hold(dst);
1143     + if (dst && dst_hold_safe(dst)) {
1144     sk->sk_rx_dst = dst;
1145     inet_sk(sk)->rx_dst_ifindex = skb->skb_iif;
1146     }
1147     diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
1148     index 986440b24978..1ea4322c3b0c 100644
1149     --- a/net/ipv4/tcp_output.c
1150     +++ b/net/ipv4/tcp_output.c
1151     @@ -3143,7 +3143,7 @@ static int tcp_send_syn_data(struct sock *sk, struct sk_buff *syn)
1152     {
1153     struct tcp_sock *tp = tcp_sk(sk);
1154     struct tcp_fastopen_request *fo = tp->fastopen_req;
1155     - int syn_loss = 0, space, err = 0, copied;
1156     + int syn_loss = 0, space, err = 0;
1157     unsigned long last_syn_loss = 0;
1158     struct sk_buff *syn_data;
1159    
1160     @@ -3181,17 +3181,18 @@ static int tcp_send_syn_data(struct sock *sk, struct sk_buff *syn)
1161     goto fallback;
1162     syn_data->ip_summed = CHECKSUM_PARTIAL;
1163     memcpy(syn_data->cb, syn->cb, sizeof(syn->cb));
1164     - copied = copy_from_iter(skb_put(syn_data, space), space,
1165     - &fo->data->msg_iter);
1166     - if (unlikely(!copied)) {
1167     - kfree_skb(syn_data);
1168     - goto fallback;
1169     - }
1170     - if (copied != space) {
1171     - skb_trim(syn_data, copied);
1172     - space = copied;
1173     + if (space) {
1174     + int copied = copy_from_iter(skb_put(syn_data, space), space,
1175     + &fo->data->msg_iter);
1176     + if (unlikely(!copied)) {
1177     + kfree_skb(syn_data);
1178     + goto fallback;
1179     + }
1180     + if (copied != space) {
1181     + skb_trim(syn_data, copied);
1182     + space = copied;
1183     + }
1184     }
1185     -
1186     /* No more data pending in inet_wait_for_connect() */
1187     if (space == fo->size)
1188     fo->data = NULL;
1189     diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
1190     index fd3aa6148dd1..a2d685030a34 100644
1191     --- a/net/ipv6/addrconf.c
1192     +++ b/net/ipv6/addrconf.c
1193     @@ -343,6 +343,12 @@ static struct inet6_dev *ipv6_add_dev(struct net_device *dev)
1194     setup_timer(&ndev->rs_timer, addrconf_rs_timer,
1195     (unsigned long)ndev);
1196     memcpy(&ndev->cnf, dev_net(dev)->ipv6.devconf_dflt, sizeof(ndev->cnf));
1197     +
1198     + if (ndev->cnf.stable_secret.initialized)
1199     + ndev->addr_gen_mode = IN6_ADDR_GEN_MODE_STABLE_PRIVACY;
1200     + else
1201     + ndev->addr_gen_mode = IN6_ADDR_GEN_MODE_EUI64;
1202     +
1203     ndev->cnf.mtu6 = dev->mtu;
1204     ndev->cnf.sysctl = NULL;
1205     ndev->nd_parms = neigh_parms_alloc(dev, &nd_tbl);
1206     @@ -2384,7 +2390,7 @@ ok:
1207     #ifdef CONFIG_IPV6_OPTIMISTIC_DAD
1208     if (in6_dev->cnf.optimistic_dad &&
1209     !net->ipv6.devconf_all->forwarding && sllao)
1210     - addr_flags = IFA_F_OPTIMISTIC;
1211     + addr_flags |= IFA_F_OPTIMISTIC;
1212     #endif
1213    
1214     /* Do not allow to create too much of autoconfigured
1215     diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c
1216     index 2d044d2a2ccf..bad62fa5e70f 100644
1217     --- a/net/ipv6/af_inet6.c
1218     +++ b/net/ipv6/af_inet6.c
1219     @@ -109,6 +109,9 @@ static int inet6_create(struct net *net, struct socket *sock, int protocol,
1220     int try_loading_module = 0;
1221     int err;
1222    
1223     + if (protocol < 0 || protocol >= IPPROTO_MAX)
1224     + return -EINVAL;
1225     +
1226     /* Look for the requested type/protocol pair. */
1227     lookup_protocol:
1228     err = -ESOCKTNOSUPPORT;
1229     diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c
1230     index 69f4f689f06a..76be7d311cc4 100644
1231     --- a/net/ipv6/ip6_gre.c
1232     +++ b/net/ipv6/ip6_gre.c
1233     @@ -1553,13 +1553,11 @@ static int ip6gre_changelink(struct net_device *dev, struct nlattr *tb[],
1234     return -EEXIST;
1235     } else {
1236     t = nt;
1237     -
1238     - ip6gre_tunnel_unlink(ign, t);
1239     - ip6gre_tnl_change(t, &p, !tb[IFLA_MTU]);
1240     - ip6gre_tunnel_link(ign, t);
1241     - netdev_state_change(dev);
1242     }
1243    
1244     + ip6gre_tunnel_unlink(ign, t);
1245     + ip6gre_tnl_change(t, &p, !tb[IFLA_MTU]);
1246     + ip6gre_tunnel_link(ign, t);
1247     return 0;
1248     }
1249    
1250     diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c
1251     index cfb27f56c62f..c1938ad39f8c 100644
1252     --- a/net/ipv6/tcp_ipv6.c
1253     +++ b/net/ipv6/tcp_ipv6.c
1254     @@ -93,10 +93,9 @@ static void inet6_sk_rx_dst_set(struct sock *sk, const struct sk_buff *skb)
1255     {
1256     struct dst_entry *dst = skb_dst(skb);
1257    
1258     - if (dst) {
1259     + if (dst && dst_hold_safe(dst)) {
1260     const struct rt6_info *rt = (const struct rt6_info *)dst;
1261    
1262     - dst_hold(dst);
1263     sk->sk_rx_dst = dst;
1264     inet_sk(sk)->rx_dst_ifindex = skb->skb_iif;
1265     if (rt->rt6i_node)
1266     diff --git a/net/irda/af_irda.c b/net/irda/af_irda.c
1267     index ee0ea25c8e7a..9a1edcde4ba5 100644
1268     --- a/net/irda/af_irda.c
1269     +++ b/net/irda/af_irda.c
1270     @@ -1086,6 +1086,9 @@ static int irda_create(struct net *net, struct socket *sock, int protocol,
1271     struct sock *sk;
1272     struct irda_sock *self;
1273    
1274     + if (protocol < 0 || protocol > SK_PROTOCOL_MAX)
1275     + return -EINVAL;
1276     +
1277     if (net != &init_net)
1278     return -EAFNOSUPPORT;
1279    
1280     diff --git a/net/sched/sch_api.c b/net/sched/sch_api.c
1281     index d4b6f3682c14..68c599a5e1d1 100644
1282     --- a/net/sched/sch_api.c
1283     +++ b/net/sched/sch_api.c
1284     @@ -950,7 +950,7 @@ qdisc_create(struct net_device *dev, struct netdev_queue *dev_queue,
1285     }
1286     lockdep_set_class(qdisc_lock(sch), &qdisc_tx_lock);
1287     if (!netif_is_multiqueue(dev))
1288     - sch->flags |= TCQ_F_ONETXQUEUE | TCQ_F_NOPARENT;
1289     + sch->flags |= TCQ_F_ONETXQUEUE;
1290     }
1291    
1292     sch->handle = handle;
1293     diff --git a/net/sctp/ipv6.c b/net/sctp/ipv6.c
1294     index 0e4198ee2370..3267a5cbb3e8 100644
1295     --- a/net/sctp/ipv6.c
1296     +++ b/net/sctp/ipv6.c
1297     @@ -634,6 +634,7 @@ static struct sock *sctp_v6_create_accept_sk(struct sock *sk,
1298     struct sock *newsk;
1299     struct ipv6_pinfo *newnp, *np = inet6_sk(sk);
1300     struct sctp6_sock *newsctp6sk;
1301     + struct ipv6_txoptions *opt;
1302    
1303     newsk = sk_alloc(sock_net(sk), PF_INET6, GFP_KERNEL, sk->sk_prot);
1304     if (!newsk)
1305     @@ -653,6 +654,13 @@ static struct sock *sctp_v6_create_accept_sk(struct sock *sk,
1306    
1307     memcpy(newnp, np, sizeof(struct ipv6_pinfo));
1308    
1309     + rcu_read_lock();
1310     + opt = rcu_dereference(np->opt);
1311     + if (opt)
1312     + opt = ipv6_dup_options(newsk, opt);
1313     + RCU_INIT_POINTER(newnp->opt, opt);
1314     + rcu_read_unlock();
1315     +
1316     /* Initialize sk's sport, dport, rcv_saddr and daddr for getsockname()
1317     * and getpeername().
1318     */
1319     diff --git a/net/sctp/sm_make_chunk.c b/net/sctp/sm_make_chunk.c
1320     index 06320c8c1c86..83a07d468644 100644
1321     --- a/net/sctp/sm_make_chunk.c
1322     +++ b/net/sctp/sm_make_chunk.c
1323     @@ -1652,7 +1652,7 @@ static sctp_cookie_param_t *sctp_pack_cookie(const struct sctp_endpoint *ep,
1324    
1325     /* Set an expiration time for the cookie. */
1326     cookie->c.expiration = ktime_add(asoc->cookie_life,
1327     - ktime_get());
1328     + ktime_get_real());
1329    
1330     /* Copy the peer's init packet. */
1331     memcpy(&cookie->c.peer_init[0], init_chunk->chunk_hdr,
1332     @@ -1780,7 +1780,7 @@ no_hmac:
1333     if (sock_flag(ep->base.sk, SOCK_TIMESTAMP))
1334     kt = skb_get_ktime(skb);
1335     else
1336     - kt = ktime_get();
1337     + kt = ktime_get_real();
1338    
1339     if (!asoc && ktime_before(bear_cookie->expiration, kt)) {
1340     /*
1341     diff --git a/net/sctp/socket.c b/net/sctp/socket.c
1342     index 66d796075050..a63c2c87a0c6 100644
1343     --- a/net/sctp/socket.c
1344     +++ b/net/sctp/socket.c
1345     @@ -7175,6 +7175,7 @@ void sctp_copy_sock(struct sock *newsk, struct sock *sk,
1346     newsk->sk_type = sk->sk_type;
1347     newsk->sk_bound_dev_if = sk->sk_bound_dev_if;
1348     newsk->sk_flags = sk->sk_flags;
1349     + newsk->sk_tsflags = sk->sk_tsflags;
1350     newsk->sk_no_check_tx = sk->sk_no_check_tx;
1351     newsk->sk_no_check_rx = sk->sk_no_check_rx;
1352     newsk->sk_reuse = sk->sk_reuse;
1353     @@ -7207,6 +7208,9 @@ void sctp_copy_sock(struct sock *newsk, struct sock *sk,
1354     newinet->mc_ttl = 1;
1355     newinet->mc_index = 0;
1356     newinet->mc_list = NULL;
1357     +
1358     + if (newsk->sk_flags & SK_FLAGS_TIMESTAMP)
1359     + net_enable_timestamp();
1360     }
1361    
1362     static inline void sctp_copy_descendant(struct sock *sk_to,
1363     diff --git a/net/socket.c b/net/socket.c
1364     index 884e32997698..dcbfa868e398 100644
1365     --- a/net/socket.c
1366     +++ b/net/socket.c
1367     @@ -1705,6 +1705,7 @@ SYSCALL_DEFINE6(recvfrom, int, fd, void __user *, ubuf, size_t, size,
1368     msg.msg_name = addr ? (struct sockaddr *)&address : NULL;
1369     /* We assume all kernel code knows the size of sockaddr_storage */
1370     msg.msg_namelen = 0;
1371     + msg.msg_iocb = NULL;
1372     if (sock->file->f_flags & O_NONBLOCK)
1373     flags |= MSG_DONTWAIT;
1374     err = sock_recvmsg(sock, &msg, iov_iter_count(&msg.msg_iter), flags);
1375     diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
1376     index 1975fd8d1c10..a398f624c28d 100644
1377     --- a/net/unix/af_unix.c
1378     +++ b/net/unix/af_unix.c
1379     @@ -2072,14 +2072,7 @@ static int unix_stream_recvmsg(struct socket *sock, struct msghdr *msg,
1380    
1381     memset(&scm, 0, sizeof(scm));
1382    
1383     - err = mutex_lock_interruptible(&u->readlock);
1384     - if (unlikely(err)) {
1385     - /* recvmsg() in non blocking mode is supposed to return -EAGAIN
1386     - * sk_rcvtimeo is not honored by mutex_lock_interruptible()
1387     - */
1388     - err = noblock ? -EAGAIN : -ERESTARTSYS;
1389     - goto out;
1390     - }
1391     + mutex_lock(&u->readlock);
1392    
1393     if (flags & MSG_PEEK)
1394     skip = sk_peek_offset(sk, flags);
1395     @@ -2120,12 +2113,12 @@ again:
1396    
1397     timeo = unix_stream_data_wait(sk, timeo, last);
1398    
1399     - if (signal_pending(current)
1400     - || mutex_lock_interruptible(&u->readlock)) {
1401     + if (signal_pending(current)) {
1402     err = sock_intr_errno(timeo);
1403     goto out;
1404     }
1405    
1406     + mutex_lock(&u->readlock);
1407     continue;
1408     unlock:
1409     unix_state_unlock(sk);
1410     diff --git a/security/keys/gc.c b/security/keys/gc.c
1411     index c7952375ac53..addf060399e0 100644
1412     --- a/security/keys/gc.c
1413     +++ b/security/keys/gc.c
1414     @@ -134,6 +134,12 @@ static noinline void key_gc_unused_keys(struct list_head *keys)
1415     kdebug("- %u", key->serial);
1416     key_check(key);
1417    
1418     + /* Throw away the key data if the key is instantiated */
1419     + if (test_bit(KEY_FLAG_INSTANTIATED, &key->flags) &&
1420     + !test_bit(KEY_FLAG_NEGATIVE, &key->flags) &&
1421     + key->type->destroy)
1422     + key->type->destroy(key);
1423     +
1424     security_key_free(key);
1425    
1426     /* deal with the user's key tracking and quota */
1427     @@ -148,10 +154,6 @@ static noinline void key_gc_unused_keys(struct list_head *keys)
1428     if (test_bit(KEY_FLAG_INSTANTIATED, &key->flags))
1429     atomic_dec(&key->user->nikeys);
1430    
1431     - /* now throw away the key memory */
1432     - if (key->type->destroy)
1433     - key->type->destroy(key);
1434     -
1435     key_user_put(key->user);
1436    
1437     kfree(key->description);
1438     diff --git a/security/keys/keyctl.c b/security/keys/keyctl.c
1439     index 0b9ec78a7a7a..26f0e0a11ed6 100644
1440     --- a/security/keys/keyctl.c
1441     +++ b/security/keys/keyctl.c
1442     @@ -757,16 +757,16 @@ long keyctl_read_key(key_serial_t keyid, char __user *buffer, size_t buflen)
1443    
1444     /* the key is probably readable - now try to read it */
1445     can_read_key:
1446     - ret = key_validate(key);
1447     - if (ret == 0) {
1448     - ret = -EOPNOTSUPP;
1449     - if (key->type->read) {
1450     - /* read the data with the semaphore held (since we
1451     - * might sleep) */
1452     - down_read(&key->sem);
1453     + ret = -EOPNOTSUPP;
1454     + if (key->type->read) {
1455     + /* Read the data with the semaphore held (since we might sleep)
1456     + * to protect against the key being updated or revoked.
1457     + */
1458     + down_read(&key->sem);
1459     + ret = key_validate(key);
1460     + if (ret == 0)
1461     ret = key->type->read(key, buffer, buflen);
1462     - up_read(&key->sem);
1463     - }
1464     + up_read(&key->sem);
1465     }
1466    
1467     error2:
1468     diff --git a/security/keys/process_keys.c b/security/keys/process_keys.c
1469     index bd536cb221e2..db91639c81e3 100644
1470     --- a/security/keys/process_keys.c
1471     +++ b/security/keys/process_keys.c
1472     @@ -794,6 +794,7 @@ long join_session_keyring(const char *name)
1473     ret = PTR_ERR(keyring);
1474     goto error2;
1475     } else if (keyring == new->session_keyring) {
1476     + key_put(keyring);
1477     ret = 0;
1478     goto error2;
1479     }