Magellan Linux

Annotation of /trunk/kernel-alx-legacy/patches-4.9/0388-4.9.289-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3690 - (hide annotations) (download)
Mon Oct 24 14:08:05 2022 UTC (18 months, 3 weeks ago) by niro
File size: 17917 byte(s)
-linux-4.9.289
1 niro 3690 diff --git a/Makefile b/Makefile
2     index 49568e384a924..76e6507e4145f 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,6 +1,6 @@
6     VERSION = 4
7     PATCHLEVEL = 9
8     -SUBLEVEL = 288
9     +SUBLEVEL = 289
10     EXTRAVERSION =
11     NAME = Roaring Lionus
12    
13     diff --git a/arch/arm/Makefile b/arch/arm/Makefile
14     index 975b110e7d87a..d9a2fcd33bc60 100644
15     --- a/arch/arm/Makefile
16     +++ b/arch/arm/Makefile
17     @@ -13,7 +13,7 @@
18     # Ensure linker flags are correct
19     LDFLAGS :=
20    
21     -LDFLAGS_vmlinux :=-p --no-undefined -X --pic-veneer
22     +LDFLAGS_vmlinux := --no-undefined -X --pic-veneer
23     ifeq ($(CONFIG_CPU_ENDIAN_BE8),y)
24     LDFLAGS_vmlinux += --be8
25     LDFLAGS_MODULE += --be8
26     diff --git a/arch/arm/boot/bootp/Makefile b/arch/arm/boot/bootp/Makefile
27     index 5e4acd253b300..8d1e31b4ba941 100644
28     --- a/arch/arm/boot/bootp/Makefile
29     +++ b/arch/arm/boot/bootp/Makefile
30     @@ -7,7 +7,7 @@
31    
32     GCOV_PROFILE := n
33    
34     -LDFLAGS_bootp :=-p --no-undefined -X \
35     +LDFLAGS_bootp := --no-undefined -X \
36     --defsym initrd_phys=$(INITRD_PHYS) \
37     --defsym params_phys=$(PARAMS_PHYS) -T
38     AFLAGS_initrd.o :=-DINITRD=\"$(INITRD)\"
39     diff --git a/arch/arm/boot/compressed/Makefile b/arch/arm/boot/compressed/Makefile
40     index 2f3ba4d9683c3..561dbc0ee2ba0 100644
41     --- a/arch/arm/boot/compressed/Makefile
42     +++ b/arch/arm/boot/compressed/Makefile
43     @@ -128,8 +128,6 @@ endif
44     ifeq ($(CONFIG_CPU_ENDIAN_BE8),y)
45     LDFLAGS_vmlinux += --be8
46     endif
47     -# ?
48     -LDFLAGS_vmlinux += -p
49     # Report unresolved symbol references
50     LDFLAGS_vmlinux += --no-undefined
51     # Delete all temporary local symbols
52     diff --git a/arch/arm/boot/compressed/decompress.c b/arch/arm/boot/compressed/decompress.c
53     index a0765e7ed6c7d..b0255cbf3b766 100644
54     --- a/arch/arm/boot/compressed/decompress.c
55     +++ b/arch/arm/boot/compressed/decompress.c
56     @@ -46,7 +46,10 @@ extern char * strstr(const char * s1, const char *s2);
57     #endif
58    
59     #ifdef CONFIG_KERNEL_XZ
60     +/* Prevent KASAN override of string helpers in decompressor */
61     +#undef memmove
62     #define memmove memmove
63     +#undef memcpy
64     #define memcpy memcpy
65     #include "../../../../lib/decompress_unxz.c"
66     #endif
67     diff --git a/arch/arm/mm/proc-macros.S b/arch/arm/mm/proc-macros.S
68     index 796e8f675a936..422162f1b9802 100644
69     --- a/arch/arm/mm/proc-macros.S
70     +++ b/arch/arm/mm/proc-macros.S
71     @@ -343,6 +343,7 @@ ENTRY(\name\()_cache_fns)
72    
73     .macro define_tlb_functions name:req, flags_up:req, flags_smp
74     .type \name\()_tlb_fns, #object
75     + .align 2
76     ENTRY(\name\()_tlb_fns)
77     .long \name\()_flush_user_tlb_range
78     .long \name\()_flush_kern_tlb_range
79     diff --git a/arch/arm/probes/kprobes/core.c b/arch/arm/probes/kprobes/core.c
80     index c3362ddd6c4cb..bc7a5dbaf423f 100644
81     --- a/arch/arm/probes/kprobes/core.c
82     +++ b/arch/arm/probes/kprobes/core.c
83     @@ -666,7 +666,7 @@ static struct undef_hook kprobes_arm_break_hook = {
84    
85     #endif /* !CONFIG_THUMB2_KERNEL */
86    
87     -int __init arch_init_kprobes()
88     +int __init arch_init_kprobes(void)
89     {
90     arm_probes_decode_init();
91     #ifdef CONFIG_THUMB2_KERNEL
92     diff --git a/arch/nios2/platform/Kconfig.platform b/arch/nios2/platform/Kconfig.platform
93     index d3e5df9fb36bd..78ffc0bf4ebed 100644
94     --- a/arch/nios2/platform/Kconfig.platform
95     +++ b/arch/nios2/platform/Kconfig.platform
96     @@ -37,6 +37,7 @@ config NIOS2_DTB_PHYS_ADDR
97    
98     config NIOS2_DTB_SOURCE_BOOL
99     bool "Compile and link device tree into kernel image"
100     + depends on !COMPILE_TEST
101     default n
102     help
103     This allows you to specify a dts (device tree source) file
104     diff --git a/arch/powerpc/net/bpf_jit_comp64.c b/arch/powerpc/net/bpf_jit_comp64.c
105     index 888ee95340da2..e08e55cd98e6f 100644
106     --- a/arch/powerpc/net/bpf_jit_comp64.c
107     +++ b/arch/powerpc/net/bpf_jit_comp64.c
108     @@ -430,8 +430,14 @@ static int bpf_jit_build_body(struct bpf_prog *fp, u32 *image,
109     case BPF_ALU64 | BPF_DIV | BPF_K: /* dst /= imm */
110     if (imm == 0)
111     return -EINVAL;
112     - else if (imm == 1)
113     - goto bpf_alu32_trunc;
114     + if (imm == 1) {
115     + if (BPF_OP(code) == BPF_DIV) {
116     + goto bpf_alu32_trunc;
117     + } else {
118     + PPC_LI(dst_reg, 0);
119     + break;
120     + }
121     + }
122    
123     PPC_LI32(b2p[TMP_REG_1], imm);
124     switch (BPF_CLASS(code)) {
125     diff --git a/drivers/ata/sata_mv.c b/drivers/ata/sata_mv.c
126     index ded3a66049d2c..6007ebb80f886 100644
127     --- a/drivers/ata/sata_mv.c
128     +++ b/drivers/ata/sata_mv.c
129     @@ -3907,8 +3907,8 @@ static int mv_chip_id(struct ata_host *host, unsigned int board_idx)
130     break;
131    
132     default:
133     - dev_err(host->dev, "BUG: invalid board index %u\n", board_idx);
134     - return 1;
135     + dev_alert(host->dev, "BUG: invalid board index %u\n", board_idx);
136     + return -EINVAL;
137     }
138    
139     hpriv->hp_flags = hp_flags;
140     diff --git a/drivers/base/regmap/regcache-rbtree.c b/drivers/base/regmap/regcache-rbtree.c
141     index b11af3f2c1dbf..c0fdbb3927586 100644
142     --- a/drivers/base/regmap/regcache-rbtree.c
143     +++ b/drivers/base/regmap/regcache-rbtree.c
144     @@ -296,14 +296,14 @@ static int regcache_rbtree_insert_to_block(struct regmap *map,
145     if (!blk)
146     return -ENOMEM;
147    
148     + rbnode->block = blk;
149     +
150     if (BITS_TO_LONGS(blklen) > BITS_TO_LONGS(rbnode->blklen)) {
151     present = krealloc(rbnode->cache_present,
152     BITS_TO_LONGS(blklen) * sizeof(*present),
153     GFP_KERNEL);
154     - if (!present) {
155     - kfree(blk);
156     + if (!present)
157     return -ENOMEM;
158     - }
159    
160     memset(present + BITS_TO_LONGS(rbnode->blklen), 0,
161     (BITS_TO_LONGS(blklen) - BITS_TO_LONGS(rbnode->blklen))
162     @@ -320,7 +320,6 @@ static int regcache_rbtree_insert_to_block(struct regmap *map,
163     }
164    
165     /* update the rbnode block, its size and the base register */
166     - rbnode->block = blk;
167     rbnode->blklen = blklen;
168     rbnode->base_reg = base_reg;
169     rbnode->cache_present = present;
170     diff --git a/drivers/mmc/host/dw_mmc-exynos.c b/drivers/mmc/host/dw_mmc-exynos.c
171     index 7ab3d749b5aee..48aed0dc84a58 100644
172     --- a/drivers/mmc/host/dw_mmc-exynos.c
173     +++ b/drivers/mmc/host/dw_mmc-exynos.c
174     @@ -440,6 +440,18 @@ static s8 dw_mci_exynos_get_best_clksmpl(u8 candiates)
175     }
176     }
177    
178     + /*
179     + * If there is no cadiates value, then it needs to return -EIO.
180     + * If there are candiates values and don't find bset clk sample value,
181     + * then use a first candiates clock sample value.
182     + */
183     + for (i = 0; i < iter; i++) {
184     + __c = ror8(candiates, i);
185     + if ((__c & 0x1) == 0x1) {
186     + loc = i;
187     + goto out;
188     + }
189     + }
190     out:
191     return loc;
192     }
193     @@ -470,6 +482,8 @@ static int dw_mci_exynos_execute_tuning(struct dw_mci_slot *slot, u32 opcode)
194     priv->tuned_sample = found;
195     } else {
196     ret = -EIO;
197     + dev_warn(&mmc->class_dev,
198     + "There is no candiates value about clksmpl!\n");
199     }
200    
201     return ret;
202     diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
203     index 0325083b10493..560b2996911ac 100644
204     --- a/drivers/mmc/host/sdhci.c
205     +++ b/drivers/mmc/host/sdhci.c
206     @@ -1421,6 +1421,12 @@ void sdhci_set_power_noreg(struct sdhci_host *host, unsigned char mode,
207     break;
208     case MMC_VDD_32_33:
209     case MMC_VDD_33_34:
210     + /*
211     + * 3.4 ~ 3.6V are valid only for those platforms where it's
212     + * known that the voltage range is supported by hardware.
213     + */
214     + case MMC_VDD_34_35:
215     + case MMC_VDD_35_36:
216     pwr = SDHCI_POWER_330;
217     break;
218     default:
219     diff --git a/drivers/mmc/host/vub300.c b/drivers/mmc/host/vub300.c
220     index a3e4288e5391b..875e438ab9738 100644
221     --- a/drivers/mmc/host/vub300.c
222     +++ b/drivers/mmc/host/vub300.c
223     @@ -579,7 +579,7 @@ static void check_vub300_port_status(struct vub300_mmc_host *vub300)
224     GET_SYSTEM_PORT_STATUS,
225     USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
226     0x0000, 0x0000, &vub300->system_port_status,
227     - sizeof(vub300->system_port_status), HZ);
228     + sizeof(vub300->system_port_status), 1000);
229     if (sizeof(vub300->system_port_status) == retval)
230     new_system_port_status(vub300);
231     }
232     @@ -1245,7 +1245,7 @@ static void __download_offload_pseudocode(struct vub300_mmc_host *vub300,
233     SET_INTERRUPT_PSEUDOCODE,
234     USB_DIR_OUT | USB_TYPE_VENDOR |
235     USB_RECIP_DEVICE, 0x0000, 0x0000,
236     - xfer_buffer, xfer_length, HZ);
237     + xfer_buffer, xfer_length, 1000);
238     kfree(xfer_buffer);
239     if (retval < 0) {
240     strncpy(vub300->vub_name,
241     @@ -1292,7 +1292,7 @@ static void __download_offload_pseudocode(struct vub300_mmc_host *vub300,
242     SET_TRANSFER_PSEUDOCODE,
243     USB_DIR_OUT | USB_TYPE_VENDOR |
244     USB_RECIP_DEVICE, 0x0000, 0x0000,
245     - xfer_buffer, xfer_length, HZ);
246     + xfer_buffer, xfer_length, 1000);
247     kfree(xfer_buffer);
248     if (retval < 0) {
249     strncpy(vub300->vub_name,
250     @@ -1998,7 +1998,7 @@ static void __set_clock_speed(struct vub300_mmc_host *vub300, u8 buf[8],
251     usb_control_msg(vub300->udev, usb_sndctrlpipe(vub300->udev, 0),
252     SET_CLOCK_SPEED,
253     USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
254     - 0x00, 0x00, buf, buf_array_size, HZ);
255     + 0x00, 0x00, buf, buf_array_size, 1000);
256     if (retval != 8) {
257     dev_err(&vub300->udev->dev, "SET_CLOCK_SPEED"
258     " %dkHz failed with retval=%d\n", kHzClock, retval);
259     @@ -2020,14 +2020,14 @@ static void vub300_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
260     usb_control_msg(vub300->udev, usb_sndctrlpipe(vub300->udev, 0),
261     SET_SD_POWER,
262     USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
263     - 0x0000, 0x0000, NULL, 0, HZ);
264     + 0x0000, 0x0000, NULL, 0, 1000);
265     /* must wait for the VUB300 u-proc to boot up */
266     msleep(600);
267     } else if ((ios->power_mode == MMC_POWER_UP) && !vub300->card_powered) {
268     usb_control_msg(vub300->udev, usb_sndctrlpipe(vub300->udev, 0),
269     SET_SD_POWER,
270     USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
271     - 0x0001, 0x0000, NULL, 0, HZ);
272     + 0x0001, 0x0000, NULL, 0, 1000);
273     msleep(600);
274     vub300->card_powered = 1;
275     } else if (ios->power_mode == MMC_POWER_ON) {
276     @@ -2288,14 +2288,14 @@ static int vub300_probe(struct usb_interface *interface,
277     GET_HC_INF0,
278     USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
279     0x0000, 0x0000, &vub300->hc_info,
280     - sizeof(vub300->hc_info), HZ);
281     + sizeof(vub300->hc_info), 1000);
282     if (retval < 0)
283     goto error5;
284     retval =
285     usb_control_msg(vub300->udev, usb_sndctrlpipe(vub300->udev, 0),
286     SET_ROM_WAIT_STATES,
287     USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
288     - firmware_rom_wait_states, 0x0000, NULL, 0, HZ);
289     + firmware_rom_wait_states, 0x0000, NULL, 0, 1000);
290     if (retval < 0)
291     goto error5;
292     dev_info(&vub300->udev->dev,
293     @@ -2310,7 +2310,7 @@ static int vub300_probe(struct usb_interface *interface,
294     GET_SYSTEM_PORT_STATUS,
295     USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
296     0x0000, 0x0000, &vub300->system_port_status,
297     - sizeof(vub300->system_port_status), HZ);
298     + sizeof(vub300->system_port_status), 1000);
299     if (retval < 0) {
300     goto error4;
301     } else if (sizeof(vub300->system_port_status) == retval) {
302     diff --git a/drivers/net/ethernet/nxp/lpc_eth.c b/drivers/net/ethernet/nxp/lpc_eth.c
303     index 9b98ec3dcb82e..ad7b9772a4b27 100644
304     --- a/drivers/net/ethernet/nxp/lpc_eth.c
305     +++ b/drivers/net/ethernet/nxp/lpc_eth.c
306     @@ -1039,9 +1039,6 @@ static int lpc_eth_close(struct net_device *ndev)
307     napi_disable(&pldat->napi);
308     netif_stop_queue(ndev);
309    
310     - if (ndev->phydev)
311     - phy_stop(ndev->phydev);
312     -
313     spin_lock_irqsave(&pldat->lock, flags);
314     __lpc_eth_reset(pldat);
315     netif_carrier_off(ndev);
316     @@ -1049,6 +1046,8 @@ static int lpc_eth_close(struct net_device *ndev)
317     writel(0, LPC_ENET_MAC2(pldat->net_base));
318     spin_unlock_irqrestore(&pldat->lock, flags);
319    
320     + if (ndev->phydev)
321     + phy_stop(ndev->phydev);
322     clk_disable_unprepare(pldat->clk);
323    
324     return 0;
325     diff --git a/drivers/net/phy/mdio_bus.c b/drivers/net/phy/mdio_bus.c
326     index 73f97d00ede79..92fb664b56fbb 100644
327     --- a/drivers/net/phy/mdio_bus.c
328     +++ b/drivers/net/phy/mdio_bus.c
329     @@ -326,7 +326,6 @@ int __mdiobus_register(struct mii_bus *bus, struct module *owner)
330     err = device_register(&bus->dev);
331     if (err) {
332     pr_err("mii_bus %s failed to register\n", bus->id);
333     - put_device(&bus->dev);
334     return -EINVAL;
335     }
336    
337     diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c
338     index bca6237597233..bce898ad6e96f 100644
339     --- a/drivers/net/usb/lan78xx.c
340     +++ b/drivers/net/usb/lan78xx.c
341     @@ -3370,6 +3370,12 @@ static int lan78xx_probe(struct usb_interface *intf,
342    
343     dev->maxpacket = usb_maxpacket(dev->udev, dev->pipe_out, 1);
344    
345     + /* Reject broken descriptors. */
346     + if (dev->maxpacket == 0) {
347     + ret = -ENODEV;
348     + goto out3;
349     + }
350     +
351     /* driver requires remote-wakeup capability during autosuspend. */
352     intf->needs_remote_wakeup = 1;
353    
354     diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c
355     index 0b5fd1499ac06..6a004742ec71a 100644
356     --- a/drivers/net/usb/usbnet.c
357     +++ b/drivers/net/usb/usbnet.c
358     @@ -1740,6 +1740,11 @@ usbnet_probe (struct usb_interface *udev, const struct usb_device_id *prod)
359     if (!dev->rx_urb_size)
360     dev->rx_urb_size = dev->hard_mtu;
361     dev->maxpacket = usb_maxpacket (dev->udev, dev->out, 1);
362     + if (dev->maxpacket == 0) {
363     + /* that is a broken device */
364     + status = -ENODEV;
365     + goto out4;
366     + }
367    
368     /* let userspace know we have a random address */
369     if (ether_addr_equal(net->dev_addr, node_id))
370     diff --git a/drivers/nfc/port100.c b/drivers/nfc/port100.c
371     index 151b220381f95..ed65993aae96a 100644
372     --- a/drivers/nfc/port100.c
373     +++ b/drivers/nfc/port100.c
374     @@ -1011,11 +1011,11 @@ static u64 port100_get_command_type_mask(struct port100 *dev)
375    
376     skb = port100_alloc_skb(dev, 0);
377     if (!skb)
378     - return -ENOMEM;
379     + return 0;
380    
381     resp = port100_send_cmd_sync(dev, PORT100_CMD_GET_COMMAND_TYPE, skb);
382     if (IS_ERR(resp))
383     - return PTR_ERR(resp);
384     + return 0;
385    
386     if (resp->len < 8)
387     mask = 0;
388     diff --git a/net/batman-adv/bridge_loop_avoidance.c b/net/batman-adv/bridge_loop_avoidance.c
389     index 516c45771d59b..dc635bd935846 100644
390     --- a/net/batman-adv/bridge_loop_avoidance.c
391     +++ b/net/batman-adv/bridge_loop_avoidance.c
392     @@ -1569,10 +1569,14 @@ int batadv_bla_init(struct batadv_priv *bat_priv)
393     return 0;
394    
395     bat_priv->bla.claim_hash = batadv_hash_new(128);
396     - bat_priv->bla.backbone_hash = batadv_hash_new(32);
397     + if (!bat_priv->bla.claim_hash)
398     + return -ENOMEM;
399    
400     - if (!bat_priv->bla.claim_hash || !bat_priv->bla.backbone_hash)
401     + bat_priv->bla.backbone_hash = batadv_hash_new(32);
402     + if (!bat_priv->bla.backbone_hash) {
403     + batadv_hash_destroy(bat_priv->bla.claim_hash);
404     return -ENOMEM;
405     + }
406    
407     batadv_hash_set_lock_class(bat_priv->bla.claim_hash,
408     &batadv_claim_hash_lock_class_key);
409     diff --git a/net/batman-adv/main.c b/net/batman-adv/main.c
410     index 2c017ab47557b..96b6ab9681cd9 100644
411     --- a/net/batman-adv/main.c
412     +++ b/net/batman-adv/main.c
413     @@ -177,29 +177,41 @@ int batadv_mesh_init(struct net_device *soft_iface)
414     INIT_HLIST_HEAD(&bat_priv->softif_vlan_list);
415     INIT_HLIST_HEAD(&bat_priv->tp_list);
416    
417     - ret = batadv_v_mesh_init(bat_priv);
418     - if (ret < 0)
419     - goto err;
420     -
421     ret = batadv_originator_init(bat_priv);
422     - if (ret < 0)
423     - goto err;
424     + if (ret < 0) {
425     + atomic_set(&bat_priv->mesh_state, BATADV_MESH_DEACTIVATING);
426     + goto err_orig;
427     + }
428    
429     ret = batadv_tt_init(bat_priv);
430     - if (ret < 0)
431     - goto err;
432     + if (ret < 0) {
433     + atomic_set(&bat_priv->mesh_state, BATADV_MESH_DEACTIVATING);
434     + goto err_tt;
435     + }
436     +
437     + ret = batadv_v_mesh_init(bat_priv);
438     + if (ret < 0) {
439     + atomic_set(&bat_priv->mesh_state, BATADV_MESH_DEACTIVATING);
440     + goto err_v;
441     + }
442    
443     ret = batadv_bla_init(bat_priv);
444     - if (ret < 0)
445     - goto err;
446     + if (ret < 0) {
447     + atomic_set(&bat_priv->mesh_state, BATADV_MESH_DEACTIVATING);
448     + goto err_bla;
449     + }
450    
451     ret = batadv_dat_init(bat_priv);
452     - if (ret < 0)
453     - goto err;
454     + if (ret < 0) {
455     + atomic_set(&bat_priv->mesh_state, BATADV_MESH_DEACTIVATING);
456     + goto err_dat;
457     + }
458    
459     ret = batadv_nc_mesh_init(bat_priv);
460     - if (ret < 0)
461     - goto err;
462     + if (ret < 0) {
463     + atomic_set(&bat_priv->mesh_state, BATADV_MESH_DEACTIVATING);
464     + goto err_nc;
465     + }
466    
467     batadv_gw_init(bat_priv);
468     batadv_mcast_init(bat_priv);
469     @@ -209,8 +221,20 @@ int batadv_mesh_init(struct net_device *soft_iface)
470    
471     return 0;
472    
473     -err:
474     - batadv_mesh_free(soft_iface);
475     +err_nc:
476     + batadv_dat_free(bat_priv);
477     +err_dat:
478     + batadv_bla_free(bat_priv);
479     +err_bla:
480     + batadv_v_mesh_free(bat_priv);
481     +err_v:
482     + batadv_tt_free(bat_priv);
483     +err_tt:
484     + batadv_originator_free(bat_priv);
485     +err_orig:
486     + batadv_purge_outstanding_packets(bat_priv, NULL);
487     + atomic_set(&bat_priv->mesh_state, BATADV_MESH_INACTIVE);
488     +
489     return ret;
490     }
491    
492     diff --git a/net/batman-adv/network-coding.c b/net/batman-adv/network-coding.c
493     index 09549885cd147..b0a85bd72afca 100644
494     --- a/net/batman-adv/network-coding.c
495     +++ b/net/batman-adv/network-coding.c
496     @@ -166,8 +166,10 @@ int batadv_nc_mesh_init(struct batadv_priv *bat_priv)
497     &batadv_nc_coding_hash_lock_class_key);
498    
499     bat_priv->nc.decoding_hash = batadv_hash_new(128);
500     - if (!bat_priv->nc.decoding_hash)
501     + if (!bat_priv->nc.decoding_hash) {
502     + batadv_hash_destroy(bat_priv->nc.coding_hash);
503     goto err;
504     + }
505    
506     batadv_hash_set_lock_class(bat_priv->nc.decoding_hash,
507     &batadv_nc_decoding_hash_lock_class_key);
508     diff --git a/net/batman-adv/translation-table.c b/net/batman-adv/translation-table.c
509     index 607d8bac83760..6e9844e73bac3 100644
510     --- a/net/batman-adv/translation-table.c
511     +++ b/net/batman-adv/translation-table.c
512     @@ -4373,8 +4373,10 @@ int batadv_tt_init(struct batadv_priv *bat_priv)
513     return ret;
514    
515     ret = batadv_tt_global_init(bat_priv);
516     - if (ret < 0)
517     + if (ret < 0) {
518     + batadv_tt_local_table_free(bat_priv);
519     return ret;
520     + }
521    
522     batadv_tvlv_handler_register(bat_priv, batadv_tt_tvlv_ogm_handler_v1,
523     batadv_tt_tvlv_unicast_handler_v1,
524     diff --git a/net/sctp/sm_statefuns.c b/net/sctp/sm_statefuns.c
525     index 9045f6bcb34c4..f71991520ad69 100644
526     --- a/net/sctp/sm_statefuns.c
527     +++ b/net/sctp/sm_statefuns.c
528     @@ -4333,6 +4333,9 @@ sctp_disposition_t sctp_sf_violation(struct net *net,
529     {
530     struct sctp_chunk *chunk = arg;
531    
532     + if (!sctp_vtag_verify(chunk, asoc))
533     + return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands);
534     +
535     /* Make sure that the chunk has a valid length. */
536     if (!sctp_chunk_length_valid(chunk, sizeof(sctp_chunkhdr_t)))
537     return sctp_sf_violation_chunklen(net, ep, asoc, type, arg,
538     @@ -6018,6 +6021,7 @@ static struct sctp_packet *sctp_ootb_pkt_new(struct net *net,
539     * yet.
540     */
541     switch (chunk->chunk_hdr->type) {
542     + case SCTP_CID_INIT:
543     case SCTP_CID_INIT_ACK:
544     {
545     sctp_initack_chunk_t *initack;