Magellan Linux

Contents of /trunk/kernel-alx/patches-4.9/0240-4.9.141-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3293 - (show annotations) (download)
Tue Mar 12 10:43:04 2019 UTC (5 years, 1 month ago) by niro
File size: 44075 byte(s)
-linux-4.9.141
1 diff --git a/Makefile b/Makefile
2 index a9aed2326233..8eba73521a7f 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,6 +1,6 @@
6 VERSION = 4
7 PATCHLEVEL = 9
8 -SUBLEVEL = 140
9 +SUBLEVEL = 141
10 EXTRAVERSION =
11 NAME = Roaring Lionus
12
13 diff --git a/arch/arm64/include/asm/percpu.h b/arch/arm64/include/asm/percpu.h
14 index 0d551576eb57..4724b8f0b625 100644
15 --- a/arch/arm64/include/asm/percpu.h
16 +++ b/arch/arm64/include/asm/percpu.h
17 @@ -92,6 +92,7 @@ static inline unsigned long __percpu_##op(void *ptr, \
18 : [val] "Ir" (val)); \
19 break; \
20 default: \
21 + ret = 0; \
22 BUILD_BUG(); \
23 } \
24 \
25 @@ -121,6 +122,7 @@ static inline unsigned long __percpu_read(void *ptr, int size)
26 ret = ACCESS_ONCE(*(u64 *)ptr);
27 break;
28 default:
29 + ret = 0;
30 BUILD_BUG();
31 }
32
33 @@ -190,6 +192,7 @@ static inline unsigned long __percpu_xchg(void *ptr, unsigned long val,
34 : [val] "r" (val));
35 break;
36 default:
37 + ret = 0;
38 BUILD_BUG();
39 }
40
41 diff --git a/arch/s390/kernel/vdso32/Makefile b/arch/s390/kernel/vdso32/Makefile
42 index 6cc947896c77..ca7c3c34f94b 100644
43 --- a/arch/s390/kernel/vdso32/Makefile
44 +++ b/arch/s390/kernel/vdso32/Makefile
45 @@ -32,7 +32,7 @@ UBSAN_SANITIZE := n
46 $(obj)/vdso32_wrapper.o : $(obj)/vdso32.so
47
48 # link rule for the .so file, .lds has to be first
49 -$(obj)/vdso32.so.dbg: $(src)/vdso32.lds $(obj-vdso32)
50 +$(obj)/vdso32.so.dbg: $(src)/vdso32.lds $(obj-vdso32) FORCE
51 $(call if_changed,vdso32ld)
52
53 # strip rule for the .so file
54 @@ -41,12 +41,12 @@ $(obj)/%.so: $(obj)/%.so.dbg FORCE
55 $(call if_changed,objcopy)
56
57 # assembly rules for the .S files
58 -$(obj-vdso32): %.o: %.S
59 +$(obj-vdso32): %.o: %.S FORCE
60 $(call if_changed_dep,vdso32as)
61
62 # actual build commands
63 quiet_cmd_vdso32ld = VDSO32L $@
64 - cmd_vdso32ld = $(CC) $(c_flags) -Wl,-T $^ -o $@
65 + cmd_vdso32ld = $(CC) $(c_flags) -Wl,-T $(filter %.lds %.o,$^) -o $@
66 quiet_cmd_vdso32as = VDSO32A $@
67 cmd_vdso32as = $(CC) $(a_flags) -c -o $@ $<
68
69 diff --git a/arch/s390/kernel/vdso64/Makefile b/arch/s390/kernel/vdso64/Makefile
70 index 2d54c18089eb..84af2b6b64c4 100644
71 --- a/arch/s390/kernel/vdso64/Makefile
72 +++ b/arch/s390/kernel/vdso64/Makefile
73 @@ -32,7 +32,7 @@ UBSAN_SANITIZE := n
74 $(obj)/vdso64_wrapper.o : $(obj)/vdso64.so
75
76 # link rule for the .so file, .lds has to be first
77 -$(obj)/vdso64.so.dbg: $(src)/vdso64.lds $(obj-vdso64)
78 +$(obj)/vdso64.so.dbg: $(src)/vdso64.lds $(obj-vdso64) FORCE
79 $(call if_changed,vdso64ld)
80
81 # strip rule for the .so file
82 @@ -41,12 +41,12 @@ $(obj)/%.so: $(obj)/%.so.dbg FORCE
83 $(call if_changed,objcopy)
84
85 # assembly rules for the .S files
86 -$(obj-vdso64): %.o: %.S
87 +$(obj-vdso64): %.o: %.S FORCE
88 $(call if_changed_dep,vdso64as)
89
90 # actual build commands
91 quiet_cmd_vdso64ld = VDSO64L $@
92 - cmd_vdso64ld = $(CC) $(c_flags) -Wl,-T $^ -o $@
93 + cmd_vdso64ld = $(CC) $(c_flags) -Wl,-T $(filter %.lds %.o,$^) -o $@
94 quiet_cmd_vdso64as = VDSO64A $@
95 cmd_vdso64as = $(CC) $(a_flags) -c -o $@ $<
96
97 diff --git a/arch/s390/numa/numa.c b/arch/s390/numa/numa.c
98 index 0dac2640c3a7..e73a1165d261 100644
99 --- a/arch/s390/numa/numa.c
100 +++ b/arch/s390/numa/numa.c
101 @@ -53,6 +53,7 @@ int __node_distance(int a, int b)
102 {
103 return mode->distance ? mode->distance(a, b) : 0;
104 }
105 +EXPORT_SYMBOL(__node_distance);
106
107 int numa_debug_enabled;
108
109 diff --git a/arch/um/os-Linux/skas/process.c b/arch/um/os-Linux/skas/process.c
110 index 23025d645160..0a99d4515065 100644
111 --- a/arch/um/os-Linux/skas/process.c
112 +++ b/arch/um/os-Linux/skas/process.c
113 @@ -578,6 +578,11 @@ int start_idle_thread(void *stack, jmp_buf *switch_buf)
114 fatal_sigsegv();
115 }
116 longjmp(*switch_buf, 1);
117 +
118 + /* unreachable */
119 + printk(UM_KERN_ERR "impossible long jump!");
120 + fatal_sigsegv();
121 + return 0;
122 }
123
124 void initial_thread_cb_skas(void (*proc)(void *), void *arg)
125 diff --git a/drivers/acpi/acpi_platform.c b/drivers/acpi/acpi_platform.c
126 index 03250e1f1103..d92eacaef231 100644
127 --- a/drivers/acpi/acpi_platform.c
128 +++ b/drivers/acpi/acpi_platform.c
129 @@ -30,6 +30,7 @@ static const struct acpi_device_id forbidden_id_list[] = {
130 {"PNP0200", 0}, /* AT DMA Controller */
131 {"ACPI0009", 0}, /* IOxAPIC */
132 {"ACPI000A", 0}, /* IOAPIC */
133 + {"SMB0001", 0}, /* ACPI SMBUS virtual device */
134 {"", 0},
135 };
136
137 diff --git a/drivers/acpi/acpi_watchdog.c b/drivers/acpi/acpi_watchdog.c
138 index ce8fc680785b..396e358c2cee 100644
139 --- a/drivers/acpi/acpi_watchdog.c
140 +++ b/drivers/acpi/acpi_watchdog.c
141 @@ -17,18 +17,77 @@
142
143 #include "internal.h"
144
145 +#ifdef CONFIG_RTC_MC146818_LIB
146 +#include <linux/mc146818rtc.h>
147 +
148 +/*
149 + * There are several systems where the WDAT table is accessing RTC SRAM to
150 + * store persistent information. This does not work well with the Linux RTC
151 + * driver so on those systems we skip WDAT driver and prefer iTCO_wdt
152 + * instead.
153 + *
154 + * See also https://bugzilla.kernel.org/show_bug.cgi?id=199033.
155 + */
156 +static bool acpi_watchdog_uses_rtc(const struct acpi_table_wdat *wdat)
157 +{
158 + const struct acpi_wdat_entry *entries;
159 + int i;
160 +
161 + entries = (struct acpi_wdat_entry *)(wdat + 1);
162 + for (i = 0; i < wdat->entries; i++) {
163 + const struct acpi_generic_address *gas;
164 +
165 + gas = &entries[i].register_region;
166 + if (gas->space_id == ACPI_ADR_SPACE_SYSTEM_IO) {
167 + switch (gas->address) {
168 + case RTC_PORT(0):
169 + case RTC_PORT(1):
170 + case RTC_PORT(2):
171 + case RTC_PORT(3):
172 + return true;
173 + }
174 + }
175 + }
176 +
177 + return false;
178 +}
179 +#else
180 +static bool acpi_watchdog_uses_rtc(const struct acpi_table_wdat *wdat)
181 +{
182 + return false;
183 +}
184 +#endif
185 +
186 +static const struct acpi_table_wdat *acpi_watchdog_get_wdat(void)
187 +{
188 + const struct acpi_table_wdat *wdat = NULL;
189 + acpi_status status;
190 +
191 + if (acpi_disabled)
192 + return NULL;
193 +
194 + status = acpi_get_table(ACPI_SIG_WDAT, 0,
195 + (struct acpi_table_header **)&wdat);
196 + if (ACPI_FAILURE(status)) {
197 + /* It is fine if there is no WDAT */
198 + return NULL;
199 + }
200 +
201 + if (acpi_watchdog_uses_rtc(wdat)) {
202 + pr_info("Skipping WDAT on this system because it uses RTC SRAM\n");
203 + return NULL;
204 + }
205 +
206 + return wdat;
207 +}
208 +
209 /**
210 * Returns true if this system should prefer ACPI based watchdog instead of
211 * the native one (which are typically the same hardware).
212 */
213 bool acpi_has_watchdog(void)
214 {
215 - struct acpi_table_header hdr;
216 -
217 - if (acpi_disabled)
218 - return false;
219 -
220 - return ACPI_SUCCESS(acpi_get_table_header(ACPI_SIG_WDAT, 0, &hdr));
221 + return !!acpi_watchdog_get_wdat();
222 }
223 EXPORT_SYMBOL_GPL(acpi_has_watchdog);
224
225 @@ -41,12 +100,10 @@ void __init acpi_watchdog_init(void)
226 struct platform_device *pdev;
227 struct resource *resources;
228 size_t nresources = 0;
229 - acpi_status status;
230 int i;
231
232 - status = acpi_get_table(ACPI_SIG_WDAT, 0,
233 - (struct acpi_table_header **)&wdat);
234 - if (ACPI_FAILURE(status)) {
235 + wdat = acpi_watchdog_get_wdat();
236 + if (!wdat) {
237 /* It is fine if there is no WDAT */
238 return;
239 }
240 diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c
241 index b7c0b69a02f5..d64a53d3270a 100644
242 --- a/drivers/block/zram/zram_drv.c
243 +++ b/drivers/block/zram/zram_drv.c
244 @@ -1223,6 +1223,11 @@ static struct attribute_group zram_disk_attr_group = {
245 .attrs = zram_disk_attrs,
246 };
247
248 +static const struct attribute_group *zram_disk_attr_groups[] = {
249 + &zram_disk_attr_group,
250 + NULL,
251 +};
252 +
253 /*
254 * Allocate and initialize new zram device. the function returns
255 * '>= 0' device_id upon success, and negative value otherwise.
256 @@ -1303,24 +1308,15 @@ static int zram_add(void)
257 zram->disk->queue->limits.discard_zeroes_data = 0;
258 queue_flag_set_unlocked(QUEUE_FLAG_DISCARD, zram->disk->queue);
259
260 + disk_to_dev(zram->disk)->groups = zram_disk_attr_groups;
261 add_disk(zram->disk);
262
263 - ret = sysfs_create_group(&disk_to_dev(zram->disk)->kobj,
264 - &zram_disk_attr_group);
265 - if (ret < 0) {
266 - pr_err("Error creating sysfs group for device %d\n",
267 - device_id);
268 - goto out_free_disk;
269 - }
270 strlcpy(zram->compressor, default_compressor, sizeof(zram->compressor));
271 zram->meta = NULL;
272
273 pr_info("Added device: %s\n", zram->disk->disk_name);
274 return device_id;
275
276 -out_free_disk:
277 - del_gendisk(zram->disk);
278 - put_disk(zram->disk);
279 out_free_queue:
280 blk_cleanup_queue(queue);
281 out_free_idr:
282 @@ -1348,16 +1344,6 @@ static int zram_remove(struct zram *zram)
283 zram->claim = true;
284 mutex_unlock(&bdev->bd_mutex);
285
286 - /*
287 - * Remove sysfs first, so no one will perform a disksize
288 - * store while we destroy the devices. This also helps during
289 - * hot_remove -- zram_reset_device() is the last holder of
290 - * ->init_lock, no later/concurrent disksize_store() or any
291 - * other sysfs handlers are possible.
292 - */
293 - sysfs_remove_group(&disk_to_dev(zram->disk)->kobj,
294 - &zram_disk_attr_group);
295 -
296 /* Make sure all the pending I/O are finished */
297 fsync_bdev(bdev);
298 zram_reset_device(zram);
299 diff --git a/drivers/bluetooth/Kconfig b/drivers/bluetooth/Kconfig
300 index 4a9493a4159f..3cc9bff9d99d 100644
301 --- a/drivers/bluetooth/Kconfig
302 +++ b/drivers/bluetooth/Kconfig
303 @@ -125,7 +125,6 @@ config BT_HCIUART_LL
304 config BT_HCIUART_3WIRE
305 bool "Three-wire UART (H5) protocol support"
306 depends on BT_HCIUART
307 - depends on BT_HCIUART_SERDEV
308 help
309 The HCI Three-wire UART Transport Layer makes it possible to
310 user the Bluetooth HCI over a serial port interface. The HCI
311 diff --git a/drivers/clk/clk-fixed-factor.c b/drivers/clk/clk-fixed-factor.c
312 index 20724abd38bd..7df6b5b1e7ee 100644
313 --- a/drivers/clk/clk-fixed-factor.c
314 +++ b/drivers/clk/clk-fixed-factor.c
315 @@ -210,6 +210,7 @@ static int of_fixed_factor_clk_remove(struct platform_device *pdev)
316 {
317 struct clk *clk = platform_get_drvdata(pdev);
318
319 + of_clk_del_provider(pdev->dev.of_node);
320 clk_unregister_fixed_factor(clk);
321
322 return 0;
323 diff --git a/drivers/clk/clk-fixed-rate.c b/drivers/clk/clk-fixed-rate.c
324 index b5c46b3f8764..6d6475c32ee5 100644
325 --- a/drivers/clk/clk-fixed-rate.c
326 +++ b/drivers/clk/clk-fixed-rate.c
327 @@ -200,6 +200,7 @@ static int of_fixed_clk_remove(struct platform_device *pdev)
328 {
329 struct clk *clk = platform_get_drvdata(pdev);
330
331 + of_clk_del_provider(pdev->dev.of_node);
332 clk_unregister_fixed_rate(clk);
333
334 return 0;
335 diff --git a/drivers/clk/samsung/clk-exynos5420.c b/drivers/clk/samsung/clk-exynos5420.c
336 index 07fb667e258f..13c09a740840 100644
337 --- a/drivers/clk/samsung/clk-exynos5420.c
338 +++ b/drivers/clk/samsung/clk-exynos5420.c
339 @@ -280,6 +280,7 @@ static const struct samsung_clk_reg_dump exynos5420_set_clksrc[] = {
340 { .offset = GATE_BUS_TOP, .value = 0xffffffff, },
341 { .offset = GATE_BUS_DISP1, .value = 0xffffffff, },
342 { .offset = GATE_IP_PERIC, .value = 0xffffffff, },
343 + { .offset = GATE_IP_PERIS, .value = 0xffffffff, },
344 };
345
346 static int exynos5420_clk_suspend(void)
347 diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
348 index 83d2f43b5a2f..c93dcfedc219 100644
349 --- a/drivers/gpu/drm/drm_edid.c
350 +++ b/drivers/gpu/drm/drm_edid.c
351 @@ -116,6 +116,9 @@ static const struct edid_quirk {
352 /* SDC panel of Lenovo B50-80 reports 8 bpc, but is a 6 bpc panel */
353 { "SDC", 0x3652, EDID_QUIRK_FORCE_6BPC },
354
355 + /* BOE model 0x0771 reports 8 bpc, but is a 6 bpc panel */
356 + { "BOE", 0x0771, EDID_QUIRK_FORCE_6BPC },
357 +
358 /* Belinea 10 15 55 */
359 { "MAX", 1516, EDID_QUIRK_PREFER_LARGE_60 },
360 { "MAX", 0x77e, EDID_QUIRK_PREFER_LARGE_60 },
361 diff --git a/drivers/hid/uhid.c b/drivers/hid/uhid.c
362 index 7f8ff39ed44b..d02ee5304217 100644
363 --- a/drivers/hid/uhid.c
364 +++ b/drivers/hid/uhid.c
365 @@ -12,6 +12,7 @@
366
367 #include <linux/atomic.h>
368 #include <linux/compat.h>
369 +#include <linux/cred.h>
370 #include <linux/device.h>
371 #include <linux/fs.h>
372 #include <linux/hid.h>
373 @@ -24,6 +25,7 @@
374 #include <linux/spinlock.h>
375 #include <linux/uhid.h>
376 #include <linux/wait.h>
377 +#include <linux/uaccess.h>
378
379 #define UHID_NAME "uhid"
380 #define UHID_BUFSIZE 32
381 @@ -721,6 +723,17 @@ static ssize_t uhid_char_write(struct file *file, const char __user *buffer,
382
383 switch (uhid->input_buf.type) {
384 case UHID_CREATE:
385 + /*
386 + * 'struct uhid_create_req' contains a __user pointer which is
387 + * copied from, so it's unsafe to allow this with elevated
388 + * privileges (e.g. from a setuid binary) or via kernel_write().
389 + */
390 + if (file->f_cred != current_cred() || uaccess_kernel()) {
391 + pr_err_once("UHID_CREATE from different security context by process %d (%s), this is not allowed.\n",
392 + task_tgid_vnr(current), current->comm);
393 + ret = -EACCES;
394 + goto unlock;
395 + }
396 ret = uhid_dev_create(uhid, &uhid->input_buf);
397 break;
398 case UHID_CREATE2:
399 diff --git a/drivers/hwmon/ibmpowernv.c b/drivers/hwmon/ibmpowernv.c
400 index 6d2e6605751c..18b3c8f258bf 100644
401 --- a/drivers/hwmon/ibmpowernv.c
402 +++ b/drivers/hwmon/ibmpowernv.c
403 @@ -114,7 +114,7 @@ static ssize_t show_label(struct device *dev, struct device_attribute *devattr,
404 return sprintf(buf, "%s\n", sdata->label);
405 }
406
407 -static int __init get_logical_cpu(int hwcpu)
408 +static int get_logical_cpu(int hwcpu)
409 {
410 int cpu;
411
412 @@ -125,9 +125,8 @@ static int __init get_logical_cpu(int hwcpu)
413 return -ENOENT;
414 }
415
416 -static void __init make_sensor_label(struct device_node *np,
417 - struct sensor_data *sdata,
418 - const char *label)
419 +static void make_sensor_label(struct device_node *np,
420 + struct sensor_data *sdata, const char *label)
421 {
422 u32 id;
423 size_t n;
424 diff --git a/drivers/media/v4l2-core/v4l2-event.c b/drivers/media/v4l2-core/v4l2-event.c
425 index 567d86835f00..1fda2873375f 100644
426 --- a/drivers/media/v4l2-core/v4l2-event.c
427 +++ b/drivers/media/v4l2-core/v4l2-event.c
428 @@ -197,6 +197,22 @@ int v4l2_event_pending(struct v4l2_fh *fh)
429 }
430 EXPORT_SYMBOL_GPL(v4l2_event_pending);
431
432 +static void __v4l2_event_unsubscribe(struct v4l2_subscribed_event *sev)
433 +{
434 + struct v4l2_fh *fh = sev->fh;
435 + unsigned int i;
436 +
437 + lockdep_assert_held(&fh->subscribe_lock);
438 + assert_spin_locked(&fh->vdev->fh_lock);
439 +
440 + /* Remove any pending events for this subscription */
441 + for (i = 0; i < sev->in_use; i++) {
442 + list_del(&sev->events[sev_pos(sev, i)].list);
443 + fh->navailable--;
444 + }
445 + list_del(&sev->list);
446 +}
447 +
448 int v4l2_event_subscribe(struct v4l2_fh *fh,
449 const struct v4l2_event_subscription *sub, unsigned elems,
450 const struct v4l2_subscribed_event_ops *ops)
451 @@ -228,27 +244,23 @@ int v4l2_event_subscribe(struct v4l2_fh *fh,
452
453 spin_lock_irqsave(&fh->vdev->fh_lock, flags);
454 found_ev = v4l2_event_subscribed(fh, sub->type, sub->id);
455 + if (!found_ev)
456 + list_add(&sev->list, &fh->subscribed);
457 spin_unlock_irqrestore(&fh->vdev->fh_lock, flags);
458
459 if (found_ev) {
460 /* Already listening */
461 kfree(sev);
462 - goto out_unlock;
463 - }
464 -
465 - if (sev->ops && sev->ops->add) {
466 + } else if (sev->ops && sev->ops->add) {
467 ret = sev->ops->add(sev, elems);
468 if (ret) {
469 + spin_lock_irqsave(&fh->vdev->fh_lock, flags);
470 + __v4l2_event_unsubscribe(sev);
471 + spin_unlock_irqrestore(&fh->vdev->fh_lock, flags);
472 kfree(sev);
473 - goto out_unlock;
474 }
475 }
476
477 - spin_lock_irqsave(&fh->vdev->fh_lock, flags);
478 - list_add(&sev->list, &fh->subscribed);
479 - spin_unlock_irqrestore(&fh->vdev->fh_lock, flags);
480 -
481 -out_unlock:
482 mutex_unlock(&fh->subscribe_lock);
483
484 return ret;
485 @@ -283,7 +295,6 @@ int v4l2_event_unsubscribe(struct v4l2_fh *fh,
486 {
487 struct v4l2_subscribed_event *sev;
488 unsigned long flags;
489 - int i;
490
491 if (sub->type == V4L2_EVENT_ALL) {
492 v4l2_event_unsubscribe_all(fh);
493 @@ -295,14 +306,8 @@ int v4l2_event_unsubscribe(struct v4l2_fh *fh,
494 spin_lock_irqsave(&fh->vdev->fh_lock, flags);
495
496 sev = v4l2_event_subscribed(fh, sub->type, sub->id);
497 - if (sev != NULL) {
498 - /* Remove any pending events for this subscription */
499 - for (i = 0; i < sev->in_use; i++) {
500 - list_del(&sev->events[sev_pos(sev, i)].list);
501 - fh->navailable--;
502 - }
503 - list_del(&sev->list);
504 - }
505 + if (sev != NULL)
506 + __v4l2_event_unsubscribe(sev);
507
508 spin_unlock_irqrestore(&fh->vdev->fh_lock, flags);
509
510 diff --git a/drivers/media/v4l2-core/videobuf2-core.c b/drivers/media/v4l2-core/videobuf2-core.c
511 index f7ca1fab4808..4df4a1f402be 100644
512 --- a/drivers/media/v4l2-core/videobuf2-core.c
513 +++ b/drivers/media/v4l2-core/videobuf2-core.c
514 @@ -914,12 +914,9 @@ void vb2_buffer_done(struct vb2_buffer *vb, enum vb2_buffer_state state)
515 dprintk(4, "done processing on buffer %d, state: %d\n",
516 vb->index, state);
517
518 - if (state != VB2_BUF_STATE_QUEUED &&
519 - state != VB2_BUF_STATE_REQUEUEING) {
520 - /* sync buffers */
521 - for (plane = 0; plane < vb->num_planes; ++plane)
522 - call_void_memop(vb, finish, vb->planes[plane].mem_priv);
523 - }
524 + /* sync buffers */
525 + for (plane = 0; plane < vb->num_planes; ++plane)
526 + call_void_memop(vb, finish, vb->planes[plane].mem_priv);
527
528 spin_lock_irqsave(&q->done_lock, flags);
529 if (state == VB2_BUF_STATE_QUEUED ||
530 diff --git a/drivers/misc/atmel-ssc.c b/drivers/misc/atmel-ssc.c
531 index 0516ecda54d3..3a6e4ec21c87 100644
532 --- a/drivers/misc/atmel-ssc.c
533 +++ b/drivers/misc/atmel-ssc.c
534 @@ -130,7 +130,7 @@ static const struct of_device_id atmel_ssc_dt_ids[] = {
535 MODULE_DEVICE_TABLE(of, atmel_ssc_dt_ids);
536 #endif
537
538 -static inline const struct atmel_ssc_platform_data * __init
539 +static inline const struct atmel_ssc_platform_data *
540 atmel_ssc_get_driver_data(struct platform_device *pdev)
541 {
542 if (pdev->dev.of_node) {
543 diff --git a/drivers/misc/sgi-gru/grukdump.c b/drivers/misc/sgi-gru/grukdump.c
544 index 313da3150262..1540a7785e14 100644
545 --- a/drivers/misc/sgi-gru/grukdump.c
546 +++ b/drivers/misc/sgi-gru/grukdump.c
547 @@ -27,6 +27,9 @@
548 #include <linux/delay.h>
549 #include <linux/bitops.h>
550 #include <asm/uv/uv_hub.h>
551 +
552 +#include <linux/nospec.h>
553 +
554 #include "gru.h"
555 #include "grutables.h"
556 #include "gruhandles.h"
557 @@ -196,6 +199,7 @@ int gru_dump_chiplet_request(unsigned long arg)
558 /* Currently, only dump by gid is implemented */
559 if (req.gid >= gru_max_gids)
560 return -EINVAL;
561 + req.gid = array_index_nospec(req.gid, gru_max_gids);
562
563 gru = GID_TO_GRU(req.gid);
564 ubuf = req.buf;
565 diff --git a/drivers/net/ethernet/qlogic/qed/qed_sp.h b/drivers/net/ethernet/qlogic/qed/qed_sp.h
566 index b2c08e4d2a9b..bae7b7f9b1cf 100644
567 --- a/drivers/net/ethernet/qlogic/qed/qed_sp.h
568 +++ b/drivers/net/ethernet/qlogic/qed/qed_sp.h
569 @@ -132,6 +132,9 @@ struct qed_spq_entry {
570 enum spq_mode comp_mode;
571 struct qed_spq_comp_cb comp_cb;
572 struct qed_spq_comp_done comp_done; /* SPQ_MODE_EBLOCK */
573 +
574 + /* Posted entry for unlimited list entry in EBLOCK mode */
575 + struct qed_spq_entry *post_ent;
576 };
577
578 struct qed_eq {
579 diff --git a/drivers/net/ethernet/qlogic/qed/qed_sp_commands.c b/drivers/net/ethernet/qlogic/qed/qed_sp_commands.c
580 index 2888eb0628f8..ac69ff3f7c5c 100644
581 --- a/drivers/net/ethernet/qlogic/qed/qed_sp_commands.c
582 +++ b/drivers/net/ethernet/qlogic/qed/qed_sp_commands.c
583 @@ -56,7 +56,7 @@ int qed_sp_init_request(struct qed_hwfn *p_hwfn,
584
585 case QED_SPQ_MODE_BLOCK:
586 if (!p_data->p_comp_data)
587 - return -EINVAL;
588 + goto err;
589
590 p_ent->comp_cb.cookie = p_data->p_comp_data->cookie;
591 break;
592 @@ -71,7 +71,7 @@ int qed_sp_init_request(struct qed_hwfn *p_hwfn,
593 default:
594 DP_NOTICE(p_hwfn, "Unknown SPQE completion mode %d\n",
595 p_ent->comp_mode);
596 - return -EINVAL;
597 + goto err;
598 }
599
600 DP_VERBOSE(p_hwfn, QED_MSG_SPQ,
601 @@ -85,6 +85,18 @@ int qed_sp_init_request(struct qed_hwfn *p_hwfn,
602 memset(&p_ent->ramrod, 0, sizeof(p_ent->ramrod));
603
604 return 0;
605 +
606 +err:
607 + /* qed_spq_get_entry() can either get an entry from the free_pool,
608 + * or, if no entries are left, allocate a new entry and add it to
609 + * the unlimited_pending list.
610 + */
611 + if (p_ent->queue == &p_hwfn->p_spq->unlimited_pending)
612 + kfree(p_ent);
613 + else
614 + qed_spq_return_entry(p_hwfn, p_ent);
615 +
616 + return -EINVAL;
617 }
618
619 static enum tunnel_clss qed_tunn_get_clss_type(u8 type)
620 diff --git a/drivers/net/ethernet/qlogic/qed/qed_spq.c b/drivers/net/ethernet/qlogic/qed/qed_spq.c
621 index 9fbaf9429fd0..80c8c7f0d932 100644
622 --- a/drivers/net/ethernet/qlogic/qed/qed_spq.c
623 +++ b/drivers/net/ethernet/qlogic/qed/qed_spq.c
624 @@ -595,6 +595,8 @@ static int qed_spq_add_entry(struct qed_hwfn *p_hwfn,
625 /* EBLOCK responsible to free the allocated p_ent */
626 if (p_ent->comp_mode != QED_SPQ_MODE_EBLOCK)
627 kfree(p_ent);
628 + else
629 + p_ent->post_ent = p_en2;
630
631 p_ent = p_en2;
632 }
633 @@ -678,6 +680,25 @@ static int qed_spq_pend_post(struct qed_hwfn *p_hwfn)
634 SPQ_HIGH_PRI_RESERVE_DEFAULT);
635 }
636
637 +/* Avoid overriding of SPQ entries when getting out-of-order completions, by
638 + * marking the completions in a bitmap and increasing the chain consumer only
639 + * for the first successive completed entries.
640 + */
641 +static void qed_spq_comp_bmap_update(struct qed_hwfn *p_hwfn, __le16 echo)
642 +{
643 + u16 pos = le16_to_cpu(echo) % SPQ_RING_SIZE;
644 + struct qed_spq *p_spq = p_hwfn->p_spq;
645 +
646 + __set_bit(pos, p_spq->p_comp_bitmap);
647 + while (test_bit(p_spq->comp_bitmap_idx,
648 + p_spq->p_comp_bitmap)) {
649 + __clear_bit(p_spq->comp_bitmap_idx,
650 + p_spq->p_comp_bitmap);
651 + p_spq->comp_bitmap_idx++;
652 + qed_chain_return_produced(&p_spq->chain);
653 + }
654 +}
655 +
656 int qed_spq_post(struct qed_hwfn *p_hwfn,
657 struct qed_spq_entry *p_ent, u8 *fw_return_code)
658 {
659 @@ -728,11 +749,12 @@ int qed_spq_post(struct qed_hwfn *p_hwfn,
660 rc = qed_spq_block(p_hwfn, p_ent, fw_return_code);
661
662 if (p_ent->queue == &p_spq->unlimited_pending) {
663 - /* This is an allocated p_ent which does not need to
664 - * return to pool.
665 - */
666 + struct qed_spq_entry *p_post_ent = p_ent->post_ent;
667 +
668 kfree(p_ent);
669 - return rc;
670 +
671 + /* Return the entry which was actually posted */
672 + p_ent = p_post_ent;
673 }
674
675 if (rc)
676 @@ -746,7 +768,7 @@ int qed_spq_post(struct qed_hwfn *p_hwfn,
677 spq_post_fail2:
678 spin_lock_bh(&p_spq->lock);
679 list_del(&p_ent->list);
680 - qed_chain_return_produced(&p_spq->chain);
681 + qed_spq_comp_bmap_update(p_hwfn, p_ent->elem.hdr.echo);
682
683 spq_post_fail:
684 /* return to the free pool */
685 @@ -778,25 +800,8 @@ int qed_spq_completion(struct qed_hwfn *p_hwfn,
686 spin_lock_bh(&p_spq->lock);
687 list_for_each_entry_safe(p_ent, tmp, &p_spq->completion_pending, list) {
688 if (p_ent->elem.hdr.echo == echo) {
689 - u16 pos = le16_to_cpu(echo) % SPQ_RING_SIZE;
690 -
691 list_del(&p_ent->list);
692 -
693 - /* Avoid overriding of SPQ entries when getting
694 - * out-of-order completions, by marking the completions
695 - * in a bitmap and increasing the chain consumer only
696 - * for the first successive completed entries.
697 - */
698 - __set_bit(pos, p_spq->p_comp_bitmap);
699 -
700 - while (test_bit(p_spq->comp_bitmap_idx,
701 - p_spq->p_comp_bitmap)) {
702 - __clear_bit(p_spq->comp_bitmap_idx,
703 - p_spq->p_comp_bitmap);
704 - p_spq->comp_bitmap_idx++;
705 - qed_chain_return_produced(&p_spq->chain);
706 - }
707 -
708 + qed_spq_comp_bmap_update(p_hwfn, echo);
709 p_spq->comp_count++;
710 found = p_ent;
711 break;
712 @@ -835,11 +840,9 @@ int qed_spq_completion(struct qed_hwfn *p_hwfn,
713 QED_MSG_SPQ,
714 "Got a completion without a callback function\n");
715
716 - if ((found->comp_mode != QED_SPQ_MODE_EBLOCK) ||
717 - (found->queue == &p_spq->unlimited_pending))
718 + if (found->comp_mode != QED_SPQ_MODE_EBLOCK)
719 /* EBLOCK is responsible for returning its own entry into the
720 - * free list, unless it originally added the entry into the
721 - * unlimited pending list.
722 + * free list.
723 */
724 qed_spq_return_entry(p_hwfn, found);
725
726 diff --git a/drivers/platform/x86/acerhdf.c b/drivers/platform/x86/acerhdf.c
727 index 2acdb0d6ea89..a0533e4e52d7 100644
728 --- a/drivers/platform/x86/acerhdf.c
729 +++ b/drivers/platform/x86/acerhdf.c
730 @@ -233,6 +233,7 @@ static const struct bios_settings bios_tbl[] = {
731 {"Gateway", "LT31", "v1.3201", 0x55, 0x58, {0x9e, 0x00}, 0},
732 {"Gateway", "LT31", "v1.3302", 0x55, 0x58, {0x9e, 0x00}, 0},
733 {"Gateway", "LT31", "v1.3303t", 0x55, 0x58, {0x9e, 0x00}, 0},
734 + {"Gateway", "LT31", "v1.3307", 0x55, 0x58, {0x9e, 0x00}, 0},
735 /* Packard Bell */
736 {"Packard Bell", "DOA150", "v0.3104", 0x55, 0x58, {0x21, 0x00}, 0},
737 {"Packard Bell", "DOA150", "v0.3105", 0x55, 0x58, {0x20, 0x00}, 0},
738 diff --git a/drivers/platform/x86/intel_telemetry_debugfs.c b/drivers/platform/x86/intel_telemetry_debugfs.c
739 index ef29f18b1951..4069433a0ec6 100644
740 --- a/drivers/platform/x86/intel_telemetry_debugfs.c
741 +++ b/drivers/platform/x86/intel_telemetry_debugfs.c
742 @@ -953,12 +953,16 @@ static int __init telemetry_debugfs_init(void)
743 debugfs_conf = (struct telemetry_debugfs_conf *)id->driver_data;
744
745 err = telemetry_pltconfig_valid();
746 - if (err < 0)
747 + if (err < 0) {
748 + pr_info("Invalid pltconfig, ensure IPC1 device is enabled in BIOS\n");
749 return -ENODEV;
750 + }
751
752 err = telemetry_debugfs_check_evts();
753 - if (err < 0)
754 + if (err < 0) {
755 + pr_info("telemetry_debugfs_check_evts failed\n");
756 return -EINVAL;
757 + }
758
759
760 #ifdef CONFIG_PM_SLEEP
761 diff --git a/drivers/s390/net/qeth_l3_main.c b/drivers/s390/net/qeth_l3_main.c
762 index efefe075557f..6e6ba1baf9c4 100644
763 --- a/drivers/s390/net/qeth_l3_main.c
764 +++ b/drivers/s390/net/qeth_l3_main.c
765 @@ -363,9 +363,6 @@ static void qeth_l3_clear_ip_htable(struct qeth_card *card, int recover)
766
767 QETH_CARD_TEXT(card, 4, "clearip");
768
769 - if (recover && card->options.sniffer)
770 - return;
771 -
772 spin_lock_bh(&card->ip_lock);
773
774 hash_for_each_safe(card->ip_htable, i, tmp, addr, hnode) {
775 @@ -823,6 +820,8 @@ static int qeth_l3_register_addr_entry(struct qeth_card *card,
776 int rc = 0;
777 int cnt = 3;
778
779 + if (card->options.sniffer)
780 + return 0;
781
782 if (addr->proto == QETH_PROT_IPV4) {
783 QETH_CARD_TEXT(card, 2, "setaddr4");
784 @@ -858,6 +857,9 @@ static int qeth_l3_deregister_addr_entry(struct qeth_card *card,
785 {
786 int rc = 0;
787
788 + if (card->options.sniffer)
789 + return 0;
790 +
791 if (addr->proto == QETH_PROT_IPV4) {
792 QETH_CARD_TEXT(card, 2, "deladdr4");
793 QETH_CARD_HEX(card, 3, &addr->u.a4.addr, sizeof(int));
794 diff --git a/drivers/uio/uio.c b/drivers/uio/uio.c
795 index cfbfef08c94a..e6b20716e8e0 100644
796 --- a/drivers/uio/uio.c
797 +++ b/drivers/uio/uio.c
798 @@ -850,6 +850,8 @@ int __uio_register_device(struct module *owner,
799 if (ret)
800 goto err_uio_dev_add_attributes;
801
802 + info->uio_dev = idev;
803 +
804 if (info->irq && (info->irq != UIO_IRQ_CUSTOM)) {
805 /*
806 * Note that we deliberately don't use devm_request_irq
807 @@ -861,11 +863,12 @@ int __uio_register_device(struct module *owner,
808 */
809 ret = request_irq(info->irq, uio_interrupt,
810 info->irq_flags, info->name, idev);
811 - if (ret)
812 + if (ret) {
813 + info->uio_dev = NULL;
814 goto err_request_irq;
815 + }
816 }
817
818 - info->uio_dev = idev;
819 return 0;
820
821 err_request_irq:
822 diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
823 index dbe44e890c99..cd4f96354fa8 100644
824 --- a/drivers/usb/class/cdc-acm.c
825 +++ b/drivers/usb/class/cdc-acm.c
826 @@ -1659,6 +1659,9 @@ static const struct usb_device_id acm_ids[] = {
827 { USB_DEVICE(0x0572, 0x1328), /* Shiro / Aztech USB MODEM UM-3100 */
828 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
829 },
830 + { USB_DEVICE(0x0572, 0x1349), /* Hiro (Conexant) USB MODEM H50228 */
831 + .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
832 + },
833 { USB_DEVICE(0x20df, 0x0001), /* Simtec Electronics Entropy Key */
834 .driver_info = QUIRK_CONTROL_LINE_STATE, },
835 { USB_DEVICE(0x2184, 0x001c) }, /* GW Instek AFG-2225 */
836 diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
837 index 37a5e07b3488..1e8f68960014 100644
838 --- a/drivers/usb/core/quirks.c
839 +++ b/drivers/usb/core/quirks.c
840 @@ -243,6 +243,9 @@ static const struct usb_device_id usb_quirk_list[] = {
841 { USB_DEVICE(0x1b1c, 0x1b20), .driver_info = USB_QUIRK_DELAY_INIT |
842 USB_QUIRK_DELAY_CTRL_MSG },
843
844 + /* Corsair K70 LUX RGB */
845 + { USB_DEVICE(0x1b1c, 0x1b33), .driver_info = USB_QUIRK_DELAY_INIT },
846 +
847 /* Corsair K70 LUX */
848 { USB_DEVICE(0x1b1c, 0x1b36), .driver_info = USB_QUIRK_DELAY_INIT },
849
850 @@ -263,6 +266,11 @@ static const struct usb_device_id usb_quirk_list[] = {
851 { USB_DEVICE(0x2040, 0x7200), .driver_info =
852 USB_QUIRK_CONFIG_INTF_STRINGS },
853
854 + /* Raydium Touchscreen */
855 + { USB_DEVICE(0x2386, 0x3114), .driver_info = USB_QUIRK_NO_LPM },
856 +
857 + { USB_DEVICE(0x2386, 0x3119), .driver_info = USB_QUIRK_NO_LPM },
858 +
859 /* DJI CineSSD */
860 { USB_DEVICE(0x2ca3, 0x0031), .driver_info = USB_QUIRK_NO_LPM },
861
862 diff --git a/drivers/usb/misc/appledisplay.c b/drivers/usb/misc/appledisplay.c
863 index da5ff401a354..2d3c656e0bff 100644
864 --- a/drivers/usb/misc/appledisplay.c
865 +++ b/drivers/usb/misc/appledisplay.c
866 @@ -63,6 +63,7 @@ static const struct usb_device_id appledisplay_table[] = {
867 { APPLEDISPLAY_DEVICE(0x9219) },
868 { APPLEDISPLAY_DEVICE(0x921c) },
869 { APPLEDISPLAY_DEVICE(0x921d) },
870 + { APPLEDISPLAY_DEVICE(0x9222) },
871 { APPLEDISPLAY_DEVICE(0x9236) },
872
873 /* Terminating entry */
874 diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
875 index 18d05323ca53..57d375c68e46 100644
876 --- a/fs/btrfs/disk-io.c
877 +++ b/fs/btrfs/disk-io.c
878 @@ -4491,6 +4491,7 @@ static int btrfs_destroy_marked_extents(struct btrfs_root *root,
879 static int btrfs_destroy_pinned_extent(struct btrfs_root *root,
880 struct extent_io_tree *pinned_extents)
881 {
882 + struct btrfs_fs_info *fs_info = root->fs_info;
883 struct extent_io_tree *unpin;
884 u64 start;
885 u64 end;
886 @@ -4500,21 +4501,31 @@ static int btrfs_destroy_pinned_extent(struct btrfs_root *root,
887 unpin = pinned_extents;
888 again:
889 while (1) {
890 + /*
891 + * The btrfs_finish_extent_commit() may get the same range as
892 + * ours between find_first_extent_bit and clear_extent_dirty.
893 + * Hence, hold the unused_bg_unpin_mutex to avoid double unpin
894 + * the same extent range.
895 + */
896 + mutex_lock(&fs_info->unused_bg_unpin_mutex);
897 ret = find_first_extent_bit(unpin, 0, &start, &end,
898 EXTENT_DIRTY, NULL);
899 - if (ret)
900 + if (ret) {
901 + mutex_unlock(&fs_info->unused_bg_unpin_mutex);
902 break;
903 + }
904
905 clear_extent_dirty(unpin, start, end);
906 btrfs_error_unpin_extent_range(root, start, end);
907 + mutex_unlock(&fs_info->unused_bg_unpin_mutex);
908 cond_resched();
909 }
910
911 if (loop) {
912 - if (unpin == &root->fs_info->freed_extents[0])
913 - unpin = &root->fs_info->freed_extents[1];
914 + if (unpin == &fs_info->freed_extents[0])
915 + unpin = &fs_info->freed_extents[1];
916 else
917 - unpin = &root->fs_info->freed_extents[0];
918 + unpin = &fs_info->freed_extents[0];
919 loop = false;
920 goto again;
921 }
922 diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
923 index 163b61a92b59..a775307f3b6b 100644
924 --- a/fs/btrfs/extent-tree.c
925 +++ b/fs/btrfs/extent-tree.c
926 @@ -11140,6 +11140,15 @@ static int btrfs_trim_free_extents(struct btrfs_device *device,
927 return ret;
928 }
929
930 +/*
931 + * Trim the whole filesystem by:
932 + * 1) trimming the free space in each block group
933 + * 2) trimming the unallocated space on each device
934 + *
935 + * This will also continue trimming even if a block group or device encounters
936 + * an error. The return value will be the last error, or 0 if nothing bad
937 + * happens.
938 + */
939 int btrfs_trim_fs(struct btrfs_root *root, struct fstrim_range *range)
940 {
941 struct btrfs_fs_info *fs_info = root->fs_info;
942 @@ -11150,18 +11159,14 @@ int btrfs_trim_fs(struct btrfs_root *root, struct fstrim_range *range)
943 u64 start;
944 u64 end;
945 u64 trimmed = 0;
946 - u64 total_bytes = btrfs_super_total_bytes(fs_info->super_copy);
947 + u64 bg_failed = 0;
948 + u64 dev_failed = 0;
949 + int bg_ret = 0;
950 + int dev_ret = 0;
951 int ret = 0;
952
953 - /*
954 - * try to trim all FS space, our block group may start from non-zero.
955 - */
956 - if (range->len == total_bytes)
957 - cache = btrfs_lookup_first_block_group(fs_info, range->start);
958 - else
959 - cache = btrfs_lookup_block_group(fs_info, range->start);
960 -
961 - while (cache) {
962 + cache = btrfs_lookup_first_block_group(fs_info, range->start);
963 + for (; cache; cache = next_block_group(fs_info->tree_root, cache)) {
964 if (cache->key.objectid >= (range->start + range->len)) {
965 btrfs_put_block_group(cache);
966 break;
967 @@ -11175,13 +11180,15 @@ int btrfs_trim_fs(struct btrfs_root *root, struct fstrim_range *range)
968 if (!block_group_cache_done(cache)) {
969 ret = cache_block_group(cache, 0);
970 if (ret) {
971 - btrfs_put_block_group(cache);
972 - break;
973 + bg_failed++;
974 + bg_ret = ret;
975 + continue;
976 }
977 ret = wait_block_group_cache_done(cache);
978 if (ret) {
979 - btrfs_put_block_group(cache);
980 - break;
981 + bg_failed++;
982 + bg_ret = ret;
983 + continue;
984 }
985 }
986 ret = btrfs_trim_block_group(cache,
987 @@ -11192,28 +11199,40 @@ int btrfs_trim_fs(struct btrfs_root *root, struct fstrim_range *range)
988
989 trimmed += group_trimmed;
990 if (ret) {
991 - btrfs_put_block_group(cache);
992 - break;
993 + bg_failed++;
994 + bg_ret = ret;
995 + continue;
996 }
997 }
998 -
999 - cache = next_block_group(fs_info->tree_root, cache);
1000 }
1001
1002 - mutex_lock(&root->fs_info->fs_devices->device_list_mutex);
1003 - devices = &root->fs_info->fs_devices->devices;
1004 + if (bg_failed)
1005 + btrfs_warn(fs_info,
1006 + "failed to trim %llu block group(s), last error %d",
1007 + bg_failed, bg_ret);
1008 + mutex_lock(&fs_info->fs_devices->device_list_mutex);
1009 + devices = &fs_info->fs_devices->devices;
1010 list_for_each_entry(device, devices, dev_list) {
1011 ret = btrfs_trim_free_extents(device, range->minlen,
1012 &group_trimmed);
1013 - if (ret)
1014 + if (ret) {
1015 + dev_failed++;
1016 + dev_ret = ret;
1017 break;
1018 + }
1019
1020 trimmed += group_trimmed;
1021 }
1022 mutex_unlock(&root->fs_info->fs_devices->device_list_mutex);
1023
1024 + if (dev_failed)
1025 + btrfs_warn(fs_info,
1026 + "failed to trim %llu device(s), last error %d",
1027 + dev_failed, dev_ret);
1028 range->len = trimmed;
1029 - return ret;
1030 + if (bg_ret)
1031 + return bg_ret;
1032 + return dev_ret;
1033 }
1034
1035 /*
1036 diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
1037 index 96ad2778405b..242584a0d3b5 100644
1038 --- a/fs/btrfs/ioctl.c
1039 +++ b/fs/btrfs/ioctl.c
1040 @@ -380,7 +380,6 @@ static noinline int btrfs_ioctl_fitrim(struct file *file, void __user *arg)
1041 struct fstrim_range range;
1042 u64 minlen = ULLONG_MAX;
1043 u64 num_devices = 0;
1044 - u64 total_bytes = btrfs_super_total_bytes(fs_info->super_copy);
1045 int ret;
1046
1047 if (!capable(CAP_SYS_ADMIN))
1048 @@ -404,11 +403,15 @@ static noinline int btrfs_ioctl_fitrim(struct file *file, void __user *arg)
1049 return -EOPNOTSUPP;
1050 if (copy_from_user(&range, arg, sizeof(range)))
1051 return -EFAULT;
1052 - if (range.start > total_bytes ||
1053 - range.len < fs_info->sb->s_blocksize)
1054 +
1055 + /*
1056 + * NOTE: Don't truncate the range using super->total_bytes. Bytenr of
1057 + * block group is in the logical address space, which can be any
1058 + * sectorsize aligned bytenr in the range [0, U64_MAX].
1059 + */
1060 + if (range.len < fs_info->sb->s_blocksize)
1061 return -EINVAL;
1062
1063 - range.len = min(range.len, total_bytes - range.start);
1064 range.minlen = max(range.minlen, minlen);
1065 ret = btrfs_trim_fs(fs_info->tree_root, &range);
1066 if (ret < 0)
1067 diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c
1068 index 87658f63b374..be84d49f2406 100644
1069 --- a/fs/cifs/cifsfs.c
1070 +++ b/fs/cifs/cifsfs.c
1071 @@ -927,8 +927,8 @@ static int cifs_clone_file_range(struct file *src_file, loff_t off,
1072 struct inode *src_inode = file_inode(src_file);
1073 struct inode *target_inode = file_inode(dst_file);
1074 struct cifsFileInfo *smb_file_src = src_file->private_data;
1075 - struct cifsFileInfo *smb_file_target = dst_file->private_data;
1076 - struct cifs_tcon *target_tcon = tlink_tcon(smb_file_target->tlink);
1077 + struct cifsFileInfo *smb_file_target;
1078 + struct cifs_tcon *target_tcon;
1079 unsigned int xid;
1080 int rc;
1081
1082 @@ -942,6 +942,9 @@ static int cifs_clone_file_range(struct file *src_file, loff_t off,
1083 goto out;
1084 }
1085
1086 + smb_file_target = dst_file->private_data;
1087 + target_tcon = tlink_tcon(smb_file_target->tlink);
1088 +
1089 /*
1090 * Note: cifs case is easier than btrfs since server responsible for
1091 * checks for proper open modes and file type and if it wants
1092 diff --git a/fs/exofs/super.c b/fs/exofs/super.c
1093 index 1076a4233b39..0c48138486dc 100644
1094 --- a/fs/exofs/super.c
1095 +++ b/fs/exofs/super.c
1096 @@ -100,6 +100,7 @@ static int parse_options(char *options, struct exofs_mountopt *opts)
1097 token = match_token(p, tokens, args);
1098 switch (token) {
1099 case Opt_name:
1100 + kfree(opts->dev_name);
1101 opts->dev_name = match_strdup(&args[0]);
1102 if (unlikely(!opts->dev_name)) {
1103 EXOFS_ERR("Error allocating dev_name");
1104 @@ -868,8 +869,10 @@ static struct dentry *exofs_mount(struct file_system_type *type,
1105 int ret;
1106
1107 ret = parse_options(data, &opts);
1108 - if (ret)
1109 + if (ret) {
1110 + kfree(opts.dev_name);
1111 return ERR_PTR(ret);
1112 + }
1113
1114 if (!opts.dev_name)
1115 opts.dev_name = dev_name;
1116 diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c
1117 index 832824994aae..073126707270 100644
1118 --- a/fs/gfs2/rgrp.c
1119 +++ b/fs/gfs2/rgrp.c
1120 @@ -715,6 +715,7 @@ void gfs2_clear_rgrpd(struct gfs2_sbd *sdp)
1121 spin_lock(&gl->gl_lockref.lock);
1122 gl->gl_object = NULL;
1123 spin_unlock(&gl->gl_lockref.lock);
1124 + gfs2_rgrp_brelse(rgd);
1125 gfs2_glock_add_to_lru(gl);
1126 gfs2_glock_put(gl);
1127 }
1128 @@ -1125,7 +1126,7 @@ static u32 count_unlinked(struct gfs2_rgrpd *rgd)
1129 * @rgd: the struct gfs2_rgrpd describing the RG to read in
1130 *
1131 * Read in all of a Resource Group's header and bitmap blocks.
1132 - * Caller must eventually call gfs2_rgrp_relse() to free the bitmaps.
1133 + * Caller must eventually call gfs2_rgrp_brelse() to free the bitmaps.
1134 *
1135 * Returns: errno
1136 */
1137 diff --git a/fs/hfs/brec.c b/fs/hfs/brec.c
1138 index 2a6f3c67cb3f..2e713673df42 100644
1139 --- a/fs/hfs/brec.c
1140 +++ b/fs/hfs/brec.c
1141 @@ -424,6 +424,10 @@ skip:
1142 if (new_node) {
1143 __be32 cnid;
1144
1145 + if (!new_node->parent) {
1146 + hfs_btree_inc_height(tree);
1147 + new_node->parent = tree->root;
1148 + }
1149 fd->bnode = hfs_bnode_find(tree, new_node->parent);
1150 /* create index key and entry */
1151 hfs_bnode_read_key(new_node, fd->search_key, 14);
1152 diff --git a/fs/hfsplus/brec.c b/fs/hfsplus/brec.c
1153 index 754fdf8c6356..1002a0c08319 100644
1154 --- a/fs/hfsplus/brec.c
1155 +++ b/fs/hfsplus/brec.c
1156 @@ -427,6 +427,10 @@ skip:
1157 if (new_node) {
1158 __be32 cnid;
1159
1160 + if (!new_node->parent) {
1161 + hfs_btree_inc_height(tree);
1162 + new_node->parent = tree->root;
1163 + }
1164 fd->bnode = hfs_bnode_find(tree, new_node->parent);
1165 /* create index key and entry */
1166 hfs_bnode_read_key(new_node, fd->search_key, 14);
1167 diff --git a/fs/reiserfs/xattr.c b/fs/reiserfs/xattr.c
1168 index 06a9fae202a7..9e313fc7fdc7 100644
1169 --- a/fs/reiserfs/xattr.c
1170 +++ b/fs/reiserfs/xattr.c
1171 @@ -184,6 +184,7 @@ struct reiserfs_dentry_buf {
1172 struct dir_context ctx;
1173 struct dentry *xadir;
1174 int count;
1175 + int err;
1176 struct dentry *dentries[8];
1177 };
1178
1179 @@ -206,6 +207,7 @@ fill_with_dentries(struct dir_context *ctx, const char *name, int namelen,
1180
1181 dentry = lookup_one_len(name, dbuf->xadir, namelen);
1182 if (IS_ERR(dentry)) {
1183 + dbuf->err = PTR_ERR(dentry);
1184 return PTR_ERR(dentry);
1185 } else if (d_really_is_negative(dentry)) {
1186 /* A directory entry exists, but no file? */
1187 @@ -214,6 +216,7 @@ fill_with_dentries(struct dir_context *ctx, const char *name, int namelen,
1188 "not found for file %pd.\n",
1189 dentry, dbuf->xadir);
1190 dput(dentry);
1191 + dbuf->err = -EIO;
1192 return -EIO;
1193 }
1194
1195 @@ -261,6 +264,10 @@ static int reiserfs_for_each_xattr(struct inode *inode,
1196 err = reiserfs_readdir_inode(d_inode(dir), &buf.ctx);
1197 if (err)
1198 break;
1199 + if (buf.err) {
1200 + err = buf.err;
1201 + break;
1202 + }
1203 if (!buf.count)
1204 break;
1205 for (i = 0; !err && i < buf.count && buf.dentries[i]; i++) {
1206 diff --git a/include/linux/netfilter/ipset/ip_set_comment.h b/include/linux/netfilter/ipset/ip_set_comment.h
1207 index 8d0248525957..9f34204978e4 100644
1208 --- a/include/linux/netfilter/ipset/ip_set_comment.h
1209 +++ b/include/linux/netfilter/ipset/ip_set_comment.h
1210 @@ -41,11 +41,11 @@ ip_set_init_comment(struct ip_set_comment *comment,
1211 rcu_assign_pointer(comment->c, c);
1212 }
1213
1214 -/* Used only when dumping a set, protected by rcu_read_lock_bh() */
1215 +/* Used only when dumping a set, protected by rcu_read_lock() */
1216 static inline int
1217 ip_set_put_comment(struct sk_buff *skb, struct ip_set_comment *comment)
1218 {
1219 - struct ip_set_comment_rcu *c = rcu_dereference_bh(comment->c);
1220 + struct ip_set_comment_rcu *c = rcu_dereference(comment->c);
1221
1222 if (!c)
1223 return 0;
1224 diff --git a/include/linux/uaccess.h b/include/linux/uaccess.h
1225 index f30c187ed785..9442423979c1 100644
1226 --- a/include/linux/uaccess.h
1227 +++ b/include/linux/uaccess.h
1228 @@ -2,6 +2,9 @@
1229 #define __LINUX_UACCESS_H__
1230
1231 #include <linux/sched.h>
1232 +
1233 +#define uaccess_kernel() segment_eq(get_fs(), KERNEL_DS)
1234 +
1235 #include <asm/uaccess.h>
1236
1237 static __always_inline void pagefault_disabled_inc(void)
1238 diff --git a/lib/raid6/test/Makefile b/lib/raid6/test/Makefile
1239 index 2c7b60edea04..1faeef0c30b9 100644
1240 --- a/lib/raid6/test/Makefile
1241 +++ b/lib/raid6/test/Makefile
1242 @@ -26,7 +26,7 @@ ifeq ($(ARCH),arm)
1243 CFLAGS += -I../../../arch/arm/include -mfpu=neon
1244 HAS_NEON = yes
1245 endif
1246 -ifeq ($(ARCH),arm64)
1247 +ifeq ($(ARCH),aarch64)
1248 CFLAGS += -I../../../arch/arm64/include
1249 HAS_NEON = yes
1250 endif
1251 @@ -40,7 +40,7 @@ ifeq ($(IS_X86),yes)
1252 gcc -c -x assembler - >&/dev/null && \
1253 rm ./-.o && echo -DCONFIG_AS_AVX512=1)
1254 else ifeq ($(HAS_NEON),yes)
1255 - OBJS += neon.o neon1.o neon2.o neon4.o neon8.o
1256 + OBJS += neon.o neon1.o neon2.o neon4.o neon8.o recov_neon.o recov_neon_inner.o
1257 CFLAGS += -DCONFIG_KERNEL_MODE_NEON=1
1258 else
1259 HAS_ALTIVEC := $(shell printf '\#include <altivec.h>\nvector int a;\n' |\
1260 diff --git a/net/ceph/messenger.c b/net/ceph/messenger.c
1261 index 98ea28dc03f9..68acf94fae72 100644
1262 --- a/net/ceph/messenger.c
1263 +++ b/net/ceph/messenger.c
1264 @@ -588,9 +588,15 @@ static int ceph_tcp_sendpage(struct socket *sock, struct page *page,
1265 int ret;
1266 struct kvec iov;
1267
1268 - /* sendpage cannot properly handle pages with page_count == 0,
1269 - * we need to fallback to sendmsg if that's the case */
1270 - if (page_count(page) >= 1)
1271 + /*
1272 + * sendpage cannot properly handle pages with page_count == 0,
1273 + * we need to fall back to sendmsg if that's the case.
1274 + *
1275 + * Same goes for slab pages: skb_can_coalesce() allows
1276 + * coalescing neighboring slab objects into a single frag which
1277 + * triggers one of hardened usercopy checks.
1278 + */
1279 + if (page_count(page) >= 1 && !PageSlab(page))
1280 return __ceph_tcp_sendpage(sock, page, offset, size, more);
1281
1282 iov.iov_base = kmap(page) + offset;
1283 diff --git a/net/netfilter/ipset/ip_set_hash_netportnet.c b/net/netfilter/ipset/ip_set_hash_netportnet.c
1284 index 9a14c237830f..b259a5814965 100644
1285 --- a/net/netfilter/ipset/ip_set_hash_netportnet.c
1286 +++ b/net/netfilter/ipset/ip_set_hash_netportnet.c
1287 @@ -213,13 +213,13 @@ hash_netportnet4_uadt(struct ip_set *set, struct nlattr *tb[],
1288
1289 if (tb[IPSET_ATTR_CIDR]) {
1290 e.cidr[0] = nla_get_u8(tb[IPSET_ATTR_CIDR]);
1291 - if (!e.cidr[0] || e.cidr[0] > HOST_MASK)
1292 + if (e.cidr[0] > HOST_MASK)
1293 return -IPSET_ERR_INVALID_CIDR;
1294 }
1295
1296 if (tb[IPSET_ATTR_CIDR2]) {
1297 e.cidr[1] = nla_get_u8(tb[IPSET_ATTR_CIDR2]);
1298 - if (!e.cidr[1] || e.cidr[1] > HOST_MASK)
1299 + if (e.cidr[1] > HOST_MASK)
1300 return -IPSET_ERR_INVALID_CIDR;
1301 }
1302
1303 @@ -492,13 +492,13 @@ hash_netportnet6_uadt(struct ip_set *set, struct nlattr *tb[],
1304
1305 if (tb[IPSET_ATTR_CIDR]) {
1306 e.cidr[0] = nla_get_u8(tb[IPSET_ATTR_CIDR]);
1307 - if (!e.cidr[0] || e.cidr[0] > HOST_MASK)
1308 + if (e.cidr[0] > HOST_MASK)
1309 return -IPSET_ERR_INVALID_CIDR;
1310 }
1311
1312 if (tb[IPSET_ATTR_CIDR2]) {
1313 e.cidr[1] = nla_get_u8(tb[IPSET_ATTR_CIDR2]);
1314 - if (!e.cidr[1] || e.cidr[1] > HOST_MASK)
1315 + if (e.cidr[1] > HOST_MASK)
1316 return -IPSET_ERR_INVALID_CIDR;
1317 }
1318
1319 diff --git a/net/netfilter/xt_IDLETIMER.c b/net/netfilter/xt_IDLETIMER.c
1320 index bb5d6a058fb7..921c9bd7e1e7 100644
1321 --- a/net/netfilter/xt_IDLETIMER.c
1322 +++ b/net/netfilter/xt_IDLETIMER.c
1323 @@ -116,6 +116,22 @@ static void idletimer_tg_expired(unsigned long data)
1324 schedule_work(&timer->work);
1325 }
1326
1327 +static int idletimer_check_sysfs_name(const char *name, unsigned int size)
1328 +{
1329 + int ret;
1330 +
1331 + ret = xt_check_proc_name(name, size);
1332 + if (ret < 0)
1333 + return ret;
1334 +
1335 + if (!strcmp(name, "power") ||
1336 + !strcmp(name, "subsystem") ||
1337 + !strcmp(name, "uevent"))
1338 + return -EINVAL;
1339 +
1340 + return 0;
1341 +}
1342 +
1343 static int idletimer_tg_create(struct idletimer_tg_info *info)
1344 {
1345 int ret;
1346 @@ -126,6 +142,10 @@ static int idletimer_tg_create(struct idletimer_tg_info *info)
1347 goto out;
1348 }
1349
1350 + ret = idletimer_check_sysfs_name(info->label, sizeof(info->label));
1351 + if (ret < 0)
1352 + goto out_free_timer;
1353 +
1354 sysfs_attr_init(&info->timer->attr.attr);
1355 info->timer->attr.attr.name = kstrdup(info->label, GFP_KERNEL);
1356 if (!info->timer->attr.attr.name) {
1357 diff --git a/net/sunrpc/xdr.c b/net/sunrpc/xdr.c
1358 index 1b38fc486351..69846c6574ef 100644
1359 --- a/net/sunrpc/xdr.c
1360 +++ b/net/sunrpc/xdr.c
1361 @@ -512,7 +512,7 @@ EXPORT_SYMBOL_GPL(xdr_commit_encode);
1362 static __be32 *xdr_get_next_encode_buffer(struct xdr_stream *xdr,
1363 size_t nbytes)
1364 {
1365 - static __be32 *p;
1366 + __be32 *p;
1367 int space_left;
1368 int frag1bytes, frag2bytes;
1369