Annotation of /trunk/kernel-alx-legacy/patches-4.9/0309-4.9.210-all-fixes.patch
Parent Directory | 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)
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(®s->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(®s->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(®s->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(®s->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 */ |