Magellan Linux

Contents of /trunk/kernel-alx-legacy/patches-4.9/0366-4.9.267-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3668 - (show annotations) (download)
Mon Oct 24 14:07:45 2022 UTC (18 months, 1 week ago) by niro
File size: 40456 byte(s)
-linux-4.9.267
1 diff --git a/Makefile b/Makefile
2 index 9e055c32d77ac..790f3619772a8 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,6 +1,6 @@
6 VERSION = 4
7 PATCHLEVEL = 9
8 -SUBLEVEL = 266
9 +SUBLEVEL = 267
10 EXTRAVERSION =
11 NAME = Roaring Lionus
12
13 diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
14 index ae55f5db97f8d..9dbaa283f01db 100644
15 --- a/arch/arm/Kconfig
16 +++ b/arch/arm/Kconfig
17 @@ -1546,12 +1546,10 @@ config THUMB2_KERNEL
18 depends on (CPU_V7 || CPU_V7M) && !CPU_V6 && !CPU_V6K
19 default y if CPU_THUMBONLY
20 select AEABI
21 - select ARM_ASM_UNIFIED
22 select ARM_UNWIND
23 help
24 By enabling this option, the kernel will be compiled in
25 - Thumb-2 mode. A compiler/assembler that understand the unified
26 - ARM-Thumb syntax is needed.
27 + Thumb-2 mode.
28
29 If unsure, say N.
30
31 @@ -1586,9 +1584,6 @@ config THUMB2_AVOID_R_ARM_THM_JUMP11
32
33 Unless you are sure your tools don't have this problem, say Y.
34
35 -config ARM_ASM_UNIFIED
36 - bool
37 -
38 config ARM_PATCH_IDIV
39 bool "Runtime patch udiv/sdiv instructions into __aeabi_{u}idiv()"
40 depends on CPU_32v7 && !XIP_KERNEL
41 diff --git a/arch/arm/Makefile b/arch/arm/Makefile
42 index e14ddca59d02d..975b110e7d87a 100644
43 --- a/arch/arm/Makefile
44 +++ b/arch/arm/Makefile
45 @@ -113,9 +113,11 @@ ifeq ($(CONFIG_ARM_UNWIND),y)
46 CFLAGS_ABI +=-funwind-tables
47 endif
48
49 +# Accept old syntax despite ".syntax unified"
50 +AFLAGS_NOWARN :=$(call as-option,-Wa$(comma)-mno-warn-deprecated,-Wa$(comma)-W)
51 +
52 ifeq ($(CONFIG_THUMB2_KERNEL),y)
53 AFLAGS_AUTOIT :=$(call as-option,-Wa$(comma)-mimplicit-it=always,-Wa$(comma)-mauto-it)
54 -AFLAGS_NOWARN :=$(call as-option,-Wa$(comma)-mno-warn-deprecated,-Wa$(comma)-W)
55 CFLAGS_ISA :=-mthumb $(AFLAGS_AUTOIT) $(AFLAGS_NOWARN)
56 AFLAGS_ISA :=$(CFLAGS_ISA) -Wa$(comma)-mthumb
57 # Work around buggy relocation from gas if requested:
58 @@ -123,7 +125,7 @@ ifeq ($(CONFIG_THUMB2_AVOID_R_ARM_THM_JUMP11),y)
59 CFLAGS_MODULE +=-fno-optimize-sibling-calls
60 endif
61 else
62 -CFLAGS_ISA :=$(call cc-option,-marm,)
63 +CFLAGS_ISA :=$(call cc-option,-marm,) $(AFLAGS_NOWARN)
64 AFLAGS_ISA :=$(CFLAGS_ISA)
65 endif
66
67 diff --git a/arch/arm/include/asm/unified.h b/arch/arm/include/asm/unified.h
68 index a91ae499614cb..2c3b952be63eb 100644
69 --- a/arch/arm/include/asm/unified.h
70 +++ b/arch/arm/include/asm/unified.h
71 @@ -20,8 +20,10 @@
72 #ifndef __ASM_UNIFIED_H
73 #define __ASM_UNIFIED_H
74
75 -#if defined(__ASSEMBLY__) && defined(CONFIG_ARM_ASM_UNIFIED)
76 +#if defined(__ASSEMBLY__)
77 .syntax unified
78 +#else
79 +__asm__(".syntax unified");
80 #endif
81
82 #ifdef CONFIG_CPU_V7M
83 @@ -64,77 +66,4 @@
84
85 #endif /* CONFIG_THUMB2_KERNEL */
86
87 -#ifndef CONFIG_ARM_ASM_UNIFIED
88 -
89 -/*
90 - * If the unified assembly syntax isn't used (in ARM mode), these
91 - * macros expand to an empty string
92 - */
93 -#ifdef __ASSEMBLY__
94 - .macro it, cond
95 - .endm
96 - .macro itt, cond
97 - .endm
98 - .macro ite, cond
99 - .endm
100 - .macro ittt, cond
101 - .endm
102 - .macro itte, cond
103 - .endm
104 - .macro itet, cond
105 - .endm
106 - .macro itee, cond
107 - .endm
108 - .macro itttt, cond
109 - .endm
110 - .macro ittte, cond
111 - .endm
112 - .macro ittet, cond
113 - .endm
114 - .macro ittee, cond
115 - .endm
116 - .macro itett, cond
117 - .endm
118 - .macro itete, cond
119 - .endm
120 - .macro iteet, cond
121 - .endm
122 - .macro iteee, cond
123 - .endm
124 -#else /* !__ASSEMBLY__ */
125 -__asm__(
126 -" .macro it, cond\n"
127 -" .endm\n"
128 -" .macro itt, cond\n"
129 -" .endm\n"
130 -" .macro ite, cond\n"
131 -" .endm\n"
132 -" .macro ittt, cond\n"
133 -" .endm\n"
134 -" .macro itte, cond\n"
135 -" .endm\n"
136 -" .macro itet, cond\n"
137 -" .endm\n"
138 -" .macro itee, cond\n"
139 -" .endm\n"
140 -" .macro itttt, cond\n"
141 -" .endm\n"
142 -" .macro ittte, cond\n"
143 -" .endm\n"
144 -" .macro ittet, cond\n"
145 -" .endm\n"
146 -" .macro ittee, cond\n"
147 -" .endm\n"
148 -" .macro itett, cond\n"
149 -" .endm\n"
150 -" .macro itete, cond\n"
151 -" .endm\n"
152 -" .macro iteet, cond\n"
153 -" .endm\n"
154 -" .macro iteee, cond\n"
155 -" .endm\n");
156 -#endif /* __ASSEMBLY__ */
157 -
158 -#endif /* CONFIG_ARM_ASM_UNIFIED */
159 -
160 #endif /* !__ASM_UNIFIED_H */
161 diff --git a/arch/ia64/include/asm/ptrace.h b/arch/ia64/include/asm/ptrace.h
162 index 845143990a1d6..9d3d4fb87a7a3 100644
163 --- a/arch/ia64/include/asm/ptrace.h
164 +++ b/arch/ia64/include/asm/ptrace.h
165 @@ -53,8 +53,7 @@
166
167 static inline unsigned long user_stack_pointer(struct pt_regs *regs)
168 {
169 - /* FIXME: should this be bspstore + nr_dirty regs? */
170 - return regs->ar_bspstore;
171 + return regs->r12;
172 }
173
174 static inline int is_syscall_success(struct pt_regs *regs)
175 @@ -78,11 +77,6 @@ static inline long regs_return_value(struct pt_regs *regs)
176 unsigned long __ip = instruction_pointer(regs); \
177 (__ip & ~3UL) + ((__ip & 3UL) << 2); \
178 })
179 -/*
180 - * Why not default? Because user_stack_pointer() on ia64 gives register
181 - * stack backing store instead...
182 - */
183 -#define current_user_stack_pointer() (current_pt_regs()->r12)
184
185 /* given a pointer to a task_struct, return the user's pt_regs */
186 # define task_pt_regs(t) (((struct pt_regs *) ((char *) (t) + IA64_STK_OFFSET)) - 1)
187 diff --git a/arch/parisc/include/asm/cmpxchg.h b/arch/parisc/include/asm/cmpxchg.h
188 index 536690a68917c..8dc6d198039d2 100644
189 --- a/arch/parisc/include/asm/cmpxchg.h
190 +++ b/arch/parisc/include/asm/cmpxchg.h
191 @@ -71,7 +71,7 @@ __cmpxchg(volatile void *ptr, unsigned long old, unsigned long new_, int size)
192 #endif
193 case 4: return __cmpxchg_u32((unsigned int *)ptr,
194 (unsigned int)old, (unsigned int)new_);
195 - case 1: return __cmpxchg_u8((u8 *)ptr, (u8)old, (u8)new_);
196 + case 1: return __cmpxchg_u8((u8 *)ptr, old & 0xff, new_ & 0xff);
197 }
198 __cmpxchg_called_with_bad_pointer();
199 return old;
200 diff --git a/arch/s390/kernel/cpcmd.c b/arch/s390/kernel/cpcmd.c
201 index 7f48e568ac644..540912666740f 100644
202 --- a/arch/s390/kernel/cpcmd.c
203 +++ b/arch/s390/kernel/cpcmd.c
204 @@ -37,10 +37,12 @@ static int diag8_noresponse(int cmdlen)
205
206 static int diag8_response(int cmdlen, char *response, int *rlen)
207 {
208 + unsigned long _cmdlen = cmdlen | 0x40000000L;
209 + unsigned long _rlen = *rlen;
210 register unsigned long reg2 asm ("2") = (addr_t) cpcmd_buf;
211 register unsigned long reg3 asm ("3") = (addr_t) response;
212 - register unsigned long reg4 asm ("4") = cmdlen | 0x40000000L;
213 - register unsigned long reg5 asm ("5") = *rlen;
214 + register unsigned long reg4 asm ("4") = _cmdlen;
215 + register unsigned long reg5 asm ("5") = _rlen;
216
217 asm volatile(
218 " sam31\n"
219 diff --git a/drivers/char/agp/Kconfig b/drivers/char/agp/Kconfig
220 index c528f96ee204f..07de755ca30c5 100644
221 --- a/drivers/char/agp/Kconfig
222 +++ b/drivers/char/agp/Kconfig
223 @@ -124,7 +124,7 @@ config AGP_HP_ZX1
224
225 config AGP_PARISC
226 tristate "HP Quicksilver AGP support"
227 - depends on AGP && PARISC && 64BIT
228 + depends on AGP && PARISC && 64BIT && IOMMU_SBA
229 help
230 This option gives you AGP GART support for the HP Quicksilver
231 AGP bus adapter on HP PA-RISC machines (Ok, just on the C8000
232 diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
233 index af4f2ffc4fc50..9d60b3f219f6b 100644
234 --- a/drivers/clk/clk.c
235 +++ b/drivers/clk/clk.c
236 @@ -2990,32 +2990,28 @@ EXPORT_SYMBOL_GPL(clk_notifier_register);
237 */
238 int clk_notifier_unregister(struct clk *clk, struct notifier_block *nb)
239 {
240 - struct clk_notifier *cn = NULL;
241 - int ret = -EINVAL;
242 + struct clk_notifier *cn;
243 + int ret = -ENOENT;
244
245 if (!clk || !nb)
246 return -EINVAL;
247
248 clk_prepare_lock();
249
250 - list_for_each_entry(cn, &clk_notifier_list, node)
251 - if (cn->clk == clk)
252 - break;
253 -
254 - if (cn->clk == clk) {
255 - ret = srcu_notifier_chain_unregister(&cn->notifier_head, nb);
256 + list_for_each_entry(cn, &clk_notifier_list, node) {
257 + if (cn->clk == clk) {
258 + ret = srcu_notifier_chain_unregister(&cn->notifier_head, nb);
259
260 - clk->core->notifier_count--;
261 + clk->core->notifier_count--;
262
263 - /* XXX the notifier code should handle this better */
264 - if (!cn->notifier_head.head) {
265 - srcu_cleanup_notifier_head(&cn->notifier_head);
266 - list_del(&cn->node);
267 - kfree(cn);
268 + /* XXX the notifier code should handle this better */
269 + if (!cn->notifier_head.head) {
270 + srcu_cleanup_notifier_head(&cn->notifier_head);
271 + list_del(&cn->node);
272 + kfree(cn);
273 + }
274 + break;
275 }
276 -
277 - } else {
278 - ret = -ENOENT;
279 }
280
281 clk_prepare_unlock();
282 diff --git a/drivers/clk/socfpga/clk-gate.c b/drivers/clk/socfpga/clk-gate.c
283 index aa7a6e6a15b65..14918896811d6 100644
284 --- a/drivers/clk/socfpga/clk-gate.c
285 +++ b/drivers/clk/socfpga/clk-gate.c
286 @@ -107,7 +107,7 @@ static unsigned long socfpga_clk_recalc_rate(struct clk_hw *hwclk,
287 val = readl(socfpgaclk->div_reg) >> socfpgaclk->shift;
288 val &= GENMASK(socfpgaclk->width - 1, 0);
289 /* Check for GPIO_DB_CLK by its offset */
290 - if ((int) socfpgaclk->div_reg & SOCFPGA_GPIO_DB_CLK_OFFSET)
291 + if ((uintptr_t) socfpgaclk->div_reg & SOCFPGA_GPIO_DB_CLK_OFFSET)
292 div = val + 1;
293 else
294 div = (1 << val);
295 diff --git a/drivers/gpu/drm/imx/imx-ldb.c b/drivers/gpu/drm/imx/imx-ldb.c
296 index 2df407b2b0da7..3a9d06de81b4c 100644
297 --- a/drivers/gpu/drm/imx/imx-ldb.c
298 +++ b/drivers/gpu/drm/imx/imx-ldb.c
299 @@ -212,6 +212,11 @@ static void imx_ldb_encoder_enable(struct drm_encoder *encoder)
300 int dual = ldb->ldb_ctrl & LDB_SPLIT_MODE_EN;
301 int mux = drm_of_encoder_active_port_id(imx_ldb_ch->child, encoder);
302
303 + if (mux < 0 || mux >= ARRAY_SIZE(ldb->clk_sel)) {
304 + dev_warn(ldb->dev, "%s: invalid mux %d\n", __func__, mux);
305 + return;
306 + }
307 +
308 drm_panel_prepare(imx_ldb_ch->panel);
309
310 if (dual) {
311 @@ -270,6 +275,11 @@ imx_ldb_encoder_atomic_mode_set(struct drm_encoder *encoder,
312 int mux = drm_of_encoder_active_port_id(imx_ldb_ch->child, encoder);
313 u32 bus_format = imx_ldb_ch->bus_format;
314
315 + if (mux < 0 || mux >= ARRAY_SIZE(ldb->clk_sel)) {
316 + dev_warn(ldb->dev, "%s: invalid mux %d\n", __func__, mux);
317 + return;
318 + }
319 +
320 if (mode->clock > 170000) {
321 dev_warn(ldb->dev,
322 "%s: mode exceeds 170 MHz pixel clock\n", __func__);
323 diff --git a/drivers/iio/light/hid-sensor-prox.c b/drivers/iio/light/hid-sensor-prox.c
324 index 45ca056f019ed..63041dcec7afd 100644
325 --- a/drivers/iio/light/hid-sensor-prox.c
326 +++ b/drivers/iio/light/hid-sensor-prox.c
327 @@ -37,6 +37,9 @@ struct prox_state {
328 struct hid_sensor_common common_attributes;
329 struct hid_sensor_hub_attribute_info prox_attr;
330 u32 human_presence;
331 + int scale_pre_decml;
332 + int scale_post_decml;
333 + int scale_precision;
334 };
335
336 /* Channel definitions */
337 @@ -105,8 +108,9 @@ static int prox_read_raw(struct iio_dev *indio_dev,
338 ret_type = IIO_VAL_INT;
339 break;
340 case IIO_CHAN_INFO_SCALE:
341 - *val = prox_state->prox_attr.units;
342 - ret_type = IIO_VAL_INT;
343 + *val = prox_state->scale_pre_decml;
344 + *val2 = prox_state->scale_post_decml;
345 + ret_type = prox_state->scale_precision;
346 break;
347 case IIO_CHAN_INFO_OFFSET:
348 *val = hid_sensor_convert_exponent(
349 @@ -240,6 +244,12 @@ static int prox_parse_report(struct platform_device *pdev,
350 st->common_attributes.sensitivity.index,
351 st->common_attributes.sensitivity.report_id);
352 }
353 +
354 + st->scale_precision = hid_sensor_format_scale(
355 + hsdev->usage,
356 + &st->prox_attr,
357 + &st->scale_pre_decml, &st->scale_post_decml);
358 +
359 return ret;
360 }
361
362 diff --git a/drivers/infiniband/hw/cxgb4/cm.c b/drivers/infiniband/hw/cxgb4/cm.c
363 index 8bd062635399a..ed4397c3af1a6 100644
364 --- a/drivers/infiniband/hw/cxgb4/cm.c
365 +++ b/drivers/infiniband/hw/cxgb4/cm.c
366 @@ -3478,7 +3478,8 @@ int c4iw_destroy_listen(struct iw_cm_id *cm_id)
367 c4iw_init_wr_wait(&ep->com.wr_wait);
368 err = cxgb4_remove_server(
369 ep->com.dev->rdev.lldi.ports[0], ep->stid,
370 - ep->com.dev->rdev.lldi.rxq_ids[0], true);
371 + ep->com.dev->rdev.lldi.rxq_ids[0],
372 + ep->com.local_addr.ss_family == AF_INET6);
373 if (err)
374 goto done;
375 err = c4iw_wait_for_reply(&ep->com.dev->rdev, &ep->com.wr_wait,
376 diff --git a/drivers/net/can/usb/peak_usb/pcan_usb_core.c b/drivers/net/can/usb/peak_usb/pcan_usb_core.c
377 index 2e316228aa1e8..c8502bd8e3dc5 100644
378 --- a/drivers/net/can/usb/peak_usb/pcan_usb_core.c
379 +++ b/drivers/net/can/usb/peak_usb/pcan_usb_core.c
380 @@ -880,7 +880,7 @@ static int peak_usb_create_dev(const struct peak_usb_adapter *peak_usb_adapter,
381 if (dev->adapter->dev_set_bus) {
382 err = dev->adapter->dev_set_bus(dev, 0);
383 if (err)
384 - goto lbl_unregister_candev;
385 + goto adap_dev_free;
386 }
387
388 /* get device number early */
389 @@ -892,6 +892,10 @@ static int peak_usb_create_dev(const struct peak_usb_adapter *peak_usb_adapter,
390
391 return 0;
392
393 +adap_dev_free:
394 + if (dev->adapter->dev_free)
395 + dev->adapter->dev_free(dev);
396 +
397 lbl_unregister_candev:
398 unregister_candev(netdev);
399
400 diff --git a/drivers/net/ethernet/freescale/gianfar.c b/drivers/net/ethernet/freescale/gianfar.c
401 index 2df646348dbd4..9fd68cfdd9734 100644
402 --- a/drivers/net/ethernet/freescale/gianfar.c
403 +++ b/drivers/net/ethernet/freescale/gianfar.c
404 @@ -485,7 +485,11 @@ static struct net_device_stats *gfar_get_stats(struct net_device *dev)
405
406 static int gfar_set_mac_addr(struct net_device *dev, void *p)
407 {
408 - eth_mac_addr(dev, p);
409 + int ret;
410 +
411 + ret = eth_mac_addr(dev, p);
412 + if (ret)
413 + return ret;
414
415 gfar_set_mac_for_addr(dev, 0, dev->dev_addr);
416
417 diff --git a/drivers/net/ieee802154/atusb.c b/drivers/net/ieee802154/atusb.c
418 index 12df6cfb423ac..0ee54fba0a237 100644
419 --- a/drivers/net/ieee802154/atusb.c
420 +++ b/drivers/net/ieee802154/atusb.c
421 @@ -341,6 +341,7 @@ static int atusb_alloc_urbs(struct atusb *atusb, int n)
422 return -ENOMEM;
423 }
424 usb_anchor_urb(urb, &atusb->idle_urbs);
425 + usb_free_urb(urb);
426 n--;
427 }
428 return 0;
429 diff --git a/drivers/net/tun.c b/drivers/net/tun.c
430 index 44b16d945e33a..dc0349d13f86a 100644
431 --- a/drivers/net/tun.c
432 +++ b/drivers/net/tun.c
433 @@ -72,6 +72,14 @@
434 #include <linux/seq_file.h>
435 #include <linux/uio.h>
436 #include <linux/skb_array.h>
437 +#include <linux/ieee802154.h>
438 +#include <linux/if_ltalk.h>
439 +#include <uapi/linux/if_fddi.h>
440 +#include <uapi/linux/if_hippi.h>
441 +#include <uapi/linux/if_fc.h>
442 +#include <net/ax25.h>
443 +#include <net/rose.h>
444 +#include <net/6lowpan.h>
445
446 #include <asm/uaccess.h>
447
448 @@ -2021,6 +2029,45 @@ unlock:
449 return ret;
450 }
451
452 +/* Return correct value for tun->dev->addr_len based on tun->dev->type. */
453 +static unsigned char tun_get_addr_len(unsigned short type)
454 +{
455 + switch (type) {
456 + case ARPHRD_IP6GRE:
457 + case ARPHRD_TUNNEL6:
458 + return sizeof(struct in6_addr);
459 + case ARPHRD_IPGRE:
460 + case ARPHRD_TUNNEL:
461 + case ARPHRD_SIT:
462 + return 4;
463 + case ARPHRD_ETHER:
464 + return ETH_ALEN;
465 + case ARPHRD_IEEE802154:
466 + case ARPHRD_IEEE802154_MONITOR:
467 + return IEEE802154_EXTENDED_ADDR_LEN;
468 + case ARPHRD_PHONET_PIPE:
469 + case ARPHRD_PPP:
470 + case ARPHRD_NONE:
471 + return 0;
472 + case ARPHRD_6LOWPAN:
473 + return EUI64_ADDR_LEN;
474 + case ARPHRD_FDDI:
475 + return FDDI_K_ALEN;
476 + case ARPHRD_HIPPI:
477 + return HIPPI_ALEN;
478 + case ARPHRD_IEEE802:
479 + return FC_ALEN;
480 + case ARPHRD_ROSE:
481 + return ROSE_ADDR_LEN;
482 + case ARPHRD_NETROM:
483 + return AX25_ADDR_LEN;
484 + case ARPHRD_LOCALTLK:
485 + return LTALK_ALEN;
486 + default:
487 + return 0;
488 + }
489 +}
490 +
491 static long __tun_chr_ioctl(struct file *file, unsigned int cmd,
492 unsigned long arg, int ifreq_len)
493 {
494 @@ -2159,6 +2206,7 @@ static long __tun_chr_ioctl(struct file *file, unsigned int cmd,
495 ret = -EBUSY;
496 } else {
497 tun->dev->type = (int) arg;
498 + tun->dev->addr_len = tun_get_addr_len(tun->dev->type);
499 tun_debug(KERN_INFO, tun, "linktype set to %d\n",
500 tun->dev->type);
501 ret = 0;
502 diff --git a/drivers/soc/fsl/qbman/qman.c b/drivers/soc/fsl/qbman/qman.c
503 index 91f5c951850f7..44463afb80150 100644
504 --- a/drivers/soc/fsl/qbman/qman.c
505 +++ b/drivers/soc/fsl/qbman/qman.c
506 @@ -146,7 +146,7 @@ struct qm_eqcr_entry {
507 u32 tag;
508 struct qm_fd fd;
509 u8 __reserved3[32];
510 -} __packed;
511 +} __packed __aligned(8);
512 #define QM_EQCR_VERB_VBIT 0x80
513 #define QM_EQCR_VERB_CMD_MASK 0x61 /* but only one value; */
514 #define QM_EQCR_VERB_CMD_ENQUEUE 0x01
515 diff --git a/drivers/usb/usbip/vudc_sysfs.c b/drivers/usb/usbip/vudc_sysfs.c
516 index e3f7c76d19562..f44d98eeb36ac 100644
517 --- a/drivers/usb/usbip/vudc_sysfs.c
518 +++ b/drivers/usb/usbip/vudc_sysfs.c
519 @@ -103,8 +103,9 @@ unlock:
520 }
521 static BIN_ATTR_RO(dev_desc, sizeof(struct usb_device_descriptor));
522
523 -static ssize_t store_sockfd(struct device *dev, struct device_attribute *attr,
524 - const char *in, size_t count)
525 +static ssize_t store_sockfd(struct device *dev,
526 + struct device_attribute *attr,
527 + const char *in, size_t count)
528 {
529 struct vudc *udc = (struct vudc *) dev_get_drvdata(dev);
530 int rv;
531 @@ -113,6 +114,8 @@ static ssize_t store_sockfd(struct device *dev, struct device_attribute *attr,
532 struct socket *socket;
533 unsigned long flags;
534 int ret;
535 + struct task_struct *tcp_rx = NULL;
536 + struct task_struct *tcp_tx = NULL;
537
538 rv = kstrtoint(in, 0, &sockfd);
539 if (rv != 0)
540 @@ -158,24 +161,47 @@ static ssize_t store_sockfd(struct device *dev, struct device_attribute *attr,
541 goto sock_err;
542 }
543
544 - udc->ud.tcp_socket = socket;
545 -
546 + /* unlock and create threads and get tasks */
547 spin_unlock_irq(&udc->ud.lock);
548 spin_unlock_irqrestore(&udc->lock, flags);
549
550 - udc->ud.tcp_rx = kthread_get_run(&v_rx_loop,
551 - &udc->ud, "vudc_rx");
552 - udc->ud.tcp_tx = kthread_get_run(&v_tx_loop,
553 - &udc->ud, "vudc_tx");
554 + tcp_rx = kthread_create(&v_rx_loop, &udc->ud, "vudc_rx");
555 + if (IS_ERR(tcp_rx)) {
556 + sockfd_put(socket);
557 + return -EINVAL;
558 + }
559 + tcp_tx = kthread_create(&v_tx_loop, &udc->ud, "vudc_tx");
560 + if (IS_ERR(tcp_tx)) {
561 + kthread_stop(tcp_rx);
562 + sockfd_put(socket);
563 + return -EINVAL;
564 + }
565 +
566 + /* get task structs now */
567 + get_task_struct(tcp_rx);
568 + get_task_struct(tcp_tx);
569
570 + /* lock and update udc->ud state */
571 spin_lock_irqsave(&udc->lock, flags);
572 spin_lock_irq(&udc->ud.lock);
573 +
574 + udc->ud.tcp_socket = socket;
575 + udc->ud.tcp_rx = tcp_rx;
576 + udc->ud.tcp_rx = tcp_tx;
577 udc->ud.status = SDEV_ST_USED;
578 +
579 spin_unlock_irq(&udc->ud.lock);
580
581 do_gettimeofday(&udc->start_time);
582 v_start_timer(udc);
583 udc->connected = 1;
584 +
585 + spin_unlock_irqrestore(&udc->lock, flags);
586 +
587 + wake_up_process(udc->ud.tcp_rx);
588 + wake_up_process(udc->ud.tcp_tx);
589 + return count;
590 +
591 } else {
592 if (!udc->connected) {
593 dev_err(dev, "Device not connected");
594 diff --git a/drivers/xen/events/events_base.c b/drivers/xen/events/events_base.c
595 index 2adf541196776..ea307f40cab19 100644
596 --- a/drivers/xen/events/events_base.c
597 +++ b/drivers/xen/events/events_base.c
598 @@ -222,7 +222,7 @@ static int xen_irq_info_common_setup(struct irq_info *info,
599 info->evtchn = evtchn;
600 info->cpu = cpu;
601 info->mask_reason = EVT_MASK_REASON_EXPLICIT;
602 - spin_lock_init(&info->lock);
603 + raw_spin_lock_init(&info->lock);
604
605 ret = set_evtchn_to_irq(evtchn, irq);
606 if (ret < 0)
607 @@ -374,28 +374,28 @@ static void do_mask(struct irq_info *info, u8 reason)
608 {
609 unsigned long flags;
610
611 - spin_lock_irqsave(&info->lock, flags);
612 + raw_spin_lock_irqsave(&info->lock, flags);
613
614 if (!info->mask_reason)
615 mask_evtchn(info->evtchn);
616
617 info->mask_reason |= reason;
618
619 - spin_unlock_irqrestore(&info->lock, flags);
620 + raw_spin_unlock_irqrestore(&info->lock, flags);
621 }
622
623 static void do_unmask(struct irq_info *info, u8 reason)
624 {
625 unsigned long flags;
626
627 - spin_lock_irqsave(&info->lock, flags);
628 + raw_spin_lock_irqsave(&info->lock, flags);
629
630 info->mask_reason &= ~reason;
631
632 if (!info->mask_reason)
633 unmask_evtchn(info->evtchn);
634
635 - spin_unlock_irqrestore(&info->lock, flags);
636 + raw_spin_unlock_irqrestore(&info->lock, flags);
637 }
638
639 #ifdef CONFIG_X86
640 @@ -1780,7 +1780,7 @@ static void lateeoi_ack_dynirq(struct irq_data *data)
641
642 if (VALID_EVTCHN(evtchn)) {
643 do_mask(info, EVT_MASK_REASON_EOI_PENDING);
644 - event_handler_exit(info);
645 + ack_dynirq(data);
646 }
647 }
648
649 @@ -1791,7 +1791,7 @@ static void lateeoi_mask_ack_dynirq(struct irq_data *data)
650
651 if (VALID_EVTCHN(evtchn)) {
652 do_mask(info, EVT_MASK_REASON_EXPLICIT);
653 - event_handler_exit(info);
654 + ack_dynirq(data);
655 }
656 }
657
658 diff --git a/drivers/xen/events/events_internal.h b/drivers/xen/events/events_internal.h
659 index 3df6f28b75e69..cc37b711491ce 100644
660 --- a/drivers/xen/events/events_internal.h
661 +++ b/drivers/xen/events/events_internal.h
662 @@ -47,7 +47,7 @@ struct irq_info {
663 unsigned short eoi_cpu; /* EOI must happen on this cpu */
664 unsigned int irq_epoch; /* If eoi_cpu valid: irq_epoch of event */
665 u64 eoi_time; /* Time in jiffies when to EOI. */
666 - spinlock_t lock;
667 + raw_spinlock_t lock;
668
669 union {
670 unsigned short virq;
671 diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
672 index 8508dc8270593..af78de9ef036c 100644
673 --- a/fs/cifs/connect.c
674 +++ b/fs/cifs/connect.c
675 @@ -3488,7 +3488,6 @@ int cifs_setup_cifs_sb(struct smb_vol *pvolume_info,
676 cifs_sb->prepath = kstrdup(pvolume_info->prepath, GFP_KERNEL);
677 if (cifs_sb->prepath == NULL)
678 return -ENOMEM;
679 - cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_USE_PREFIX_PATH;
680 }
681
682 return 0;
683 diff --git a/fs/direct-io.c b/fs/direct-io.c
684 index fc90f0c33cbe4..a9b8e68e439db 100644
685 --- a/fs/direct-io.c
686 +++ b/fs/direct-io.c
687 @@ -793,6 +793,7 @@ submit_page_section(struct dio *dio, struct dio_submit *sdio, struct page *page,
688 struct buffer_head *map_bh)
689 {
690 int ret = 0;
691 + int boundary = sdio->boundary; /* dio_send_cur_page may clear it */
692
693 if (dio->op == REQ_OP_WRITE) {
694 /*
695 @@ -831,10 +832,10 @@ submit_page_section(struct dio *dio, struct dio_submit *sdio, struct page *page,
696 sdio->cur_page_fs_offset = sdio->block_in_file << sdio->blkbits;
697 out:
698 /*
699 - * If sdio->boundary then we want to schedule the IO now to
700 + * If boundary then we want to schedule the IO now to
701 * avoid metadata seeks.
702 */
703 - if (sdio->boundary) {
704 + if (boundary) {
705 ret = dio_send_cur_page(dio, sdio, map_bh);
706 if (sdio->bio)
707 dio_bio_submit(dio, sdio);
708 diff --git a/fs/gfs2/super.c b/fs/gfs2/super.c
709 index 37496d83661a7..ef401aecaa2c4 100644
710 --- a/fs/gfs2/super.c
711 +++ b/fs/gfs2/super.c
712 @@ -986,11 +986,13 @@ void gfs2_freeze_func(struct work_struct *work)
713 static int gfs2_freeze(struct super_block *sb)
714 {
715 struct gfs2_sbd *sdp = sb->s_fs_info;
716 - int error = 0;
717 + int error;
718
719 mutex_lock(&sdp->sd_freeze_mutex);
720 - if (atomic_read(&sdp->sd_freeze_state) != SFS_UNFROZEN)
721 + if (atomic_read(&sdp->sd_freeze_state) != SFS_UNFROZEN) {
722 + error = -EBUSY;
723 goto out;
724 + }
725
726 if (test_bit(SDF_SHUTDOWN, &sdp->sd_flags)) {
727 error = -EINVAL;
728 @@ -1032,10 +1034,10 @@ static int gfs2_unfreeze(struct super_block *sb)
729 struct gfs2_sbd *sdp = sb->s_fs_info;
730
731 mutex_lock(&sdp->sd_freeze_mutex);
732 - if (atomic_read(&sdp->sd_freeze_state) != SFS_FROZEN ||
733 + if (atomic_read(&sdp->sd_freeze_state) != SFS_FROZEN ||
734 !gfs2_holder_initialized(&sdp->sd_freeze_gh)) {
735 mutex_unlock(&sdp->sd_freeze_mutex);
736 - return 0;
737 + return -EINVAL;
738 }
739
740 gfs2_glock_dq_uninit(&sdp->sd_freeze_gh);
741 diff --git a/fs/ocfs2/aops.c b/fs/ocfs2/aops.c
742 index 6ad76397b31de..291a8250017ad 100644
743 --- a/fs/ocfs2/aops.c
744 +++ b/fs/ocfs2/aops.c
745 @@ -2301,7 +2301,7 @@ static void ocfs2_dio_end_io_write(struct inode *inode,
746 struct ocfs2_alloc_context *meta_ac = NULL;
747 handle_t *handle = NULL;
748 loff_t end = offset + bytes;
749 - int ret = 0, credits = 0, locked = 0;
750 + int ret = 0, credits = 0;
751
752 ocfs2_init_dealloc_ctxt(&dealloc);
753
754 @@ -2312,13 +2312,6 @@ static void ocfs2_dio_end_io_write(struct inode *inode,
755 !dwc->dw_orphaned)
756 goto out;
757
758 - /* ocfs2_file_write_iter will get i_mutex, so we need not lock if we
759 - * are in that context. */
760 - if (dwc->dw_writer_pid != task_pid_nr(current)) {
761 - inode_lock(inode);
762 - locked = 1;
763 - }
764 -
765 ret = ocfs2_inode_lock(inode, &di_bh, 1);
766 if (ret < 0) {
767 mlog_errno(ret);
768 @@ -2393,8 +2386,6 @@ out:
769 if (meta_ac)
770 ocfs2_free_alloc_context(meta_ac);
771 ocfs2_run_deallocs(osb, &dealloc);
772 - if (locked)
773 - inode_unlock(inode);
774 ocfs2_dio_free_write_ctx(inode, dwc);
775 }
776
777 diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c
778 index 05a0fb9854f9e..c17285df12be2 100644
779 --- a/fs/ocfs2/file.c
780 +++ b/fs/ocfs2/file.c
781 @@ -1236,22 +1236,24 @@ int ocfs2_setattr(struct dentry *dentry, struct iattr *attr)
782 goto bail_unlock;
783 }
784 }
785 + down_write(&OCFS2_I(inode)->ip_alloc_sem);
786 handle = ocfs2_start_trans(osb, OCFS2_INODE_UPDATE_CREDITS +
787 2 * ocfs2_quota_trans_credits(sb));
788 if (IS_ERR(handle)) {
789 status = PTR_ERR(handle);
790 mlog_errno(status);
791 - goto bail_unlock;
792 + goto bail_unlock_alloc;
793 }
794 status = __dquot_transfer(inode, transfer_to);
795 if (status < 0)
796 goto bail_commit;
797 } else {
798 + down_write(&OCFS2_I(inode)->ip_alloc_sem);
799 handle = ocfs2_start_trans(osb, OCFS2_INODE_UPDATE_CREDITS);
800 if (IS_ERR(handle)) {
801 status = PTR_ERR(handle);
802 mlog_errno(status);
803 - goto bail_unlock;
804 + goto bail_unlock_alloc;
805 }
806 }
807
808 @@ -1264,6 +1266,8 @@ int ocfs2_setattr(struct dentry *dentry, struct iattr *attr)
809
810 bail_commit:
811 ocfs2_commit_trans(osb, handle);
812 +bail_unlock_alloc:
813 + up_write(&OCFS2_I(inode)->ip_alloc_sem);
814 bail_unlock:
815 if (status) {
816 ocfs2_inode_unlock(inode, 1);
817 diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
818 index 4b207b10db030..e6c8eadfaa801 100644
819 --- a/fs/proc/task_mmu.c
820 +++ b/fs/proc/task_mmu.c
821 @@ -1609,6 +1609,7 @@ static int gather_pte_stats(pmd_t *pmd, unsigned long addr,
822
823 } while (pte++, addr += PAGE_SIZE, addr != end);
824 pte_unmap_unlock(orig_pte, ptl);
825 + cond_resched();
826 return 0;
827 }
828 #ifdef CONFIG_HUGETLB_PAGE
829 diff --git a/include/net/red.h b/include/net/red.h
830 index b3ab5c6bfa83f..117a3654d3194 100644
831 --- a/include/net/red.h
832 +++ b/include/net/red.h
833 @@ -170,9 +170,9 @@ static inline void red_set_vars(struct red_vars *v)
834 static inline bool red_check_params(u32 qth_min, u32 qth_max, u8 Wlog,
835 u8 Scell_log, u8 *stab)
836 {
837 - if (fls(qth_min) + Wlog > 32)
838 + if (fls(qth_min) + Wlog >= 32)
839 return false;
840 - if (fls(qth_max) + Wlog > 32)
841 + if (fls(qth_max) + Wlog >= 32)
842 return false;
843 if (Scell_log >= 32)
844 return false;
845 diff --git a/kernel/workqueue.c b/kernel/workqueue.c
846 index 205c3131f8b05..3231088afd73d 100644
847 --- a/kernel/workqueue.c
848 +++ b/kernel/workqueue.c
849 @@ -1377,7 +1377,6 @@ static void __queue_work(int cpu, struct workqueue_struct *wq,
850 */
851 WARN_ON_ONCE(!irqs_disabled());
852
853 - debug_work_activate(work);
854
855 /* if draining, only works from the same workqueue are allowed */
856 if (unlikely(wq->flags & __WQ_DRAINING) &&
857 @@ -1460,6 +1459,7 @@ retry:
858 worklist = &pwq->delayed_works;
859 }
860
861 + debug_work_activate(work);
862 insert_work(pwq, work, worklist, work_flags);
863
864 spin_unlock(&pwq->pool->lock);
865 diff --git a/net/batman-adv/translation-table.c b/net/batman-adv/translation-table.c
866 index d40d83949b005..607d8bac83760 100644
867 --- a/net/batman-adv/translation-table.c
868 +++ b/net/batman-adv/translation-table.c
869 @@ -897,6 +897,7 @@ batadv_tt_prepare_tvlv_global_data(struct batadv_orig_node *orig_node,
870 hlist_for_each_entry_rcu(vlan, &orig_node->vlan_list, list) {
871 tt_vlan->vid = htons(vlan->vid);
872 tt_vlan->crc = htonl(vlan->tt.crc);
873 + tt_vlan->reserved = 0;
874
875 tt_vlan++;
876 }
877 @@ -980,6 +981,7 @@ batadv_tt_prepare_tvlv_local_data(struct batadv_priv *bat_priv,
878
879 tt_vlan->vid = htons(vlan->vid);
880 tt_vlan->crc = htonl(vlan->tt.crc);
881 + tt_vlan->reserved = 0;
882
883 tt_vlan++;
884 }
885 diff --git a/net/ieee802154/nl-mac.c b/net/ieee802154/nl-mac.c
886 index d3cbb32587187..c0930b9fe848b 100644
887 --- a/net/ieee802154/nl-mac.c
888 +++ b/net/ieee802154/nl-mac.c
889 @@ -559,9 +559,7 @@ ieee802154_llsec_parse_key_id(struct genl_info *info,
890 desc->mode = nla_get_u8(info->attrs[IEEE802154_ATTR_LLSEC_KEY_MODE]);
891
892 if (desc->mode == IEEE802154_SCF_KEY_IMPLICIT) {
893 - if (!info->attrs[IEEE802154_ATTR_PAN_ID] &&
894 - !(info->attrs[IEEE802154_ATTR_SHORT_ADDR] ||
895 - info->attrs[IEEE802154_ATTR_HW_ADDR]))
896 + if (!info->attrs[IEEE802154_ATTR_PAN_ID])
897 return -EINVAL;
898
899 desc->device_addr.pan_id = nla_get_shortaddr(info->attrs[IEEE802154_ATTR_PAN_ID]);
900 @@ -570,6 +568,9 @@ ieee802154_llsec_parse_key_id(struct genl_info *info,
901 desc->device_addr.mode = IEEE802154_ADDR_SHORT;
902 desc->device_addr.short_addr = nla_get_shortaddr(info->attrs[IEEE802154_ATTR_SHORT_ADDR]);
903 } else {
904 + if (!info->attrs[IEEE802154_ATTR_HW_ADDR])
905 + return -EINVAL;
906 +
907 desc->device_addr.mode = IEEE802154_ADDR_LONG;
908 desc->device_addr.extended_addr = nla_get_hwaddr(info->attrs[IEEE802154_ATTR_HW_ADDR]);
909 }
910 diff --git a/net/ieee802154/nl802154.c b/net/ieee802154/nl802154.c
911 index d90a4ed5b8a03..f07a208ae21fe 100644
912 --- a/net/ieee802154/nl802154.c
913 +++ b/net/ieee802154/nl802154.c
914 @@ -851,8 +851,13 @@ nl802154_send_iface(struct sk_buff *msg, u32 portid, u32 seq, int flags,
915 goto nla_put_failure;
916
917 #ifdef CONFIG_IEEE802154_NL802154_EXPERIMENTAL
918 + if (wpan_dev->iftype == NL802154_IFTYPE_MONITOR)
919 + goto out;
920 +
921 if (nl802154_get_llsec_params(msg, rdev, wpan_dev) < 0)
922 goto nla_put_failure;
923 +
924 +out:
925 #endif /* CONFIG_IEEE802154_NL802154_EXPERIMENTAL */
926
927 genlmsg_end(msg, hdr);
928 @@ -1417,6 +1422,9 @@ static int nl802154_set_llsec_params(struct sk_buff *skb,
929 u32 changed = 0;
930 int ret;
931
932 + if (wpan_dev->iftype == NL802154_IFTYPE_MONITOR)
933 + return -EOPNOTSUPP;
934 +
935 if (info->attrs[NL802154_ATTR_SEC_ENABLED]) {
936 u8 enabled;
937
938 @@ -1577,7 +1585,8 @@ static int nl802154_add_llsec_key(struct sk_buff *skb, struct genl_info *info)
939 struct ieee802154_llsec_key_id id = { };
940 u32 commands[NL802154_CMD_FRAME_NR_IDS / 32] = { };
941
942 - if (nla_parse_nested(attrs, NL802154_KEY_ATTR_MAX,
943 + if (!info->attrs[NL802154_ATTR_SEC_KEY] ||
944 + nla_parse_nested(attrs, NL802154_KEY_ATTR_MAX,
945 info->attrs[NL802154_ATTR_SEC_KEY],
946 nl802154_key_policy))
947 return -EINVAL;
948 @@ -1627,7 +1636,8 @@ static int nl802154_del_llsec_key(struct sk_buff *skb, struct genl_info *info)
949 struct nlattr *attrs[NL802154_KEY_ATTR_MAX + 1];
950 struct ieee802154_llsec_key_id id;
951
952 - if (nla_parse_nested(attrs, NL802154_KEY_ATTR_MAX,
953 + if (!info->attrs[NL802154_ATTR_SEC_KEY] ||
954 + nla_parse_nested(attrs, NL802154_KEY_ATTR_MAX,
955 info->attrs[NL802154_ATTR_SEC_KEY],
956 nl802154_key_policy))
957 return -EINVAL;
958 @@ -1795,7 +1805,8 @@ static int nl802154_del_llsec_dev(struct sk_buff *skb, struct genl_info *info)
959 struct nlattr *attrs[NL802154_DEV_ATTR_MAX + 1];
960 __le64 extended_addr;
961
962 - if (nla_parse_nested(attrs, NL802154_DEV_ATTR_MAX,
963 + if (!info->attrs[NL802154_ATTR_SEC_DEVICE] ||
964 + nla_parse_nested(attrs, NL802154_DEV_ATTR_MAX,
965 info->attrs[NL802154_ATTR_SEC_DEVICE],
966 nl802154_dev_policy))
967 return -EINVAL;
968 @@ -1955,7 +1966,8 @@ static int nl802154_del_llsec_devkey(struct sk_buff *skb, struct genl_info *info
969 struct ieee802154_llsec_device_key key;
970 __le64 extended_addr;
971
972 - if (nla_parse_nested(attrs, NL802154_DEVKEY_ATTR_MAX,
973 + if (!info->attrs[NL802154_ATTR_SEC_DEVKEY] ||
974 + nla_parse_nested(attrs, NL802154_DEVKEY_ATTR_MAX,
975 info->attrs[NL802154_ATTR_SEC_DEVKEY],
976 nl802154_devkey_policy))
977 return -EINVAL;
978 @@ -2130,6 +2142,9 @@ static int nl802154_del_llsec_seclevel(struct sk_buff *skb,
979 struct wpan_dev *wpan_dev = dev->ieee802154_ptr;
980 struct ieee802154_llsec_seclevel sl;
981
982 + if (wpan_dev->iftype == NL802154_IFTYPE_MONITOR)
983 + return -EOPNOTSUPP;
984 +
985 if (!info->attrs[NL802154_ATTR_SEC_LEVEL] ||
986 llsec_parse_seclevel(info->attrs[NL802154_ATTR_SEC_LEVEL],
987 &sl) < 0)
988 diff --git a/net/ipv4/netfilter/arp_tables.c b/net/ipv4/netfilter/arp_tables.c
989 index e02b862651942..5cb5a2957cb27 100644
990 --- a/net/ipv4/netfilter/arp_tables.c
991 +++ b/net/ipv4/netfilter/arp_tables.c
992 @@ -1209,6 +1209,8 @@ static int translate_compat_table(struct net *net,
993 if (!newinfo)
994 goto out_unlock;
995
996 + memset(newinfo->entries, 0, size);
997 +
998 newinfo->number = compatr->num_entries;
999 for (i = 0; i < NF_ARP_NUMHOOKS; i++) {
1000 newinfo->hook_entry[i] = compatr->hook_entry[i];
1001 diff --git a/net/ipv4/netfilter/ip_tables.c b/net/ipv4/netfilter/ip_tables.c
1002 index 4822459e8f425..9bee964c6a4be 100644
1003 --- a/net/ipv4/netfilter/ip_tables.c
1004 +++ b/net/ipv4/netfilter/ip_tables.c
1005 @@ -1451,6 +1451,8 @@ translate_compat_table(struct net *net,
1006 if (!newinfo)
1007 goto out_unlock;
1008
1009 + memset(newinfo->entries, 0, size);
1010 +
1011 newinfo->number = compatr->num_entries;
1012 for (i = 0; i < NF_INET_NUMHOOKS; i++) {
1013 newinfo->hook_entry[i] = compatr->hook_entry[i];
1014 diff --git a/net/ipv6/netfilter/ip6_tables.c b/net/ipv6/netfilter/ip6_tables.c
1015 index 21cad30e4546b..579fda1bc45df 100644
1016 --- a/net/ipv6/netfilter/ip6_tables.c
1017 +++ b/net/ipv6/netfilter/ip6_tables.c
1018 @@ -1476,6 +1476,8 @@ translate_compat_table(struct net *net,
1019 if (!newinfo)
1020 goto out_unlock;
1021
1022 + memset(newinfo->entries, 0, size);
1023 +
1024 newinfo->number = compatr->num_entries;
1025 for (i = 0; i < NF_INET_NUMHOOKS; i++) {
1026 newinfo->hook_entry[i] = compatr->hook_entry[i];
1027 diff --git a/net/ipv6/route.c b/net/ipv6/route.c
1028 index 03d1a61b4729a..70c37951b3f62 100644
1029 --- a/net/ipv6/route.c
1030 +++ b/net/ipv6/route.c
1031 @@ -3069,9 +3069,11 @@ static int ip6_route_multipath_add(struct fib6_config *cfg)
1032 * nexthops have been replaced by first new, the rest should
1033 * be added to it.
1034 */
1035 - cfg->fc_nlinfo.nlh->nlmsg_flags &= ~(NLM_F_EXCL |
1036 - NLM_F_REPLACE);
1037 - cfg->fc_nlinfo.nlh->nlmsg_flags |= NLM_F_CREATE;
1038 + if (cfg->fc_nlinfo.nlh) {
1039 + cfg->fc_nlinfo.nlh->nlmsg_flags &= ~(NLM_F_EXCL |
1040 + NLM_F_REPLACE);
1041 + cfg->fc_nlinfo.nlh->nlmsg_flags |= NLM_F_CREATE;
1042 + }
1043 nhn++;
1044 }
1045
1046 diff --git a/net/mac802154/llsec.c b/net/mac802154/llsec.c
1047 index 6a3e1c2181d3a..9e885d94e5157 100644
1048 --- a/net/mac802154/llsec.c
1049 +++ b/net/mac802154/llsec.c
1050 @@ -158,7 +158,7 @@ err_tfm0:
1051 crypto_free_skcipher(key->tfm0);
1052 err_tfm:
1053 for (i = 0; i < ARRAY_SIZE(key->tfm); i++)
1054 - if (key->tfm[i])
1055 + if (!IS_ERR_OR_NULL(key->tfm[i]))
1056 crypto_free_aead(key->tfm[i]);
1057
1058 kzfree(key);
1059 diff --git a/net/netfilter/x_tables.c b/net/netfilter/x_tables.c
1060 index cef5674ea434c..059f9fa0f6c91 100644
1061 --- a/net/netfilter/x_tables.c
1062 +++ b/net/netfilter/x_tables.c
1063 @@ -569,7 +569,7 @@ void xt_compat_match_from_user(struct xt_entry_match *m, void **dstptr,
1064 {
1065 const struct xt_match *match = m->u.kernel.match;
1066 struct compat_xt_entry_match *cm = (struct compat_xt_entry_match *)m;
1067 - int pad, off = xt_compat_match_offset(match);
1068 + int off = xt_compat_match_offset(match);
1069 u_int16_t msize = cm->u.user.match_size;
1070 char name[sizeof(m->u.user.name)];
1071
1072 @@ -579,9 +579,6 @@ void xt_compat_match_from_user(struct xt_entry_match *m, void **dstptr,
1073 match->compat_from_user(m->data, cm->data);
1074 else
1075 memcpy(m->data, cm->data, msize - sizeof(*cm));
1076 - pad = XT_ALIGN(match->matchsize) - match->matchsize;
1077 - if (pad > 0)
1078 - memset(m->data + match->matchsize, 0, pad);
1079
1080 msize += off;
1081 m->u.user.match_size = msize;
1082 @@ -927,7 +924,7 @@ void xt_compat_target_from_user(struct xt_entry_target *t, void **dstptr,
1083 {
1084 const struct xt_target *target = t->u.kernel.target;
1085 struct compat_xt_entry_target *ct = (struct compat_xt_entry_target *)t;
1086 - int pad, off = xt_compat_target_offset(target);
1087 + int off = xt_compat_target_offset(target);
1088 u_int16_t tsize = ct->u.user.target_size;
1089 char name[sizeof(t->u.user.name)];
1090
1091 @@ -937,9 +934,6 @@ void xt_compat_target_from_user(struct xt_entry_target *t, void **dstptr,
1092 target->compat_from_user(t->data, ct->data);
1093 else
1094 memcpy(t->data, ct->data, tsize - sizeof(*ct));
1095 - pad = XT_ALIGN(target->targetsize) - target->targetsize;
1096 - if (pad > 0)
1097 - memset(t->data + target->targetsize, 0, pad);
1098
1099 tsize += off;
1100 t->u.user.target_size = tsize;
1101 diff --git a/net/nfc/llcp_sock.c b/net/nfc/llcp_sock.c
1102 index dd59fde1dac83..c2bc0f0f04786 100644
1103 --- a/net/nfc/llcp_sock.c
1104 +++ b/net/nfc/llcp_sock.c
1105 @@ -119,11 +119,13 @@ static int llcp_sock_bind(struct socket *sock, struct sockaddr *addr, int alen)
1106 llcp_sock->service_name_len,
1107 GFP_KERNEL);
1108 if (!llcp_sock->service_name) {
1109 + nfc_llcp_local_put(llcp_sock->local);
1110 ret = -ENOMEM;
1111 goto put_dev;
1112 }
1113 llcp_sock->ssap = nfc_llcp_get_sdp_ssap(local, llcp_sock);
1114 if (llcp_sock->ssap == LLCP_SAP_MAX) {
1115 + nfc_llcp_local_put(llcp_sock->local);
1116 kfree(llcp_sock->service_name);
1117 llcp_sock->service_name = NULL;
1118 ret = -EADDRINUSE;
1119 @@ -683,6 +685,10 @@ static int llcp_sock_connect(struct socket *sock, struct sockaddr *_addr,
1120 ret = -EISCONN;
1121 goto error;
1122 }
1123 + if (sk->sk_state == LLCP_CONNECTING) {
1124 + ret = -EINPROGRESS;
1125 + goto error;
1126 + }
1127
1128 dev = nfc_get_device(addr->dev_idx);
1129 if (dev == NULL) {
1130 @@ -714,6 +720,7 @@ static int llcp_sock_connect(struct socket *sock, struct sockaddr *_addr,
1131 llcp_sock->local = nfc_llcp_local_get(local);
1132 llcp_sock->ssap = nfc_llcp_get_local_ssap(local);
1133 if (llcp_sock->ssap == LLCP_SAP_MAX) {
1134 + nfc_llcp_local_put(llcp_sock->local);
1135 ret = -ENOMEM;
1136 goto put_dev;
1137 }
1138 @@ -751,8 +758,11 @@ static int llcp_sock_connect(struct socket *sock, struct sockaddr *_addr,
1139
1140 sock_unlink:
1141 nfc_llcp_put_ssap(local, llcp_sock->ssap);
1142 + nfc_llcp_local_put(llcp_sock->local);
1143
1144 nfc_llcp_sock_unlink(&local->connecting_sockets, sk);
1145 + kfree(llcp_sock->service_name);
1146 + llcp_sock->service_name = NULL;
1147
1148 put_dev:
1149 nfc_put_device(dev);
1150 diff --git a/net/sched/sch_teql.c b/net/sched/sch_teql.c
1151 index 2cd9b4478b92f..90e440c468035 100644
1152 --- a/net/sched/sch_teql.c
1153 +++ b/net/sched/sch_teql.c
1154 @@ -138,6 +138,9 @@ teql_destroy(struct Qdisc *sch)
1155 struct teql_sched_data *dat = qdisc_priv(sch);
1156 struct teql_master *master = dat->m;
1157
1158 + if (!master)
1159 + return;
1160 +
1161 prev = master->slaves;
1162 if (prev) {
1163 do {
1164 diff --git a/net/tipc/socket.c b/net/tipc/socket.c
1165 index 57df99ca6347c..804cab8f95090 100644
1166 --- a/net/tipc/socket.c
1167 +++ b/net/tipc/socket.c
1168 @@ -741,7 +741,7 @@ void tipc_sk_mcast_rcv(struct net *net, struct sk_buff_head *arrvq,
1169 spin_lock_bh(&inputq->lock);
1170 if (skb_peek(arrvq) == skb) {
1171 skb_queue_splice_tail_init(&tmpq, inputq);
1172 - kfree_skb(__skb_dequeue(arrvq));
1173 + __skb_dequeue(arrvq);
1174 }
1175 spin_unlock_bh(&inputq->lock);
1176 __skb_queue_purge(&tmpq);
1177 diff --git a/net/wireless/sme.c b/net/wireless/sme.c
1178 index 6fd24f6435c3a..ce6823646f635 100644
1179 --- a/net/wireless/sme.c
1180 +++ b/net/wireless/sme.c
1181 @@ -512,7 +512,7 @@ static int cfg80211_sme_connect(struct wireless_dev *wdev,
1182 cfg80211_sme_free(wdev);
1183 }
1184
1185 - if (WARN_ON(wdev->conn))
1186 + if (wdev->conn)
1187 return -EINPROGRESS;
1188
1189 wdev->conn = kzalloc(sizeof(*wdev->conn), GFP_KERNEL);
1190 diff --git a/sound/drivers/aloop.c b/sound/drivers/aloop.c
1191 index 847f70348d4d5..cc600aa0f6c78 100644
1192 --- a/sound/drivers/aloop.c
1193 +++ b/sound/drivers/aloop.c
1194 @@ -1062,6 +1062,14 @@ static int loopback_mixer_new(struct loopback *loopback, int notify)
1195 return -ENOMEM;
1196 kctl->id.device = dev;
1197 kctl->id.subdevice = substr;
1198 +
1199 + /* Add the control before copying the id so that
1200 + * the numid field of the id is set in the copy.
1201 + */
1202 + err = snd_ctl_add(card, kctl);
1203 + if (err < 0)
1204 + return err;
1205 +
1206 switch (idx) {
1207 case ACTIVE_IDX:
1208 setup->active_id = kctl->id;
1209 @@ -1078,9 +1086,6 @@ static int loopback_mixer_new(struct loopback *loopback, int notify)
1210 default:
1211 break;
1212 }
1213 - err = snd_ctl_add(card, kctl);
1214 - if (err < 0)
1215 - return err;
1216 }
1217 }
1218 }
1219 diff --git a/sound/soc/intel/atom/sst-mfld-platform-pcm.c b/sound/soc/intel/atom/sst-mfld-platform-pcm.c
1220 index dc1b9a32c0575..d812cbf41b944 100644
1221 --- a/sound/soc/intel/atom/sst-mfld-platform-pcm.c
1222 +++ b/sound/soc/intel/atom/sst-mfld-platform-pcm.c
1223 @@ -508,14 +508,14 @@ static struct snd_soc_dai_driver sst_platform_dai[] = {
1224 .channels_min = SST_STEREO,
1225 .channels_max = SST_STEREO,
1226 .rates = SNDRV_PCM_RATE_44100|SNDRV_PCM_RATE_48000,
1227 - .formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE,
1228 + .formats = SNDRV_PCM_FMTBIT_S16_LE,
1229 },
1230 .capture = {
1231 .stream_name = "Headset Capture",
1232 .channels_min = 1,
1233 .channels_max = 2,
1234 .rates = SNDRV_PCM_RATE_44100|SNDRV_PCM_RATE_48000,
1235 - .formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE,
1236 + .formats = SNDRV_PCM_FMTBIT_S16_LE,
1237 },
1238 },
1239 {
1240 @@ -526,7 +526,7 @@ static struct snd_soc_dai_driver sst_platform_dai[] = {
1241 .channels_min = SST_STEREO,
1242 .channels_max = SST_STEREO,
1243 .rates = SNDRV_PCM_RATE_44100|SNDRV_PCM_RATE_48000,
1244 - .formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE,
1245 + .formats = SNDRV_PCM_FMTBIT_S16_LE,
1246 },
1247 },
1248 {
1249 diff --git a/tools/perf/util/map.c b/tools/perf/util/map.c
1250 index ab8ebfa2159d8..2593b7c28de77 100644
1251 --- a/tools/perf/util/map.c
1252 +++ b/tools/perf/util/map.c
1253 @@ -91,8 +91,7 @@ static inline bool replace_android_lib(const char *filename, char *newfilename)
1254 if (!strncmp(filename, "/system/lib/", 12)) {
1255 char *ndk, *app;
1256 const char *arch;
1257 - size_t ndk_length;
1258 - size_t app_length;
1259 + int ndk_length, app_length;
1260
1261 ndk = getenv("NDK_ROOT");
1262 app = getenv("APP_PLATFORM");
1263 @@ -120,8 +119,8 @@ static inline bool replace_android_lib(const char *filename, char *newfilename)
1264 if (new_length > PATH_MAX)
1265 return false;
1266 snprintf(newfilename, new_length,
1267 - "%s/platforms/%s/arch-%s/usr/lib/%s",
1268 - ndk, app, arch, libname);
1269 + "%.*s/platforms/%.*s/arch-%s/usr/lib/%s",
1270 + ndk_length, ndk, app_length, app, arch, libname);
1271
1272 return true;
1273 }