Magellan Linux

Annotation of /trunk/kernel-alx-legacy/patches-4.9/0309-4.9.210-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3608 - (hide annotations) (download)
Fri Aug 14 07:34:29 2020 UTC (3 years, 10 months ago) by niro
File size: 33083 byte(s)
-added kerenl-alx-legacy pkg
1 niro 3608 diff --git a/Makefile b/Makefile
2     index ed9a08ab3772..aa871ec44dd9 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,6 +1,6 @@
6     VERSION = 4
7     PATCHLEVEL = 9
8     -SUBLEVEL = 209
9     +SUBLEVEL = 210
10     EXTRAVERSION =
11     NAME = Roaring Lionus
12    
13     diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c b/drivers/gpu/drm/drm_dp_mst_topology.c
14     index f68dcf5790ad..e05dda92398c 100644
15     --- a/drivers/gpu/drm/drm_dp_mst_topology.c
16     +++ b/drivers/gpu/drm/drm_dp_mst_topology.c
17     @@ -272,7 +272,7 @@ static void drm_dp_encode_sideband_req(struct drm_dp_sideband_msg_req_body *req,
18     memcpy(&buf[idx], req->u.i2c_read.transactions[i].bytes, req->u.i2c_read.transactions[i].num_bytes);
19     idx += req->u.i2c_read.transactions[i].num_bytes;
20    
21     - buf[idx] = (req->u.i2c_read.transactions[i].no_stop_bit & 0x1) << 5;
22     + buf[idx] = (req->u.i2c_read.transactions[i].no_stop_bit & 0x1) << 4;
23     buf[idx] |= (req->u.i2c_read.transactions[i].i2c_transaction_delay & 0xf);
24     idx++;
25     }
26     diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
27     index 62bcc770a181..b935d62be918 100644
28     --- a/drivers/gpu/drm/i915/intel_lrc.c
29     +++ b/drivers/gpu/drm/i915/intel_lrc.c
30     @@ -1017,6 +1017,8 @@ static int gen9_init_indirectctx_bb(struct intel_engine_cs *engine,
31     int ret;
32     struct drm_i915_private *dev_priv = engine->i915;
33     uint32_t index = wa_ctx_start(wa_ctx, *offset, CACHELINE_DWORDS);
34     + u32 scratch_addr =
35     + i915_ggtt_offset(engine->scratch) + 2 * CACHELINE_BYTES;
36    
37     /* WaDisableCtxRestoreArbitration:skl,bxt */
38     if (IS_SKL_REVID(dev_priv, 0, SKL_REVID_D0) ||
39     @@ -1036,22 +1038,17 @@ static int gen9_init_indirectctx_bb(struct intel_engine_cs *engine,
40     GEN9_DISABLE_GATHER_AT_SET_SHADER_COMMON_SLICE));
41     wa_ctx_emit(batch, index, MI_NOOP);
42    
43     - /* WaClearSlmSpaceAtContextSwitch:kbl */
44     + /* WaClearSlmSpaceAtContextSwitch:skl,bxt,kbl,glk,cfl */
45     /* Actual scratch location is at 128 bytes offset */
46     - if (IS_KBL_REVID(dev_priv, 0, KBL_REVID_A0)) {
47     - u32 scratch_addr =
48     - i915_ggtt_offset(engine->scratch) + 2 * CACHELINE_BYTES;
49     -
50     - wa_ctx_emit(batch, index, GFX_OP_PIPE_CONTROL(6));
51     - wa_ctx_emit(batch, index, (PIPE_CONTROL_FLUSH_L3 |
52     - PIPE_CONTROL_GLOBAL_GTT_IVB |
53     - PIPE_CONTROL_CS_STALL |
54     - PIPE_CONTROL_QW_WRITE));
55     - wa_ctx_emit(batch, index, scratch_addr);
56     - wa_ctx_emit(batch, index, 0);
57     - wa_ctx_emit(batch, index, 0);
58     - wa_ctx_emit(batch, index, 0);
59     - }
60     + wa_ctx_emit(batch, index, GFX_OP_PIPE_CONTROL(6));
61     + wa_ctx_emit(batch, index, (PIPE_CONTROL_FLUSH_L3 |
62     + PIPE_CONTROL_GLOBAL_GTT_IVB |
63     + PIPE_CONTROL_CS_STALL |
64     + PIPE_CONTROL_QW_WRITE));
65     + wa_ctx_emit(batch, index, scratch_addr);
66     + wa_ctx_emit(batch, index, 0);
67     + wa_ctx_emit(batch, index, 0);
68     + wa_ctx_emit(batch, index, 0);
69    
70     /* WaMediaPoolStateCmdInWABB:bxt */
71     if (HAS_POOLED_EU(engine->i915)) {
72     diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
73     index c89eb3c3965c..e382d6f23097 100644
74     --- a/drivers/hid/hid-core.c
75     +++ b/drivers/hid/hid-core.c
76     @@ -269,6 +269,12 @@ static int hid_add_field(struct hid_parser *parser, unsigned report_type, unsign
77     offset = report->size;
78     report->size += parser->global.report_size * parser->global.report_count;
79    
80     + /* Total size check: Allow for possible report index byte */
81     + if (report->size > (HID_MAX_BUFFER_SIZE - 1) << 3) {
82     + hid_err(parser->device, "report is too long\n");
83     + return -1;
84     + }
85     +
86     if (!parser->local.usage_index) /* Ignore padding fields */
87     return 0;
88    
89     diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c
90     index 9f7b1cf726a8..26e967730997 100644
91     --- a/drivers/hid/hid-input.c
92     +++ b/drivers/hid/hid-input.c
93     @@ -1026,9 +1026,15 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
94     }
95    
96     mapped:
97     - if (device->driver->input_mapped && device->driver->input_mapped(device,
98     - hidinput, field, usage, &bit, &max) < 0)
99     - goto ignore;
100     + if (device->driver->input_mapped &&
101     + device->driver->input_mapped(device, hidinput, field, usage,
102     + &bit, &max) < 0) {
103     + /*
104     + * The driver indicated that no further generic handling
105     + * of the usage is desired.
106     + */
107     + return;
108     + }
109    
110     set_bit(usage->type, input->evbit);
111    
112     @@ -1087,9 +1093,11 @@ mapped:
113     set_bit(MSC_SCAN, input->mscbit);
114     }
115    
116     -ignore:
117     return;
118    
119     +ignore:
120     + usage->type = 0;
121     + usage->code = 0;
122     }
123    
124     void hidinput_hid_event(struct hid_device *hid, struct hid_field *field, struct hid_usage *usage, __s32 value)
125     diff --git a/drivers/hid/uhid.c b/drivers/hid/uhid.c
126     index d02ee5304217..d9b46da0e0aa 100644
127     --- a/drivers/hid/uhid.c
128     +++ b/drivers/hid/uhid.c
129     @@ -26,6 +26,7 @@
130     #include <linux/uhid.h>
131     #include <linux/wait.h>
132     #include <linux/uaccess.h>
133     +#include <linux/eventpoll.h>
134    
135     #define UHID_NAME "uhid"
136     #define UHID_BUFSIZE 32
137     @@ -774,7 +775,7 @@ static unsigned int uhid_char_poll(struct file *file, poll_table *wait)
138     if (uhid->head != uhid->tail)
139     return POLLIN | POLLRDNORM;
140    
141     - return 0;
142     + return EPOLLOUT | EPOLLWRNORM;
143     }
144    
145     static const struct file_operations uhid_fops = {
146     diff --git a/drivers/input/input.c b/drivers/input/input.c
147     index d95c34ee5dc1..5d94fc3fce0b 100644
148     --- a/drivers/input/input.c
149     +++ b/drivers/input/input.c
150     @@ -850,16 +850,18 @@ static int input_default_setkeycode(struct input_dev *dev,
151     }
152     }
153    
154     - __clear_bit(*old_keycode, dev->keybit);
155     - __set_bit(ke->keycode, dev->keybit);
156     -
157     - for (i = 0; i < dev->keycodemax; i++) {
158     - if (input_fetch_keycode(dev, i) == *old_keycode) {
159     - __set_bit(*old_keycode, dev->keybit);
160     - break; /* Setting the bit twice is useless, so break */
161     + if (*old_keycode <= KEY_MAX) {
162     + __clear_bit(*old_keycode, dev->keybit);
163     + for (i = 0; i < dev->keycodemax; i++) {
164     + if (input_fetch_keycode(dev, i) == *old_keycode) {
165     + __set_bit(*old_keycode, dev->keybit);
166     + /* Setting the bit twice is useless, so break */
167     + break;
168     + }
169     }
170     }
171    
172     + __set_bit(ke->keycode, dev->keybit);
173     return 0;
174     }
175    
176     @@ -915,9 +917,13 @@ int input_set_keycode(struct input_dev *dev,
177     * Simulate keyup event if keycode is not present
178     * in the keymap anymore
179     */
180     - if (test_bit(EV_KEY, dev->evbit) &&
181     - !is_event_supported(old_keycode, dev->keybit, KEY_MAX) &&
182     - __test_and_clear_bit(old_keycode, dev->key)) {
183     + if (old_keycode > KEY_MAX) {
184     + dev_warn(dev->dev.parent ?: &dev->dev,
185     + "%s: got too big old keycode %#x\n",
186     + __func__, old_keycode);
187     + } else if (test_bit(EV_KEY, dev->evbit) &&
188     + !is_event_supported(old_keycode, dev->keybit, KEY_MAX) &&
189     + __test_and_clear_bit(old_keycode, dev->key)) {
190     struct input_value vals[] = {
191     { EV_KEY, old_keycode, 0 },
192     input_value_sync
193     diff --git a/drivers/net/can/mscan/mscan.c b/drivers/net/can/mscan/mscan.c
194     index acb708fc1463..0a7d818a06f3 100644
195     --- a/drivers/net/can/mscan/mscan.c
196     +++ b/drivers/net/can/mscan/mscan.c
197     @@ -392,13 +392,12 @@ static int mscan_rx_poll(struct napi_struct *napi, int quota)
198     struct net_device *dev = napi->dev;
199     struct mscan_regs __iomem *regs = priv->reg_base;
200     struct net_device_stats *stats = &dev->stats;
201     - int npackets = 0;
202     - int ret = 1;
203     + int work_done = 0;
204     struct sk_buff *skb;
205     struct can_frame *frame;
206     u8 canrflg;
207    
208     - while (npackets < quota) {
209     + while (work_done < quota) {
210     canrflg = in_8(&regs->canrflg);
211     if (!(canrflg & (MSCAN_RXF | MSCAN_ERR_IF)))
212     break;
213     @@ -419,18 +418,18 @@ static int mscan_rx_poll(struct napi_struct *napi, int quota)
214    
215     stats->rx_packets++;
216     stats->rx_bytes += frame->can_dlc;
217     - npackets++;
218     + work_done++;
219     netif_receive_skb(skb);
220     }
221    
222     - if (!(in_8(&regs->canrflg) & (MSCAN_RXF | MSCAN_ERR_IF))) {
223     - napi_complete(&priv->napi);
224     - clear_bit(F_RX_PROGRESS, &priv->flags);
225     - if (priv->can.state < CAN_STATE_BUS_OFF)
226     - out_8(&regs->canrier, priv->shadow_canrier);
227     - ret = 0;
228     + if (work_done < quota) {
229     + if (likely(napi_complete_done(&priv->napi, work_done))) {
230     + clear_bit(F_RX_PROGRESS, &priv->flags);
231     + if (priv->can.state < CAN_STATE_BUS_OFF)
232     + out_8(&regs->canrier, priv->shadow_canrier);
233     + }
234     }
235     - return ret;
236     + return work_done;
237     }
238    
239     static irqreturn_t mscan_isr(int irq, void *dev_id)
240     diff --git a/drivers/net/can/usb/gs_usb.c b/drivers/net/can/usb/gs_usb.c
241     index 014b9ae3dc17..a65203e6ea5f 100644
242     --- a/drivers/net/can/usb/gs_usb.c
243     +++ b/drivers/net/can/usb/gs_usb.c
244     @@ -927,7 +927,7 @@ static int gs_usb_probe(struct usb_interface *intf,
245     GS_USB_BREQ_HOST_FORMAT,
246     USB_DIR_OUT|USB_TYPE_VENDOR|USB_RECIP_INTERFACE,
247     1,
248     - intf->altsetting[0].desc.bInterfaceNumber,
249     + intf->cur_altsetting->desc.bInterfaceNumber,
250     hconf,
251     sizeof(*hconf),
252     1000);
253     @@ -950,7 +950,7 @@ static int gs_usb_probe(struct usb_interface *intf,
254     GS_USB_BREQ_DEVICE_CONFIG,
255     USB_DIR_IN|USB_TYPE_VENDOR|USB_RECIP_INTERFACE,
256     1,
257     - intf->altsetting[0].desc.bInterfaceNumber,
258     + intf->cur_altsetting->desc.bInterfaceNumber,
259     dconf,
260     sizeof(*dconf),
261     1000);
262     diff --git a/drivers/net/wireless/marvell/mwifiex/pcie.c b/drivers/net/wireless/marvell/mwifiex/pcie.c
263     index 38d45a77c06b..d0743bd25ba9 100644
264     --- a/drivers/net/wireless/marvell/mwifiex/pcie.c
265     +++ b/drivers/net/wireless/marvell/mwifiex/pcie.c
266     @@ -976,8 +976,10 @@ static int mwifiex_pcie_alloc_cmdrsp_buf(struct mwifiex_adapter *adapter)
267     }
268     skb_put(skb, MWIFIEX_UPLD_SIZE);
269     if (mwifiex_map_pci_memory(adapter, skb, MWIFIEX_UPLD_SIZE,
270     - PCI_DMA_FROMDEVICE))
271     + PCI_DMA_FROMDEVICE)) {
272     + kfree_skb(skb);
273     return -1;
274     + }
275    
276     card->cmdrsp_buf = skb;
277    
278     diff --git a/drivers/net/wireless/marvell/mwifiex/sta_ioctl.c b/drivers/net/wireless/marvell/mwifiex/sta_ioctl.c
279     index 478885afb6c6..be3be7a63cf0 100644
280     --- a/drivers/net/wireless/marvell/mwifiex/sta_ioctl.c
281     +++ b/drivers/net/wireless/marvell/mwifiex/sta_ioctl.c
282     @@ -271,6 +271,14 @@ static int mwifiex_process_country_ie(struct mwifiex_private *priv,
283     "11D: skip setting domain info in FW\n");
284     return 0;
285     }
286     +
287     + if (country_ie_len >
288     + (IEEE80211_COUNTRY_STRING_LEN + MWIFIEX_MAX_TRIPLET_802_11D)) {
289     + mwifiex_dbg(priv->adapter, ERROR,
290     + "11D: country_ie_len overflow!, deauth AP\n");
291     + return -EINVAL;
292     + }
293     +
294     memcpy(priv->adapter->country_code, &country_ie[2], 2);
295    
296     domain_info->country_code[0] = country_ie[2];
297     @@ -314,8 +322,9 @@ int mwifiex_bss_start(struct mwifiex_private *priv, struct cfg80211_bss *bss,
298     priv->scan_block = false;
299    
300     if (bss) {
301     - if (adapter->region_code == 0x00)
302     - mwifiex_process_country_ie(priv, bss);
303     + if (adapter->region_code == 0x00 &&
304     + mwifiex_process_country_ie(priv, bss))
305     + return -EINVAL;
306    
307     /* Allocate and fill new bss descriptor */
308     bss_desc = kzalloc(sizeof(struct mwifiex_bssdescriptor),
309     diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
310     index 6d34d442294a..e588a0365257 100644
311     --- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
312     +++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
313     @@ -5422,6 +5422,7 @@ static int rtl8xxxu_submit_int_urb(struct ieee80211_hw *hw)
314     ret = usb_submit_urb(urb, GFP_KERNEL);
315     if (ret) {
316     usb_unanchor_urb(urb);
317     + usb_free_urb(urb);
318     goto error;
319     }
320    
321     diff --git a/drivers/scsi/bfa/bfad_attr.c b/drivers/scsi/bfa/bfad_attr.c
322     index d0a504af5b4f..0a70d54a4df6 100644
323     --- a/drivers/scsi/bfa/bfad_attr.c
324     +++ b/drivers/scsi/bfa/bfad_attr.c
325     @@ -283,8 +283,10 @@ bfad_im_get_stats(struct Scsi_Host *shost)
326     rc = bfa_port_get_stats(BFA_FCPORT(&bfad->bfa),
327     fcstats, bfad_hcb_comp, &fcomp);
328     spin_unlock_irqrestore(&bfad->bfad_lock, flags);
329     - if (rc != BFA_STATUS_OK)
330     + if (rc != BFA_STATUS_OK) {
331     + kfree(fcstats);
332     return NULL;
333     + }
334    
335     wait_for_completion(&fcomp.comp);
336    
337     diff --git a/drivers/staging/comedi/drivers/adv_pci1710.c b/drivers/staging/comedi/drivers/adv_pci1710.c
338     index 2c1b6de30da8..385e14269870 100644
339     --- a/drivers/staging/comedi/drivers/adv_pci1710.c
340     +++ b/drivers/staging/comedi/drivers/adv_pci1710.c
341     @@ -45,8 +45,8 @@
342     #define PCI171X_RANGE_UNI BIT(4)
343     #define PCI171X_RANGE_GAIN(x) (((x) & 0x7) << 0)
344     #define PCI171X_MUX_REG 0x04 /* W: A/D multiplexor control */
345     -#define PCI171X_MUX_CHANH(x) (((x) & 0xf) << 8)
346     -#define PCI171X_MUX_CHANL(x) (((x) & 0xf) << 0)
347     +#define PCI171X_MUX_CHANH(x) (((x) & 0xff) << 8)
348     +#define PCI171X_MUX_CHANL(x) (((x) & 0xff) << 0)
349     #define PCI171X_MUX_CHAN(x) (PCI171X_MUX_CHANH(x) | PCI171X_MUX_CHANL(x))
350     #define PCI171X_STATUS_REG 0x06 /* R: status register */
351     #define PCI171X_STATUS_IRQ BIT(11) /* 1=IRQ occurred */
352     diff --git a/drivers/staging/rtl8188eu/os_dep/usb_intf.c b/drivers/staging/rtl8188eu/os_dep/usb_intf.c
353     index bfcf9e55f3c6..537a99eba6af 100644
354     --- a/drivers/staging/rtl8188eu/os_dep/usb_intf.c
355     +++ b/drivers/staging/rtl8188eu/os_dep/usb_intf.c
356     @@ -45,6 +45,7 @@ static struct usb_device_id rtw_usb_id_tbl[] = {
357     {USB_DEVICE(0x2001, 0x3311)}, /* DLink GO-USB-N150 REV B1 */
358     {USB_DEVICE(0x2001, 0x331B)}, /* D-Link DWA-121 rev B1 */
359     {USB_DEVICE(0x2357, 0x010c)}, /* TP-Link TL-WN722N v2 */
360     + {USB_DEVICE(0x2357, 0x0111)}, /* TP-Link TL-WN727N v5.21 */
361     {USB_DEVICE(0x0df6, 0x0076)}, /* Sitecom N150 v2 */
362     {USB_DEVICE(USB_VENDER_ID_REALTEK, 0xffef)}, /* Rosewill RNX-N150NUB */
363     {} /* Terminating entry */
364     diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h
365     index 4832666cc580..5422ec1222ce 100644
366     --- a/drivers/staging/vt6656/device.h
367     +++ b/drivers/staging/vt6656/device.h
368     @@ -269,6 +269,7 @@ struct vnt_private {
369     u8 mac_hw;
370     /* netdev */
371     struct usb_device *usb;
372     + struct usb_interface *intf;
373    
374     u64 tsf_time;
375     u8 rx_rate;
376     diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c
377     index b1955378852a..78b09640bcf0 100644
378     --- a/drivers/staging/vt6656/main_usb.c
379     +++ b/drivers/staging/vt6656/main_usb.c
380     @@ -972,6 +972,7 @@ vt6656_probe(struct usb_interface *intf, const struct usb_device_id *id)
381     priv = hw->priv;
382     priv->hw = hw;
383     priv->usb = udev;
384     + priv->intf = intf;
385    
386     vnt_set_options(priv);
387    
388     diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c
389     index 95faaeb7432a..4dc3521932ba 100644
390     --- a/drivers/staging/vt6656/wcmd.c
391     +++ b/drivers/staging/vt6656/wcmd.c
392     @@ -110,6 +110,7 @@ void vnt_run_command(struct work_struct *work)
393     if (vnt_init(priv)) {
394     /* If fail all ends TODO retry */
395     dev_err(&priv->usb->dev, "failed to start\n");
396     + usb_set_intfdata(priv->intf, NULL);
397     ieee80211_free_hw(priv->hw);
398     return;
399     }
400     diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c
401     index ae118e68b406..3701b240fcb3 100644
402     --- a/drivers/tty/serial/serial_core.c
403     +++ b/drivers/tty/serial/serial_core.c
404     @@ -2795,6 +2795,7 @@ int uart_add_one_port(struct uart_driver *drv, struct uart_port *uport)
405     if (uport->cons && uport->dev)
406     of_console_check(uport->dev->of_node, uport->cons->name, uport->line);
407    
408     + tty_port_link_device(port, drv->tty_driver, uport->line);
409     uart_configure_port(drv, state, uport);
410    
411     port->console = uart_console(uport);
412     diff --git a/drivers/usb/chipidea/host.c b/drivers/usb/chipidea/host.c
413     index 111b0e0b8698..2178fe7a417b 100644
414     --- a/drivers/usb/chipidea/host.c
415     +++ b/drivers/usb/chipidea/host.c
416     @@ -37,6 +37,7 @@ static int (*orig_bus_suspend)(struct usb_hcd *hcd);
417    
418     struct ehci_ci_priv {
419     struct regulator *reg_vbus;
420     + bool enabled;
421     };
422    
423     static int ehci_ci_portpower(struct usb_hcd *hcd, int portnum, bool enable)
424     @@ -48,7 +49,7 @@ static int ehci_ci_portpower(struct usb_hcd *hcd, int portnum, bool enable)
425     int ret = 0;
426     int port = HCS_N_PORTS(ehci->hcs_params);
427    
428     - if (priv->reg_vbus) {
429     + if (priv->reg_vbus && enable != priv->enabled) {
430     if (port > 1) {
431     dev_warn(dev,
432     "Not support multi-port regulator control\n");
433     @@ -64,6 +65,7 @@ static int ehci_ci_portpower(struct usb_hcd *hcd, int portnum, bool enable)
434     enable ? "enable" : "disable", ret);
435     return ret;
436     }
437     + priv->enabled = enable;
438     }
439    
440     if (enable && (ci->platdata->phy_mode == USBPHY_INTERFACE_MODE_HSIC)) {
441     diff --git a/drivers/usb/core/config.c b/drivers/usb/core/config.c
442     index 32f5ccd5f2c7..edf66b2f916b 100644
443     --- a/drivers/usb/core/config.c
444     +++ b/drivers/usb/core/config.c
445     @@ -387,12 +387,16 @@ static int usb_parse_endpoint(struct device *ddev, int cfgno,
446     endpoint->desc.wMaxPacketSize = cpu_to_le16(8);
447     }
448    
449     - /* Validate the wMaxPacketSize field */
450     + /*
451     + * Validate the wMaxPacketSize field.
452     + * Some devices have isochronous endpoints in altsetting 0;
453     + * the USB-2 spec requires such endpoints to have wMaxPacketSize = 0
454     + * (see the end of section 5.6.3), so don't warn about them.
455     + */
456     maxp = usb_endpoint_maxp(&endpoint->desc);
457     - if (maxp == 0) {
458     - dev_warn(ddev, "config %d interface %d altsetting %d endpoint 0x%X has wMaxPacketSize 0, skipping\n",
459     + if (maxp == 0 && !(usb_endpoint_xfer_isoc(d) && asnum == 0)) {
460     + dev_warn(ddev, "config %d interface %d altsetting %d endpoint 0x%X has invalid wMaxPacketSize 0\n",
461     cfgno, inum, asnum, d->bEndpointAddress);
462     - goto skip_to_next_endpoint_or_interface_descriptor;
463     }
464    
465     /* Find the highest legal maxpacket size for this endpoint */
466     diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
467     index 579aa9accafc..c232229162e0 100644
468     --- a/drivers/usb/musb/musb_core.c
469     +++ b/drivers/usb/musb/musb_core.c
470     @@ -1832,6 +1832,9 @@ static const struct attribute_group musb_attr_group = {
471     #define MUSB_QUIRK_B_INVALID_VBUS_91 (MUSB_DEVCTL_BDEVICE | \
472     (2 << MUSB_DEVCTL_VBUS_SHIFT) | \
473     MUSB_DEVCTL_SESSION)
474     +#define MUSB_QUIRK_B_DISCONNECT_99 (MUSB_DEVCTL_BDEVICE | \
475     + (3 << MUSB_DEVCTL_VBUS_SHIFT) | \
476     + MUSB_DEVCTL_SESSION)
477     #define MUSB_QUIRK_A_DISCONNECT_19 ((3 << MUSB_DEVCTL_VBUS_SHIFT) | \
478     MUSB_DEVCTL_SESSION)
479    
480     @@ -1854,6 +1857,11 @@ static void musb_pm_runtime_check_session(struct musb *musb)
481     s = MUSB_DEVCTL_FSDEV | MUSB_DEVCTL_LSDEV |
482     MUSB_DEVCTL_HR;
483     switch (devctl & ~s) {
484     + case MUSB_QUIRK_B_DISCONNECT_99:
485     + musb_dbg(musb, "Poll devctl in case of suspend after disconnect\n");
486     + schedule_delayed_work(&musb->irq_work,
487     + msecs_to_jiffies(1000));
488     + break;
489     case MUSB_QUIRK_B_INVALID_VBUS_91:
490     if (musb->quirk_retries--) {
491     musb_dbg(musb,
492     @@ -2309,6 +2317,9 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl)
493     musb_platform_disable(musb);
494     musb_generic_disable(musb);
495    
496     + /* MUSB_POWER_SOFTCONN might be already set, JZ4740 does this. */
497     + musb_writeb(musb->mregs, MUSB_POWER, 0);
498     +
499     /* Init IRQ workqueue before request_irq */
500     INIT_DELAYED_WORK(&musb->irq_work, musb_irq_work);
501     INIT_DELAYED_WORK(&musb->deassert_reset_work, musb_deassert_reset);
502     diff --git a/drivers/usb/musb/musbhsdma.c b/drivers/usb/musb/musbhsdma.c
503     index 512108e22d2b..1dc35ab31275 100644
504     --- a/drivers/usb/musb/musbhsdma.c
505     +++ b/drivers/usb/musb/musbhsdma.c
506     @@ -399,7 +399,7 @@ struct dma_controller *musbhs_dma_controller_create(struct musb *musb,
507     controller->controller.channel_abort = dma_channel_abort;
508    
509     if (request_irq(irq, dma_controller_irq, 0,
510     - dev_name(musb->controller), &controller->controller)) {
511     + dev_name(musb->controller), controller)) {
512     dev_err(dev, "request_irq %d failed!\n", irq);
513     musb_dma_controller_destroy(&controller->controller);
514    
515     diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
516     index 2d302ff62cc1..5ea4cd10abc7 100644
517     --- a/drivers/usb/serial/option.c
518     +++ b/drivers/usb/serial/option.c
519     @@ -566,6 +566,9 @@ static void option_instat_callback(struct urb *urb);
520     /* Interface is reserved */
521     #define RSVD(ifnum) ((BIT(ifnum) & 0xff) << 0)
522    
523     +/* Device needs ZLP */
524     +#define ZLP BIT(17)
525     +
526    
527     static const struct usb_device_id option_ids[] = {
528     { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) },
529     @@ -1193,6 +1196,8 @@ static const struct usb_device_id option_ids[] = {
530     .driver_info = NCTRL(0) | RSVD(1) },
531     { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1901, 0xff), /* Telit LN940 (MBIM) */
532     .driver_info = NCTRL(0) },
533     + { USB_DEVICE(TELIT_VENDOR_ID, 0x9010), /* Telit SBL FN980 flashing device */
534     + .driver_info = NCTRL(0) | ZLP },
535     { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MF622, 0xff, 0xff, 0xff) }, /* ZTE WCDMA products */
536     { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0002, 0xff, 0xff, 0xff),
537     .driver_info = RSVD(1) },
538     @@ -2097,6 +2102,9 @@ static int option_attach(struct usb_serial *serial)
539     if (!(device_flags & NCTRL(iface_desc->bInterfaceNumber)))
540     data->use_send_setup = 1;
541    
542     + if (device_flags & ZLP)
543     + data->use_zlp = 1;
544     +
545     spin_lock_init(&data->susp_lock);
546    
547     usb_set_serial_data(serial, data);
548     diff --git a/drivers/usb/serial/usb-wwan.h b/drivers/usb/serial/usb-wwan.h
549     index 44b25c08c68a..1d0e28538346 100644
550     --- a/drivers/usb/serial/usb-wwan.h
551     +++ b/drivers/usb/serial/usb-wwan.h
552     @@ -35,6 +35,7 @@ struct usb_wwan_intf_private {
553     spinlock_t susp_lock;
554     unsigned int suspended:1;
555     unsigned int use_send_setup:1;
556     + unsigned int use_zlp:1;
557     int in_flight;
558     unsigned int open_ports;
559     void *private;
560     diff --git a/drivers/usb/serial/usb_wwan.c b/drivers/usb/serial/usb_wwan.c
561     index 3dfdfc81254b..93c696e2131f 100644
562     --- a/drivers/usb/serial/usb_wwan.c
563     +++ b/drivers/usb/serial/usb_wwan.c
564     @@ -495,6 +495,7 @@ static struct urb *usb_wwan_setup_urb(struct usb_serial_port *port,
565     void (*callback) (struct urb *))
566     {
567     struct usb_serial *serial = port->serial;
568     + struct usb_wwan_intf_private *intfdata = usb_get_serial_data(serial);
569     struct urb *urb;
570    
571     urb = usb_alloc_urb(0, GFP_KERNEL); /* No ISO */
572     @@ -505,6 +506,9 @@ static struct urb *usb_wwan_setup_urb(struct usb_serial_port *port,
573     usb_sndbulkpipe(serial->dev, endpoint) | dir,
574     buf, len, callback, ctx);
575    
576     + if (intfdata->use_zlp && dir == USB_DIR_OUT)
577     + urb->transfer_flags |= URB_ZERO_PACKET;
578     +
579     return urb;
580     }
581    
582     diff --git a/fs/char_dev.c b/fs/char_dev.c
583     index a112a4745d8b..23e0477edf7d 100644
584     --- a/fs/char_dev.c
585     +++ b/fs/char_dev.c
586     @@ -336,7 +336,7 @@ static struct kobject *cdev_get(struct cdev *p)
587    
588     if (owner && !try_module_get(owner))
589     return NULL;
590     - kobj = kobject_get(&p->kobj);
591     + kobj = kobject_get_unless_zero(&p->kobj);
592     if (!kobj)
593     module_put(owner);
594     return kobj;
595     diff --git a/include/linux/can/dev.h b/include/linux/can/dev.h
596     index f7178f44825b..d2a497950639 100644
597     --- a/include/linux/can/dev.h
598     +++ b/include/linux/can/dev.h
599     @@ -17,6 +17,7 @@
600     #include <linux/can/error.h>
601     #include <linux/can/led.h>
602     #include <linux/can/netlink.h>
603     +#include <linux/can/skb.h>
604     #include <linux/netdevice.h>
605    
606     /*
607     @@ -81,6 +82,36 @@ struct can_priv {
608     #define get_can_dlc(i) (min_t(__u8, (i), CAN_MAX_DLC))
609     #define get_canfd_dlc(i) (min_t(__u8, (i), CANFD_MAX_DLC))
610    
611     +/* Check for outgoing skbs that have not been created by the CAN subsystem */
612     +static inline bool can_skb_headroom_valid(struct net_device *dev,
613     + struct sk_buff *skb)
614     +{
615     + /* af_packet creates a headroom of HH_DATA_MOD bytes which is fine */
616     + if (WARN_ON_ONCE(skb_headroom(skb) < sizeof(struct can_skb_priv)))
617     + return false;
618     +
619     + /* af_packet does not apply CAN skb specific settings */
620     + if (skb->ip_summed == CHECKSUM_NONE) {
621     + /* init headroom */
622     + can_skb_prv(skb)->ifindex = dev->ifindex;
623     + can_skb_prv(skb)->skbcnt = 0;
624     +
625     + skb->ip_summed = CHECKSUM_UNNECESSARY;
626     +
627     + /* preform proper loopback on capable devices */
628     + if (dev->flags & IFF_ECHO)
629     + skb->pkt_type = PACKET_LOOPBACK;
630     + else
631     + skb->pkt_type = PACKET_HOST;
632     +
633     + skb_reset_mac_header(skb);
634     + skb_reset_network_header(skb);
635     + skb_reset_transport_header(skb);
636     + }
637     +
638     + return true;
639     +}
640     +
641     /* Drop a given socketbuffer if it does not contain a valid CAN frame. */
642     static inline bool can_dropped_invalid_skb(struct net_device *dev,
643     struct sk_buff *skb)
644     @@ -98,6 +129,9 @@ static inline bool can_dropped_invalid_skb(struct net_device *dev,
645     } else
646     goto inval_skb;
647    
648     + if (!can_skb_headroom_valid(dev, skb))
649     + goto inval_skb;
650     +
651     return false;
652    
653     inval_skb:
654     diff --git a/include/linux/kobject.h b/include/linux/kobject.h
655     index 5957c6a3fd7f..d9d4485ebad2 100644
656     --- a/include/linux/kobject.h
657     +++ b/include/linux/kobject.h
658     @@ -108,6 +108,8 @@ extern int __must_check kobject_rename(struct kobject *, const char *new_name);
659     extern int __must_check kobject_move(struct kobject *, struct kobject *);
660    
661     extern struct kobject *kobject_get(struct kobject *kobj);
662     +extern struct kobject * __must_check kobject_get_unless_zero(
663     + struct kobject *kobj);
664     extern void kobject_put(struct kobject *kobj);
665    
666     extern const void *kobject_namespace(struct kobject *kobj);
667     diff --git a/kernel/trace/trace_sched_wakeup.c b/kernel/trace/trace_sched_wakeup.c
668     index 9d4399b553a3..6403f45da9d5 100644
669     --- a/kernel/trace/trace_sched_wakeup.c
670     +++ b/kernel/trace/trace_sched_wakeup.c
671     @@ -625,7 +625,7 @@ static void start_wakeup_tracer(struct trace_array *tr)
672     if (ret) {
673     pr_info("wakeup trace: Couldn't activate tracepoint"
674     " probe to kernel_sched_migrate_task\n");
675     - return;
676     + goto fail_deprobe_sched_switch;
677     }
678    
679     wakeup_reset(tr);
680     @@ -643,6 +643,8 @@ static void start_wakeup_tracer(struct trace_array *tr)
681     printk(KERN_ERR "failed to start wakeup tracer\n");
682    
683     return;
684     +fail_deprobe_sched_switch:
685     + unregister_trace_sched_switch(probe_wakeup_sched_switch, NULL);
686     fail_deprobe_wake_new:
687     unregister_trace_sched_wakeup_new(probe_wakeup, NULL);
688     fail_deprobe:
689     diff --git a/kernel/trace/trace_stack.c b/kernel/trace/trace_stack.c
690     index 2a1abbaca10e..5d2c08efd12f 100644
691     --- a/kernel/trace/trace_stack.c
692     +++ b/kernel/trace/trace_stack.c
693     @@ -201,6 +201,11 @@ check_stack(unsigned long ip, unsigned long *stack)
694     local_irq_restore(flags);
695     }
696    
697     +/* Some archs may not define MCOUNT_INSN_SIZE */
698     +#ifndef MCOUNT_INSN_SIZE
699     +# define MCOUNT_INSN_SIZE 0
700     +#endif
701     +
702     static void
703     stack_trace_call(unsigned long ip, unsigned long parent_ip,
704     struct ftrace_ops *op, struct pt_regs *pt_regs)
705     diff --git a/lib/kobject.c b/lib/kobject.c
706     index f58c7f2b229c..bbbb067de8ec 100644
707     --- a/lib/kobject.c
708     +++ b/lib/kobject.c
709     @@ -599,12 +599,15 @@ struct kobject *kobject_get(struct kobject *kobj)
710     }
711     EXPORT_SYMBOL(kobject_get);
712    
713     -static struct kobject * __must_check kobject_get_unless_zero(struct kobject *kobj)
714     +struct kobject * __must_check kobject_get_unless_zero(struct kobject *kobj)
715     {
716     + if (!kobj)
717     + return NULL;
718     if (!kref_get_unless_zero(&kobj->kref))
719     kobj = NULL;
720     return kobj;
721     }
722     +EXPORT_SYMBOL(kobject_get_unless_zero);
723    
724     /*
725     * kobject_cleanup - free kobject resources.
726     diff --git a/net/ipv4/netfilter/arp_tables.c b/net/ipv4/netfilter/arp_tables.c
727     index d35815e5967b..d819e91df90d 100644
728     --- a/net/ipv4/netfilter/arp_tables.c
729     +++ b/net/ipv4/netfilter/arp_tables.c
730     @@ -403,10 +403,11 @@ next: ;
731     return 1;
732     }
733    
734     -static inline int check_target(struct arpt_entry *e, const char *name)
735     +static int check_target(struct arpt_entry *e, struct net *net, const char *name)
736     {
737     struct xt_entry_target *t = arpt_get_target(e);
738     struct xt_tgchk_param par = {
739     + .net = net,
740     .table = name,
741     .entryinfo = e,
742     .target = t->u.kernel.target,
743     @@ -418,8 +419,9 @@ static inline int check_target(struct arpt_entry *e, const char *name)
744     return xt_check_target(&par, t->u.target_size - sizeof(*t), 0, false);
745     }
746    
747     -static inline int
748     -find_check_entry(struct arpt_entry *e, const char *name, unsigned int size,
749     +static int
750     +find_check_entry(struct arpt_entry *e, struct net *net, const char *name,
751     + unsigned int size,
752     struct xt_percpu_counter_alloc_state *alloc_state)
753     {
754     struct xt_entry_target *t;
755     @@ -438,7 +440,7 @@ find_check_entry(struct arpt_entry *e, const char *name, unsigned int size,
756     }
757     t->u.kernel.target = target;
758    
759     - ret = check_target(e, name);
760     + ret = check_target(e, net, name);
761     if (ret)
762     goto err;
763     return 0;
764     @@ -531,7 +533,9 @@ static inline void cleanup_entry(struct arpt_entry *e)
765     /* Checks and translates the user-supplied table segment (held in
766     * newinfo).
767     */
768     -static int translate_table(struct xt_table_info *newinfo, void *entry0,
769     +static int translate_table(struct net *net,
770     + struct xt_table_info *newinfo,
771     + void *entry0,
772     const struct arpt_replace *repl)
773     {
774     struct xt_percpu_counter_alloc_state alloc_state = { 0 };
775     @@ -597,7 +601,7 @@ static int translate_table(struct xt_table_info *newinfo, void *entry0,
776     /* Finally, each sanity check must pass */
777     i = 0;
778     xt_entry_foreach(iter, entry0, newinfo->size) {
779     - ret = find_check_entry(iter, repl->name, repl->size,
780     + ret = find_check_entry(iter, net, repl->name, repl->size,
781     &alloc_state);
782     if (ret != 0)
783     break;
784     @@ -987,7 +991,7 @@ static int do_replace(struct net *net, const void __user *user,
785     goto free_newinfo;
786     }
787    
788     - ret = translate_table(newinfo, loc_cpu_entry, &tmp);
789     + ret = translate_table(net, newinfo, loc_cpu_entry, &tmp);
790     if (ret != 0)
791     goto free_newinfo;
792    
793     @@ -1164,7 +1168,8 @@ compat_copy_entry_from_user(struct compat_arpt_entry *e, void **dstptr,
794     }
795     }
796    
797     -static int translate_compat_table(struct xt_table_info **pinfo,
798     +static int translate_compat_table(struct net *net,
799     + struct xt_table_info **pinfo,
800     void **pentry0,
801     const struct compat_arpt_replace *compatr)
802     {
803     @@ -1230,7 +1235,7 @@ static int translate_compat_table(struct xt_table_info **pinfo,
804     repl.num_counters = 0;
805     repl.counters = NULL;
806     repl.size = newinfo->size;
807     - ret = translate_table(newinfo, entry1, &repl);
808     + ret = translate_table(net, newinfo, entry1, &repl);
809     if (ret)
810     goto free_newinfo;
811    
812     @@ -1283,7 +1288,7 @@ static int compat_do_replace(struct net *net, void __user *user,
813     goto free_newinfo;
814     }
815    
816     - ret = translate_compat_table(&newinfo, &loc_cpu_entry, &tmp);
817     + ret = translate_compat_table(net, &newinfo, &loc_cpu_entry, &tmp);
818     if (ret != 0)
819     goto free_newinfo;
820    
821     @@ -1559,7 +1564,7 @@ int arpt_register_table(struct net *net,
822     loc_cpu_entry = newinfo->entries;
823     memcpy(loc_cpu_entry, repl->entries, repl->size);
824    
825     - ret = translate_table(newinfo, loc_cpu_entry, repl);
826     + ret = translate_table(net, newinfo, loc_cpu_entry, repl);
827     if (ret != 0)
828     goto out_free;
829    
830     diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
831     index 4901d17a8e63..9644dcef5a2b 100644
832     --- a/net/ipv4/tcp_input.c
833     +++ b/net/ipv4/tcp_input.c
834     @@ -129,7 +129,8 @@ int sysctl_tcp_invalid_ratelimit __read_mostly = HZ/2;
835     #define REXMIT_LOST 1 /* retransmit packets marked lost */
836     #define REXMIT_NEW 2 /* FRTO-style transmit of unsent/new packets */
837    
838     -static void tcp_gro_dev_warn(struct sock *sk, const struct sk_buff *skb)
839     +static void tcp_gro_dev_warn(struct sock *sk, const struct sk_buff *skb,
840     + unsigned int len)
841     {
842     static bool __once __read_mostly;
843    
844     @@ -140,8 +141,9 @@ static void tcp_gro_dev_warn(struct sock *sk, const struct sk_buff *skb)
845    
846     rcu_read_lock();
847     dev = dev_get_by_index_rcu(sock_net(sk), skb->skb_iif);
848     - pr_warn("%s: Driver has suspect GRO implementation, TCP performance may be compromised.\n",
849     - dev ? dev->name : "Unknown driver");
850     + if (!dev || len >= dev->mtu)
851     + pr_warn("%s: Driver has suspect GRO implementation, TCP performance may be compromised.\n",
852     + dev ? dev->name : "Unknown driver");
853     rcu_read_unlock();
854     }
855     }
856     @@ -164,8 +166,10 @@ static void tcp_measure_rcv_mss(struct sock *sk, const struct sk_buff *skb)
857     if (len >= icsk->icsk_ack.rcv_mss) {
858     icsk->icsk_ack.rcv_mss = min_t(unsigned int, len,
859     tcp_sk(sk)->advmss);
860     - if (unlikely(icsk->icsk_ack.rcv_mss != len))
861     - tcp_gro_dev_warn(sk, skb);
862     + /* Account for possibly-removed options */
863     + if (unlikely(len > icsk->icsk_ack.rcv_mss +
864     + MAX_TCP_OPTION_SPACE))
865     + tcp_gro_dev_warn(sk, skb, len);
866     } else {
867     /* Otherwise, we make more careful check taking into account,
868     * that SACKs block is variable.
869     diff --git a/net/netfilter/ipset/ip_set_core.c b/net/netfilter/ipset/ip_set_core.c
870     index fa5229fd3703..f64660e9ff87 100644
871     --- a/net/netfilter/ipset/ip_set_core.c
872     +++ b/net/netfilter/ipset/ip_set_core.c
873     @@ -1634,6 +1634,7 @@ static int ip_set_utest(struct net *net, struct sock *ctnl, struct sk_buff *skb,
874     struct ip_set *set;
875     struct nlattr *tb[IPSET_ATTR_ADT_MAX + 1] = {};
876     int ret = 0;
877     + u32 lineno;
878    
879     if (unlikely(protocol_failed(attr) ||
880     !attr[IPSET_ATTR_SETNAME] ||
881     @@ -1650,7 +1651,7 @@ static int ip_set_utest(struct net *net, struct sock *ctnl, struct sk_buff *skb,
882     return -IPSET_ERR_PROTOCOL;
883    
884     rcu_read_lock_bh();
885     - ret = set->variant->uadt(set, tb, IPSET_TEST, NULL, 0, 0);
886     + ret = set->variant->uadt(set, tb, IPSET_TEST, &lineno, 0, 0);
887     rcu_read_unlock_bh();
888     /* Userspace can't trigger element to be re-added */
889     if (ret == -EAGAIN)
890     diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
891     index da9fc08b20bb..a5299cbb09ba 100644
892     --- a/sound/usb/quirks.c
893     +++ b/sound/usb/quirks.c
894     @@ -1141,6 +1141,7 @@ bool snd_usb_get_sample_rate_quirk(struct snd_usb_audio *chip)
895     case USB_ID(0x04D8, 0xFEEA): /* Benchmark DAC1 Pre */
896     case USB_ID(0x0556, 0x0014): /* Phoenix Audio TMX320VC */
897     case USB_ID(0x05A3, 0x9420): /* ELP HD USB Camera */
898     + case USB_ID(0x05a7, 0x1020): /* Bose Companion 5 */
899     case USB_ID(0x074D, 0x3553): /* Outlaw RR2150 (Micronas UAC3553B) */
900     case USB_ID(0x1395, 0x740a): /* Sennheiser DECT */
901     case USB_ID(0x1901, 0x0191): /* GE B850V3 CP2114 audio interface */