Contents of /trunk/kernel-alx-legacy/patches-4.9/0346-4.9.247-all-fixes.patch
Parent Directory | Revision Log
Revision 3648 -
(show annotations)
(download)
Mon Oct 24 14:07:28 2022 UTC (23 months ago) by niro
File size: 56626 byte(s)
Mon Oct 24 14:07:28 2022 UTC (23 months ago) by niro
File size: 56626 byte(s)
-linux-4.9.247
1 | diff --git a/Makefile b/Makefile |
2 | index b9e2a97da5da7..82f71f9460cb6 100644 |
3 | --- a/Makefile |
4 | +++ b/Makefile |
5 | @@ -1,6 +1,6 @@ |
6 | VERSION = 4 |
7 | PATCHLEVEL = 9 |
8 | -SUBLEVEL = 246 |
9 | +SUBLEVEL = 247 |
10 | EXTRAVERSION = |
11 | NAME = Roaring Lionus |
12 | |
13 | diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h |
14 | index 199f434f99a49..60e92da7bf37b 100644 |
15 | --- a/arch/arm64/include/asm/pgtable.h |
16 | +++ b/arch/arm64/include/asm/pgtable.h |
17 | @@ -85,8 +85,6 @@ extern unsigned long empty_zero_page[PAGE_SIZE / sizeof(unsigned long)]; |
18 | #define pte_valid(pte) (!!(pte_val(pte) & PTE_VALID)) |
19 | #define pte_valid_not_user(pte) \ |
20 | ((pte_val(pte) & (PTE_VALID | PTE_USER)) == PTE_VALID) |
21 | -#define pte_valid_young(pte) \ |
22 | - ((pte_val(pte) & (PTE_VALID | PTE_AF)) == (PTE_VALID | PTE_AF)) |
23 | #define pte_valid_user(pte) \ |
24 | ((pte_val(pte) & (PTE_VALID | PTE_USER)) == (PTE_VALID | PTE_USER)) |
25 | |
26 | @@ -94,9 +92,12 @@ extern unsigned long empty_zero_page[PAGE_SIZE / sizeof(unsigned long)]; |
27 | * Could the pte be present in the TLB? We must check mm_tlb_flush_pending |
28 | * so that we don't erroneously return false for pages that have been |
29 | * remapped as PROT_NONE but are yet to be flushed from the TLB. |
30 | + * Note that we can't make any assumptions based on the state of the access |
31 | + * flag, since ptep_clear_flush_young() elides a DSB when invalidating the |
32 | + * TLB. |
33 | */ |
34 | #define pte_accessible(mm, pte) \ |
35 | - (mm_tlb_flush_pending(mm) ? pte_present(pte) : pte_valid_young(pte)) |
36 | + (mm_tlb_flush_pending(mm) ? pte_present(pte) : pte_valid(pte)) |
37 | |
38 | /* |
39 | * p??_access_permitted() is true for valid user mappings (subject to the |
40 | diff --git a/arch/x86/events/intel/cstate.c b/arch/x86/events/intel/cstate.c |
41 | index 72d09340c24d2..88ba013d08d49 100644 |
42 | --- a/arch/x86/events/intel/cstate.c |
43 | +++ b/arch/x86/events/intel/cstate.c |
44 | @@ -98,14 +98,14 @@ |
45 | MODULE_LICENSE("GPL"); |
46 | |
47 | #define DEFINE_CSTATE_FORMAT_ATTR(_var, _name, _format) \ |
48 | -static ssize_t __cstate_##_var##_show(struct kobject *kobj, \ |
49 | - struct kobj_attribute *attr, \ |
50 | +static ssize_t __cstate_##_var##_show(struct device *dev, \ |
51 | + struct device_attribute *attr, \ |
52 | char *page) \ |
53 | { \ |
54 | BUILD_BUG_ON(sizeof(_format) >= PAGE_SIZE); \ |
55 | return sprintf(page, _format "\n"); \ |
56 | } \ |
57 | -static struct kobj_attribute format_attr_##_var = \ |
58 | +static struct device_attribute format_attr_##_var = \ |
59 | __ATTR(_name, 0444, __cstate_##_var##_show, NULL) |
60 | |
61 | static ssize_t cstate_get_attr_cpumask(struct device *dev, |
62 | diff --git a/arch/x86/events/intel/rapl.c b/arch/x86/events/intel/rapl.c |
63 | index 4c1b7ea185415..38dae3d1391b5 100644 |
64 | --- a/arch/x86/events/intel/rapl.c |
65 | +++ b/arch/x86/events/intel/rapl.c |
66 | @@ -115,18 +115,6 @@ static const char *const rapl_domain_names[NR_RAPL_DOMAINS] __initconst = { |
67 | * any other bit is reserved |
68 | */ |
69 | #define RAPL_EVENT_MASK 0xFFULL |
70 | - |
71 | -#define DEFINE_RAPL_FORMAT_ATTR(_var, _name, _format) \ |
72 | -static ssize_t __rapl_##_var##_show(struct kobject *kobj, \ |
73 | - struct kobj_attribute *attr, \ |
74 | - char *page) \ |
75 | -{ \ |
76 | - BUILD_BUG_ON(sizeof(_format) >= PAGE_SIZE); \ |
77 | - return sprintf(page, _format "\n"); \ |
78 | -} \ |
79 | -static struct kobj_attribute format_attr_##_var = \ |
80 | - __ATTR(_name, 0444, __rapl_##_var##_show, NULL) |
81 | - |
82 | #define RAPL_CNTR_WIDTH 32 |
83 | |
84 | #define RAPL_EVENT_ATTR_STR(_name, v, str) \ |
85 | @@ -548,7 +536,7 @@ static struct attribute_group rapl_pmu_events_group = { |
86 | .attrs = NULL, /* patched at runtime */ |
87 | }; |
88 | |
89 | -DEFINE_RAPL_FORMAT_ATTR(event, event, "config:0-7"); |
90 | +PMU_FORMAT_ATTR(event, "config:0-7"); |
91 | static struct attribute *rapl_formats_attr[] = { |
92 | &format_attr_event.attr, |
93 | NULL, |
94 | diff --git a/arch/x86/events/intel/uncore.c b/arch/x86/events/intel/uncore.c |
95 | index 4f365267b12fe..9f572bf6c6216 100644 |
96 | --- a/arch/x86/events/intel/uncore.c |
97 | +++ b/arch/x86/events/intel/uncore.c |
98 | @@ -90,8 +90,8 @@ end: |
99 | return map; |
100 | } |
101 | |
102 | -ssize_t uncore_event_show(struct kobject *kobj, |
103 | - struct kobj_attribute *attr, char *buf) |
104 | +ssize_t uncore_event_show(struct device *dev, |
105 | + struct device_attribute *attr, char *buf) |
106 | { |
107 | struct uncore_event_desc *event = |
108 | container_of(attr, struct uncore_event_desc, attr); |
109 | diff --git a/arch/x86/events/intel/uncore.h b/arch/x86/events/intel/uncore.h |
110 | index ad986c1e29bcc..f699783114ee3 100644 |
111 | --- a/arch/x86/events/intel/uncore.h |
112 | +++ b/arch/x86/events/intel/uncore.h |
113 | @@ -124,7 +124,7 @@ struct intel_uncore_box { |
114 | #define UNCORE_BOX_FLAG_CTL_OFFS8 1 /* event config registers are 8-byte apart */ |
115 | |
116 | struct uncore_event_desc { |
117 | - struct kobj_attribute attr; |
118 | + struct device_attribute attr; |
119 | const char *config; |
120 | }; |
121 | |
122 | @@ -136,8 +136,8 @@ struct pci2phy_map { |
123 | |
124 | struct pci2phy_map *__find_pci2phy_map(int segment); |
125 | |
126 | -ssize_t uncore_event_show(struct kobject *kobj, |
127 | - struct kobj_attribute *attr, char *buf); |
128 | +ssize_t uncore_event_show(struct device *dev, |
129 | + struct device_attribute *attr, char *buf); |
130 | |
131 | #define INTEL_UNCORE_EVENT_DESC(_name, _config) \ |
132 | { \ |
133 | @@ -146,14 +146,14 @@ ssize_t uncore_event_show(struct kobject *kobj, |
134 | } |
135 | |
136 | #define DEFINE_UNCORE_FORMAT_ATTR(_var, _name, _format) \ |
137 | -static ssize_t __uncore_##_var##_show(struct kobject *kobj, \ |
138 | - struct kobj_attribute *attr, \ |
139 | +static ssize_t __uncore_##_var##_show(struct device *dev, \ |
140 | + struct device_attribute *attr, \ |
141 | char *page) \ |
142 | { \ |
143 | BUILD_BUG_ON(sizeof(_format) >= PAGE_SIZE); \ |
144 | return sprintf(page, _format "\n"); \ |
145 | } \ |
146 | -static struct kobj_attribute format_attr_##_var = \ |
147 | +static struct device_attribute format_attr_##_var = \ |
148 | __ATTR(_name, 0444, __uncore_##_var##_show, NULL) |
149 | |
150 | static inline unsigned uncore_pci_box_ctl(struct intel_uncore_box *box) |
151 | diff --git a/arch/x86/kernel/cpu/bugs.c b/arch/x86/kernel/cpu/bugs.c |
152 | index f8a7aba4b0959..a884bb7e7b01d 100644 |
153 | --- a/arch/x86/kernel/cpu/bugs.c |
154 | +++ b/arch/x86/kernel/cpu/bugs.c |
155 | @@ -732,11 +732,13 @@ spectre_v2_user_select_mitigation(enum spectre_v2_mitigation_cmd v2_cmd) |
156 | if (boot_cpu_has(X86_FEATURE_IBPB)) { |
157 | setup_force_cpu_cap(X86_FEATURE_USE_IBPB); |
158 | |
159 | + spectre_v2_user_ibpb = mode; |
160 | switch (cmd) { |
161 | case SPECTRE_V2_USER_CMD_FORCE: |
162 | case SPECTRE_V2_USER_CMD_PRCTL_IBPB: |
163 | case SPECTRE_V2_USER_CMD_SECCOMP_IBPB: |
164 | static_branch_enable(&switch_mm_always_ibpb); |
165 | + spectre_v2_user_ibpb = SPECTRE_V2_USER_STRICT; |
166 | break; |
167 | case SPECTRE_V2_USER_CMD_PRCTL: |
168 | case SPECTRE_V2_USER_CMD_AUTO: |
169 | @@ -750,8 +752,6 @@ spectre_v2_user_select_mitigation(enum spectre_v2_mitigation_cmd v2_cmd) |
170 | pr_info("mitigation: Enabling %s Indirect Branch Prediction Barrier\n", |
171 | static_key_enabled(&switch_mm_always_ibpb) ? |
172 | "always-on" : "conditional"); |
173 | - |
174 | - spectre_v2_user_ibpb = mode; |
175 | } |
176 | |
177 | /* |
178 | diff --git a/arch/x86/xen/spinlock.c b/arch/x86/xen/spinlock.c |
179 | index 8d2c6f071dccf..44bf8a22c97b8 100644 |
180 | --- a/arch/x86/xen/spinlock.c |
181 | +++ b/arch/x86/xen/spinlock.c |
182 | @@ -98,10 +98,20 @@ void xen_init_lock_cpu(int cpu) |
183 | |
184 | void xen_uninit_lock_cpu(int cpu) |
185 | { |
186 | + int irq; |
187 | + |
188 | if (!xen_pvspin) |
189 | return; |
190 | |
191 | - unbind_from_irqhandler(per_cpu(lock_kicker_irq, cpu), NULL); |
192 | + /* |
193 | + * When booting the kernel with 'mitigations=auto,nosmt', the secondary |
194 | + * CPUs are not activated, and lock_kicker_irq is not initialized. |
195 | + */ |
196 | + irq = per_cpu(lock_kicker_irq, cpu); |
197 | + if (irq == -1) |
198 | + return; |
199 | + |
200 | + unbind_from_irqhandler(irq, NULL); |
201 | per_cpu(lock_kicker_irq, cpu) = -1; |
202 | kfree(per_cpu(irq_name, cpu)); |
203 | per_cpu(irq_name, cpu) = NULL; |
204 | diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c |
205 | index 16c08846ea0e1..f5a9bb1231882 100644 |
206 | --- a/drivers/dma/pl330.c |
207 | +++ b/drivers/dma/pl330.c |
208 | @@ -2682,7 +2682,7 @@ pl330_prep_dma_memcpy(struct dma_chan *chan, dma_addr_t dst, |
209 | * If burst size is smaller than bus width then make sure we only |
210 | * transfer one at a time to avoid a burst stradling an MFIFO entry. |
211 | */ |
212 | - if (desc->rqcfg.brst_size * 8 < pl330->pcfg.data_bus_width) |
213 | + if (burst * 8 < pl330->pcfg.data_bus_width) |
214 | desc->rqcfg.brst_len = 1; |
215 | |
216 | desc->bytes_requested = len; |
217 | diff --git a/drivers/dma/xilinx/xilinx_dma.c b/drivers/dma/xilinx/xilinx_dma.c |
218 | index cd271f7826051..ef99ef0bb1ca2 100644 |
219 | --- a/drivers/dma/xilinx/xilinx_dma.c |
220 | +++ b/drivers/dma/xilinx/xilinx_dma.c |
221 | @@ -420,8 +420,8 @@ struct xilinx_dma_device { |
222 | #define to_dma_tx_descriptor(tx) \ |
223 | container_of(tx, struct xilinx_dma_tx_descriptor, async_tx) |
224 | #define xilinx_dma_poll_timeout(chan, reg, val, cond, delay_us, timeout_us) \ |
225 | - readl_poll_timeout(chan->xdev->regs + chan->ctrl_offset + reg, val, \ |
226 | - cond, delay_us, timeout_us) |
227 | + readl_poll_timeout_atomic(chan->xdev->regs + chan->ctrl_offset + reg, \ |
228 | + val, cond, delay_us, timeout_us) |
229 | |
230 | /* IO accessors */ |
231 | static inline u32 dma_read(struct xilinx_dma_chan *chan, u32 reg) |
232 | diff --git a/drivers/hid/hid-cypress.c b/drivers/hid/hid-cypress.c |
233 | index 1689568b597d4..12c5d7c96527a 100644 |
234 | --- a/drivers/hid/hid-cypress.c |
235 | +++ b/drivers/hid/hid-cypress.c |
236 | @@ -26,19 +26,17 @@ |
237 | #define CP_2WHEEL_MOUSE_HACK 0x02 |
238 | #define CP_2WHEEL_MOUSE_HACK_ON 0x04 |
239 | |
240 | +#define VA_INVAL_LOGICAL_BOUNDARY 0x08 |
241 | + |
242 | /* |
243 | * Some USB barcode readers from cypress have usage min and usage max in |
244 | * the wrong order |
245 | */ |
246 | -static __u8 *cp_report_fixup(struct hid_device *hdev, __u8 *rdesc, |
247 | +static __u8 *cp_rdesc_fixup(struct hid_device *hdev, __u8 *rdesc, |
248 | unsigned int *rsize) |
249 | { |
250 | - unsigned long quirks = (unsigned long)hid_get_drvdata(hdev); |
251 | unsigned int i; |
252 | |
253 | - if (!(quirks & CP_RDESC_SWAPPED_MIN_MAX)) |
254 | - return rdesc; |
255 | - |
256 | if (*rsize < 4) |
257 | return rdesc; |
258 | |
259 | @@ -51,6 +49,40 @@ static __u8 *cp_report_fixup(struct hid_device *hdev, __u8 *rdesc, |
260 | return rdesc; |
261 | } |
262 | |
263 | +static __u8 *va_logical_boundary_fixup(struct hid_device *hdev, __u8 *rdesc, |
264 | + unsigned int *rsize) |
265 | +{ |
266 | + /* |
267 | + * Varmilo VA104M (with VID Cypress and device ID 07B1) incorrectly |
268 | + * reports Logical Minimum of its Consumer Control device as 572 |
269 | + * (0x02 0x3c). Fix this by setting its Logical Minimum to zero. |
270 | + */ |
271 | + if (*rsize == 25 && |
272 | + rdesc[0] == 0x05 && rdesc[1] == 0x0c && |
273 | + rdesc[2] == 0x09 && rdesc[3] == 0x01 && |
274 | + rdesc[6] == 0x19 && rdesc[7] == 0x00 && |
275 | + rdesc[11] == 0x16 && rdesc[12] == 0x3c && rdesc[13] == 0x02) { |
276 | + hid_info(hdev, |
277 | + "fixing up varmilo VA104M consumer control report descriptor\n"); |
278 | + rdesc[12] = 0x00; |
279 | + rdesc[13] = 0x00; |
280 | + } |
281 | + return rdesc; |
282 | +} |
283 | + |
284 | +static __u8 *cp_report_fixup(struct hid_device *hdev, __u8 *rdesc, |
285 | + unsigned int *rsize) |
286 | +{ |
287 | + unsigned long quirks = (unsigned long)hid_get_drvdata(hdev); |
288 | + |
289 | + if (quirks & CP_RDESC_SWAPPED_MIN_MAX) |
290 | + rdesc = cp_rdesc_fixup(hdev, rdesc, rsize); |
291 | + if (quirks & VA_INVAL_LOGICAL_BOUNDARY) |
292 | + rdesc = va_logical_boundary_fixup(hdev, rdesc, rsize); |
293 | + |
294 | + return rdesc; |
295 | +} |
296 | + |
297 | static int cp_input_mapped(struct hid_device *hdev, struct hid_input *hi, |
298 | struct hid_field *field, struct hid_usage *usage, |
299 | unsigned long **bit, int *max) |
300 | @@ -131,6 +163,8 @@ static const struct hid_device_id cp_devices[] = { |
301 | .driver_data = CP_RDESC_SWAPPED_MIN_MAX }, |
302 | { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_MOUSE), |
303 | .driver_data = CP_2WHEEL_MOUSE_HACK }, |
304 | + { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_VARMILO_VA104M_07B1), |
305 | + .driver_data = VA_INVAL_LOGICAL_BOUNDARY }, |
306 | { } |
307 | }; |
308 | MODULE_DEVICE_TABLE(hid, cp_devices); |
309 | diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h |
310 | index 4630b58634d87..c4a53fc648e95 100644 |
311 | --- a/drivers/hid/hid-ids.h |
312 | +++ b/drivers/hid/hid-ids.h |
313 | @@ -307,6 +307,8 @@ |
314 | #define USB_DEVICE_ID_CYPRESS_BARCODE_4 0xed81 |
315 | #define USB_DEVICE_ID_CYPRESS_TRUETOUCH 0xc001 |
316 | |
317 | +#define USB_DEVICE_ID_CYPRESS_VARMILO_VA104M_07B1 0X07b1 |
318 | + |
319 | #define USB_VENDOR_ID_DATA_MODUL 0x7374 |
320 | #define USB_VENDOR_ID_DATA_MODUL_EASYMAXTOUCH 0x1201 |
321 | |
322 | diff --git a/drivers/hid/hid-sensor-hub.c b/drivers/hid/hid-sensor-hub.c |
323 | index 4ef73374a8f98..7001f07ca3996 100644 |
324 | --- a/drivers/hid/hid-sensor-hub.c |
325 | +++ b/drivers/hid/hid-sensor-hub.c |
326 | @@ -489,7 +489,8 @@ static int sensor_hub_raw_event(struct hid_device *hdev, |
327 | return 1; |
328 | |
329 | ptr = raw_data; |
330 | - ptr++; /* Skip report id */ |
331 | + if (report->id) |
332 | + ptr++; /* Skip report id */ |
333 | |
334 | spin_lock_irqsave(&pdata->lock, flags); |
335 | |
336 | diff --git a/drivers/infiniband/hw/mthca/mthca_cq.c b/drivers/infiniband/hw/mthca/mthca_cq.c |
337 | index a6531ffe29a6f..a5694dec3f2ee 100644 |
338 | --- a/drivers/infiniband/hw/mthca/mthca_cq.c |
339 | +++ b/drivers/infiniband/hw/mthca/mthca_cq.c |
340 | @@ -808,8 +808,10 @@ int mthca_init_cq(struct mthca_dev *dev, int nent, |
341 | } |
342 | |
343 | mailbox = mthca_alloc_mailbox(dev, GFP_KERNEL); |
344 | - if (IS_ERR(mailbox)) |
345 | + if (IS_ERR(mailbox)) { |
346 | + err = PTR_ERR(mailbox); |
347 | goto err_out_arm; |
348 | + } |
349 | |
350 | cq_context = mailbox->buf; |
351 | |
352 | @@ -851,9 +853,9 @@ int mthca_init_cq(struct mthca_dev *dev, int nent, |
353 | } |
354 | |
355 | spin_lock_irq(&dev->cq_table.lock); |
356 | - if (mthca_array_set(&dev->cq_table.cq, |
357 | - cq->cqn & (dev->limits.num_cqs - 1), |
358 | - cq)) { |
359 | + err = mthca_array_set(&dev->cq_table.cq, |
360 | + cq->cqn & (dev->limits.num_cqs - 1), cq); |
361 | + if (err) { |
362 | spin_unlock_irq(&dev->cq_table.lock); |
363 | goto err_out_free_mr; |
364 | } |
365 | diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c |
366 | index c84c685056b99..6b648339733fa 100644 |
367 | --- a/drivers/input/serio/i8042.c |
368 | +++ b/drivers/input/serio/i8042.c |
369 | @@ -125,6 +125,7 @@ module_param_named(unmask_kbd_data, i8042_unmask_kbd_data, bool, 0600); |
370 | MODULE_PARM_DESC(unmask_kbd_data, "Unconditional enable (may reveal sensitive data) of normally sanitize-filtered kbd data traffic debug log [pre-condition: i8042.debug=1 enabled]"); |
371 | #endif |
372 | |
373 | +static bool i8042_present; |
374 | static bool i8042_bypass_aux_irq_test; |
375 | static char i8042_kbd_firmware_id[128]; |
376 | static char i8042_aux_firmware_id[128]; |
377 | @@ -343,6 +344,9 @@ int i8042_command(unsigned char *param, int command) |
378 | unsigned long flags; |
379 | int retval; |
380 | |
381 | + if (!i8042_present) |
382 | + return -1; |
383 | + |
384 | spin_lock_irqsave(&i8042_lock, flags); |
385 | retval = __i8042_command(param, command); |
386 | spin_unlock_irqrestore(&i8042_lock, flags); |
387 | @@ -1597,12 +1601,15 @@ static int __init i8042_init(void) |
388 | |
389 | err = i8042_platform_init(); |
390 | if (err) |
391 | - return err; |
392 | + return (err == -ENODEV) ? 0 : err; |
393 | |
394 | err = i8042_controller_check(); |
395 | if (err) |
396 | goto err_platform_exit; |
397 | |
398 | + /* Set this before creating the dev to allow i8042_command to work right away */ |
399 | + i8042_present = true; |
400 | + |
401 | pdev = platform_create_bundle(&i8042_driver, i8042_probe, NULL, 0, NULL, 0); |
402 | if (IS_ERR(pdev)) { |
403 | err = PTR_ERR(pdev); |
404 | @@ -1621,6 +1628,9 @@ static int __init i8042_init(void) |
405 | |
406 | static void __exit i8042_exit(void) |
407 | { |
408 | + if (!i8042_present) |
409 | + return; |
410 | + |
411 | platform_device_unregister(i8042_platform_device); |
412 | platform_driver_unregister(&i8042_driver); |
413 | i8042_platform_exit(); |
414 | diff --git a/drivers/net/can/usb/gs_usb.c b/drivers/net/can/usb/gs_usb.c |
415 | index a65203e6ea5f4..d21c68882e867 100644 |
416 | --- a/drivers/net/can/usb/gs_usb.c |
417 | +++ b/drivers/net/can/usb/gs_usb.c |
418 | @@ -71,21 +71,27 @@ enum gs_can_identify_mode { |
419 | }; |
420 | |
421 | /* data types passed between host and device */ |
422 | + |
423 | +/* The firmware on the original USB2CAN by Geschwister Schneider |
424 | + * Technologie Entwicklungs- und Vertriebs UG exchanges all data |
425 | + * between the host and the device in host byte order. This is done |
426 | + * with the struct gs_host_config::byte_order member, which is sent |
427 | + * first to indicate the desired byte order. |
428 | + * |
429 | + * The widely used open source firmware candleLight doesn't support |
430 | + * this feature and exchanges the data in little endian byte order. |
431 | + */ |
432 | struct gs_host_config { |
433 | - u32 byte_order; |
434 | + __le32 byte_order; |
435 | } __packed; |
436 | -/* All data exchanged between host and device is exchanged in host byte order, |
437 | - * thanks to the struct gs_host_config byte_order member, which is sent first |
438 | - * to indicate the desired byte order. |
439 | - */ |
440 | |
441 | struct gs_device_config { |
442 | u8 reserved1; |
443 | u8 reserved2; |
444 | u8 reserved3; |
445 | u8 icount; |
446 | - u32 sw_version; |
447 | - u32 hw_version; |
448 | + __le32 sw_version; |
449 | + __le32 hw_version; |
450 | } __packed; |
451 | |
452 | #define GS_CAN_MODE_NORMAL 0 |
453 | @@ -95,26 +101,26 @@ struct gs_device_config { |
454 | #define GS_CAN_MODE_ONE_SHOT BIT(3) |
455 | |
456 | struct gs_device_mode { |
457 | - u32 mode; |
458 | - u32 flags; |
459 | + __le32 mode; |
460 | + __le32 flags; |
461 | } __packed; |
462 | |
463 | struct gs_device_state { |
464 | - u32 state; |
465 | - u32 rxerr; |
466 | - u32 txerr; |
467 | + __le32 state; |
468 | + __le32 rxerr; |
469 | + __le32 txerr; |
470 | } __packed; |
471 | |
472 | struct gs_device_bittiming { |
473 | - u32 prop_seg; |
474 | - u32 phase_seg1; |
475 | - u32 phase_seg2; |
476 | - u32 sjw; |
477 | - u32 brp; |
478 | + __le32 prop_seg; |
479 | + __le32 phase_seg1; |
480 | + __le32 phase_seg2; |
481 | + __le32 sjw; |
482 | + __le32 brp; |
483 | } __packed; |
484 | |
485 | struct gs_identify_mode { |
486 | - u32 mode; |
487 | + __le32 mode; |
488 | } __packed; |
489 | |
490 | #define GS_CAN_FEATURE_LISTEN_ONLY BIT(0) |
491 | @@ -125,23 +131,23 @@ struct gs_identify_mode { |
492 | #define GS_CAN_FEATURE_IDENTIFY BIT(5) |
493 | |
494 | struct gs_device_bt_const { |
495 | - u32 feature; |
496 | - u32 fclk_can; |
497 | - u32 tseg1_min; |
498 | - u32 tseg1_max; |
499 | - u32 tseg2_min; |
500 | - u32 tseg2_max; |
501 | - u32 sjw_max; |
502 | - u32 brp_min; |
503 | - u32 brp_max; |
504 | - u32 brp_inc; |
505 | + __le32 feature; |
506 | + __le32 fclk_can; |
507 | + __le32 tseg1_min; |
508 | + __le32 tseg1_max; |
509 | + __le32 tseg2_min; |
510 | + __le32 tseg2_max; |
511 | + __le32 sjw_max; |
512 | + __le32 brp_min; |
513 | + __le32 brp_max; |
514 | + __le32 brp_inc; |
515 | } __packed; |
516 | |
517 | #define GS_CAN_FLAG_OVERFLOW 1 |
518 | |
519 | struct gs_host_frame { |
520 | u32 echo_id; |
521 | - u32 can_id; |
522 | + __le32 can_id; |
523 | |
524 | u8 can_dlc; |
525 | u8 channel; |
526 | @@ -337,13 +343,13 @@ static void gs_usb_receive_bulk_callback(struct urb *urb) |
527 | if (!skb) |
528 | return; |
529 | |
530 | - cf->can_id = hf->can_id; |
531 | + cf->can_id = le32_to_cpu(hf->can_id); |
532 | |
533 | cf->can_dlc = get_can_dlc(hf->can_dlc); |
534 | memcpy(cf->data, hf->data, 8); |
535 | |
536 | /* ERROR frames tell us information about the controller */ |
537 | - if (hf->can_id & CAN_ERR_FLAG) |
538 | + if (le32_to_cpu(hf->can_id) & CAN_ERR_FLAG) |
539 | gs_update_state(dev, cf); |
540 | |
541 | netdev->stats.rx_packets++; |
542 | @@ -426,11 +432,11 @@ static int gs_usb_set_bittiming(struct net_device *netdev) |
543 | if (!dbt) |
544 | return -ENOMEM; |
545 | |
546 | - dbt->prop_seg = bt->prop_seg; |
547 | - dbt->phase_seg1 = bt->phase_seg1; |
548 | - dbt->phase_seg2 = bt->phase_seg2; |
549 | - dbt->sjw = bt->sjw; |
550 | - dbt->brp = bt->brp; |
551 | + dbt->prop_seg = cpu_to_le32(bt->prop_seg); |
552 | + dbt->phase_seg1 = cpu_to_le32(bt->phase_seg1); |
553 | + dbt->phase_seg2 = cpu_to_le32(bt->phase_seg2); |
554 | + dbt->sjw = cpu_to_le32(bt->sjw); |
555 | + dbt->brp = cpu_to_le32(bt->brp); |
556 | |
557 | /* request bit timings */ |
558 | rc = usb_control_msg(interface_to_usbdev(intf), |
559 | @@ -511,7 +517,7 @@ static netdev_tx_t gs_can_start_xmit(struct sk_buff *skb, |
560 | |
561 | cf = (struct can_frame *)skb->data; |
562 | |
563 | - hf->can_id = cf->can_id; |
564 | + hf->can_id = cpu_to_le32(cf->can_id); |
565 | hf->can_dlc = cf->can_dlc; |
566 | memcpy(hf->data, cf->data, cf->can_dlc); |
567 | |
568 | @@ -582,6 +588,7 @@ static int gs_can_open(struct net_device *netdev) |
569 | int rc, i; |
570 | struct gs_device_mode *dm; |
571 | u32 ctrlmode; |
572 | + u32 flags = 0; |
573 | |
574 | rc = open_candev(netdev); |
575 | if (rc) |
576 | @@ -649,24 +656,24 @@ static int gs_can_open(struct net_device *netdev) |
577 | |
578 | /* flags */ |
579 | ctrlmode = dev->can.ctrlmode; |
580 | - dm->flags = 0; |
581 | |
582 | if (ctrlmode & CAN_CTRLMODE_LOOPBACK) |
583 | - dm->flags |= GS_CAN_MODE_LOOP_BACK; |
584 | + flags |= GS_CAN_MODE_LOOP_BACK; |
585 | else if (ctrlmode & CAN_CTRLMODE_LISTENONLY) |
586 | - dm->flags |= GS_CAN_MODE_LISTEN_ONLY; |
587 | + flags |= GS_CAN_MODE_LISTEN_ONLY; |
588 | |
589 | /* Controller is not allowed to retry TX |
590 | * this mode is unavailable on atmels uc3c hardware |
591 | */ |
592 | if (ctrlmode & CAN_CTRLMODE_ONE_SHOT) |
593 | - dm->flags |= GS_CAN_MODE_ONE_SHOT; |
594 | + flags |= GS_CAN_MODE_ONE_SHOT; |
595 | |
596 | if (ctrlmode & CAN_CTRLMODE_3_SAMPLES) |
597 | - dm->flags |= GS_CAN_MODE_TRIPLE_SAMPLE; |
598 | + flags |= GS_CAN_MODE_TRIPLE_SAMPLE; |
599 | |
600 | /* finally start device */ |
601 | - dm->mode = GS_CAN_MODE_START; |
602 | + dm->mode = cpu_to_le32(GS_CAN_MODE_START); |
603 | + dm->flags = cpu_to_le32(flags); |
604 | rc = usb_control_msg(interface_to_usbdev(dev->iface), |
605 | usb_sndctrlpipe(interface_to_usbdev(dev->iface), 0), |
606 | GS_USB_BREQ_MODE, |
607 | @@ -746,9 +753,9 @@ static int gs_usb_set_identify(struct net_device *netdev, bool do_identify) |
608 | return -ENOMEM; |
609 | |
610 | if (do_identify) |
611 | - imode->mode = GS_CAN_IDENTIFY_ON; |
612 | + imode->mode = cpu_to_le32(GS_CAN_IDENTIFY_ON); |
613 | else |
614 | - imode->mode = GS_CAN_IDENTIFY_OFF; |
615 | + imode->mode = cpu_to_le32(GS_CAN_IDENTIFY_OFF); |
616 | |
617 | rc = usb_control_msg(interface_to_usbdev(dev->iface), |
618 | usb_sndctrlpipe(interface_to_usbdev(dev->iface), |
619 | @@ -799,6 +806,7 @@ static struct gs_can *gs_make_candev(unsigned int channel, |
620 | struct net_device *netdev; |
621 | int rc; |
622 | struct gs_device_bt_const *bt_const; |
623 | + u32 feature; |
624 | |
625 | bt_const = kmalloc(sizeof(*bt_const), GFP_KERNEL); |
626 | if (!bt_const) |
627 | @@ -839,14 +847,14 @@ static struct gs_can *gs_make_candev(unsigned int channel, |
628 | |
629 | /* dev settup */ |
630 | strcpy(dev->bt_const.name, "gs_usb"); |
631 | - dev->bt_const.tseg1_min = bt_const->tseg1_min; |
632 | - dev->bt_const.tseg1_max = bt_const->tseg1_max; |
633 | - dev->bt_const.tseg2_min = bt_const->tseg2_min; |
634 | - dev->bt_const.tseg2_max = bt_const->tseg2_max; |
635 | - dev->bt_const.sjw_max = bt_const->sjw_max; |
636 | - dev->bt_const.brp_min = bt_const->brp_min; |
637 | - dev->bt_const.brp_max = bt_const->brp_max; |
638 | - dev->bt_const.brp_inc = bt_const->brp_inc; |
639 | + dev->bt_const.tseg1_min = le32_to_cpu(bt_const->tseg1_min); |
640 | + dev->bt_const.tseg1_max = le32_to_cpu(bt_const->tseg1_max); |
641 | + dev->bt_const.tseg2_min = le32_to_cpu(bt_const->tseg2_min); |
642 | + dev->bt_const.tseg2_max = le32_to_cpu(bt_const->tseg2_max); |
643 | + dev->bt_const.sjw_max = le32_to_cpu(bt_const->sjw_max); |
644 | + dev->bt_const.brp_min = le32_to_cpu(bt_const->brp_min); |
645 | + dev->bt_const.brp_max = le32_to_cpu(bt_const->brp_max); |
646 | + dev->bt_const.brp_inc = le32_to_cpu(bt_const->brp_inc); |
647 | |
648 | dev->udev = interface_to_usbdev(intf); |
649 | dev->iface = intf; |
650 | @@ -863,28 +871,29 @@ static struct gs_can *gs_make_candev(unsigned int channel, |
651 | |
652 | /* can settup */ |
653 | dev->can.state = CAN_STATE_STOPPED; |
654 | - dev->can.clock.freq = bt_const->fclk_can; |
655 | + dev->can.clock.freq = le32_to_cpu(bt_const->fclk_can); |
656 | dev->can.bittiming_const = &dev->bt_const; |
657 | dev->can.do_set_bittiming = gs_usb_set_bittiming; |
658 | |
659 | dev->can.ctrlmode_supported = 0; |
660 | |
661 | - if (bt_const->feature & GS_CAN_FEATURE_LISTEN_ONLY) |
662 | + feature = le32_to_cpu(bt_const->feature); |
663 | + if (feature & GS_CAN_FEATURE_LISTEN_ONLY) |
664 | dev->can.ctrlmode_supported |= CAN_CTRLMODE_LISTENONLY; |
665 | |
666 | - if (bt_const->feature & GS_CAN_FEATURE_LOOP_BACK) |
667 | + if (feature & GS_CAN_FEATURE_LOOP_BACK) |
668 | dev->can.ctrlmode_supported |= CAN_CTRLMODE_LOOPBACK; |
669 | |
670 | - if (bt_const->feature & GS_CAN_FEATURE_TRIPLE_SAMPLE) |
671 | + if (feature & GS_CAN_FEATURE_TRIPLE_SAMPLE) |
672 | dev->can.ctrlmode_supported |= CAN_CTRLMODE_3_SAMPLES; |
673 | |
674 | - if (bt_const->feature & GS_CAN_FEATURE_ONE_SHOT) |
675 | + if (feature & GS_CAN_FEATURE_ONE_SHOT) |
676 | dev->can.ctrlmode_supported |= CAN_CTRLMODE_ONE_SHOT; |
677 | |
678 | SET_NETDEV_DEV(netdev, &intf->dev); |
679 | |
680 | - if (dconf->sw_version > 1) |
681 | - if (bt_const->feature & GS_CAN_FEATURE_IDENTIFY) |
682 | + if (le32_to_cpu(dconf->sw_version) > 1) |
683 | + if (feature & GS_CAN_FEATURE_IDENTIFY) |
684 | netdev->ethtool_ops = &gs_usb_ethtool_ops; |
685 | |
686 | kfree(bt_const); |
687 | @@ -919,7 +928,7 @@ static int gs_usb_probe(struct usb_interface *intf, |
688 | if (!hconf) |
689 | return -ENOMEM; |
690 | |
691 | - hconf->byte_order = 0x0000beef; |
692 | + hconf->byte_order = cpu_to_le32(0x0000beef); |
693 | |
694 | /* send host config */ |
695 | rc = usb_control_msg(interface_to_usbdev(intf), |
696 | diff --git a/drivers/net/ethernet/amazon/ena/ena_netdev.c b/drivers/net/ethernet/amazon/ena/ena_netdev.c |
697 | index da21886609e30..de3d6f8b54316 100644 |
698 | --- a/drivers/net/ethernet/amazon/ena/ena_netdev.c |
699 | +++ b/drivers/net/ethernet/amazon/ena/ena_netdev.c |
700 | @@ -2345,16 +2345,9 @@ static int ena_device_init(struct ena_com_dev *ena_dev, struct pci_dev *pdev, |
701 | goto err_mmio_read_less; |
702 | } |
703 | |
704 | - rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(dma_width)); |
705 | + rc = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(dma_width)); |
706 | if (rc) { |
707 | - dev_err(dev, "pci_set_dma_mask failed 0x%x\n", rc); |
708 | - goto err_mmio_read_less; |
709 | - } |
710 | - |
711 | - rc = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(dma_width)); |
712 | - if (rc) { |
713 | - dev_err(dev, "err_pci_set_consistent_dma_mask failed 0x%x\n", |
714 | - rc); |
715 | + dev_err(dev, "dma_set_mask_and_coherent failed %d\n", rc); |
716 | goto err_mmio_read_less; |
717 | } |
718 | |
719 | @@ -2894,6 +2887,12 @@ static int ena_probe(struct pci_dev *pdev, const struct pci_device_id *ent) |
720 | return rc; |
721 | } |
722 | |
723 | + rc = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(ENA_MAX_PHYS_ADDR_SIZE_BITS)); |
724 | + if (rc) { |
725 | + dev_err(&pdev->dev, "dma_set_mask_and_coherent failed %d\n", rc); |
726 | + goto err_disable_device; |
727 | + } |
728 | + |
729 | pci_set_master(pdev); |
730 | |
731 | ena_dev = vzalloc(sizeof(*ena_dev)); |
732 | diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c |
733 | index dc34cfa2a58fc..f9610f860e6d1 100644 |
734 | --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c |
735 | +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c |
736 | @@ -6319,7 +6319,8 @@ static int bnxt_init_board(struct pci_dev *pdev, struct net_device *dev) |
737 | if (dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64)) != 0 && |
738 | dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32)) != 0) { |
739 | dev_err(&pdev->dev, "System does not support DMA, aborting\n"); |
740 | - goto init_err_disable; |
741 | + rc = -EIO; |
742 | + goto init_err_release; |
743 | } |
744 | |
745 | pci_set_master(pdev); |
746 | diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c |
747 | index d25b76440c114..88c837504c7d6 100644 |
748 | --- a/drivers/net/ethernet/ibm/ibmvnic.c |
749 | +++ b/drivers/net/ethernet/ibm/ibmvnic.c |
750 | @@ -3525,6 +3525,9 @@ static int ibmvnic_reset_crq(struct ibmvnic_adapter *adapter) |
751 | } while (rc == H_BUSY || H_IS_LONG_BUSY(rc)); |
752 | |
753 | /* Clean out the queue */ |
754 | + if (!crq->msgs) |
755 | + return -EINVAL; |
756 | + |
757 | memset(crq->msgs, 0, PAGE_SIZE); |
758 | crq->cur = 0; |
759 | |
760 | diff --git a/drivers/nfc/s3fwrn5/i2c.c b/drivers/nfc/s3fwrn5/i2c.c |
761 | index 3ed0adf6479b0..5b0c065bd279f 100644 |
762 | --- a/drivers/nfc/s3fwrn5/i2c.c |
763 | +++ b/drivers/nfc/s3fwrn5/i2c.c |
764 | @@ -37,8 +37,8 @@ struct s3fwrn5_i2c_phy { |
765 | struct i2c_client *i2c_dev; |
766 | struct nci_dev *ndev; |
767 | |
768 | - unsigned int gpio_en; |
769 | - unsigned int gpio_fw_wake; |
770 | + int gpio_en; |
771 | + int gpio_fw_wake; |
772 | |
773 | struct mutex mutex; |
774 | |
775 | diff --git a/drivers/pci/bus.c b/drivers/pci/bus.c |
776 | index c288e5a525754..32001787cff3f 100644 |
777 | --- a/drivers/pci/bus.c |
778 | +++ b/drivers/pci/bus.c |
779 | @@ -324,12 +324,8 @@ void pci_bus_add_device(struct pci_dev *dev) |
780 | |
781 | dev->match_driver = true; |
782 | retval = device_attach(&dev->dev); |
783 | - if (retval < 0 && retval != -EPROBE_DEFER) { |
784 | + if (retval < 0 && retval != -EPROBE_DEFER) |
785 | dev_warn(&dev->dev, "device attach failed (%d)\n", retval); |
786 | - pci_proc_detach_device(dev); |
787 | - pci_remove_sysfs_dev_files(dev); |
788 | - return; |
789 | - } |
790 | |
791 | dev->is_added = 1; |
792 | } |
793 | diff --git a/drivers/phy/tegra/xusb.c b/drivers/phy/tegra/xusb.c |
794 | index bd0e659002161..0156134dd022d 100644 |
795 | --- a/drivers/phy/tegra/xusb.c |
796 | +++ b/drivers/phy/tegra/xusb.c |
797 | @@ -916,6 +916,7 @@ remove_pads: |
798 | reset: |
799 | reset_control_assert(padctl->rst); |
800 | remove: |
801 | + platform_set_drvdata(pdev, NULL); |
802 | soc->ops->remove(padctl); |
803 | return err; |
804 | } |
805 | diff --git a/drivers/platform/x86/toshiba_acpi.c b/drivers/platform/x86/toshiba_acpi.c |
806 | index 79a2289370729..f25278bb3e1a8 100644 |
807 | --- a/drivers/platform/x86/toshiba_acpi.c |
808 | +++ b/drivers/platform/x86/toshiba_acpi.c |
809 | @@ -1497,7 +1497,7 @@ static ssize_t video_proc_write(struct file *file, const char __user *buf, |
810 | struct toshiba_acpi_dev *dev = PDE_DATA(file_inode(file)); |
811 | char *buffer; |
812 | char *cmd; |
813 | - int lcd_out, crt_out, tv_out; |
814 | + int lcd_out = -1, crt_out = -1, tv_out = -1; |
815 | int remain = count; |
816 | int value; |
817 | int ret; |
818 | @@ -1534,7 +1534,6 @@ static ssize_t video_proc_write(struct file *file, const char __user *buf, |
819 | |
820 | kfree(cmd); |
821 | |
822 | - lcd_out = crt_out = tv_out = -1; |
823 | ret = get_video_status(dev, &video_out); |
824 | if (!ret) { |
825 | unsigned int new_video_out = video_out; |
826 | diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c |
827 | index 0a0dd0aac047c..23323add5b0b1 100644 |
828 | --- a/drivers/regulator/core.c |
829 | +++ b/drivers/regulator/core.c |
830 | @@ -1550,6 +1550,15 @@ static int regulator_resolve_supply(struct regulator_dev *rdev) |
831 | } |
832 | } |
833 | |
834 | + if (r == rdev) { |
835 | + dev_err(dev, "Supply for %s (%s) resolved to itself\n", |
836 | + rdev->desc->name, rdev->supply_name); |
837 | + if (!have_full_constraints()) |
838 | + return -EINVAL; |
839 | + r = dummy_regulator_rdev; |
840 | + get_device(&r->dev); |
841 | + } |
842 | + |
843 | /* Recursively resolve the supply of the supply */ |
844 | ret = regulator_resolve_supply(r); |
845 | if (ret < 0) { |
846 | diff --git a/drivers/scsi/libiscsi.c b/drivers/scsi/libiscsi.c |
847 | index c4336b01db23c..a84b473d4a08b 100644 |
848 | --- a/drivers/scsi/libiscsi.c |
849 | +++ b/drivers/scsi/libiscsi.c |
850 | @@ -570,8 +570,8 @@ static void iscsi_complete_task(struct iscsi_task *task, int state) |
851 | if (conn->task == task) |
852 | conn->task = NULL; |
853 | |
854 | - if (conn->ping_task == task) |
855 | - conn->ping_task = NULL; |
856 | + if (READ_ONCE(conn->ping_task) == task) |
857 | + WRITE_ONCE(conn->ping_task, NULL); |
858 | |
859 | /* release get from queueing */ |
860 | __iscsi_put_task(task); |
861 | @@ -780,6 +780,9 @@ __iscsi_conn_send_pdu(struct iscsi_conn *conn, struct iscsi_hdr *hdr, |
862 | task->conn->session->age); |
863 | } |
864 | |
865 | + if (unlikely(READ_ONCE(conn->ping_task) == INVALID_SCSI_TASK)) |
866 | + WRITE_ONCE(conn->ping_task, task); |
867 | + |
868 | if (!ihost->workq) { |
869 | if (iscsi_prep_mgmt_task(conn, task)) |
870 | goto free_task; |
871 | @@ -987,8 +990,11 @@ static int iscsi_send_nopout(struct iscsi_conn *conn, struct iscsi_nopin *rhdr) |
872 | struct iscsi_nopout hdr; |
873 | struct iscsi_task *task; |
874 | |
875 | - if (!rhdr && conn->ping_task) |
876 | - return -EINVAL; |
877 | + if (!rhdr) { |
878 | + if (READ_ONCE(conn->ping_task)) |
879 | + return -EINVAL; |
880 | + WRITE_ONCE(conn->ping_task, INVALID_SCSI_TASK); |
881 | + } |
882 | |
883 | memset(&hdr, 0, sizeof(struct iscsi_nopout)); |
884 | hdr.opcode = ISCSI_OP_NOOP_OUT | ISCSI_OP_IMMEDIATE; |
885 | @@ -1003,11 +1009,12 @@ static int iscsi_send_nopout(struct iscsi_conn *conn, struct iscsi_nopin *rhdr) |
886 | |
887 | task = __iscsi_conn_send_pdu(conn, (struct iscsi_hdr *)&hdr, NULL, 0); |
888 | if (!task) { |
889 | + if (!rhdr) |
890 | + WRITE_ONCE(conn->ping_task, NULL); |
891 | iscsi_conn_printk(KERN_ERR, conn, "Could not send nopout\n"); |
892 | return -EIO; |
893 | } else if (!rhdr) { |
894 | /* only track our nops */ |
895 | - conn->ping_task = task; |
896 | conn->last_ping = jiffies; |
897 | } |
898 | |
899 | @@ -1020,7 +1027,7 @@ static int iscsi_nop_out_rsp(struct iscsi_task *task, |
900 | struct iscsi_conn *conn = task->conn; |
901 | int rc = 0; |
902 | |
903 | - if (conn->ping_task != task) { |
904 | + if (READ_ONCE(conn->ping_task) != task) { |
905 | /* |
906 | * If this is not in response to one of our |
907 | * nops then it must be from userspace. |
908 | @@ -1960,7 +1967,7 @@ static void iscsi_start_tx(struct iscsi_conn *conn) |
909 | */ |
910 | static int iscsi_has_ping_timed_out(struct iscsi_conn *conn) |
911 | { |
912 | - if (conn->ping_task && |
913 | + if (READ_ONCE(conn->ping_task) && |
914 | time_before_eq(conn->last_recv + (conn->recv_timeout * HZ) + |
915 | (conn->ping_timeout * HZ), jiffies)) |
916 | return 1; |
917 | @@ -2095,7 +2102,7 @@ static enum blk_eh_timer_return iscsi_eh_cmd_timed_out(struct scsi_cmnd *sc) |
918 | * Checking the transport already or nop from a cmd timeout still |
919 | * running |
920 | */ |
921 | - if (conn->ping_task) { |
922 | + if (READ_ONCE(conn->ping_task)) { |
923 | task->have_checked_conn = true; |
924 | rc = BLK_EH_RESET_TIMER; |
925 | goto done; |
926 | diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c |
927 | index ad5f2e2b4cbaf..ad80e4223c2d3 100644 |
928 | --- a/drivers/scsi/ufs/ufshcd.c |
929 | +++ b/drivers/scsi/ufs/ufshcd.c |
930 | @@ -6521,11 +6521,7 @@ int ufshcd_shutdown(struct ufs_hba *hba) |
931 | if (ufshcd_is_ufs_dev_poweroff(hba) && ufshcd_is_link_off(hba)) |
932 | goto out; |
933 | |
934 | - if (pm_runtime_suspended(hba->dev)) { |
935 | - ret = ufshcd_runtime_resume(hba); |
936 | - if (ret) |
937 | - goto out; |
938 | - } |
939 | + pm_runtime_get_sync(hba->dev); |
940 | |
941 | ret = ufshcd_suspend(hba, UFS_SHUTDOWN_PM); |
942 | out: |
943 | diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c |
944 | index 7c0f4b96816a8..eba21f06a9b95 100644 |
945 | --- a/drivers/target/iscsi/iscsi_target.c |
946 | +++ b/drivers/target/iscsi/iscsi_target.c |
947 | @@ -493,8 +493,7 @@ void iscsit_aborted_task(struct iscsi_conn *conn, struct iscsi_cmd *cmd) |
948 | bool scsi_cmd = (cmd->iscsi_opcode == ISCSI_OP_SCSI_CMD); |
949 | |
950 | spin_lock_bh(&conn->cmd_lock); |
951 | - if (!list_empty(&cmd->i_conn_node) && |
952 | - !(cmd->se_cmd.transport_state & CMD_T_FABRIC_STOP)) |
953 | + if (!list_empty(&cmd->i_conn_node)) |
954 | list_del_init(&cmd->i_conn_node); |
955 | spin_unlock_bh(&conn->cmd_lock); |
956 | |
957 | @@ -4093,12 +4092,22 @@ static void iscsit_release_commands_from_conn(struct iscsi_conn *conn) |
958 | spin_lock_bh(&conn->cmd_lock); |
959 | list_splice_init(&conn->conn_cmd_list, &tmp_list); |
960 | |
961 | - list_for_each_entry(cmd, &tmp_list, i_conn_node) { |
962 | + list_for_each_entry_safe(cmd, cmd_tmp, &tmp_list, i_conn_node) { |
963 | struct se_cmd *se_cmd = &cmd->se_cmd; |
964 | |
965 | if (se_cmd->se_tfo != NULL) { |
966 | spin_lock_irq(&se_cmd->t_state_lock); |
967 | - se_cmd->transport_state |= CMD_T_FABRIC_STOP; |
968 | + if (se_cmd->transport_state & CMD_T_ABORTED) { |
969 | + /* |
970 | + * LIO's abort path owns the cleanup for this, |
971 | + * so put it back on the list and let |
972 | + * aborted_task handle it. |
973 | + */ |
974 | + list_move_tail(&cmd->i_conn_node, |
975 | + &conn->conn_cmd_list); |
976 | + } else { |
977 | + se_cmd->transport_state |= CMD_T_FABRIC_STOP; |
978 | + } |
979 | spin_unlock_irq(&se_cmd->t_state_lock); |
980 | } |
981 | } |
982 | diff --git a/drivers/usb/core/config.c b/drivers/usb/core/config.c |
983 | index edf66b2f916b8..34081f03b1f56 100644 |
984 | --- a/drivers/usb/core/config.c |
985 | +++ b/drivers/usb/core/config.c |
986 | @@ -251,6 +251,7 @@ static int usb_parse_endpoint(struct device *ddev, int cfgno, |
987 | struct usb_host_interface *ifp, int num_ep, |
988 | unsigned char *buffer, int size) |
989 | { |
990 | + struct usb_device *udev = to_usb_device(ddev); |
991 | unsigned char *buffer0 = buffer; |
992 | struct usb_endpoint_descriptor *d; |
993 | struct usb_host_endpoint *endpoint; |
994 | @@ -292,6 +293,16 @@ static int usb_parse_endpoint(struct device *ddev, int cfgno, |
995 | goto skip_to_next_endpoint_or_interface_descriptor; |
996 | } |
997 | |
998 | + /* Ignore blacklisted endpoints */ |
999 | + if (udev->quirks & USB_QUIRK_ENDPOINT_BLACKLIST) { |
1000 | + if (usb_endpoint_is_blacklisted(udev, ifp, d)) { |
1001 | + dev_warn(ddev, "config %d interface %d altsetting %d has a blacklisted endpoint with address 0x%X, skipping\n", |
1002 | + cfgno, inum, asnum, |
1003 | + d->bEndpointAddress); |
1004 | + goto skip_to_next_endpoint_or_interface_descriptor; |
1005 | + } |
1006 | + } |
1007 | + |
1008 | endpoint = &ifp->endpoint[ifp->desc.bNumEndpoints]; |
1009 | ++ifp->desc.bNumEndpoints; |
1010 | |
1011 | diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c |
1012 | index 059e71d71b666..781db58004f7f 100644 |
1013 | --- a/drivers/usb/core/devio.c |
1014 | +++ b/drivers/usb/core/devio.c |
1015 | @@ -477,11 +477,11 @@ static void snoop_urb(struct usb_device *udev, |
1016 | |
1017 | if (userurb) { /* Async */ |
1018 | if (when == SUBMIT) |
1019 | - dev_info(&udev->dev, "userurb %pK, ep%d %s-%s, " |
1020 | + dev_info(&udev->dev, "userurb %px, ep%d %s-%s, " |
1021 | "length %u\n", |
1022 | userurb, ep, t, d, length); |
1023 | else |
1024 | - dev_info(&udev->dev, "userurb %pK, ep%d %s-%s, " |
1025 | + dev_info(&udev->dev, "userurb %px, ep%d %s-%s, " |
1026 | "actual_length %u status %d\n", |
1027 | userurb, ep, t, d, length, |
1028 | timeout_or_status); |
1029 | @@ -1945,7 +1945,7 @@ static int proc_reapurb(struct usb_dev_state *ps, void __user *arg) |
1030 | if (as) { |
1031 | int retval; |
1032 | |
1033 | - snoop(&ps->dev->dev, "reap %pK\n", as->userurb); |
1034 | + snoop(&ps->dev->dev, "reap %px\n", as->userurb); |
1035 | retval = processcompl(as, (void __user * __user *)arg); |
1036 | free_async(as); |
1037 | return retval; |
1038 | @@ -1962,7 +1962,7 @@ static int proc_reapurbnonblock(struct usb_dev_state *ps, void __user *arg) |
1039 | |
1040 | as = async_getcompleted(ps); |
1041 | if (as) { |
1042 | - snoop(&ps->dev->dev, "reap %pK\n", as->userurb); |
1043 | + snoop(&ps->dev->dev, "reap %px\n", as->userurb); |
1044 | retval = processcompl(as, (void __user * __user *)arg); |
1045 | free_async(as); |
1046 | } else { |
1047 | @@ -2094,7 +2094,7 @@ static int proc_reapurb_compat(struct usb_dev_state *ps, void __user *arg) |
1048 | if (as) { |
1049 | int retval; |
1050 | |
1051 | - snoop(&ps->dev->dev, "reap %pK\n", as->userurb); |
1052 | + snoop(&ps->dev->dev, "reap %px\n", as->userurb); |
1053 | retval = processcompl_compat(as, (void __user * __user *)arg); |
1054 | free_async(as); |
1055 | return retval; |
1056 | @@ -2111,7 +2111,7 @@ static int proc_reapurbnonblock_compat(struct usb_dev_state *ps, void __user *ar |
1057 | |
1058 | as = async_getcompleted(ps); |
1059 | if (as) { |
1060 | - snoop(&ps->dev->dev, "reap %pK\n", as->userurb); |
1061 | + snoop(&ps->dev->dev, "reap %px\n", as->userurb); |
1062 | retval = processcompl_compat(as, (void __user * __user *)arg); |
1063 | free_async(as); |
1064 | } else { |
1065 | @@ -2540,7 +2540,7 @@ static long usbdev_do_ioctl(struct file *file, unsigned int cmd, |
1066 | #endif |
1067 | |
1068 | case USBDEVFS_DISCARDURB: |
1069 | - snoop(&dev->dev, "%s: DISCARDURB %pK\n", __func__, p); |
1070 | + snoop(&dev->dev, "%s: DISCARDURB %px\n", __func__, p); |
1071 | ret = proc_unlinkurb(ps, p); |
1072 | break; |
1073 | |
1074 | diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c |
1075 | index ca74b67c4450d..34d8cece6dd3b 100644 |
1076 | --- a/drivers/usb/core/quirks.c |
1077 | +++ b/drivers/usb/core/quirks.c |
1078 | @@ -195,6 +195,10 @@ static const struct usb_device_id usb_quirk_list[] = { |
1079 | /* Guillemot Webcam Hercules Dualpix Exchange*/ |
1080 | { USB_DEVICE(0x06f8, 0x3005), .driver_info = USB_QUIRK_RESET_RESUME }, |
1081 | |
1082 | + /* Guillemot Hercules DJ Console audio card (BZ 208357) */ |
1083 | + { USB_DEVICE(0x06f8, 0xb000), .driver_info = |
1084 | + USB_QUIRK_ENDPOINT_BLACKLIST }, |
1085 | + |
1086 | /* Midiman M-Audio Keystation 88es */ |
1087 | { USB_DEVICE(0x0763, 0x0192), .driver_info = USB_QUIRK_RESET_RESUME }, |
1088 | |
1089 | @@ -344,6 +348,40 @@ static const struct usb_device_id usb_amd_resume_quirk_list[] = { |
1090 | { } /* terminating entry must be last */ |
1091 | }; |
1092 | |
1093 | +/* |
1094 | + * Entries for blacklisted endpoints that should be ignored when parsing |
1095 | + * configuration descriptors. |
1096 | + * |
1097 | + * Matched for devices with USB_QUIRK_ENDPOINT_BLACKLIST. |
1098 | + */ |
1099 | +static const struct usb_device_id usb_endpoint_blacklist[] = { |
1100 | + { USB_DEVICE_INTERFACE_NUMBER(0x06f8, 0xb000, 5), .driver_info = 0x01 }, |
1101 | + { USB_DEVICE_INTERFACE_NUMBER(0x06f8, 0xb000, 5), .driver_info = 0x81 }, |
1102 | + { } |
1103 | +}; |
1104 | + |
1105 | +bool usb_endpoint_is_blacklisted(struct usb_device *udev, |
1106 | + struct usb_host_interface *intf, |
1107 | + struct usb_endpoint_descriptor *epd) |
1108 | +{ |
1109 | + const struct usb_device_id *id; |
1110 | + unsigned int address; |
1111 | + |
1112 | + for (id = usb_endpoint_blacklist; id->match_flags; ++id) { |
1113 | + if (!usb_match_device(udev, id)) |
1114 | + continue; |
1115 | + |
1116 | + if (!usb_match_one_id_intf(udev, intf, id)) |
1117 | + continue; |
1118 | + |
1119 | + address = id->driver_info; |
1120 | + if (address == epd->bEndpointAddress) |
1121 | + return true; |
1122 | + } |
1123 | + |
1124 | + return false; |
1125 | +} |
1126 | + |
1127 | static bool usb_match_any_interface(struct usb_device *udev, |
1128 | const struct usb_device_id *id) |
1129 | { |
1130 | diff --git a/drivers/usb/core/usb.h b/drivers/usb/core/usb.h |
1131 | index 6b2f115442838..462a00c749b87 100644 |
1132 | --- a/drivers/usb/core/usb.h |
1133 | +++ b/drivers/usb/core/usb.h |
1134 | @@ -31,6 +31,9 @@ extern void usb_deauthorize_interface(struct usb_interface *); |
1135 | extern void usb_authorize_interface(struct usb_interface *); |
1136 | extern void usb_detect_quirks(struct usb_device *udev); |
1137 | extern void usb_detect_interface_quirks(struct usb_device *udev); |
1138 | +extern bool usb_endpoint_is_blacklisted(struct usb_device *udev, |
1139 | + struct usb_host_interface *intf, |
1140 | + struct usb_endpoint_descriptor *epd); |
1141 | extern int usb_remove_device(struct usb_device *udev); |
1142 | |
1143 | extern int usb_get_device_descriptor(struct usb_device *dev, |
1144 | diff --git a/drivers/usb/gadget/function/f_midi.c b/drivers/usb/gadget/function/f_midi.c |
1145 | index 70ac1963b5987..cab5fbd5b9557 100644 |
1146 | --- a/drivers/usb/gadget/function/f_midi.c |
1147 | +++ b/drivers/usb/gadget/function/f_midi.c |
1148 | @@ -1256,7 +1256,7 @@ static struct usb_function *f_midi_alloc(struct usb_function_instance *fi) |
1149 | midi->id = kstrdup(opts->id, GFP_KERNEL); |
1150 | if (opts->id && !midi->id) { |
1151 | status = -ENOMEM; |
1152 | - goto setup_fail; |
1153 | + goto midi_free; |
1154 | } |
1155 | midi->in_ports = opts->in_ports; |
1156 | midi->out_ports = opts->out_ports; |
1157 | @@ -1267,7 +1267,7 @@ static struct usb_function *f_midi_alloc(struct usb_function_instance *fi) |
1158 | |
1159 | status = kfifo_alloc(&midi->in_req_fifo, midi->qlen, GFP_KERNEL); |
1160 | if (status) |
1161 | - goto setup_fail; |
1162 | + goto midi_free; |
1163 | |
1164 | spin_lock_init(&midi->transmit_lock); |
1165 | |
1166 | @@ -1283,9 +1283,13 @@ static struct usb_function *f_midi_alloc(struct usb_function_instance *fi) |
1167 | |
1168 | return &midi->func; |
1169 | |
1170 | +midi_free: |
1171 | + if (midi) |
1172 | + kfree(midi->id); |
1173 | + kfree(midi); |
1174 | setup_fail: |
1175 | mutex_unlock(&opts->lock); |
1176 | - kfree(midi); |
1177 | + |
1178 | return ERR_PTR(status); |
1179 | } |
1180 | |
1181 | diff --git a/drivers/usb/gadget/legacy/inode.c b/drivers/usb/gadget/legacy/inode.c |
1182 | index cb02e9ecd8e7d..de0f3c2c9f6f3 100644 |
1183 | --- a/drivers/usb/gadget/legacy/inode.c |
1184 | +++ b/drivers/usb/gadget/legacy/inode.c |
1185 | @@ -2045,6 +2045,9 @@ gadgetfs_fill_super (struct super_block *sb, void *opts, int silent) |
1186 | return 0; |
1187 | |
1188 | Enomem: |
1189 | + kfree(CHIP); |
1190 | + CHIP = NULL; |
1191 | + |
1192 | return -ENOMEM; |
1193 | } |
1194 | |
1195 | diff --git a/drivers/video/fbdev/hyperv_fb.c b/drivers/video/fbdev/hyperv_fb.c |
1196 | index 2fd49b2358f8b..f3938c5278832 100644 |
1197 | --- a/drivers/video/fbdev/hyperv_fb.c |
1198 | +++ b/drivers/video/fbdev/hyperv_fb.c |
1199 | @@ -712,7 +712,12 @@ static int hvfb_getmem(struct hv_device *hdev, struct fb_info *info) |
1200 | goto err1; |
1201 | } |
1202 | |
1203 | - fb_virt = ioremap(par->mem->start, screen_fb_size); |
1204 | + /* |
1205 | + * Map the VRAM cacheable for performance. This is also required for |
1206 | + * VM Connect to display properly for ARM64 Linux VM, as the host also |
1207 | + * maps the VRAM cacheable. |
1208 | + */ |
1209 | + fb_virt = ioremap_cache(par->mem->start, screen_fb_size); |
1210 | if (!fb_virt) |
1211 | goto err2; |
1212 | |
1213 | diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c |
1214 | index dfc0b3adf57af..6f8f37e37abb2 100644 |
1215 | --- a/fs/btrfs/inode.c |
1216 | +++ b/fs/btrfs/inode.c |
1217 | @@ -5440,11 +5440,13 @@ no_delete: |
1218 | } |
1219 | |
1220 | /* |
1221 | - * this returns the key found in the dir entry in the location pointer. |
1222 | + * Return the key found in the dir entry in the location pointer, fill @type |
1223 | + * with BTRFS_FT_*, and return 0. |
1224 | + * |
1225 | * If no dir entries were found, location->objectid is 0. |
1226 | */ |
1227 | static int btrfs_inode_by_name(struct inode *dir, struct dentry *dentry, |
1228 | - struct btrfs_key *location) |
1229 | + struct btrfs_key *location, u8 *type) |
1230 | { |
1231 | const char *name = dentry->d_name.name; |
1232 | int namelen = dentry->d_name.len; |
1233 | @@ -5466,6 +5468,8 @@ static int btrfs_inode_by_name(struct inode *dir, struct dentry *dentry, |
1234 | goto out_err; |
1235 | |
1236 | btrfs_dir_item_key_to_cpu(path->nodes[0], di, location); |
1237 | + if (!ret) |
1238 | + *type = btrfs_dir_type(path->nodes[0], di); |
1239 | out: |
1240 | btrfs_free_path(path); |
1241 | return ret; |
1242 | @@ -5755,19 +5759,25 @@ static struct inode *new_simple_dir(struct super_block *s, |
1243 | return inode; |
1244 | } |
1245 | |
1246 | +static inline u8 btrfs_inode_type(struct inode *inode) |
1247 | +{ |
1248 | + return btrfs_type_by_mode[(inode->i_mode & S_IFMT) >> S_SHIFT]; |
1249 | +} |
1250 | + |
1251 | struct inode *btrfs_lookup_dentry(struct inode *dir, struct dentry *dentry) |
1252 | { |
1253 | struct inode *inode; |
1254 | struct btrfs_root *root = BTRFS_I(dir)->root; |
1255 | struct btrfs_root *sub_root = root; |
1256 | struct btrfs_key location; |
1257 | + u8 di_type = 0; |
1258 | int index; |
1259 | int ret = 0; |
1260 | |
1261 | if (dentry->d_name.len > BTRFS_NAME_LEN) |
1262 | return ERR_PTR(-ENAMETOOLONG); |
1263 | |
1264 | - ret = btrfs_inode_by_name(dir, dentry, &location); |
1265 | + ret = btrfs_inode_by_name(dir, dentry, &location, &di_type); |
1266 | if (ret < 0) |
1267 | return ERR_PTR(ret); |
1268 | |
1269 | @@ -5776,6 +5786,18 @@ struct inode *btrfs_lookup_dentry(struct inode *dir, struct dentry *dentry) |
1270 | |
1271 | if (location.type == BTRFS_INODE_ITEM_KEY) { |
1272 | inode = btrfs_iget(dir->i_sb, &location, root, NULL); |
1273 | + if (IS_ERR(inode)) |
1274 | + return inode; |
1275 | + |
1276 | + /* Do extra check against inode mode with di_type */ |
1277 | + if (btrfs_inode_type(inode) != di_type) { |
1278 | + btrfs_crit(root->fs_info, |
1279 | +"inode mode mismatch with dir: inode mode=0%o btrfs type=%u dir type=%u", |
1280 | + inode->i_mode, btrfs_inode_type(inode), |
1281 | + di_type); |
1282 | + iput(inode); |
1283 | + return ERR_PTR(-EUCLEAN); |
1284 | + } |
1285 | return inode; |
1286 | } |
1287 | |
1288 | @@ -6391,11 +6413,6 @@ fail: |
1289 | return ERR_PTR(ret); |
1290 | } |
1291 | |
1292 | -static inline u8 btrfs_inode_type(struct inode *inode) |
1293 | -{ |
1294 | - return btrfs_type_by_mode[(inode->i_mode & S_IFMT) >> S_SHIFT]; |
1295 | -} |
1296 | - |
1297 | /* |
1298 | * utility function to add 'inode' into 'parent_inode' with |
1299 | * a give name and a given sequence number. |
1300 | @@ -6981,6 +6998,14 @@ again: |
1301 | extent_start = found_key.offset; |
1302 | if (found_type == BTRFS_FILE_EXTENT_REG || |
1303 | found_type == BTRFS_FILE_EXTENT_PREALLOC) { |
1304 | + /* Only regular file could have regular/prealloc extent */ |
1305 | + if (!S_ISREG(inode->i_mode)) { |
1306 | + ret = -EUCLEAN; |
1307 | + btrfs_crit(root->fs_info, |
1308 | + "regular/prealloc extent found for non-regular inode %llu", |
1309 | + btrfs_ino(inode)); |
1310 | + goto out; |
1311 | + } |
1312 | extent_end = extent_start + |
1313 | btrfs_file_extent_num_bytes(leaf, item); |
1314 | } else if (found_type == BTRFS_FILE_EXTENT_INLINE) { |
1315 | diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c |
1316 | index 0355e6d9e21cb..154008e245a2f 100644 |
1317 | --- a/fs/btrfs/qgroup.c |
1318 | +++ b/fs/btrfs/qgroup.c |
1319 | @@ -461,13 +461,13 @@ next2: |
1320 | break; |
1321 | } |
1322 | out: |
1323 | + btrfs_free_path(path); |
1324 | fs_info->qgroup_flags |= flags; |
1325 | if (!(fs_info->qgroup_flags & BTRFS_QGROUP_STATUS_FLAG_ON)) |
1326 | clear_bit(BTRFS_FS_QUOTA_ENABLED, &fs_info->flags); |
1327 | else if (fs_info->qgroup_flags & BTRFS_QGROUP_STATUS_FLAG_RESCAN && |
1328 | ret >= 0) |
1329 | ret = qgroup_rescan_init(fs_info, rescan_progress, 0); |
1330 | - btrfs_free_path(path); |
1331 | |
1332 | if (ret < 0) { |
1333 | ulist_free(fs_info->qgroup_ulist); |
1334 | diff --git a/fs/btrfs/tests/inode-tests.c b/fs/btrfs/tests/inode-tests.c |
1335 | index 0bf46808ce8f2..ee89de7f4d61b 100644 |
1336 | --- a/fs/btrfs/tests/inode-tests.c |
1337 | +++ b/fs/btrfs/tests/inode-tests.c |
1338 | @@ -245,6 +245,7 @@ static noinline int test_btrfs_get_extent(u32 sectorsize, u32 nodesize) |
1339 | return ret; |
1340 | } |
1341 | |
1342 | + inode->i_mode = S_IFREG; |
1343 | BTRFS_I(inode)->location.type = BTRFS_INODE_ITEM_KEY; |
1344 | BTRFS_I(inode)->location.objectid = BTRFS_FIRST_FREE_OBJECTID; |
1345 | BTRFS_I(inode)->location.offset = 0; |
1346 | diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c |
1347 | index c31b02692f706..7391634520ab2 100644 |
1348 | --- a/fs/btrfs/volumes.c |
1349 | +++ b/fs/btrfs/volumes.c |
1350 | @@ -6414,6 +6414,13 @@ static int btrfs_check_chunk_valid(struct btrfs_root *root, |
1351 | return -EIO; |
1352 | } |
1353 | |
1354 | + if (!is_power_of_2(type & BTRFS_BLOCK_GROUP_PROFILE_MASK) && |
1355 | + (type & BTRFS_BLOCK_GROUP_PROFILE_MASK) != 0) { |
1356 | + btrfs_err(root->fs_info, |
1357 | + "invalid chunk profile flag: 0x%llx, expect 0 or 1 bit set", |
1358 | + type & BTRFS_BLOCK_GROUP_PROFILE_MASK); |
1359 | + return -EUCLEAN; |
1360 | + } |
1361 | if ((type & BTRFS_BLOCK_GROUP_TYPE_MASK) == 0) { |
1362 | btrfs_err(root->fs_info, "missing chunk type flag: 0x%llx", type); |
1363 | return -EIO; |
1364 | diff --git a/fs/efivarfs/inode.c b/fs/efivarfs/inode.c |
1365 | index 71fccccf317e8..5decb3e06563f 100644 |
1366 | --- a/fs/efivarfs/inode.c |
1367 | +++ b/fs/efivarfs/inode.c |
1368 | @@ -10,6 +10,7 @@ |
1369 | #include <linux/efi.h> |
1370 | #include <linux/fs.h> |
1371 | #include <linux/ctype.h> |
1372 | +#include <linux/kmemleak.h> |
1373 | #include <linux/slab.h> |
1374 | #include <linux/uuid.h> |
1375 | |
1376 | @@ -104,6 +105,7 @@ static int efivarfs_create(struct inode *dir, struct dentry *dentry, |
1377 | var->var.VariableName[i] = '\0'; |
1378 | |
1379 | inode->i_private = var; |
1380 | + kmemleak_ignore(var); |
1381 | |
1382 | err = efivar_entry_add(var, &efivarfs_list); |
1383 | if (err) |
1384 | diff --git a/fs/efivarfs/super.c b/fs/efivarfs/super.c |
1385 | index bbf056191aaa4..b1e6acec53041 100644 |
1386 | --- a/fs/efivarfs/super.c |
1387 | +++ b/fs/efivarfs/super.c |
1388 | @@ -23,7 +23,6 @@ LIST_HEAD(efivarfs_list); |
1389 | static void efivarfs_evict_inode(struct inode *inode) |
1390 | { |
1391 | clear_inode(inode); |
1392 | - kfree(inode->i_private); |
1393 | } |
1394 | |
1395 | static const struct super_operations efivarfs_ops = { |
1396 | diff --git a/fs/proc/self.c b/fs/proc/self.c |
1397 | index c8bbc1c84a39a..f6e2e3fb8a226 100644 |
1398 | --- a/fs/proc/self.c |
1399 | +++ b/fs/proc/self.c |
1400 | @@ -26,6 +26,13 @@ static const char *proc_self_get_link(struct dentry *dentry, |
1401 | pid_t tgid = task_tgid_nr_ns(current, ns); |
1402 | char *name; |
1403 | |
1404 | + /* |
1405 | + * Not currently supported. Once we can inherit all of struct pid, |
1406 | + * we can allow this. |
1407 | + */ |
1408 | + if (current->flags & PF_KTHREAD) |
1409 | + return ERR_PTR(-EOPNOTSUPP); |
1410 | + |
1411 | if (!tgid) |
1412 | return ERR_PTR(-ENOENT); |
1413 | /* 11 for max length of signed int in decimal + NULL term */ |
1414 | diff --git a/include/linux/usb/quirks.h b/include/linux/usb/quirks.h |
1415 | index ea4f81c2a6d5e..602dff213bae1 100644 |
1416 | --- a/include/linux/usb/quirks.h |
1417 | +++ b/include/linux/usb/quirks.h |
1418 | @@ -59,4 +59,7 @@ |
1419 | /* Device needs a pause after every control message. */ |
1420 | #define USB_QUIRK_DELAY_CTRL_MSG BIT(13) |
1421 | |
1422 | +/* device has blacklisted endpoints */ |
1423 | +#define USB_QUIRK_ENDPOINT_BLACKLIST BIT(15) |
1424 | + |
1425 | #endif /* __LINUX_USB_QUIRKS_H */ |
1426 | diff --git a/include/scsi/libiscsi.h b/include/scsi/libiscsi.h |
1427 | index c7b1dc713cdd7..9c7f4aad6db66 100644 |
1428 | --- a/include/scsi/libiscsi.h |
1429 | +++ b/include/scsi/libiscsi.h |
1430 | @@ -144,6 +144,9 @@ struct iscsi_task { |
1431 | void *dd_data; /* driver/transport data */ |
1432 | }; |
1433 | |
1434 | +/* invalid scsi_task pointer */ |
1435 | +#define INVALID_SCSI_TASK (struct iscsi_task *)-1l |
1436 | + |
1437 | static inline int iscsi_task_has_unsol_data(struct iscsi_task *task) |
1438 | { |
1439 | return task->unsol_r2t.data_length > task->unsol_r2t.sent; |
1440 | diff --git a/mm/huge_memory.c b/mm/huge_memory.c |
1441 | index cf4c0a61b3708..0385c57a2b7af 100644 |
1442 | --- a/mm/huge_memory.c |
1443 | +++ b/mm/huge_memory.c |
1444 | @@ -661,7 +661,6 @@ int do_huge_pmd_anonymous_page(struct fault_env *fe) |
1445 | transparent_hugepage_use_zero_page()) { |
1446 | pgtable_t pgtable; |
1447 | struct page *zero_page; |
1448 | - bool set; |
1449 | int ret; |
1450 | pgtable = pte_alloc_one(vma->vm_mm, haddr); |
1451 | if (unlikely(!pgtable)) |
1452 | @@ -674,22 +673,21 @@ int do_huge_pmd_anonymous_page(struct fault_env *fe) |
1453 | } |
1454 | fe->ptl = pmd_lock(vma->vm_mm, fe->pmd); |
1455 | ret = 0; |
1456 | - set = false; |
1457 | if (pmd_none(*fe->pmd)) { |
1458 | if (userfaultfd_missing(vma)) { |
1459 | spin_unlock(fe->ptl); |
1460 | + pte_free(vma->vm_mm, pgtable); |
1461 | ret = handle_userfault(fe, VM_UFFD_MISSING); |
1462 | VM_BUG_ON(ret & VM_FAULT_FALLBACK); |
1463 | } else { |
1464 | set_huge_zero_page(pgtable, vma->vm_mm, vma, |
1465 | haddr, fe->pmd, zero_page); |
1466 | spin_unlock(fe->ptl); |
1467 | - set = true; |
1468 | } |
1469 | - } else |
1470 | + } else { |
1471 | spin_unlock(fe->ptl); |
1472 | - if (!set) |
1473 | pte_free(vma->vm_mm, pgtable); |
1474 | + } |
1475 | return ret; |
1476 | } |
1477 | gfp = alloc_hugepage_direct_gfpmask(vma); |
1478 | diff --git a/net/batman-adv/log.c b/net/batman-adv/log.c |
1479 | index 56dc532f7a2c2..b422a8b34b9f5 100644 |
1480 | --- a/net/batman-adv/log.c |
1481 | +++ b/net/batman-adv/log.c |
1482 | @@ -196,6 +196,7 @@ static const struct file_operations batadv_log_fops = { |
1483 | .read = batadv_log_read, |
1484 | .poll = batadv_log_poll, |
1485 | .llseek = no_llseek, |
1486 | + .owner = THIS_MODULE, |
1487 | }; |
1488 | |
1489 | int batadv_debug_log_setup(struct batadv_priv *bat_priv) |
1490 | diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c |
1491 | index 4f8dd558af48f..ba0c3a381933e 100644 |
1492 | --- a/sound/pci/hda/patch_hdmi.c |
1493 | +++ b/sound/pci/hda/patch_hdmi.c |
1494 | @@ -307,13 +307,13 @@ static int hdmi_eld_ctl_info(struct snd_kcontrol *kcontrol, |
1495 | if (!per_pin) { |
1496 | /* no pin is bound to the pcm */ |
1497 | uinfo->count = 0; |
1498 | - mutex_unlock(&spec->pcm_lock); |
1499 | - return 0; |
1500 | + goto unlock; |
1501 | } |
1502 | eld = &per_pin->sink_eld; |
1503 | uinfo->count = eld->eld_valid ? eld->eld_size : 0; |
1504 | - mutex_unlock(&spec->pcm_lock); |
1505 | |
1506 | + unlock: |
1507 | + mutex_unlock(&spec->pcm_lock); |
1508 | return 0; |
1509 | } |
1510 | |
1511 | @@ -325,6 +325,7 @@ static int hdmi_eld_ctl_get(struct snd_kcontrol *kcontrol, |
1512 | struct hdmi_spec_per_pin *per_pin; |
1513 | struct hdmi_eld *eld; |
1514 | int pcm_idx; |
1515 | + int err = 0; |
1516 | |
1517 | pcm_idx = kcontrol->private_value; |
1518 | mutex_lock(&spec->pcm_lock); |
1519 | @@ -333,16 +334,15 @@ static int hdmi_eld_ctl_get(struct snd_kcontrol *kcontrol, |
1520 | /* no pin is bound to the pcm */ |
1521 | memset(ucontrol->value.bytes.data, 0, |
1522 | ARRAY_SIZE(ucontrol->value.bytes.data)); |
1523 | - mutex_unlock(&spec->pcm_lock); |
1524 | - return 0; |
1525 | + goto unlock; |
1526 | } |
1527 | - eld = &per_pin->sink_eld; |
1528 | |
1529 | + eld = &per_pin->sink_eld; |
1530 | if (eld->eld_size > ARRAY_SIZE(ucontrol->value.bytes.data) || |
1531 | eld->eld_size > ELD_MAX_SIZE) { |
1532 | - mutex_unlock(&spec->pcm_lock); |
1533 | snd_BUG(); |
1534 | - return -EINVAL; |
1535 | + err = -EINVAL; |
1536 | + goto unlock; |
1537 | } |
1538 | |
1539 | memset(ucontrol->value.bytes.data, 0, |
1540 | @@ -350,9 +350,10 @@ static int hdmi_eld_ctl_get(struct snd_kcontrol *kcontrol, |
1541 | if (eld->eld_valid) |
1542 | memcpy(ucontrol->value.bytes.data, eld->eld_buffer, |
1543 | eld->eld_size); |
1544 | - mutex_unlock(&spec->pcm_lock); |
1545 | |
1546 | - return 0; |
1547 | + unlock: |
1548 | + mutex_unlock(&spec->pcm_lock); |
1549 | + return err; |
1550 | } |
1551 | |
1552 | static struct snd_kcontrol_new eld_bytes_ctl = { |
1553 | @@ -1114,8 +1115,8 @@ static int hdmi_pcm_open(struct hda_pcm_stream *hinfo, |
1554 | pin_idx = hinfo_to_pin_index(codec, hinfo); |
1555 | if (!spec->dyn_pcm_assign) { |
1556 | if (snd_BUG_ON(pin_idx < 0)) { |
1557 | - mutex_unlock(&spec->pcm_lock); |
1558 | - return -EINVAL; |
1559 | + err = -EINVAL; |
1560 | + goto unlock; |
1561 | } |
1562 | } else { |
1563 | /* no pin is assigned to the PCM |
1564 | @@ -1123,16 +1124,13 @@ static int hdmi_pcm_open(struct hda_pcm_stream *hinfo, |
1565 | */ |
1566 | if (pin_idx < 0) { |
1567 | err = hdmi_pcm_open_no_pin(hinfo, codec, substream); |
1568 | - mutex_unlock(&spec->pcm_lock); |
1569 | - return err; |
1570 | + goto unlock; |
1571 | } |
1572 | } |
1573 | |
1574 | err = hdmi_choose_cvt(codec, pin_idx, &cvt_idx); |
1575 | - if (err < 0) { |
1576 | - mutex_unlock(&spec->pcm_lock); |
1577 | - return err; |
1578 | - } |
1579 | + if (err < 0) |
1580 | + goto unlock; |
1581 | |
1582 | per_cvt = get_cvt(spec, cvt_idx); |
1583 | /* Claim converter */ |
1584 | @@ -1168,12 +1166,11 @@ static int hdmi_pcm_open(struct hda_pcm_stream *hinfo, |
1585 | per_cvt->assigned = 0; |
1586 | hinfo->nid = 0; |
1587 | snd_hda_spdif_ctls_unassign(codec, pcm_idx); |
1588 | - mutex_unlock(&spec->pcm_lock); |
1589 | - return -ENODEV; |
1590 | + err = -ENODEV; |
1591 | + goto unlock; |
1592 | } |
1593 | } |
1594 | |
1595 | - mutex_unlock(&spec->pcm_lock); |
1596 | /* Store the updated parameters */ |
1597 | runtime->hw.channels_min = hinfo->channels_min; |
1598 | runtime->hw.channels_max = hinfo->channels_max; |
1599 | @@ -1182,7 +1179,9 @@ static int hdmi_pcm_open(struct hda_pcm_stream *hinfo, |
1600 | |
1601 | snd_pcm_hw_constraint_step(substream->runtime, 0, |
1602 | SNDRV_PCM_HW_PARAM_CHANNELS, 2); |
1603 | - return 0; |
1604 | + unlock: |
1605 | + mutex_unlock(&spec->pcm_lock); |
1606 | + return err; |
1607 | } |
1608 | |
1609 | /* |
1610 | @@ -1726,7 +1725,7 @@ static int generic_hdmi_playback_pcm_prepare(struct hda_pcm_stream *hinfo, |
1611 | struct snd_pcm_runtime *runtime = substream->runtime; |
1612 | bool non_pcm; |
1613 | int pinctl; |
1614 | - int err; |
1615 | + int err = 0; |
1616 | |
1617 | mutex_lock(&spec->pcm_lock); |
1618 | pin_idx = hinfo_to_pin_index(codec, hinfo); |
1619 | @@ -1738,13 +1737,12 @@ static int generic_hdmi_playback_pcm_prepare(struct hda_pcm_stream *hinfo, |
1620 | pin_cvt_fixup(codec, NULL, cvt_nid); |
1621 | snd_hda_codec_setup_stream(codec, cvt_nid, |
1622 | stream_tag, 0, format); |
1623 | - mutex_unlock(&spec->pcm_lock); |
1624 | - return 0; |
1625 | + goto unlock; |
1626 | } |
1627 | |
1628 | if (snd_BUG_ON(pin_idx < 0)) { |
1629 | - mutex_unlock(&spec->pcm_lock); |
1630 | - return -EINVAL; |
1631 | + err = -EINVAL; |
1632 | + goto unlock; |
1633 | } |
1634 | per_pin = get_pin(spec, pin_idx); |
1635 | pin_nid = per_pin->pin_nid; |
1636 | @@ -1781,6 +1779,7 @@ static int generic_hdmi_playback_pcm_prepare(struct hda_pcm_stream *hinfo, |
1637 | |
1638 | err = spec->ops.setup_stream(codec, cvt_nid, pin_nid, |
1639 | stream_tag, format); |
1640 | + unlock: |
1641 | mutex_unlock(&spec->pcm_lock); |
1642 | return err; |
1643 | } |
1644 | @@ -1802,32 +1801,34 @@ static int hdmi_pcm_close(struct hda_pcm_stream *hinfo, |
1645 | struct hdmi_spec_per_cvt *per_cvt; |
1646 | struct hdmi_spec_per_pin *per_pin; |
1647 | int pinctl; |
1648 | + int err = 0; |
1649 | |
1650 | + mutex_lock(&spec->pcm_lock); |
1651 | if (hinfo->nid) { |
1652 | pcm_idx = hinfo_to_pcm_index(codec, hinfo); |
1653 | - if (snd_BUG_ON(pcm_idx < 0)) |
1654 | - return -EINVAL; |
1655 | + if (snd_BUG_ON(pcm_idx < 0)) { |
1656 | + err = -EINVAL; |
1657 | + goto unlock; |
1658 | + } |
1659 | cvt_idx = cvt_nid_to_cvt_index(codec, hinfo->nid); |
1660 | - if (snd_BUG_ON(cvt_idx < 0)) |
1661 | - return -EINVAL; |
1662 | + if (snd_BUG_ON(cvt_idx < 0)) { |
1663 | + err = -EINVAL; |
1664 | + goto unlock; |
1665 | + } |
1666 | per_cvt = get_cvt(spec, cvt_idx); |
1667 | - |
1668 | snd_BUG_ON(!per_cvt->assigned); |
1669 | per_cvt->assigned = 0; |
1670 | hinfo->nid = 0; |
1671 | |
1672 | - mutex_lock(&spec->pcm_lock); |
1673 | snd_hda_spdif_ctls_unassign(codec, pcm_idx); |
1674 | clear_bit(pcm_idx, &spec->pcm_in_use); |
1675 | pin_idx = hinfo_to_pin_index(codec, hinfo); |
1676 | - if (spec->dyn_pcm_assign && pin_idx < 0) { |
1677 | - mutex_unlock(&spec->pcm_lock); |
1678 | - return 0; |
1679 | - } |
1680 | + if (spec->dyn_pcm_assign && pin_idx < 0) |
1681 | + goto unlock; |
1682 | |
1683 | if (snd_BUG_ON(pin_idx < 0)) { |
1684 | - mutex_unlock(&spec->pcm_lock); |
1685 | - return -EINVAL; |
1686 | + err = -EINVAL; |
1687 | + goto unlock; |
1688 | } |
1689 | per_pin = get_pin(spec, pin_idx); |
1690 | |
1691 | @@ -1846,10 +1847,12 @@ static int hdmi_pcm_close(struct hda_pcm_stream *hinfo, |
1692 | per_pin->setup = false; |
1693 | per_pin->channels = 0; |
1694 | mutex_unlock(&per_pin->lock); |
1695 | - mutex_unlock(&spec->pcm_lock); |
1696 | } |
1697 | |
1698 | - return 0; |
1699 | +unlock: |
1700 | + mutex_unlock(&spec->pcm_lock); |
1701 | + |
1702 | + return err; |
1703 | } |
1704 | |
1705 | static const struct hda_pcm_ops generic_ops = { |
1706 | diff --git a/tools/perf/util/dwarf-aux.c b/tools/perf/util/dwarf-aux.c |
1707 | index fb4e1d2839c5f..cbbacc3467494 100644 |
1708 | --- a/tools/perf/util/dwarf-aux.c |
1709 | +++ b/tools/perf/util/dwarf-aux.c |
1710 | @@ -329,6 +329,7 @@ bool die_is_func_def(Dwarf_Die *dw_die) |
1711 | int die_entrypc(Dwarf_Die *dw_die, Dwarf_Addr *addr) |
1712 | { |
1713 | Dwarf_Addr base, end; |
1714 | + Dwarf_Attribute attr; |
1715 | |
1716 | if (!addr) |
1717 | return -EINVAL; |
1718 | @@ -336,6 +337,13 @@ int die_entrypc(Dwarf_Die *dw_die, Dwarf_Addr *addr) |
1719 | if (dwarf_entrypc(dw_die, addr) == 0) |
1720 | return 0; |
1721 | |
1722 | + /* |
1723 | + * Since the dwarf_ranges() will return 0 if there is no |
1724 | + * DW_AT_ranges attribute, we should check it first. |
1725 | + */ |
1726 | + if (!dwarf_attr(dw_die, DW_AT_ranges, &attr)) |
1727 | + return -ENOENT; |
1728 | + |
1729 | return dwarf_ranges(dw_die, 0, &base, addr, &end) < 0 ? -ENOENT : 0; |
1730 | } |
1731 | |
1732 | diff --git a/tools/perf/util/event.c b/tools/perf/util/event.c |
1733 | index 2d5744d986f0b..659c41004322d 100644 |
1734 | --- a/tools/perf/util/event.c |
1735 | +++ b/tools/perf/util/event.c |
1736 | @@ -682,11 +682,13 @@ int perf_event__synthesize_kernel_mmap(struct perf_tool *tool, |
1737 | int err; |
1738 | union perf_event *event; |
1739 | |
1740 | - if (symbol_conf.kptr_restrict) |
1741 | - return -1; |
1742 | if (map == NULL) |
1743 | return -1; |
1744 | |
1745 | + kmap = map__kmap(map); |
1746 | + if (!kmap->ref_reloc_sym) |
1747 | + return -1; |
1748 | + |
1749 | /* |
1750 | * We should get this from /sys/kernel/sections/.text, but till that is |
1751 | * available use this, and after it is use this as a fallback for older |
1752 | @@ -710,7 +712,6 @@ int perf_event__synthesize_kernel_mmap(struct perf_tool *tool, |
1753 | event->header.misc = PERF_RECORD_MISC_GUEST_KERNEL; |
1754 | } |
1755 | |
1756 | - kmap = map__kmap(map); |
1757 | size = snprintf(event->mmap.filename, sizeof(event->mmap.filename), |
1758 | "%s%s", mmap_name, kmap->ref_reloc_sym->name) + 1; |
1759 | size = PERF_ALIGN(size, sizeof(u64)); |