Magellan Linux

Contents of /trunk/kernel-alx/patches-5.4/0256-5.4.157-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3635 - (show annotations) (download)
Mon Oct 24 12:34:12 2022 UTC (18 months, 1 week ago) by niro
File size: 54691 byte(s)
-sync kernel patches
1 diff --git a/Makefile b/Makefile
2 index ced1f0fd48dc6..49d639fe5a801 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,7 +1,7 @@
6 # SPDX-License-Identifier: GPL-2.0
7 VERSION = 5
8 PATCHLEVEL = 4
9 -SUBLEVEL = 156
10 +SUBLEVEL = 157
11 EXTRAVERSION =
12 NAME = Kleptomaniac Octopus
13
14 diff --git a/arch/arm/boot/compressed/decompress.c b/arch/arm/boot/compressed/decompress.c
15 index aa075d8372ea2..74255e8198314 100644
16 --- a/arch/arm/boot/compressed/decompress.c
17 +++ b/arch/arm/boot/compressed/decompress.c
18 @@ -47,7 +47,10 @@ extern char * strchrnul(const char *, int);
19 #endif
20
21 #ifdef CONFIG_KERNEL_XZ
22 +/* Prevent KASAN override of string helpers in decompressor */
23 +#undef memmove
24 #define memmove memmove
25 +#undef memcpy
26 #define memcpy memcpy
27 #include "../../../../lib/decompress_unxz.c"
28 #endif
29 diff --git a/arch/arm/kernel/vmlinux-xip.lds.S b/arch/arm/kernel/vmlinux-xip.lds.S
30 index 8c74037ade229..b1f366df620b0 100644
31 --- a/arch/arm/kernel/vmlinux-xip.lds.S
32 +++ b/arch/arm/kernel/vmlinux-xip.lds.S
33 @@ -180,7 +180,7 @@ ASSERT(__hyp_idmap_text_end - (__hyp_idmap_text_start & PAGE_MASK) <= PAGE_SIZE,
34 ASSERT((_end - __bss_start) >= 12288, ".bss too small for CONFIG_XIP_DEFLATED_DATA")
35 #endif
36
37 -#ifdef CONFIG_ARM_MPU
38 +#if defined(CONFIG_ARM_MPU) && !defined(CONFIG_COMPILE_TEST)
39 /*
40 * Due to PMSAv7 restriction on base address and size we have to
41 * enforce minimal alignment restrictions. It was seen that weaker
42 diff --git a/arch/arm/mm/proc-macros.S b/arch/arm/mm/proc-macros.S
43 index 60ac7c5999a98..86e54447dc916 100644
44 --- a/arch/arm/mm/proc-macros.S
45 +++ b/arch/arm/mm/proc-macros.S
46 @@ -342,6 +342,7 @@ ENTRY(\name\()_cache_fns)
47
48 .macro define_tlb_functions name:req, flags_up:req, flags_smp
49 .type \name\()_tlb_fns, #object
50 + .align 2
51 ENTRY(\name\()_tlb_fns)
52 .long \name\()_flush_user_tlb_range
53 .long \name\()_flush_kern_tlb_range
54 diff --git a/arch/arm/probes/kprobes/core.c b/arch/arm/probes/kprobes/core.c
55 index 90b5bc723c83f..0a783bd4641c5 100644
56 --- a/arch/arm/probes/kprobes/core.c
57 +++ b/arch/arm/probes/kprobes/core.c
58 @@ -534,7 +534,7 @@ static struct undef_hook kprobes_arm_break_hook = {
59
60 #endif /* !CONFIG_THUMB2_KERNEL */
61
62 -int __init arch_init_kprobes()
63 +int __init arch_init_kprobes(void)
64 {
65 arm_probes_decode_init();
66 #ifdef CONFIG_THUMB2_KERNEL
67 diff --git a/arch/arm64/boot/dts/allwinner/sun50i-h5-nanopi-neo2.dts b/arch/arm64/boot/dts/allwinner/sun50i-h5-nanopi-neo2.dts
68 index 57a6f45036c1f..d7177465b0968 100644
69 --- a/arch/arm64/boot/dts/allwinner/sun50i-h5-nanopi-neo2.dts
70 +++ b/arch/arm64/boot/dts/allwinner/sun50i-h5-nanopi-neo2.dts
71 @@ -114,7 +114,7 @@
72 pinctrl-0 = <&emac_rgmii_pins>;
73 phy-supply = <&reg_gmac_3v3>;
74 phy-handle = <&ext_rgmii_phy>;
75 - phy-mode = "rgmii";
76 + phy-mode = "rgmii-id";
77 status = "okay";
78 };
79
80 diff --git a/arch/nios2/platform/Kconfig.platform b/arch/nios2/platform/Kconfig.platform
81 index 9e32fb7f3d4ce..e849daff6fd16 100644
82 --- a/arch/nios2/platform/Kconfig.platform
83 +++ b/arch/nios2/platform/Kconfig.platform
84 @@ -37,6 +37,7 @@ config NIOS2_DTB_PHYS_ADDR
85
86 config NIOS2_DTB_SOURCE_BOOL
87 bool "Compile and link device tree into kernel image"
88 + depends on !COMPILE_TEST
89 help
90 This allows you to specify a dts (device tree source) file
91 which will be compiled and linked into the kernel image.
92 diff --git a/arch/powerpc/net/bpf_jit_comp64.c b/arch/powerpc/net/bpf_jit_comp64.c
93 index 20bfd753bcba6..81e6279c9874f 100644
94 --- a/arch/powerpc/net/bpf_jit_comp64.c
95 +++ b/arch/powerpc/net/bpf_jit_comp64.c
96 @@ -408,8 +408,14 @@ static int bpf_jit_build_body(struct bpf_prog *fp, u32 *image,
97 case BPF_ALU64 | BPF_DIV | BPF_K: /* dst /= imm */
98 if (imm == 0)
99 return -EINVAL;
100 - else if (imm == 1)
101 - goto bpf_alu32_trunc;
102 + if (imm == 1) {
103 + if (BPF_OP(code) == BPF_DIV) {
104 + goto bpf_alu32_trunc;
105 + } else {
106 + PPC_LI(dst_reg, 0);
107 + break;
108 + }
109 + }
110
111 PPC_LI32(b2p[TMP_REG_1], imm);
112 switch (BPF_CLASS(code)) {
113 diff --git a/arch/s390/kvm/interrupt.c b/arch/s390/kvm/interrupt.c
114 index fa9483aa4f575..fd73a8aa89d23 100644
115 --- a/arch/s390/kvm/interrupt.c
116 +++ b/arch/s390/kvm/interrupt.c
117 @@ -2987,13 +2987,14 @@ static void __airqs_kick_single_vcpu(struct kvm *kvm, u8 deliverable_mask)
118 int vcpu_idx, online_vcpus = atomic_read(&kvm->online_vcpus);
119 struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
120 struct kvm_vcpu *vcpu;
121 + u8 vcpu_isc_mask;
122
123 for_each_set_bit(vcpu_idx, kvm->arch.idle_mask, online_vcpus) {
124 vcpu = kvm_get_vcpu(kvm, vcpu_idx);
125 if (psw_ioint_disabled(vcpu))
126 continue;
127 - deliverable_mask &= (u8)(vcpu->arch.sie_block->gcr[6] >> 24);
128 - if (deliverable_mask) {
129 + vcpu_isc_mask = (u8)(vcpu->arch.sie_block->gcr[6] >> 24);
130 + if (deliverable_mask & vcpu_isc_mask) {
131 /* lately kicked but not yet running */
132 if (test_and_set_bit(vcpu_idx, gi->kicked_mask))
133 return;
134 diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
135 index 9ed2fee612297..b286818d8d54d 100644
136 --- a/arch/s390/kvm/kvm-s390.c
137 +++ b/arch/s390/kvm/kvm-s390.c
138 @@ -3092,6 +3092,7 @@ out:
139
140 int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu)
141 {
142 + clear_bit(vcpu->vcpu_idx, vcpu->kvm->arch.gisa_int.kicked_mask);
143 return kvm_s390_vcpu_has_irq(vcpu, 0);
144 }
145
146 diff --git a/drivers/ata/sata_mv.c b/drivers/ata/sata_mv.c
147 index d1ed9679c7177..3fca3e13ed6ae 100644
148 --- a/drivers/ata/sata_mv.c
149 +++ b/drivers/ata/sata_mv.c
150 @@ -3892,8 +3892,8 @@ static int mv_chip_id(struct ata_host *host, unsigned int board_idx)
151 break;
152
153 default:
154 - dev_err(host->dev, "BUG: invalid board index %u\n", board_idx);
155 - return 1;
156 + dev_alert(host->dev, "BUG: invalid board index %u\n", board_idx);
157 + return -EINVAL;
158 }
159
160 hpriv->hp_flags = hp_flags;
161 diff --git a/drivers/base/regmap/regcache-rbtree.c b/drivers/base/regmap/regcache-rbtree.c
162 index cfa29dc89bbff..fabf87058d80b 100644
163 --- a/drivers/base/regmap/regcache-rbtree.c
164 +++ b/drivers/base/regmap/regcache-rbtree.c
165 @@ -281,14 +281,14 @@ static int regcache_rbtree_insert_to_block(struct regmap *map,
166 if (!blk)
167 return -ENOMEM;
168
169 + rbnode->block = blk;
170 +
171 if (BITS_TO_LONGS(blklen) > BITS_TO_LONGS(rbnode->blklen)) {
172 present = krealloc(rbnode->cache_present,
173 BITS_TO_LONGS(blklen) * sizeof(*present),
174 GFP_KERNEL);
175 - if (!present) {
176 - kfree(blk);
177 + if (!present)
178 return -ENOMEM;
179 - }
180
181 memset(present + BITS_TO_LONGS(rbnode->blklen), 0,
182 (BITS_TO_LONGS(blklen) - BITS_TO_LONGS(rbnode->blklen))
183 @@ -305,7 +305,6 @@ static int regcache_rbtree_insert_to_block(struct regmap *map,
184 }
185
186 /* update the rbnode block, its size and the base register */
187 - rbnode->block = blk;
188 rbnode->blklen = blklen;
189 rbnode->base_reg = base_reg;
190 rbnode->cache_present = present;
191 diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c b/drivers/gpu/drm/ttm/ttm_bo_util.c
192 index fe81c565e7ef8..a7b88ca8b97b3 100644
193 --- a/drivers/gpu/drm/ttm/ttm_bo_util.c
194 +++ b/drivers/gpu/drm/ttm/ttm_bo_util.c
195 @@ -463,6 +463,7 @@ static void ttm_transfered_destroy(struct ttm_buffer_object *bo)
196 struct ttm_transfer_obj *fbo;
197
198 fbo = container_of(bo, struct ttm_transfer_obj, base);
199 + dma_resv_fini(&fbo->base.base._resv);
200 ttm_bo_put(fbo->bo);
201 kfree(fbo);
202 }
203 diff --git a/drivers/infiniband/core/sa_query.c b/drivers/infiniband/core/sa_query.c
204 index d2d70c89193ff..11ab6390eda4d 100644
205 --- a/drivers/infiniband/core/sa_query.c
206 +++ b/drivers/infiniband/core/sa_query.c
207 @@ -760,8 +760,9 @@ static void ib_nl_set_path_rec_attrs(struct sk_buff *skb,
208
209 /* Construct the family header first */
210 header = skb_put(skb, NLMSG_ALIGN(sizeof(*header)));
211 - memcpy(header->device_name, dev_name(&query->port->agent->device->dev),
212 - LS_DEVICE_NAME_MAX);
213 + strscpy_pad(header->device_name,
214 + dev_name(&query->port->agent->device->dev),
215 + LS_DEVICE_NAME_MAX);
216 header->port_num = query->port->port_num;
217
218 if ((comp_mask & IB_SA_PATH_REC_REVERSIBLE) &&
219 diff --git a/drivers/infiniband/hw/hfi1/pio.c b/drivers/infiniband/hw/hfi1/pio.c
220 index 79126b2b14ab0..1a82ea73a0fc2 100644
221 --- a/drivers/infiniband/hw/hfi1/pio.c
222 +++ b/drivers/infiniband/hw/hfi1/pio.c
223 @@ -920,6 +920,7 @@ void sc_disable(struct send_context *sc)
224 {
225 u64 reg;
226 struct pio_buf *pbuf;
227 + LIST_HEAD(wake_list);
228
229 if (!sc)
230 return;
231 @@ -954,19 +955,21 @@ void sc_disable(struct send_context *sc)
232 spin_unlock(&sc->release_lock);
233
234 write_seqlock(&sc->waitlock);
235 - while (!list_empty(&sc->piowait)) {
236 + if (!list_empty(&sc->piowait))
237 + list_move(&sc->piowait, &wake_list);
238 + write_sequnlock(&sc->waitlock);
239 + while (!list_empty(&wake_list)) {
240 struct iowait *wait;
241 struct rvt_qp *qp;
242 struct hfi1_qp_priv *priv;
243
244 - wait = list_first_entry(&sc->piowait, struct iowait, list);
245 + wait = list_first_entry(&wake_list, struct iowait, list);
246 qp = iowait_to_qp(wait);
247 priv = qp->priv;
248 list_del_init(&priv->s_iowait.list);
249 priv->s_iowait.lock = NULL;
250 hfi1_qp_wakeup(qp, RVT_S_WAIT_PIO | HFI1_S_WAIT_PIO_DRAIN);
251 }
252 - write_sequnlock(&sc->waitlock);
253
254 spin_unlock_irq(&sc->alloc_lock);
255 }
256 diff --git a/drivers/infiniband/hw/mlx5/qp.c b/drivers/infiniband/hw/mlx5/qp.c
257 index 4540835e05bda..634f29cb7395c 100644
258 --- a/drivers/infiniband/hw/mlx5/qp.c
259 +++ b/drivers/infiniband/hw/mlx5/qp.c
260 @@ -3865,6 +3865,8 @@ static int mlx5_ib_modify_dct(struct ib_qp *ibqp, struct ib_qp_attr *attr,
261 MLX5_SET(dctc, dctc, mtu, attr->path_mtu);
262 MLX5_SET(dctc, dctc, my_addr_index, attr->ah_attr.grh.sgid_index);
263 MLX5_SET(dctc, dctc, hop_limit, attr->ah_attr.grh.hop_limit);
264 + if (attr->ah_attr.type == RDMA_AH_ATTR_TYPE_ROCE)
265 + MLX5_SET(dctc, dctc, eth_prio, attr->ah_attr.sl & 0x7);
266
267 err = mlx5_core_create_dct(dev->mdev, &qp->dct.mdct, qp->dct.in,
268 MLX5_ST_SZ_BYTES(create_dct_in), out,
269 diff --git a/drivers/infiniband/hw/qib/qib_user_sdma.c b/drivers/infiniband/hw/qib/qib_user_sdma.c
270 index 05190edc2611e..5fd28574124fb 100644
271 --- a/drivers/infiniband/hw/qib/qib_user_sdma.c
272 +++ b/drivers/infiniband/hw/qib/qib_user_sdma.c
273 @@ -602,7 +602,7 @@ done:
274 /*
275 * How many pages in this iovec element?
276 */
277 -static int qib_user_sdma_num_pages(const struct iovec *iov)
278 +static size_t qib_user_sdma_num_pages(const struct iovec *iov)
279 {
280 const unsigned long addr = (unsigned long) iov->iov_base;
281 const unsigned long len = iov->iov_len;
282 @@ -658,7 +658,7 @@ static void qib_user_sdma_free_pkt_frag(struct device *dev,
283 static int qib_user_sdma_pin_pages(const struct qib_devdata *dd,
284 struct qib_user_sdma_queue *pq,
285 struct qib_user_sdma_pkt *pkt,
286 - unsigned long addr, int tlen, int npages)
287 + unsigned long addr, int tlen, size_t npages)
288 {
289 struct page *pages[8];
290 int i, j;
291 @@ -722,7 +722,7 @@ static int qib_user_sdma_pin_pkt(const struct qib_devdata *dd,
292 unsigned long idx;
293
294 for (idx = 0; idx < niov; idx++) {
295 - const int npages = qib_user_sdma_num_pages(iov + idx);
296 + const size_t npages = qib_user_sdma_num_pages(iov + idx);
297 const unsigned long addr = (unsigned long) iov[idx].iov_base;
298
299 ret = qib_user_sdma_pin_pages(dd, pq, pkt, addr,
300 @@ -824,8 +824,8 @@ static int qib_user_sdma_queue_pkts(const struct qib_devdata *dd,
301 unsigned pktnw;
302 unsigned pktnwc;
303 int nfrags = 0;
304 - int npages = 0;
305 - int bytes_togo = 0;
306 + size_t npages = 0;
307 + size_t bytes_togo = 0;
308 int tiddma = 0;
309 int cfur;
310
311 @@ -885,7 +885,11 @@ static int qib_user_sdma_queue_pkts(const struct qib_devdata *dd,
312
313 npages += qib_user_sdma_num_pages(&iov[idx]);
314
315 - bytes_togo += slen;
316 + if (check_add_overflow(bytes_togo, slen, &bytes_togo) ||
317 + bytes_togo > type_max(typeof(pkt->bytes_togo))) {
318 + ret = -EINVAL;
319 + goto free_pbc;
320 + }
321 pktnwc += slen >> 2;
322 idx++;
323 nfrags++;
324 @@ -904,8 +908,7 @@ static int qib_user_sdma_queue_pkts(const struct qib_devdata *dd,
325 }
326
327 if (frag_size) {
328 - int tidsmsize, n;
329 - size_t pktsize;
330 + size_t tidsmsize, n, pktsize, sz, addrlimit;
331
332 n = npages*((2*PAGE_SIZE/frag_size)+1);
333 pktsize = struct_size(pkt, addr, n);
334 @@ -923,14 +926,24 @@ static int qib_user_sdma_queue_pkts(const struct qib_devdata *dd,
335 else
336 tidsmsize = 0;
337
338 - pkt = kmalloc(pktsize+tidsmsize, GFP_KERNEL);
339 + if (check_add_overflow(pktsize, tidsmsize, &sz)) {
340 + ret = -EINVAL;
341 + goto free_pbc;
342 + }
343 + pkt = kmalloc(sz, GFP_KERNEL);
344 if (!pkt) {
345 ret = -ENOMEM;
346 goto free_pbc;
347 }
348 pkt->largepkt = 1;
349 pkt->frag_size = frag_size;
350 - pkt->addrlimit = n + ARRAY_SIZE(pkt->addr);
351 + if (check_add_overflow(n, ARRAY_SIZE(pkt->addr),
352 + &addrlimit) ||
353 + addrlimit > type_max(typeof(pkt->addrlimit))) {
354 + ret = -EINVAL;
355 + goto free_pbc;
356 + }
357 + pkt->addrlimit = addrlimit;
358
359 if (tiddma) {
360 char *tidsm = (char *)pkt + pktsize;
361 diff --git a/drivers/mmc/host/cqhci.c b/drivers/mmc/host/cqhci.c
362 index 2d65b32d205a5..ec56464eaf23e 100644
363 --- a/drivers/mmc/host/cqhci.c
364 +++ b/drivers/mmc/host/cqhci.c
365 @@ -273,6 +273,9 @@ static void __cqhci_enable(struct cqhci_host *cq_host)
366
367 cqhci_writel(cq_host, cqcfg, CQHCI_CFG);
368
369 + if (cqhci_readl(cq_host, CQHCI_CTL) & CQHCI_HALT)
370 + cqhci_writel(cq_host, 0, CQHCI_CTL);
371 +
372 mmc->cqe_on = true;
373
374 if (cq_host->ops->enable)
375 diff --git a/drivers/mmc/host/dw_mmc-exynos.c b/drivers/mmc/host/dw_mmc-exynos.c
376 index 5e3d95b636769..ae2c74186e1d2 100644
377 --- a/drivers/mmc/host/dw_mmc-exynos.c
378 +++ b/drivers/mmc/host/dw_mmc-exynos.c
379 @@ -462,6 +462,18 @@ static s8 dw_mci_exynos_get_best_clksmpl(u8 candiates)
380 }
381 }
382
383 + /*
384 + * If there is no cadiates value, then it needs to return -EIO.
385 + * If there are candiates values and don't find bset clk sample value,
386 + * then use a first candiates clock sample value.
387 + */
388 + for (i = 0; i < iter; i++) {
389 + __c = ror8(candiates, i);
390 + if ((__c & 0x1) == 0x1) {
391 + loc = i;
392 + goto out;
393 + }
394 + }
395 out:
396 return loc;
397 }
398 @@ -492,6 +504,8 @@ static int dw_mci_exynos_execute_tuning(struct dw_mci_slot *slot, u32 opcode)
399 priv->tuned_sample = found;
400 } else {
401 ret = -EIO;
402 + dev_warn(&mmc->class_dev,
403 + "There is no candiates value about clksmpl!\n");
404 }
405
406 return ret;
407 diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c b/drivers/mmc/host/sdhci-esdhc-imx.c
408 index 771676209005b..2c01e2ebef7aa 100644
409 --- a/drivers/mmc/host/sdhci-esdhc-imx.c
410 +++ b/drivers/mmc/host/sdhci-esdhc-imx.c
411 @@ -24,6 +24,7 @@
412 #include <linux/pinctrl/consumer.h>
413 #include <linux/platform_data/mmc-esdhc-imx.h>
414 #include <linux/pm_runtime.h>
415 +#include <linux/iopoll.h>
416 #include "sdhci-pltfm.h"
417 #include "sdhci-esdhc.h"
418 #include "cqhci.h"
419 @@ -1022,6 +1023,7 @@ static void esdhc_reset_tuning(struct sdhci_host *host)
420 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
421 struct pltfm_imx_data *imx_data = sdhci_pltfm_priv(pltfm_host);
422 u32 ctrl;
423 + int ret;
424
425 /* Reset the tuning circuit */
426 if (esdhc_is_usdhc(imx_data)) {
427 @@ -1034,7 +1036,22 @@ static void esdhc_reset_tuning(struct sdhci_host *host)
428 } else if (imx_data->socdata->flags & ESDHC_FLAG_STD_TUNING) {
429 ctrl = readl(host->ioaddr + SDHCI_AUTO_CMD_STATUS);
430 ctrl &= ~ESDHC_MIX_CTRL_SMPCLK_SEL;
431 + ctrl &= ~ESDHC_MIX_CTRL_EXE_TUNE;
432 writel(ctrl, host->ioaddr + SDHCI_AUTO_CMD_STATUS);
433 + /* Make sure ESDHC_MIX_CTRL_EXE_TUNE cleared */
434 + ret = readl_poll_timeout(host->ioaddr + SDHCI_AUTO_CMD_STATUS,
435 + ctrl, !(ctrl & ESDHC_MIX_CTRL_EXE_TUNE), 1, 50);
436 + if (ret == -ETIMEDOUT)
437 + dev_warn(mmc_dev(host->mmc),
438 + "Warning! clear execute tuning bit failed\n");
439 + /*
440 + * SDHCI_INT_DATA_AVAIL is W1C bit, set this bit will clear the
441 + * usdhc IP internal logic flag execute_tuning_with_clr_buf, which
442 + * will finally make sure the normal data transfer logic correct.
443 + */
444 + ctrl = readl(host->ioaddr + SDHCI_INT_STATUS);
445 + ctrl |= SDHCI_INT_DATA_AVAIL;
446 + writel(ctrl, host->ioaddr + SDHCI_INT_STATUS);
447 }
448 }
449 }
450 diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
451 index 2ecd9acebb2f0..cb54fa2120d72 100644
452 --- a/drivers/mmc/host/sdhci.c
453 +++ b/drivers/mmc/host/sdhci.c
454 @@ -1741,6 +1741,12 @@ void sdhci_set_power_noreg(struct sdhci_host *host, unsigned char mode,
455 break;
456 case MMC_VDD_32_33:
457 case MMC_VDD_33_34:
458 + /*
459 + * 3.4 ~ 3.6V are valid only for those platforms where it's
460 + * known that the voltage range is supported by hardware.
461 + */
462 + case MMC_VDD_34_35:
463 + case MMC_VDD_35_36:
464 pwr = SDHCI_POWER_330;
465 break;
466 default:
467 diff --git a/drivers/mmc/host/vub300.c b/drivers/mmc/host/vub300.c
468 index 156046e56a584..5e1d7025dbf78 100644
469 --- a/drivers/mmc/host/vub300.c
470 +++ b/drivers/mmc/host/vub300.c
471 @@ -576,7 +576,7 @@ static void check_vub300_port_status(struct vub300_mmc_host *vub300)
472 GET_SYSTEM_PORT_STATUS,
473 USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
474 0x0000, 0x0000, &vub300->system_port_status,
475 - sizeof(vub300->system_port_status), HZ);
476 + sizeof(vub300->system_port_status), 1000);
477 if (sizeof(vub300->system_port_status) == retval)
478 new_system_port_status(vub300);
479 }
480 @@ -1241,7 +1241,7 @@ static void __download_offload_pseudocode(struct vub300_mmc_host *vub300,
481 SET_INTERRUPT_PSEUDOCODE,
482 USB_DIR_OUT | USB_TYPE_VENDOR |
483 USB_RECIP_DEVICE, 0x0000, 0x0000,
484 - xfer_buffer, xfer_length, HZ);
485 + xfer_buffer, xfer_length, 1000);
486 kfree(xfer_buffer);
487 if (retval < 0)
488 goto copy_error_message;
489 @@ -1284,7 +1284,7 @@ static void __download_offload_pseudocode(struct vub300_mmc_host *vub300,
490 SET_TRANSFER_PSEUDOCODE,
491 USB_DIR_OUT | USB_TYPE_VENDOR |
492 USB_RECIP_DEVICE, 0x0000, 0x0000,
493 - xfer_buffer, xfer_length, HZ);
494 + xfer_buffer, xfer_length, 1000);
495 kfree(xfer_buffer);
496 if (retval < 0)
497 goto copy_error_message;
498 @@ -1991,7 +1991,7 @@ static void __set_clock_speed(struct vub300_mmc_host *vub300, u8 buf[8],
499 usb_control_msg(vub300->udev, usb_sndctrlpipe(vub300->udev, 0),
500 SET_CLOCK_SPEED,
501 USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
502 - 0x00, 0x00, buf, buf_array_size, HZ);
503 + 0x00, 0x00, buf, buf_array_size, 1000);
504 if (retval != 8) {
505 dev_err(&vub300->udev->dev, "SET_CLOCK_SPEED"
506 " %dkHz failed with retval=%d\n", kHzClock, retval);
507 @@ -2013,14 +2013,14 @@ static void vub300_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
508 usb_control_msg(vub300->udev, usb_sndctrlpipe(vub300->udev, 0),
509 SET_SD_POWER,
510 USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
511 - 0x0000, 0x0000, NULL, 0, HZ);
512 + 0x0000, 0x0000, NULL, 0, 1000);
513 /* must wait for the VUB300 u-proc to boot up */
514 msleep(600);
515 } else if ((ios->power_mode == MMC_POWER_UP) && !vub300->card_powered) {
516 usb_control_msg(vub300->udev, usb_sndctrlpipe(vub300->udev, 0),
517 SET_SD_POWER,
518 USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
519 - 0x0001, 0x0000, NULL, 0, HZ);
520 + 0x0001, 0x0000, NULL, 0, 1000);
521 msleep(600);
522 vub300->card_powered = 1;
523 } else if (ios->power_mode == MMC_POWER_ON) {
524 @@ -2282,14 +2282,14 @@ static int vub300_probe(struct usb_interface *interface,
525 GET_HC_INF0,
526 USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
527 0x0000, 0x0000, &vub300->hc_info,
528 - sizeof(vub300->hc_info), HZ);
529 + sizeof(vub300->hc_info), 1000);
530 if (retval < 0)
531 goto error5;
532 retval =
533 usb_control_msg(vub300->udev, usb_sndctrlpipe(vub300->udev, 0),
534 SET_ROM_WAIT_STATES,
535 USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
536 - firmware_rom_wait_states, 0x0000, NULL, 0, HZ);
537 + firmware_rom_wait_states, 0x0000, NULL, 0, 1000);
538 if (retval < 0)
539 goto error5;
540 dev_info(&vub300->udev->dev,
541 @@ -2304,7 +2304,7 @@ static int vub300_probe(struct usb_interface *interface,
542 GET_SYSTEM_PORT_STATUS,
543 USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
544 0x0000, 0x0000, &vub300->system_port_status,
545 - sizeof(vub300->system_port_status), HZ);
546 + sizeof(vub300->system_port_status), 1000);
547 if (retval < 0) {
548 goto error4;
549 } else if (sizeof(vub300->system_port_status) == retval) {
550 diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
551 index 1949f631e1bc5..a7eaf80f500c0 100644
552 --- a/drivers/net/bonding/bond_main.c
553 +++ b/drivers/net/bonding/bond_main.c
554 @@ -1219,7 +1219,7 @@ static rx_handler_result_t bond_handle_frame(struct sk_buff **pskb)
555 skb->dev = bond->dev;
556
557 if (BOND_MODE(bond) == BOND_MODE_ALB &&
558 - bond->dev->priv_flags & IFF_BRIDGE_PORT &&
559 + netif_is_bridge_port(bond->dev) &&
560 skb->pkt_type == PACKET_HOST) {
561
562 if (unlikely(skb_cow_head(skb,
563 diff --git a/drivers/net/ethernet/micrel/ksz884x.c b/drivers/net/ethernet/micrel/ksz884x.c
564 index 7dc451fdaf35e..2431723bc2fb4 100644
565 --- a/drivers/net/ethernet/micrel/ksz884x.c
566 +++ b/drivers/net/ethernet/micrel/ksz884x.c
567 @@ -5693,7 +5693,7 @@ static void dev_set_promiscuous(struct net_device *dev, struct dev_priv *priv,
568 * from the bridge.
569 */
570 if ((hw->features & STP_SUPPORT) && !promiscuous &&
571 - (dev->priv_flags & IFF_BRIDGE_PORT)) {
572 + netif_is_bridge_port(dev)) {
573 struct ksz_switch *sw = hw->ksz_switch;
574 int port = priv->port.first_port;
575
576 diff --git a/drivers/net/ethernet/microchip/lan743x_main.c b/drivers/net/ethernet/microchip/lan743x_main.c
577 index dfa0ded169ee9..a109120da0e7c 100644
578 --- a/drivers/net/ethernet/microchip/lan743x_main.c
579 +++ b/drivers/net/ethernet/microchip/lan743x_main.c
580 @@ -1706,6 +1706,16 @@ static int lan743x_tx_ring_init(struct lan743x_tx *tx)
581 ret = -EINVAL;
582 goto cleanup;
583 }
584 + if (dma_set_mask_and_coherent(&tx->adapter->pdev->dev,
585 + DMA_BIT_MASK(64))) {
586 + if (dma_set_mask_and_coherent(&tx->adapter->pdev->dev,
587 + DMA_BIT_MASK(32))) {
588 + dev_warn(&tx->adapter->pdev->dev,
589 + "lan743x_: No suitable DMA available\n");
590 + ret = -ENOMEM;
591 + goto cleanup;
592 + }
593 + }
594 ring_allocation_size = ALIGN(tx->ring_size *
595 sizeof(struct lan743x_tx_descriptor),
596 PAGE_SIZE);
597 @@ -2256,6 +2266,16 @@ static int lan743x_rx_ring_init(struct lan743x_rx *rx)
598 ret = -EINVAL;
599 goto cleanup;
600 }
601 + if (dma_set_mask_and_coherent(&rx->adapter->pdev->dev,
602 + DMA_BIT_MASK(64))) {
603 + if (dma_set_mask_and_coherent(&rx->adapter->pdev->dev,
604 + DMA_BIT_MASK(32))) {
605 + dev_warn(&rx->adapter->pdev->dev,
606 + "lan743x_: No suitable DMA available\n");
607 + ret = -ENOMEM;
608 + goto cleanup;
609 + }
610 + }
611 ring_allocation_size = ALIGN(rx->ring_size *
612 sizeof(struct lan743x_rx_descriptor),
613 PAGE_SIZE);
614 @@ -3001,6 +3021,8 @@ static int lan743x_pm_resume(struct device *dev)
615 if (ret) {
616 netif_err(adapter, probe, adapter->netdev,
617 "lan743x_hardware_init returned %d\n", ret);
618 + lan743x_pci_cleanup(adapter);
619 + return ret;
620 }
621
622 /* open netdev when netdev is at running state while resume.
623 diff --git a/drivers/net/ethernet/nxp/lpc_eth.c b/drivers/net/ethernet/nxp/lpc_eth.c
624 index 1d59ef367a85c..3b177421651f1 100644
625 --- a/drivers/net/ethernet/nxp/lpc_eth.c
626 +++ b/drivers/net/ethernet/nxp/lpc_eth.c
627 @@ -1007,9 +1007,6 @@ static int lpc_eth_close(struct net_device *ndev)
628 napi_disable(&pldat->napi);
629 netif_stop_queue(ndev);
630
631 - if (ndev->phydev)
632 - phy_stop(ndev->phydev);
633 -
634 spin_lock_irqsave(&pldat->lock, flags);
635 __lpc_eth_reset(pldat);
636 netif_carrier_off(ndev);
637 @@ -1017,6 +1014,8 @@ static int lpc_eth_close(struct net_device *ndev)
638 writel(0, LPC_ENET_MAC2(pldat->net_base));
639 spin_unlock_irqrestore(&pldat->lock, flags);
640
641 + if (ndev->phydev)
642 + phy_stop(ndev->phydev);
643 clk_disable_unprepare(pldat->clk);
644
645 return 0;
646 diff --git a/drivers/net/phy/mdio_bus.c b/drivers/net/phy/mdio_bus.c
647 index 8377ff229a303..bec73f0640d03 100644
648 --- a/drivers/net/phy/mdio_bus.c
649 +++ b/drivers/net/phy/mdio_bus.c
650 @@ -395,7 +395,6 @@ int __mdiobus_register(struct mii_bus *bus, struct module *owner)
651 err = device_register(&bus->dev);
652 if (err) {
653 pr_err("mii_bus %s failed to register\n", bus->id);
654 - put_device(&bus->dev);
655 return -EINVAL;
656 }
657
658 diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
659 index b0b8a3ce82b68..6c52ff8c0d2eb 100644
660 --- a/drivers/net/phy/phy.c
661 +++ b/drivers/net/phy/phy.c
662 @@ -367,6 +367,7 @@ EXPORT_SYMBOL(phy_ethtool_ksettings_set);
663 void phy_ethtool_ksettings_get(struct phy_device *phydev,
664 struct ethtool_link_ksettings *cmd)
665 {
666 + mutex_lock(&phydev->lock);
667 linkmode_copy(cmd->link_modes.supported, phydev->supported);
668 linkmode_copy(cmd->link_modes.advertising, phydev->advertising);
669 linkmode_copy(cmd->link_modes.lp_advertising, phydev->lp_advertising);
670 @@ -383,6 +384,7 @@ void phy_ethtool_ksettings_get(struct phy_device *phydev,
671 cmd->base.autoneg = phydev->autoneg;
672 cmd->base.eth_tp_mdix_ctrl = phydev->mdix_ctrl;
673 cmd->base.eth_tp_mdix = phydev->mdix;
674 + mutex_unlock(&phydev->lock);
675 }
676 EXPORT_SYMBOL(phy_ethtool_ksettings_get);
677
678 @@ -553,7 +555,7 @@ static int phy_check_link_status(struct phy_device *phydev)
679 }
680
681 /**
682 - * phy_start_aneg - start auto-negotiation for this PHY device
683 + * _phy_start_aneg - start auto-negotiation for this PHY device
684 * @phydev: the phy_device struct
685 *
686 * Description: Sanitizes the settings (if we're not autonegotiating
687 @@ -561,25 +563,43 @@ static int phy_check_link_status(struct phy_device *phydev)
688 * If the PHYCONTROL Layer is operating, we change the state to
689 * reflect the beginning of Auto-negotiation or forcing.
690 */
691 -int phy_start_aneg(struct phy_device *phydev)
692 +static int _phy_start_aneg(struct phy_device *phydev)
693 {
694 int err;
695
696 + lockdep_assert_held(&phydev->lock);
697 +
698 if (!phydev->drv)
699 return -EIO;
700
701 - mutex_lock(&phydev->lock);
702 -
703 if (AUTONEG_DISABLE == phydev->autoneg)
704 phy_sanitize_settings(phydev);
705
706 err = phy_config_aneg(phydev);
707 if (err < 0)
708 - goto out_unlock;
709 + return err;
710
711 if (phy_is_started(phydev))
712 err = phy_check_link_status(phydev);
713 -out_unlock:
714 +
715 + return err;
716 +}
717 +
718 +/**
719 + * phy_start_aneg - start auto-negotiation for this PHY device
720 + * @phydev: the phy_device struct
721 + *
722 + * Description: Sanitizes the settings (if we're not autonegotiating
723 + * them), and then calls the driver's config_aneg function.
724 + * If the PHYCONTROL Layer is operating, we change the state to
725 + * reflect the beginning of Auto-negotiation or forcing.
726 + */
727 +int phy_start_aneg(struct phy_device *phydev)
728 +{
729 + int err;
730 +
731 + mutex_lock(&phydev->lock);
732 + err = _phy_start_aneg(phydev);
733 mutex_unlock(&phydev->lock);
734
735 return err;
736 diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c
737 index 92d9d3407b79b..fe830b72c3b0f 100644
738 --- a/drivers/net/usb/lan78xx.c
739 +++ b/drivers/net/usb/lan78xx.c
740 @@ -3753,6 +3753,12 @@ static int lan78xx_probe(struct usb_interface *intf,
741
742 dev->maxpacket = usb_maxpacket(dev->udev, dev->pipe_out, 1);
743
744 + /* Reject broken descriptors. */
745 + if (dev->maxpacket == 0) {
746 + ret = -ENODEV;
747 + goto out4;
748 + }
749 +
750 /* driver requires remote-wakeup capability during autosuspend. */
751 intf->needs_remote_wakeup = 1;
752
753 diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c
754 index dde05e2fdc3e6..b8b9df82f51ef 100644
755 --- a/drivers/net/usb/usbnet.c
756 +++ b/drivers/net/usb/usbnet.c
757 @@ -1773,6 +1773,11 @@ usbnet_probe (struct usb_interface *udev, const struct usb_device_id *prod)
758 if (!dev->rx_urb_size)
759 dev->rx_urb_size = dev->hard_mtu;
760 dev->maxpacket = usb_maxpacket (dev->udev, dev->out, 1);
761 + if (dev->maxpacket == 0) {
762 + /* that is a broken device */
763 + status = -ENODEV;
764 + goto out4;
765 + }
766
767 /* let userspace know we have a random address */
768 if (ether_addr_equal(net->dev_addr, node_id))
769 diff --git a/drivers/nfc/port100.c b/drivers/nfc/port100.c
770 index 8e4d355dc3aec..1caebefb25ff1 100644
771 --- a/drivers/nfc/port100.c
772 +++ b/drivers/nfc/port100.c
773 @@ -1003,11 +1003,11 @@ static u64 port100_get_command_type_mask(struct port100 *dev)
774
775 skb = port100_alloc_skb(dev, 0);
776 if (!skb)
777 - return -ENOMEM;
778 + return 0;
779
780 resp = port100_send_cmd_sync(dev, PORT100_CMD_GET_COMMAND_TYPE, skb);
781 if (IS_ERR(resp))
782 - return PTR_ERR(resp);
783 + return 0;
784
785 if (resp->len < 8)
786 mask = 0;
787 diff --git a/drivers/nvme/host/tcp.c b/drivers/nvme/host/tcp.c
788 index 38bbbbbc6f47f..ff0d06e8ebb53 100644
789 --- a/drivers/nvme/host/tcp.c
790 +++ b/drivers/nvme/host/tcp.c
791 @@ -962,7 +962,7 @@ static int nvme_tcp_try_send_ddgst(struct nvme_tcp_request *req)
792 int ret;
793 struct msghdr msg = { .msg_flags = MSG_DONTWAIT | MSG_EOR };
794 struct kvec iov = {
795 - .iov_base = &req->ddgst + req->offset,
796 + .iov_base = (u8 *)&req->ddgst + req->offset,
797 .iov_len = NVME_TCP_DIGEST_LENGTH - req->offset
798 };
799
800 diff --git a/drivers/nvme/target/tcp.c b/drivers/nvme/target/tcp.c
801 index 2ae846297d7ca..2f4e512bd449f 100644
802 --- a/drivers/nvme/target/tcp.c
803 +++ b/drivers/nvme/target/tcp.c
804 @@ -633,7 +633,7 @@ static int nvmet_try_send_ddgst(struct nvmet_tcp_cmd *cmd)
805 struct nvmet_tcp_queue *queue = cmd->queue;
806 struct msghdr msg = { .msg_flags = MSG_DONTWAIT };
807 struct kvec iov = {
808 - .iov_base = &cmd->exp_ddgst + cmd->offset,
809 + .iov_base = (u8 *)&cmd->exp_ddgst + cmd->offset,
810 .iov_len = NVME_TCP_DIGEST_LENGTH - cmd->offset
811 };
812 int ret;
813 diff --git a/drivers/pinctrl/bcm/pinctrl-ns.c b/drivers/pinctrl/bcm/pinctrl-ns.c
814 index e79690bd8b85f..d7f8175d2c1c8 100644
815 --- a/drivers/pinctrl/bcm/pinctrl-ns.c
816 +++ b/drivers/pinctrl/bcm/pinctrl-ns.c
817 @@ -5,7 +5,6 @@
818
819 #include <linux/err.h>
820 #include <linux/io.h>
821 -#include <linux/mfd/syscon.h>
822 #include <linux/module.h>
823 #include <linux/of.h>
824 #include <linux/of_device.h>
825 @@ -13,7 +12,6 @@
826 #include <linux/pinctrl/pinctrl.h>
827 #include <linux/pinctrl/pinmux.h>
828 #include <linux/platform_device.h>
829 -#include <linux/regmap.h>
830 #include <linux/slab.h>
831
832 #define FLAG_BCM4708 BIT(1)
833 @@ -24,8 +22,7 @@ struct ns_pinctrl {
834 struct device *dev;
835 unsigned int chipset_flag;
836 struct pinctrl_dev *pctldev;
837 - struct regmap *regmap;
838 - u32 offset;
839 + void __iomem *base;
840
841 struct pinctrl_desc pctldesc;
842 struct ns_pinctrl_group *groups;
843 @@ -232,9 +229,9 @@ static int ns_pinctrl_set_mux(struct pinctrl_dev *pctrl_dev,
844 unset |= BIT(pin_number);
845 }
846
847 - regmap_read(ns_pinctrl->regmap, ns_pinctrl->offset, &tmp);
848 + tmp = readl(ns_pinctrl->base);
849 tmp &= ~unset;
850 - regmap_write(ns_pinctrl->regmap, ns_pinctrl->offset, tmp);
851 + writel(tmp, ns_pinctrl->base);
852
853 return 0;
854 }
855 @@ -266,13 +263,13 @@ static const struct of_device_id ns_pinctrl_of_match_table[] = {
856 static int ns_pinctrl_probe(struct platform_device *pdev)
857 {
858 struct device *dev = &pdev->dev;
859 - struct device_node *np = dev->of_node;
860 const struct of_device_id *of_id;
861 struct ns_pinctrl *ns_pinctrl;
862 struct pinctrl_desc *pctldesc;
863 struct pinctrl_pin_desc *pin;
864 struct ns_pinctrl_group *group;
865 struct ns_pinctrl_function *function;
866 + struct resource *res;
867 int i;
868
869 ns_pinctrl = devm_kzalloc(dev, sizeof(*ns_pinctrl), GFP_KERNEL);
870 @@ -290,18 +287,12 @@ static int ns_pinctrl_probe(struct platform_device *pdev)
871 return -EINVAL;
872 ns_pinctrl->chipset_flag = (uintptr_t)of_id->data;
873
874 - ns_pinctrl->regmap = syscon_node_to_regmap(of_get_parent(np));
875 - if (IS_ERR(ns_pinctrl->regmap)) {
876 - int err = PTR_ERR(ns_pinctrl->regmap);
877 -
878 - dev_err(dev, "Failed to map pinctrl regs: %d\n", err);
879 -
880 - return err;
881 - }
882 -
883 - if (of_property_read_u32(np, "offset", &ns_pinctrl->offset)) {
884 - dev_err(dev, "Failed to get register offset\n");
885 - return -ENOENT;
886 + res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
887 + "cru_gpio_control");
888 + ns_pinctrl->base = devm_ioremap_resource(dev, res);
889 + if (IS_ERR(ns_pinctrl->base)) {
890 + dev_err(dev, "Failed to map pinctrl regs\n");
891 + return PTR_ERR(ns_pinctrl->base);
892 }
893
894 memcpy(pctldesc, &ns_pinctrl_desc, sizeof(*pctldesc));
895 diff --git a/include/net/tls.h b/include/net/tls.h
896 index 697df45c0bcee..7f220e03ebb2d 100644
897 --- a/include/net/tls.h
898 +++ b/include/net/tls.h
899 @@ -360,6 +360,7 @@ int tls_sk_query(struct sock *sk, int optname, char __user *optval,
900 int __user *optlen);
901 int tls_sk_attach(struct sock *sk, int optname, char __user *optval,
902 unsigned int optlen);
903 +void tls_err_abort(struct sock *sk, int err);
904
905 int tls_set_sw_offload(struct sock *sk, struct tls_context *ctx, int tx);
906 void tls_sw_strparser_arm(struct sock *sk, struct tls_context *ctx);
907 @@ -465,12 +466,6 @@ static inline bool tls_is_sk_tx_device_offloaded(struct sock *sk)
908 #endif
909 }
910
911 -static inline void tls_err_abort(struct sock *sk, int err)
912 -{
913 - sk->sk_err = err;
914 - sk->sk_error_report(sk);
915 -}
916 -
917 static inline bool tls_bigint_increment(unsigned char *seq, int len)
918 {
919 int i;
920 @@ -499,7 +494,7 @@ static inline void tls_advance_record_sn(struct sock *sk,
921 struct cipher_context *ctx)
922 {
923 if (tls_bigint_increment(ctx->rec_seq, prot->rec_seq_size))
924 - tls_err_abort(sk, EBADMSG);
925 + tls_err_abort(sk, -EBADMSG);
926
927 if (prot->version != TLS_1_3_VERSION)
928 tls_bigint_increment(ctx->iv + TLS_CIPHER_AES_GCM_128_SALT_SIZE,
929 diff --git a/net/batman-adv/bridge_loop_avoidance.c b/net/batman-adv/bridge_loop_avoidance.c
930 index a6b26ca5c6973..2e818eca3e1c6 100644
931 --- a/net/batman-adv/bridge_loop_avoidance.c
932 +++ b/net/batman-adv/bridge_loop_avoidance.c
933 @@ -1561,10 +1561,14 @@ int batadv_bla_init(struct batadv_priv *bat_priv)
934 return 0;
935
936 bat_priv->bla.claim_hash = batadv_hash_new(128);
937 - bat_priv->bla.backbone_hash = batadv_hash_new(32);
938 + if (!bat_priv->bla.claim_hash)
939 + return -ENOMEM;
940
941 - if (!bat_priv->bla.claim_hash || !bat_priv->bla.backbone_hash)
942 + bat_priv->bla.backbone_hash = batadv_hash_new(32);
943 + if (!bat_priv->bla.backbone_hash) {
944 + batadv_hash_destroy(bat_priv->bla.claim_hash);
945 return -ENOMEM;
946 + }
947
948 batadv_hash_set_lock_class(bat_priv->bla.claim_hash,
949 &batadv_claim_hash_lock_class_key);
950 diff --git a/net/batman-adv/main.c b/net/batman-adv/main.c
951 index 4a89177def647..6a183c94cdeb4 100644
952 --- a/net/batman-adv/main.c
953 +++ b/net/batman-adv/main.c
954 @@ -197,29 +197,41 @@ int batadv_mesh_init(struct net_device *soft_iface)
955
956 bat_priv->gw.generation = 0;
957
958 - ret = batadv_v_mesh_init(bat_priv);
959 - if (ret < 0)
960 - goto err;
961 -
962 ret = batadv_originator_init(bat_priv);
963 - if (ret < 0)
964 - goto err;
965 + if (ret < 0) {
966 + atomic_set(&bat_priv->mesh_state, BATADV_MESH_DEACTIVATING);
967 + goto err_orig;
968 + }
969
970 ret = batadv_tt_init(bat_priv);
971 - if (ret < 0)
972 - goto err;
973 + if (ret < 0) {
974 + atomic_set(&bat_priv->mesh_state, BATADV_MESH_DEACTIVATING);
975 + goto err_tt;
976 + }
977 +
978 + ret = batadv_v_mesh_init(bat_priv);
979 + if (ret < 0) {
980 + atomic_set(&bat_priv->mesh_state, BATADV_MESH_DEACTIVATING);
981 + goto err_v;
982 + }
983
984 ret = batadv_bla_init(bat_priv);
985 - if (ret < 0)
986 - goto err;
987 + if (ret < 0) {
988 + atomic_set(&bat_priv->mesh_state, BATADV_MESH_DEACTIVATING);
989 + goto err_bla;
990 + }
991
992 ret = batadv_dat_init(bat_priv);
993 - if (ret < 0)
994 - goto err;
995 + if (ret < 0) {
996 + atomic_set(&bat_priv->mesh_state, BATADV_MESH_DEACTIVATING);
997 + goto err_dat;
998 + }
999
1000 ret = batadv_nc_mesh_init(bat_priv);
1001 - if (ret < 0)
1002 - goto err;
1003 + if (ret < 0) {
1004 + atomic_set(&bat_priv->mesh_state, BATADV_MESH_DEACTIVATING);
1005 + goto err_nc;
1006 + }
1007
1008 batadv_gw_init(bat_priv);
1009 batadv_mcast_init(bat_priv);
1010 @@ -229,8 +241,20 @@ int batadv_mesh_init(struct net_device *soft_iface)
1011
1012 return 0;
1013
1014 -err:
1015 - batadv_mesh_free(soft_iface);
1016 +err_nc:
1017 + batadv_dat_free(bat_priv);
1018 +err_dat:
1019 + batadv_bla_free(bat_priv);
1020 +err_bla:
1021 + batadv_v_mesh_free(bat_priv);
1022 +err_v:
1023 + batadv_tt_free(bat_priv);
1024 +err_tt:
1025 + batadv_originator_free(bat_priv);
1026 +err_orig:
1027 + batadv_purge_outstanding_packets(bat_priv, NULL);
1028 + atomic_set(&bat_priv->mesh_state, BATADV_MESH_INACTIVE);
1029 +
1030 return ret;
1031 }
1032
1033 diff --git a/net/batman-adv/network-coding.c b/net/batman-adv/network-coding.c
1034 index 70e3b161c6635..850f927f33de2 100644
1035 --- a/net/batman-adv/network-coding.c
1036 +++ b/net/batman-adv/network-coding.c
1037 @@ -155,8 +155,10 @@ int batadv_nc_mesh_init(struct batadv_priv *bat_priv)
1038 &batadv_nc_coding_hash_lock_class_key);
1039
1040 bat_priv->nc.decoding_hash = batadv_hash_new(128);
1041 - if (!bat_priv->nc.decoding_hash)
1042 + if (!bat_priv->nc.decoding_hash) {
1043 + batadv_hash_destroy(bat_priv->nc.coding_hash);
1044 goto err;
1045 + }
1046
1047 batadv_hash_set_lock_class(bat_priv->nc.decoding_hash,
1048 &batadv_nc_decoding_hash_lock_class_key);
1049 diff --git a/net/batman-adv/translation-table.c b/net/batman-adv/translation-table.c
1050 index c5271ea4dc832..515205d7b650f 100644
1051 --- a/net/batman-adv/translation-table.c
1052 +++ b/net/batman-adv/translation-table.c
1053 @@ -4405,8 +4405,10 @@ int batadv_tt_init(struct batadv_priv *bat_priv)
1054 return ret;
1055
1056 ret = batadv_tt_global_init(bat_priv);
1057 - if (ret < 0)
1058 + if (ret < 0) {
1059 + batadv_tt_local_table_free(bat_priv);
1060 return ret;
1061 + }
1062
1063 batadv_tvlv_handler_register(bat_priv, batadv_tt_tvlv_ogm_handler_v1,
1064 batadv_tt_tvlv_unicast_handler_v1,
1065 diff --git a/net/core/dev.c b/net/core/dev.c
1066 index 3810eaf89b266..e4e492bf72af0 100644
1067 --- a/net/core/dev.c
1068 +++ b/net/core/dev.c
1069 @@ -2787,6 +2787,12 @@ static u16 skb_tx_hash(const struct net_device *dev,
1070
1071 qoffset = sb_dev->tc_to_txq[tc].offset;
1072 qcount = sb_dev->tc_to_txq[tc].count;
1073 + if (unlikely(!qcount)) {
1074 + net_warn_ratelimited("%s: invalid qcount, qoffset %u for tc %u\n",
1075 + sb_dev->name, qoffset, tc);
1076 + qoffset = 0;
1077 + qcount = dev->real_num_tx_queues;
1078 + }
1079 }
1080
1081 if (skb_rx_queue_recorded(skb)) {
1082 diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
1083 index a53b101ce41ae..55c0f32b9375b 100644
1084 --- a/net/core/rtnetlink.c
1085 +++ b/net/core/rtnetlink.c
1086 @@ -3729,7 +3729,7 @@ static int rtnl_fdb_add(struct sk_buff *skb, struct nlmsghdr *nlh,
1087
1088 /* Support fdb on master device the net/bridge default case */
1089 if ((!ndm->ndm_flags || ndm->ndm_flags & NTF_MASTER) &&
1090 - (dev->priv_flags & IFF_BRIDGE_PORT)) {
1091 + netif_is_bridge_port(dev)) {
1092 struct net_device *br_dev = netdev_master_upper_dev_get(dev);
1093 const struct net_device_ops *ops = br_dev->netdev_ops;
1094
1095 @@ -3840,7 +3840,7 @@ static int rtnl_fdb_del(struct sk_buff *skb, struct nlmsghdr *nlh,
1096
1097 /* Support fdb on master device the net/bridge default case */
1098 if ((!ndm->ndm_flags || ndm->ndm_flags & NTF_MASTER) &&
1099 - (dev->priv_flags & IFF_BRIDGE_PORT)) {
1100 + netif_is_bridge_port(dev)) {
1101 struct net_device *br_dev = netdev_master_upper_dev_get(dev);
1102 const struct net_device_ops *ops = br_dev->netdev_ops;
1103
1104 @@ -4066,13 +4066,13 @@ static int rtnl_fdb_dump(struct sk_buff *skb, struct netlink_callback *cb)
1105 continue;
1106
1107 if (!br_idx) { /* user did not specify a specific bridge */
1108 - if (dev->priv_flags & IFF_BRIDGE_PORT) {
1109 + if (netif_is_bridge_port(dev)) {
1110 br_dev = netdev_master_upper_dev_get(dev);
1111 cops = br_dev->netdev_ops;
1112 }
1113 } else {
1114 if (dev != br_dev &&
1115 - !(dev->priv_flags & IFF_BRIDGE_PORT))
1116 + !netif_is_bridge_port(dev))
1117 continue;
1118
1119 if (br_dev != netdev_master_upper_dev_get(dev) &&
1120 @@ -4084,7 +4084,7 @@ static int rtnl_fdb_dump(struct sk_buff *skb, struct netlink_callback *cb)
1121 if (idx < s_idx)
1122 goto cont;
1123
1124 - if (dev->priv_flags & IFF_BRIDGE_PORT) {
1125 + if (netif_is_bridge_port(dev)) {
1126 if (cops && cops->ndo_fdb_dump) {
1127 err = cops->ndo_fdb_dump(skb, cb,
1128 br_dev, dev,
1129 @@ -4234,7 +4234,7 @@ static int rtnl_fdb_get(struct sk_buff *in_skb, struct nlmsghdr *nlh,
1130
1131 if (dev) {
1132 if (!ndm_flags || (ndm_flags & NTF_MASTER)) {
1133 - if (!(dev->priv_flags & IFF_BRIDGE_PORT)) {
1134 + if (!netif_is_bridge_port(dev)) {
1135 NL_SET_ERR_MSG(extack, "Device is not a bridge port");
1136 return -EINVAL;
1137 }
1138 diff --git a/net/ipv4/route.c b/net/ipv4/route.c
1139 index 539492998864e..d1feec97fa062 100644
1140 --- a/net/ipv4/route.c
1141 +++ b/net/ipv4/route.c
1142 @@ -631,14 +631,14 @@ static void fnhe_remove_oldest(struct fnhe_hash_bucket *hash)
1143 kfree_rcu(oldest, rcu);
1144 }
1145
1146 -static inline u32 fnhe_hashfun(__be32 daddr)
1147 +static u32 fnhe_hashfun(__be32 daddr)
1148 {
1149 - static u32 fnhe_hashrnd __read_mostly;
1150 - u32 hval;
1151 + static siphash_key_t fnhe_hash_key __read_mostly;
1152 + u64 hval;
1153
1154 - net_get_random_once(&fnhe_hashrnd, sizeof(fnhe_hashrnd));
1155 - hval = jhash_1word((__force u32) daddr, fnhe_hashrnd);
1156 - return hash_32(hval, FNHE_HASH_SHIFT);
1157 + net_get_random_once(&fnhe_hash_key, sizeof(fnhe_hash_key));
1158 + hval = siphash_1u32((__force u32)daddr, &fnhe_hash_key);
1159 + return hash_64(hval, FNHE_HASH_SHIFT);
1160 }
1161
1162 static void fill_route_from_fnhe(struct rtable *rt, struct fib_nh_exception *fnhe)
1163 diff --git a/net/ipv4/tcp_bpf.c b/net/ipv4/tcp_bpf.c
1164 index 6a0c4326d9cf2..7df7ec74807ac 100644
1165 --- a/net/ipv4/tcp_bpf.c
1166 +++ b/net/ipv4/tcp_bpf.c
1167 @@ -313,6 +313,7 @@ static int tcp_bpf_send_verdict(struct sock *sk, struct sk_psock *psock,
1168 bool cork = false, enospc = sk_msg_full(msg);
1169 struct sock *sk_redir;
1170 u32 tosend, delta = 0;
1171 + u32 eval = __SK_NONE;
1172 int ret;
1173
1174 more_data:
1175 @@ -356,13 +357,24 @@ more_data:
1176 case __SK_REDIRECT:
1177 sk_redir = psock->sk_redir;
1178 sk_msg_apply_bytes(psock, tosend);
1179 + if (!psock->apply_bytes) {
1180 + /* Clean up before releasing the sock lock. */
1181 + eval = psock->eval;
1182 + psock->eval = __SK_NONE;
1183 + psock->sk_redir = NULL;
1184 + }
1185 if (psock->cork) {
1186 cork = true;
1187 psock->cork = NULL;
1188 }
1189 sk_msg_return(sk, msg, tosend);
1190 release_sock(sk);
1191 +
1192 ret = tcp_bpf_sendmsg_redir(sk_redir, msg, tosend, flags);
1193 +
1194 + if (eval == __SK_REDIRECT)
1195 + sock_put(sk_redir);
1196 +
1197 lock_sock(sk);
1198 if (unlikely(ret < 0)) {
1199 int free = sk_msg_free_nocharge(sk, msg);
1200 diff --git a/net/ipv6/route.c b/net/ipv6/route.c
1201 index 3fb259c20546e..daa876c6ae8db 100644
1202 --- a/net/ipv6/route.c
1203 +++ b/net/ipv6/route.c
1204 @@ -41,6 +41,7 @@
1205 #include <linux/nsproxy.h>
1206 #include <linux/slab.h>
1207 #include <linux/jhash.h>
1208 +#include <linux/siphash.h>
1209 #include <net/net_namespace.h>
1210 #include <net/snmp.h>
1211 #include <net/ipv6.h>
1212 @@ -1502,17 +1503,24 @@ static void rt6_exception_remove_oldest(struct rt6_exception_bucket *bucket)
1213 static u32 rt6_exception_hash(const struct in6_addr *dst,
1214 const struct in6_addr *src)
1215 {
1216 - static u32 seed __read_mostly;
1217 - u32 val;
1218 + static siphash_key_t rt6_exception_key __read_mostly;
1219 + struct {
1220 + struct in6_addr dst;
1221 + struct in6_addr src;
1222 + } __aligned(SIPHASH_ALIGNMENT) combined = {
1223 + .dst = *dst,
1224 + };
1225 + u64 val;
1226
1227 - net_get_random_once(&seed, sizeof(seed));
1228 - val = jhash(dst, sizeof(*dst), seed);
1229 + net_get_random_once(&rt6_exception_key, sizeof(rt6_exception_key));
1230
1231 #ifdef CONFIG_IPV6_SUBTREES
1232 if (src)
1233 - val = jhash(src, sizeof(*src), val);
1234 + combined.src = *src;
1235 #endif
1236 - return hash_32(val, FIB6_EXCEPTION_BUCKET_SIZE_SHIFT);
1237 + val = siphash(&combined, sizeof(combined), &rt6_exception_key);
1238 +
1239 + return hash_64(val, FIB6_EXCEPTION_BUCKET_SIZE_SHIFT);
1240 }
1241
1242 /* Helper function to find the cached rt in the hash table
1243 diff --git a/net/sctp/sm_statefuns.c b/net/sctp/sm_statefuns.c
1244 index 82a202d71a31e..7c6dcbc8e98ba 100644
1245 --- a/net/sctp/sm_statefuns.c
1246 +++ b/net/sctp/sm_statefuns.c
1247 @@ -697,6 +697,9 @@ enum sctp_disposition sctp_sf_do_5_1D_ce(struct net *net,
1248 struct sock *sk;
1249 int error = 0;
1250
1251 + if (asoc && !sctp_vtag_verify(chunk, asoc))
1252 + return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands);
1253 +
1254 /* If the packet is an OOTB packet which is temporarily on the
1255 * control endpoint, respond with an ABORT.
1256 */
1257 @@ -711,7 +714,8 @@ enum sctp_disposition sctp_sf_do_5_1D_ce(struct net *net,
1258 * in sctp_unpack_cookie().
1259 */
1260 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_chunkhdr)))
1261 - return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands);
1262 + return sctp_sf_violation_chunklen(net, ep, asoc, type, arg,
1263 + commands);
1264
1265 /* If the endpoint is not listening or if the number of associations
1266 * on the TCP-style socket exceed the max backlog, respond with an
1267 @@ -2141,9 +2145,11 @@ enum sctp_disposition sctp_sf_do_5_2_4_dupcook(
1268 * enough for the chunk header. Cookie length verification is
1269 * done later.
1270 */
1271 - if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_chunkhdr)))
1272 - return sctp_sf_violation_chunklen(net, ep, asoc, type, arg,
1273 - commands);
1274 + if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_chunkhdr))) {
1275 + if (!sctp_vtag_verify(chunk, asoc))
1276 + asoc = NULL;
1277 + return sctp_sf_violation_chunklen(net, ep, asoc, type, arg, commands);
1278 + }
1279
1280 /* "Decode" the chunk. We have no optional parameters so we
1281 * are in good shape.
1282 @@ -2280,7 +2286,7 @@ enum sctp_disposition sctp_sf_shutdown_pending_abort(
1283 */
1284 if (SCTP_ADDR_DEL ==
1285 sctp_bind_addr_state(&asoc->base.bind_addr, &chunk->dest))
1286 - return sctp_sf_discard_chunk(net, ep, asoc, type, arg, commands);
1287 + return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands);
1288
1289 if (!sctp_err_chunk_valid(chunk))
1290 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands);
1291 @@ -2326,7 +2332,7 @@ enum sctp_disposition sctp_sf_shutdown_sent_abort(
1292 */
1293 if (SCTP_ADDR_DEL ==
1294 sctp_bind_addr_state(&asoc->base.bind_addr, &chunk->dest))
1295 - return sctp_sf_discard_chunk(net, ep, asoc, type, arg, commands);
1296 + return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands);
1297
1298 if (!sctp_err_chunk_valid(chunk))
1299 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands);
1300 @@ -2596,7 +2602,7 @@ enum sctp_disposition sctp_sf_do_9_1_abort(
1301 */
1302 if (SCTP_ADDR_DEL ==
1303 sctp_bind_addr_state(&asoc->base.bind_addr, &chunk->dest))
1304 - return sctp_sf_discard_chunk(net, ep, asoc, type, arg, commands);
1305 + return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands);
1306
1307 if (!sctp_err_chunk_valid(chunk))
1308 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands);
1309 @@ -3562,6 +3568,9 @@ enum sctp_disposition sctp_sf_ootb(struct net *net,
1310
1311 SCTP_INC_STATS(net, SCTP_MIB_OUTOFBLUES);
1312
1313 + if (asoc && !sctp_vtag_verify(chunk, asoc))
1314 + asoc = NULL;
1315 +
1316 ch = (struct sctp_chunkhdr *)chunk->chunk_hdr;
1317 do {
1318 /* Report violation if the chunk is less then minimal */
1319 @@ -3677,12 +3686,6 @@ static enum sctp_disposition sctp_sf_shut_8_4_5(
1320
1321 SCTP_INC_STATS(net, SCTP_MIB_OUTCTRLCHUNKS);
1322
1323 - /* If the chunk length is invalid, we don't want to process
1324 - * the reset of the packet.
1325 - */
1326 - if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_chunkhdr)))
1327 - return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands);
1328 -
1329 /* We need to discard the rest of the packet to prevent
1330 * potential bomming attacks from additional bundled chunks.
1331 * This is documented in SCTP Threats ID.
1332 @@ -3710,6 +3713,9 @@ enum sctp_disposition sctp_sf_do_8_5_1_E_sa(struct net *net,
1333 {
1334 struct sctp_chunk *chunk = arg;
1335
1336 + if (!sctp_vtag_verify(chunk, asoc))
1337 + asoc = NULL;
1338 +
1339 /* Make sure that the SHUTDOWN_ACK chunk has a valid length. */
1340 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_chunkhdr)))
1341 return sctp_sf_violation_chunklen(net, ep, asoc, type, arg,
1342 @@ -3745,6 +3751,11 @@ enum sctp_disposition sctp_sf_do_asconf(struct net *net,
1343 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands);
1344 }
1345
1346 + /* Make sure that the ASCONF ADDIP chunk has a valid length. */
1347 + if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_addip_chunk)))
1348 + return sctp_sf_violation_chunklen(net, ep, asoc, type, arg,
1349 + commands);
1350 +
1351 /* ADD-IP: Section 4.1.1
1352 * This chunk MUST be sent in an authenticated way by using
1353 * the mechanism defined in [I-D.ietf-tsvwg-sctp-auth]. If this chunk
1354 @@ -3753,13 +3764,7 @@ enum sctp_disposition sctp_sf_do_asconf(struct net *net,
1355 */
1356 if (!asoc->peer.asconf_capable ||
1357 (!net->sctp.addip_noauth && !chunk->auth))
1358 - return sctp_sf_discard_chunk(net, ep, asoc, type, arg,
1359 - commands);
1360 -
1361 - /* Make sure that the ASCONF ADDIP chunk has a valid length. */
1362 - if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_addip_chunk)))
1363 - return sctp_sf_violation_chunklen(net, ep, asoc, type, arg,
1364 - commands);
1365 + return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands);
1366
1367 hdr = (struct sctp_addiphdr *)chunk->skb->data;
1368 serial = ntohl(hdr->serial);
1369 @@ -3888,6 +3893,12 @@ enum sctp_disposition sctp_sf_do_asconf_ack(struct net *net,
1370 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands);
1371 }
1372
1373 + /* Make sure that the ADDIP chunk has a valid length. */
1374 + if (!sctp_chunk_length_valid(asconf_ack,
1375 + sizeof(struct sctp_addip_chunk)))
1376 + return sctp_sf_violation_chunklen(net, ep, asoc, type, arg,
1377 + commands);
1378 +
1379 /* ADD-IP, Section 4.1.2:
1380 * This chunk MUST be sent in an authenticated way by using
1381 * the mechanism defined in [I-D.ietf-tsvwg-sctp-auth]. If this chunk
1382 @@ -3896,14 +3907,7 @@ enum sctp_disposition sctp_sf_do_asconf_ack(struct net *net,
1383 */
1384 if (!asoc->peer.asconf_capable ||
1385 (!net->sctp.addip_noauth && !asconf_ack->auth))
1386 - return sctp_sf_discard_chunk(net, ep, asoc, type, arg,
1387 - commands);
1388 -
1389 - /* Make sure that the ADDIP chunk has a valid length. */
1390 - if (!sctp_chunk_length_valid(asconf_ack,
1391 - sizeof(struct sctp_addip_chunk)))
1392 - return sctp_sf_violation_chunklen(net, ep, asoc, type, arg,
1393 - commands);
1394 + return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands);
1395
1396 addip_hdr = (struct sctp_addiphdr *)asconf_ack->skb->data;
1397 rcvd_serial = ntohl(addip_hdr->serial);
1398 @@ -4475,6 +4479,9 @@ enum sctp_disposition sctp_sf_discard_chunk(struct net *net,
1399 {
1400 struct sctp_chunk *chunk = arg;
1401
1402 + if (asoc && !sctp_vtag_verify(chunk, asoc))
1403 + return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands);
1404 +
1405 /* Make sure that the chunk has a valid length.
1406 * Since we don't know the chunk type, we use a general
1407 * chunkhdr structure to make a comparison.
1408 @@ -4542,6 +4549,9 @@ enum sctp_disposition sctp_sf_violation(struct net *net,
1409 {
1410 struct sctp_chunk *chunk = arg;
1411
1412 + if (!sctp_vtag_verify(chunk, asoc))
1413 + return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands);
1414 +
1415 /* Make sure that the chunk has a valid length. */
1416 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_chunkhdr)))
1417 return sctp_sf_violation_chunklen(net, ep, asoc, type, arg,
1418 @@ -6248,6 +6258,7 @@ static struct sctp_packet *sctp_ootb_pkt_new(
1419 * yet.
1420 */
1421 switch (chunk->chunk_hdr->type) {
1422 + case SCTP_CID_INIT:
1423 case SCTP_CID_INIT_ACK:
1424 {
1425 struct sctp_initack_chunk *initack;
1426 diff --git a/net/tls/tls_sw.c b/net/tls/tls_sw.c
1427 index 7fb5c067f4293..02821b9140546 100644
1428 --- a/net/tls/tls_sw.c
1429 +++ b/net/tls/tls_sw.c
1430 @@ -35,6 +35,7 @@
1431 * SOFTWARE.
1432 */
1433
1434 +#include <linux/bug.h>
1435 #include <linux/sched/signal.h>
1436 #include <linux/module.h>
1437 #include <linux/splice.h>
1438 @@ -43,6 +44,14 @@
1439 #include <net/strparser.h>
1440 #include <net/tls.h>
1441
1442 +noinline void tls_err_abort(struct sock *sk, int err)
1443 +{
1444 + WARN_ON_ONCE(err >= 0);
1445 + /* sk->sk_err should contain a positive error code. */
1446 + sk->sk_err = -err;
1447 + sk->sk_error_report(sk);
1448 +}
1449 +
1450 static int __skb_nsg(struct sk_buff *skb, int offset, int len,
1451 unsigned int recursion_level)
1452 {
1453 @@ -416,7 +425,7 @@ int tls_tx_records(struct sock *sk, int flags)
1454
1455 tx_err:
1456 if (rc < 0 && rc != -EAGAIN)
1457 - tls_err_abort(sk, EBADMSG);
1458 + tls_err_abort(sk, -EBADMSG);
1459
1460 return rc;
1461 }
1462 @@ -447,7 +456,7 @@ static void tls_encrypt_done(struct crypto_async_request *req, int err)
1463
1464 /* If err is already set on socket, return the same code */
1465 if (sk->sk_err) {
1466 - ctx->async_wait.err = sk->sk_err;
1467 + ctx->async_wait.err = -sk->sk_err;
1468 } else {
1469 ctx->async_wait.err = err;
1470 tls_err_abort(sk, err);
1471 @@ -761,7 +770,7 @@ static int tls_push_record(struct sock *sk, int flags,
1472 msg_pl->sg.size + prot->tail_size, i);
1473 if (rc < 0) {
1474 if (rc != -EINPROGRESS) {
1475 - tls_err_abort(sk, EBADMSG);
1476 + tls_err_abort(sk, -EBADMSG);
1477 if (split) {
1478 tls_ctx->pending_open_record_frags = true;
1479 tls_merge_open_record(sk, rec, tmp, orig_end);
1480 @@ -1822,7 +1831,7 @@ int tls_sw_recvmsg(struct sock *sk,
1481 err = decrypt_skb_update(sk, skb, &msg->msg_iter,
1482 &chunk, &zc, async_capable);
1483 if (err < 0 && err != -EINPROGRESS) {
1484 - tls_err_abort(sk, EBADMSG);
1485 + tls_err_abort(sk, -EBADMSG);
1486 goto recv_end;
1487 }
1488
1489 @@ -2002,7 +2011,7 @@ ssize_t tls_sw_splice_read(struct socket *sock, loff_t *ppos,
1490 }
1491
1492 if (err < 0) {
1493 - tls_err_abort(sk, EBADMSG);
1494 + tls_err_abort(sk, -EBADMSG);
1495 goto splice_read_end;
1496 }
1497 ctx->decrypted = true;
1498 diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
1499 index 7b170ed6923e7..7633d6a74bc2b 100644
1500 --- a/net/wireless/nl80211.c
1501 +++ b/net/wireless/nl80211.c
1502 @@ -3480,7 +3480,7 @@ static int nl80211_valid_4addr(struct cfg80211_registered_device *rdev,
1503 enum nl80211_iftype iftype)
1504 {
1505 if (!use_4addr) {
1506 - if (netdev && (netdev->priv_flags & IFF_BRIDGE_PORT))
1507 + if (netdev && netif_is_bridge_port(netdev))
1508 return -EBUSY;
1509 return 0;
1510 }
1511 diff --git a/net/wireless/scan.c b/net/wireless/scan.c
1512 index 1580535d53f86..6cefaad3b7f84 100644
1513 --- a/net/wireless/scan.c
1514 +++ b/net/wireless/scan.c
1515 @@ -379,14 +379,17 @@ cfg80211_add_nontrans_list(struct cfg80211_bss *trans_bss,
1516 }
1517 ssid_len = ssid[1];
1518 ssid = ssid + 2;
1519 - rcu_read_unlock();
1520
1521 /* check if nontrans_bss is in the list */
1522 list_for_each_entry(bss, &trans_bss->nontrans_list, nontrans_list) {
1523 - if (is_bss(bss, nontrans_bss->bssid, ssid, ssid_len))
1524 + if (is_bss(bss, nontrans_bss->bssid, ssid, ssid_len)) {
1525 + rcu_read_unlock();
1526 return 0;
1527 + }
1528 }
1529
1530 + rcu_read_unlock();
1531 +
1532 /* add to the list */
1533 list_add_tail(&nontrans_bss->nontrans_list, &trans_bss->nontrans_list);
1534 return 0;
1535 diff --git a/net/wireless/util.c b/net/wireless/util.c
1536 index f0247eab5bc94..aaefaf3422a1a 100644
1537 --- a/net/wireless/util.c
1538 +++ b/net/wireless/util.c
1539 @@ -975,14 +975,14 @@ int cfg80211_change_iface(struct cfg80211_registered_device *rdev,
1540 !(rdev->wiphy.interface_modes & (1 << ntype)))
1541 return -EOPNOTSUPP;
1542
1543 - /* if it's part of a bridge, reject changing type to station/ibss */
1544 - if ((dev->priv_flags & IFF_BRIDGE_PORT) &&
1545 - (ntype == NL80211_IFTYPE_ADHOC ||
1546 - ntype == NL80211_IFTYPE_STATION ||
1547 - ntype == NL80211_IFTYPE_P2P_CLIENT))
1548 - return -EBUSY;
1549 -
1550 if (ntype != otype) {
1551 + /* if it's part of a bridge, reject changing type to station/ibss */
1552 + if (netif_is_bridge_port(dev) &&
1553 + (ntype == NL80211_IFTYPE_ADHOC ||
1554 + ntype == NL80211_IFTYPE_STATION ||
1555 + ntype == NL80211_IFTYPE_P2P_CLIENT))
1556 + return -EBUSY;
1557 +
1558 dev->ieee80211_ptr->use_4addr = false;
1559 dev->ieee80211_ptr->mesh_id_up_len = 0;
1560 wdev_lock(dev->ieee80211_ptr);
1561 diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c
1562 index f3ff825d9dd33..3a169a026635d 100644
1563 --- a/tools/perf/builtin-script.c
1564 +++ b/tools/perf/builtin-script.c
1565 @@ -3779,11 +3779,15 @@ int cmd_script(int argc, const char **argv)
1566 goto out_delete;
1567
1568 uname(&uts);
1569 - if (data.is_pipe || /* assume pipe_mode indicates native_arch */
1570 - !strcmp(uts.machine, session->header.env.arch) ||
1571 - (!strcmp(uts.machine, "x86_64") &&
1572 - !strcmp(session->header.env.arch, "i386")))
1573 + if (data.is_pipe) { /* Assume pipe_mode indicates native_arch */
1574 native_arch = true;
1575 + } else if (session->header.env.arch) {
1576 + if (!strcmp(uts.machine, session->header.env.arch))
1577 + native_arch = true;
1578 + else if (!strcmp(uts.machine, "x86_64") &&
1579 + !strcmp(session->header.env.arch, "i386"))
1580 + native_arch = true;
1581 + }
1582
1583 script.session = session;
1584 script__setup_sample_type(&script);