Linux 5.4.157
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.4.157 kernel.
All users of the 5.4 kernel series must upgrade.
The updated 5.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.4.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/arm/boot/compressed/decompress.c | 3 arch/arm/kernel/vmlinux-xip.lds.S | 2 arch/arm/mm/proc-macros.S | 1 arch/arm/probes/kprobes/core.c | 2 arch/arm64/boot/dts/allwinner/sun50i-h5-nanopi-neo2.dts | 2 arch/nios2/platform/Kconfig.platform | 1 arch/powerpc/net/bpf_jit_comp64.c | 10 +- arch/s390/kvm/interrupt.c | 5 - arch/s390/kvm/kvm-s390.c | 1 drivers/ata/sata_mv.c | 4 drivers/base/regmap/regcache-rbtree.c | 7 - drivers/gpu/drm/ttm/ttm_bo_util.c | 1 drivers/infiniband/core/sa_query.c | 5 - drivers/infiniband/hw/hfi1/pio.c | 9 +- drivers/infiniband/hw/mlx5/qp.c | 2 drivers/infiniband/hw/qib/qib_user_sdma.c | 33 +++++-- drivers/mmc/host/cqhci.c | 3 drivers/mmc/host/dw_mmc-exynos.c | 14 +++ drivers/mmc/host/sdhci-esdhc-imx.c | 17 ++++ drivers/mmc/host/sdhci.c | 6 + drivers/mmc/host/vub300.c | 18 ++-- drivers/net/bonding/bond_main.c | 2 drivers/net/ethernet/micrel/ksz884x.c | 2 drivers/net/ethernet/microchip/lan743x_main.c | 22 +++++ drivers/net/ethernet/nxp/lpc_eth.c | 5 - drivers/net/phy/mdio_bus.c | 1 drivers/net/phy/phy.c | 32 ++++++- drivers/net/usb/lan78xx.c | 6 + drivers/net/usb/usbnet.c | 5 + drivers/nfc/port100.c | 4 drivers/nvme/host/tcp.c | 2 drivers/nvme/target/tcp.c | 2 drivers/pinctrl/bcm/pinctrl-ns.c | 29 ++---- include/net/tls.h | 9 -- net/batman-adv/bridge_loop_avoidance.c | 8 + net/batman-adv/main.c | 56 +++++++++---- net/batman-adv/network-coding.c | 4 net/batman-adv/translation-table.c | 4 net/core/dev.c | 6 + net/core/rtnetlink.c | 12 +- net/ipv4/route.c | 12 +- net/ipv4/tcp_bpf.c | 12 ++ net/ipv6/route.c | 20 +++- net/sctp/sm_statefuns.c | 67 +++++++++------- net/tls/tls_sw.c | 19 +++- net/wireless/nl80211.c | 2 net/wireless/scan.c | 7 + net/wireless/util.c | 14 +-- tools/perf/builtin-script.c | 12 +- 50 files changed, 359 insertions(+), 165 deletions(-)
Andrew Lunn (2):
phy: phy_ethtool_ksettings_get: Lock the phy for consistency
phy: phy_start_aneg: Add an unlocked version
Arnd Bergmann (3):
ARM: 9134/1: remove duplicate memcpy() definition
ARM: 9139/1: kprobes: fix arch_init_kprobes() prototype
ARM: 9141/1: only warn about XIP address when not compile testing
Christian König (1):
drm/ttm: fix memleak in ttm_transfered_destroy
Clément Bœsch (1):
arm64: dts: allwinner: h5: NanoPI Neo 2: Fix ethernet node
Daniel Jordan (2):
net/tls: Fix flipped sign in tls_err_abort() calls net/tls: Fix flipped sign in async_wait.err assignment
Eric Dumazet (2):
ipv6: use siphash in rt6_exception_hash()
ipv4: use siphash instead of Jenkins in fnhe_hashfun()
Greg Kroah-Hartman (1):
Linux 5.4.157
Guenter Roeck (1):
nios2: Make NIOS2_DTB_SOURCE_BOOL depend on !COMPILE_TEST
Haibo Chen (1):
mmc: sdhci-esdhc-imx: clear the buffer_read_ready to reset standard tuning circuit
Halil Pasic (2):
KVM: s390: clear kicked_mask before sleeping again
KVM: s390: preserve deliverable_mask in __airqs_kick_single_vcpu
Jaehoon Chung (1):
mmc: dw_mmc: exynos: fix the finding clock sample value
Janusz Dziedzic (1):
cfg80211: correct bridge/4addr mode check
Johan Hovold (2):
mmc: vub300: fix control-message timeouts
net: lan78xx: fix division by zero in send path
Johannes Berg (1):
cfg80211: scan: fix RCU in cfg80211_add_nontrans_list()
Julian Wiedmann (1):
net: use netif_is_bridge_port() to check for IFF_BRIDGE_PORT
Krzysztof Kozlowski (1):
nfc: port100: fix using -ERRNO as command type mask
Liu Jian (1):
tcp_bpf: Fix one concurrency problem in the tcp_bpf_send_verdict function
Mark Zhang (1):
RDMA/sa_query: Use strscpy_pad instead of memcpy to copy a string
Michael Chan (1):
net: Prevent infinite while loop in skb_tx_hash()
Mike Marciniszyn (2):
IB/qib: Protect from buffer overflow in struct qib_user_sdma_pkt fields IB/hfi1: Fix abba locking issue with sc_disable()
Naveen N. Rao (1):
powerpc/bpf: Fix BPF_MOD when imm == 1
Nick Desaulniers (1):
ARM: 9133/1: mm: proc-macros: ensure *_tlb_fns are 4B aligned
Oliver Neukum (1):
usbnet: sanity check for maxpacket
Patrisious Haddad (1):
RDMA/mlx5: Set user priority for DCT
Pavel Skripkin (2):
Revert "net: mdiobus: Fix memory leak in __mdiobus_register"
net: batman-adv: fix error handling
Rafał Miłecki (1):
Revert "pinctrl: bcm: ns: support updated DT binding as syscon subnode"
Shawn Guo (1):
mmc: sdhci: Map more voltage level to SDHCI_POWER_330
Song Liu (1):
perf script: Check session->header.env.arch before using it
Trevor Woerner (1):
net: nxp: lpc_eth.c: avoid hang when bringing interface down
Varun Prakash (2):
nvmet-tcp: fix data digest pointer calculation
nvme-tcp: fix data digest pointer calculation
Wang Hai (1):
usbnet: fix error return code in usbnet_probe()
Wenbin Mei (1):
mmc: cqhci: clear HALT state after CQE enable
Xin Long (6):
sctp: use init_tag from inithdr for ABORT chunk
sctp: fix the processing for INIT_ACK chunk
sctp: fix the processing for COOKIE_ECHO chunk
sctp: add vtag check in sctp_sf_violation
sctp: add vtag check in sctp_sf_do_8_5_1_E_sa
sctp: add vtag check in sctp_sf_ootb
Yang Yingliang (1):
regmap: Fix possible double-free in regcache_rbtree_exit()
Yuiko Oshino (2):
net: ethernet: microchip: lan743x: Fix driver crash when lan743x_pm_resume fails
net: ethernet: microchip: lan743x: Fix dma allocation failure by using dma_set_mask_and_coherent
Zheyu Ma (1):
ata: sata_mv: Fix the error handling of mv_chip_id()
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 4 -SUBLEVEL = 156 +SUBLEVEL = 157 EXTRAVERSION = NAME = Kleptomaniac Octopus
arch/arm/boot/compressed/decompress.c +3 -0
@@ -47,7 +47,10 @@ extern char * strchrnul(const char *, int);#endif #ifdef CONFIG_KERNEL_XZ +/* Prevent KASAN override of string helpers in decompressor */ +#undef memmove#define memmove memmove +#undef memcpy#define memcpy memcpy#include "../../../../lib/decompress_unxz.c" #endif
arch/arm/kernel/vmlinux-xip.lds.S +1 -1
@@ -180,7 +180,7 @@ ASSERT(__hyp_idmap_text_end - (__hyp_idmap_text_start & PAGE_MASK) <= PAGE_SIZE, ASSERT((_end - __bss_start) >= 12288, ".bss too small for CONFIG_XIP_DEFLATED_DATA") #endif -#ifdef CONFIG_ARM_MPU +#if defined(CONFIG_ARM_MPU) && !defined(CONFIG_COMPILE_TEST) /* * Due to PMSAv7 restriction on base address and size we have to * enforce minimal alignment restrictions. It was seen that weaker
arch/arm/mm/proc-macros.S +1 -0
@@ -342,6 +342,7 @@ ENTRY(\name\()_cache_fns) .macro define_tlb_functions name:req, flags_up:req, flags_smp .type \name\()_tlb_fns, #object + .align 2 ENTRY(\name\()_tlb_fns) .long \name\()_flush_user_tlb_range .long \name\()_flush_kern_tlb_range
arch/arm/probes/kprobes/core.c +1 -1
@@ -534,7 +534,7 @@ static struct undef_hook kprobes_arm_break_hook = {#endif /* !CONFIG_THUMB2_KERNEL */ -int __init arch_init_kprobes () +int __init arch_init_kprobes (void ) {arm_probes_decode_init ();#ifdef CONFIG_THUMB2_KERNEL
arch/arm64/boot/dts/allwinner/sun50i-h5-nanopi-neo2.dts +1 -1
@@ -114,7 +114,7 @@ pinctrl-0 = <&emac_rgmii_pins>; phy-supply = <®_gmac_3v3>; phy-handle = <&ext_rgmii_phy>; - phy-mode = "rgmii"; + phy-mode = "rgmii-id"; status = "okay"; };
arch/nios2/platform/Kconfig.platform +1 -0
@@ -37,6 +37,7 @@ config NIOS2_DTB_PHYS_ADDR config NIOS2_DTB_SOURCE_BOOL bool "Compile and link device tree into kernel image" + depends on !COMPILE_TEST help This allows you to specify a dts (device tree source) file which will be compiled and linked into the kernel image.
arch/powerpc/net/bpf_jit_comp64.c +8 -2
@@ -408,8 +408,14 @@ static int bpf_jit_build_body(struct bpf_prog *fp, u32 *image,case BPF_ALU64 |BPF_DIV |BPF_K :/* dst /= imm */ if (imm ==0 )return -EINVAL ; -else if (imm ==1 ) - goto bpf_alu32_trunc; +if (imm ==1 ) { +if (BPF_OP (code) ==BPF_DIV ) { + goto bpf_alu32_trunc; + }else { +PPC_LI (dst_reg,0 ); +break ; + } + }PPC_LI32 (b2p[TMP_REG_1 ], imm);switch (BPF_CLASS (code)) {
arch/s390/kvm/interrupt.c +3 -2
@@ -2987,13 +2987,14 @@ static void __airqs_kick_single_vcpu(struct kvm *kvm, u8 deliverable_mask)int vcpu_idx, online_vcpus =atomic_read (&kvm->online_vcpus);struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;struct kvm_vcpu *vcpu; +u8 vcpu_isc_mask;for_each_set_bit (vcpu_idx, kvm->arch.idle_mask, online_vcpus) { vcpu =kvm_get_vcpu (kvm, vcpu_idx);if (psw_ioint_disabled (vcpu))continue ; - deliverable_mask &= (u8)(vcpu->arch.sie_block->gcr[6 ] >>24 ); -if (deliverable_mask) { + vcpu_isc_mask = (u8)(vcpu->arch.sie_block->gcr[6 ] >>24 ); +if (deliverable_mask & vcpu_isc_mask) {/* lately kicked but not yet running */ if (test_and_set_bit (vcpu_idx, gi->kicked_mask))return ;
arch/s390/kvm/kvm-s390.c +1 -0
@@ -3092,6 +3092,7 @@ struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm,int kvm_arch_vcpu_runnable (struct kvm_vcpu *vcpu) { +clear_bit (vcpu->vcpu_idx, vcpu->kvm->arch.gisa_int.kicked_mask);return kvm_s390_vcpu_has_irq (vcpu,0 ); }
drivers/ata/sata_mv.c +2 -2
@@ -3892,8 +3892,8 @@ static int mv_chip_id(struct ata_host *host, unsigned int board_idx)break ;default : -dev_err (host->dev,"BUG: invalid board index %u\n" , board_idx); -return 1 ; +dev_alert (host->dev,"BUG: invalid board index %u\n" , board_idx); +return -EINVAL ; } hpriv->hp_flags = hp_flags;
drivers/base/regmap/regcache-rbtree.c +3 -4
@@ -281,14 +281,14 @@ static int regcache_rbtree_insert_to_block(struct regmap *map,if (!blk)return -ENOMEM ; + rbnode->block = blk; +if (BITS_TO_LONGS (blklen) >BITS_TO_LONGS (rbnode->blklen)) { present =krealloc (rbnode->cache_present,BITS_TO_LONGS (blklen) *sizeof (*present),GFP_KERNEL ); -if (!present) { -kfree (blk); +if (!present)return -ENOMEM ; - }memset (present +BITS_TO_LONGS (rbnode->blklen),0 , (BITS_TO_LONGS(blklen) - BITS_TO_LONGS(rbnode->blklen))
@@ -305,7 +305,6 @@ static int regcache_rbtree_insert_to_block(struct regmap *map, }/* update the rbnode block, its size and the base register */ - rbnode->block = blk; rbnode->blklen = blklen; rbnode->base_reg = base_reg; rbnode->cache_present = present;
drivers/gpu/drm/ttm/ttm_bo_util.c +1 -0
@@ -463,6 +463,7 @@ static void ttm_transfered_destroy(struct ttm_buffer_object *bo)struct ttm_transfer_obj *fbo; fbo = container_of(bo, struct ttm_transfer_obj, base); +dma_resv_fini (&fbo->base.base._resv);ttm_bo_put (fbo->bo);kfree (fbo); }
drivers/infiniband/core/sa_query.c +3 -2
@@ -760,8 +760,9 @@ static void ib_nl_set_path_rec_attrs(struct sk_buff *skb,/* Construct the family header first */ header =skb_put (skb,NLMSG_ALIGN (sizeof (*header))); -memcpy (header->device_name,dev_name (&query->port->agent->device->dev), -LS_DEVICE_NAME_MAX ); +strscpy_pad (header->device_name, +dev_name (&query->port->agent->device->dev), +LS_DEVICE_NAME_MAX ); header->port_num = query->port->port_num; if ((comp_mask & IB_SA_PATH_REC_REVERSIBLE) &&
drivers/infiniband/hw/hfi1/pio.c +6 -3
@@ -920,6 +920,7 @@ void sc_disable(struct send_context *sc) {u64 reg;struct pio_buf *pbuf; +LIST_HEAD (wake_list);if (!sc)return ;
@@ -954,19 +955,21 @@ void sc_disable(struct send_context *sc)spin_unlock (&sc->release_lock);write_seqlock (&sc->waitlock); -while (!list_empty (&sc->piowait)) { +if (!list_empty (&sc->piowait)) +list_move (&sc->piowait, &wake_list); +write_sequnlock (&sc->waitlock); +while (!list_empty (&wake_list)) {struct iowait *wait;struct rvt_qp *qp;struct hfi1_qp_priv *priv; - wait = list_first_entry(&sc->piowait, struct iowait, list); + wait = list_first_entry(&wake_list, struct iowait, list); qp =iowait_to_qp (wait); priv = qp->priv;list_del_init (&priv->s_iowait.list); priv->s_iowait.lock =NULL ;hfi1_qp_wakeup (qp,RVT_S_WAIT_PIO |HFI1_S_WAIT_PIO_DRAIN ); } -write_sequnlock (&sc->waitlock);spin_unlock_irq (&sc->alloc_lock); }
drivers/infiniband/hw/mlx5/qp.c +2 -0
@@ -3865,6 +3865,8 @@ static int mlx5_ib_modify_dct(struct ib_qp *ibqp, struct ib_qp_attr *attr,MLX5_SET (dctc, dctc, mtu, attr->path_mtu);MLX5_SET (dctc, dctc, my_addr_index, attr->ah_attr.grh.sgid_index);MLX5_SET (dctc, dctc, hop_limit, attr->ah_attr.grh.hop_limit); +if (attr->ah_attr.type ==RDMA_AH_ATTR_TYPE_ROCE ) +MLX5_SET (dctc, dctc, eth_prio, attr->ah_attr.sl &0x7 ); err = mlx5_core_create_dct(dev->mdev, &qp->dct.mdct, qp->dct.in, MLX5_ST_SZ_BYTES(create_dct_in), out,
drivers/infiniband/hw/qib/qib_user_sdma.c +23 -10
@@ -602,7 +602,7 @@ static int qib_user_sdma_coalesce(const struct qib_devdata *dd,/* * How many pages in this iovec element? */ -static int qib_user_sdma_num_pages (const struct iovec *iov) +static size_t qib_user_sdma_num_pages (const struct iovec *iov) {const unsigned long addr = (unsigned long ) iov->iov_base;const unsigned long len = iov->iov_len;
@@ -658,7 +658,7 @@ static void qib_user_sdma_free_pkt_frag(struct device *dev,static int qib_user_sdma_pin_pages (const struct qib_devdata *dd,struct qib_user_sdma_queue *pq,struct qib_user_sdma_pkt *pkt, -unsigned long addr,int tlen,int npages) +unsigned long addr,int tlen,size_t npages) {struct page *pages[8 ];int i, j;
@@ -722,7 +722,7 @@ static int qib_user_sdma_pin_pkt(const struct qib_devdata *dd,unsigned long idx;for (idx =0 ; idx < niov; idx++) { -const int npages =qib_user_sdma_num_pages (iov + idx); +const size_t npages =qib_user_sdma_num_pages (iov + idx);const unsigned long addr = (unsigned long ) iov[idx].iov_base; ret = qib_user_sdma_pin_pages(dd, pq, pkt, addr,
@@ -824,8 +824,8 @@ static int qib_user_sdma_queue_pkts(const struct qib_devdata *dd,unsigned pktnw;unsigned pktnwc;int nfrags =0 ; -int npages =0 ; -int bytes_togo =0 ; +size_t npages =0 ; +size_t bytes_togo =0 ;int tiddma =0 ;int cfur;
@@ -885,7 +885,11 @@ static int qib_user_sdma_queue_pkts(const struct qib_devdata *dd, npages +=qib_user_sdma_num_pages (&iov[idx]); - bytes_togo += slen; +if (check_add_overflow (bytes_togo, slen, &bytes_togo) || + bytes_togo >type_max (typeof (pkt->bytes_togo))) { + ret = -EINVAL ; + goto free_pbc; + } pktnwc += slen >>2 ; idx++; nfrags++;
@@ -904,8 +908,7 @@ static int qib_user_sdma_queue_pkts(const struct qib_devdata *dd, }if (frag_size) { -int tidsmsize, n; -size_t pktsize; +size_t tidsmsize, n, pktsize, sz, addrlimit; n = npages*((2 *PAGE_SIZE /frag_size)+1 ); pktsize =struct_size (pkt, addr, n);
@@ -923,14 +926,24 @@ static int qib_user_sdma_queue_pkts(const struct qib_devdata *dd,else tidsmsize =0 ; - pkt =kmalloc (pktsize+tidsmsize,GFP_KERNEL ); +if (check_add_overflow (pktsize, tidsmsize, &sz)) { + ret = -EINVAL ; + goto free_pbc; + } + pkt =kmalloc (sz,GFP_KERNEL );if (!pkt) { ret = -ENOMEM ; goto free_pbc; } pkt->largepkt =1 ; pkt->frag_size = frag_size; - pkt->addrlimit = n +ARRAY_SIZE (pkt->addr); +if (check_add_overflow (n,ARRAY_SIZE (pkt->addr), + &addrlimit) || + addrlimit >type_max (typeof (pkt->addrlimit))) { + ret = -EINVAL ; + goto free_pbc; + } + pkt->addrlimit = addrlimit;if (tiddma) {char *tidsm = (char *)pkt + pktsize;
drivers/mmc/host/cqhci.c +3 -0
@@ -273,6 +273,9 @@ static void __cqhci_enable(struct cqhci_host *cq_host)cqhci_writel (cq_host, cqcfg,CQHCI_CFG ); +if (cqhci_readl (cq_host,CQHCI_CTL ) &CQHCI_HALT ) +cqhci_writel (cq_host,0 ,CQHCI_CTL ); + mmc->cqe_on = true;if (cq_host->ops->enable)
drivers/mmc/host/dw_mmc-exynos.c +14 -0
@@ -462,6 +462,18 @@ static s8 dw_mci_exynos_get_best_clksmpl(u8 candiates) } } +/* +* If there is no cadiates value, then it needs to return -EIO. +* If there are candiates values and don't find bset clk sample value, +* then use a first candiates clock sample value. +*/ +for (i =0 ; i < iter; i++) { + __c =ror8 (candiates, i); +if ((__c &0x1 ) ==0x1 ) { + loc = i; + goto out; + } + } out:return loc; }
@@ -492,6 +504,8 @@ static int dw_mci_exynos_execute_tuning(struct dw_mci_slot *slot, u32 opcode) priv->tuned_sample = found; }else { ret = -EIO ; +dev_warn (&mmc->class_dev, +"There is no candiates value about clksmpl!\n" ); }return ret;
drivers/mmc/host/sdhci-esdhc-imx.c +17 -0
@@ -24,6 +24,7 @@#include <linux/pinctrl/consumer.h> #include <linux/platform_data/mmc-esdhc-imx.h> #include <linux/pm_runtime.h> +#include <linux/iopoll.h> #include "sdhci-pltfm.h" #include "sdhci-esdhc.h" #include "cqhci.h"
@@ -1022,6 +1023,7 @@ static void esdhc_reset_tuning(struct sdhci_host *host)struct sdhci_pltfm_host *pltfm_host =sdhci_priv (host);struct pltfm_imx_data *imx_data =sdhci_pltfm_priv (pltfm_host);u32 ctrl; +int ret;/* Reset the tuning circuit */ if (esdhc_is_usdhc (imx_data)) {
@@ -1034,7 +1036,22 @@ static void esdhc_reset_tuning(struct sdhci_host *host) }else if (imx_data->socdata->flags &ESDHC_FLAG_STD_TUNING ) { ctrl =readl (host->ioaddr +SDHCI_AUTO_CMD_STATUS ); ctrl &= ~ESDHC_MIX_CTRL_SMPCLK_SEL ; + ctrl &= ~ESDHC_MIX_CTRL_EXE_TUNE ;writel (ctrl, host->ioaddr +SDHCI_AUTO_CMD_STATUS ); +/* Make sure ESDHC_MIX_CTRL_EXE_TUNE cleared */ + ret =readl_poll_timeout (host->ioaddr +SDHCI_AUTO_CMD_STATUS , + ctrl, !(ctrl &ESDHC_MIX_CTRL_EXE_TUNE ),1 ,50 ); +if (ret == -ETIMEDOUT ) +dev_warn (mmc_dev (host->mmc), +"Warning! clear execute tuning bit failed\n" ); +/* +* SDHCI_INT_DATA_AVAIL is W1C bit, set this bit will clear the +* usdhc IP internal logic flag execute_tuning_with_clr_buf, which +* will finally make sure the normal data transfer logic correct. +*/ + ctrl =readl (host->ioaddr +SDHCI_INT_STATUS ); + ctrl |=SDHCI_INT_DATA_AVAIL ; +writel (ctrl, host->ioaddr +SDHCI_INT_STATUS ); } } }
drivers/mmc/host/sdhci.c +6 -0
@@ -1741,6 +1741,12 @@ void sdhci_set_power_noreg(struct sdhci_host *host, unsigned char mode,break ;case MMC_VDD_32_33 :case MMC_VDD_33_34 : +/* +* 3.4 ~ 3.6V are valid only for those platforms where it's +* known that the voltage range is supported by hardware. +*/ +case MMC_VDD_34_35 : +case MMC_VDD_35_36 : pwr =SDHCI_POWER_330 ;break ;default :
drivers/mmc/host/vub300.c +9 -9
@@ -576,7 +576,7 @@ static void check_vub300_port_status(struct vub300_mmc_host *vub300)GET_SYSTEM_PORT_STATUS ,USB_DIR_IN |USB_TYPE_VENDOR |USB_RECIP_DEVICE ,0x0000 ,0x0000 , &vub300->system_port_status, - sizeof(vub300->system_port_status), HZ); + sizeof(vub300->system_port_status), 1000);if (sizeof (vub300->system_port_status) == retval)new_system_port_status (vub300); }
@@ -1241,7 +1241,7 @@ static void __download_offload_pseudocode(struct vub300_mmc_host *vub300,SET_INTERRUPT_PSEUDOCODE ,USB_DIR_OUT |USB_TYPE_VENDOR |USB_RECIP_DEVICE ,0x0000 ,0x0000 , - xfer_buffer, xfer_length, HZ); + xfer_buffer, xfer_length, 1000);kfree (xfer_buffer);if (retval <0 ) goto copy_error_message;
@@ -1284,7 +1284,7 @@ static void __download_offload_pseudocode(struct vub300_mmc_host *vub300,SET_TRANSFER_PSEUDOCODE ,USB_DIR_OUT |USB_TYPE_VENDOR |USB_RECIP_DEVICE ,0x0000 ,0x0000 , - xfer_buffer, xfer_length, HZ); + xfer_buffer, xfer_length, 1000);kfree (xfer_buffer);if (retval <0 ) goto copy_error_message;
@@ -1991,7 +1991,7 @@ static void __set_clock_speed(struct vub300_mmc_host *vub300, u8 buf[8],usb_control_msg (vub300->udev,usb_sndctrlpipe (vub300->udev,0 ),SET_CLOCK_SPEED ,USB_DIR_OUT |USB_TYPE_VENDOR |USB_RECIP_DEVICE , -0x00 ,0x00 , buf, buf_array_size,HZ ); +0x00 ,0x00 , buf, buf_array_size,1000 );if (retval !=8 ) {dev_err (&vub300->udev->dev,"SET_CLOCK_SPEED" " %dkHz failed with retval=%d\n" , kHzClock, retval);
@@ -2013,14 +2013,14 @@ static void vub300_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)usb_control_msg (vub300->udev,usb_sndctrlpipe (vub300->udev,0 ),SET_SD_POWER ,USB_DIR_OUT |USB_TYPE_VENDOR |USB_RECIP_DEVICE , -0x0000 ,0x0000 ,NULL ,0 ,HZ ); +0x0000 ,0x0000 ,NULL ,0 ,1000 );/* must wait for the VUB300 u-proc to boot up */ msleep (600 ); }else if ((ios->power_mode ==MMC_POWER_UP ) && !vub300->card_powered) {usb_control_msg (vub300->udev,usb_sndctrlpipe (vub300->udev,0 ),SET_SD_POWER ,USB_DIR_OUT |USB_TYPE_VENDOR |USB_RECIP_DEVICE , -0x0001 ,0x0000 ,NULL ,0 ,HZ ); +0x0001 ,0x0000 ,NULL ,0 ,1000 );msleep (600 ); vub300->card_powered =1 ; }else if (ios->power_mode ==MMC_POWER_ON ) {
@@ -2282,14 +2282,14 @@ static int vub300_probe(struct usb_interface *interface,GET_HC_INF0 ,USB_DIR_IN |USB_TYPE_VENDOR |USB_RECIP_DEVICE ,0x0000 ,0x0000 , &vub300->hc_info, - sizeof(vub300->hc_info), HZ); + sizeof(vub300->hc_info), 1000);if (retval <0 ) goto error5; retval =usb_control_msg (vub300->udev,usb_sndctrlpipe (vub300->udev,0 ),SET_ROM_WAIT_STATES ,USB_DIR_OUT |USB_TYPE_VENDOR |USB_RECIP_DEVICE , - firmware_rom_wait_states,0x0000 ,NULL ,0 ,HZ ); + firmware_rom_wait_states,0x0000 ,NULL ,0 ,1000 );if (retval <0 ) goto error5; dev_info(&vub300->udev->dev,
@@ -2304,7 +2304,7 @@ static int vub300_probe(struct usb_interface *interface,GET_SYSTEM_PORT_STATUS ,USB_DIR_IN |USB_TYPE_VENDOR |USB_RECIP_DEVICE ,0x0000 ,0x0000 , &vub300->system_port_status, - sizeof(vub300->system_port_status), HZ); + sizeof(vub300->system_port_status), 1000);if (retval <0 ) { goto error4; }else if (sizeof (vub300->system_port_status) == retval) {
drivers/net/bonding/bond_main.c +1 -1
@@ -1219,7 +1219,7 @@ static rx_handler_result_t bond_handle_frame(struct sk_buff **pskb) skb->dev = bond->dev;if (BOND_MODE (bond) ==BOND_MODE_ALB && - bond->dev->priv_flags &IFF_BRIDGE_PORT && +netif_is_bridge_port (bond->dev) && skb->pkt_type ==PACKET_HOST ) { if (unlikely(skb_cow_head(skb,
drivers/net/ethernet/micrel/ksz884x.c +1 -1
@@ -5693,7 +5693,7 @@ static void dev_set_promiscuous(struct net_device *dev, struct dev_priv *priv,* from the bridge. */ if ((hw->features &STP_SUPPORT ) && !promiscuous && - (dev->priv_flags &IFF_BRIDGE_PORT )) { +netif_is_bridge_port (dev)) {struct ksz_switch *sw = hw->ksz_switch;int port = priv->port.first_port;
drivers/net/ethernet/microchip/lan743x_main.c +22 -0
@@ -1706,6 +1706,16 @@ static int lan743x_tx_ring_init(struct lan743x_tx *tx) ret = -EINVAL ; goto cleanup; } +if (dma_set_mask_and_coherent (&tx->adapter->pdev->dev, +DMA_BIT_MASK (64 ))) { +if (dma_set_mask_and_coherent (&tx->adapter->pdev->dev, +DMA_BIT_MASK (32 ))) { +dev_warn (&tx->adapter->pdev->dev, +"lan743x_: No suitable DMA available\n" ); + ret = -ENOMEM ; + goto cleanup; + } + } ring_allocation_size =ALIGN (tx->ring_size *sizeof (struct lan743x_tx_descriptor ),PAGE_SIZE );
@@ -2256,6 +2266,16 @@ static int lan743x_rx_ring_init(struct lan743x_rx *rx) ret = -EINVAL ; goto cleanup; } +if (dma_set_mask_and_coherent (&rx->adapter->pdev->dev, +DMA_BIT_MASK (64 ))) { +if (dma_set_mask_and_coherent (&rx->adapter->pdev->dev, +DMA_BIT_MASK (32 ))) { +dev_warn (&rx->adapter->pdev->dev, +"lan743x_: No suitable DMA available\n" ); + ret = -ENOMEM ; + goto cleanup; + } + } ring_allocation_size =ALIGN (rx->ring_size *sizeof (struct lan743x_rx_descriptor ),PAGE_SIZE );
@@ -3001,6 +3021,8 @@ static int lan743x_pm_resume(struct device *dev)if (ret) {netif_err (adapter, probe, adapter->netdev,"lan743x_hardware_init returned %d\n" , ret); +lan743x_pci_cleanup (adapter); +return ret; }/* open netdev when netdev is at running state while resume.
drivers/net/ethernet/nxp/lpc_eth.c +2 -3
@@ -1007,9 +1007,6 @@ static int lpc_eth_close(struct net_device *ndev)napi_disable (&pldat->napi);netif_stop_queue (ndev); -if (ndev->phydev) -phy_stop (ndev->phydev); -spin_lock_irqsave (&pldat->lock, flags);__lpc_eth_reset (pldat);netif_carrier_off (ndev);
@@ -1017,6 +1014,8 @@ static int lpc_eth_close(struct net_device *ndev)writel (0 ,LPC_ENET_MAC2 (pldat->net_base));spin_unlock_irqrestore (&pldat->lock, flags); +if (ndev->phydev) +phy_stop (ndev->phydev);clk_disable_unprepare (pldat->clk);return 0 ;
drivers/net/phy/mdio_bus.c +0 -1
@@ -395,7 +395,6 @@ int __mdiobus_register(struct mii_bus *bus, struct module *owner) err =device_register (&bus->dev);if (err) {pr_err ("mii_bus %s failed to register\n" , bus->id); -put_device (&bus->dev);return -EINVAL ; }
drivers/net/phy/phy.c +26 -6
@@ -367,6 +367,7 @@ EXPORT_SYMBOL(phy_ethtool_ksettings_set);void phy_ethtool_ksettings_get (struct phy_device *phydev,struct ethtool_link_ksettings *cmd) { +mutex_lock (&phydev->lock);linkmode_copy (cmd->link_modes.supported, phydev->supported);linkmode_copy (cmd->link_modes.advertising, phydev->advertising);linkmode_copy (cmd->link_modes.lp_advertising, phydev->lp_advertising);
@@ -383,6 +384,7 @@ void phy_ethtool_ksettings_get(struct phy_device *phydev, cmd->base.autoneg = phydev->autoneg; cmd->base.eth_tp_mdix_ctrl = phydev->mdix_ctrl; cmd->base.eth_tp_mdix = phydev->mdix; +mutex_unlock (&phydev->lock); }EXPORT_SYMBOL (phy_ethtool_ksettings_get);
@@ -553,7 +555,7 @@ static int phy_check_link_status(struct phy_device *phydev) }/** -* phy_start_aneg - start auto-negotiation for this PHY device +* _phy_start_aneg - start auto-negotiation for this PHY device * @phydev: the phy_device struct * * Description: Sanitizes the settings (if we're not autonegotiating
@@ -561,25 +563,43 @@ static int phy_check_link_status(struct phy_device *phydev)* If the PHYCONTROL Layer is operating, we change the state to * reflect the beginning of Auto-negotiation or forcing. */ -int phy_start_aneg (struct phy_device *phydev) +static int _phy_start_aneg (struct phy_device *phydev) {int err; +lockdep_assert_held (&phydev->lock); +if (!phydev->drv)return -EIO ; -mutex_lock (&phydev->lock); -if (AUTONEG_DISABLE == phydev->autoneg)phy_sanitize_settings (phydev); err =phy_config_aneg (phydev);if (err <0 ) - goto out_unlock; +return err;if (phy_is_started (phydev)) err =phy_check_link_status (phydev); -out_unlock: + +return err; +} + +/** +* phy_start_aneg - start auto-negotiation for this PHY device +* @phydev: the phy_device struct +* +* Description: Sanitizes the settings (if we're not autonegotiating +* them), and then calls the driver's config_aneg function. +* If the PHYCONTROL Layer is operating, we change the state to +* reflect the beginning of Auto-negotiation or forcing. +*/ +int phy_start_aneg (struct phy_device *phydev) +{ +int err; + +mutex_lock (&phydev->lock); + err =_phy_start_aneg (phydev);mutex_unlock (&phydev->lock);return err;
drivers/net/usb/lan78xx.c +6 -0
@@ -3753,6 +3753,12 @@ static int lan78xx_probe(struct usb_interface *intf, dev->maxpacket =usb_maxpacket (dev->udev, dev->pipe_out,1 ); +/* Reject broken descriptors. */ +if (dev->maxpacket ==0 ) { + ret = -ENODEV ; + goto out4; + } +/* driver requires remote-wakeup capability during autosuspend. */ intf->needs_remote_wakeup =1 ;
drivers/net/usb/usbnet.c +5 -0
@@ -1773,6 +1773,11 @@ usbnet_probe (struct usb_interface *udev, const struct usb_device_id *prod)if (!dev->rx_urb_size) dev->rx_urb_size = dev->hard_mtu; dev->maxpacket =usb_maxpacket (dev->udev, dev->out,1 ); +if (dev->maxpacket ==0 ) { +/* that is a broken device */ + status = -ENODEV ; + goto out4; + }/* let userspace know we have a random address */ if (ether_addr_equal (net->dev_addr, node_id))
drivers/nfc/port100.c +2 -2
@@ -1003,11 +1003,11 @@ static u64 port100_get_command_type_mask(struct port100 *dev) skb =port100_alloc_skb (dev,0 );if (!skb) -return -ENOMEM ; +return 0 ; resp =port100_send_cmd_sync (dev,PORT100_CMD_GET_COMMAND_TYPE , skb);if (IS_ERR (resp)) -return PTR_ERR (resp); +return 0 ;if (resp->len <8 ) mask =0 ;
drivers/nvme/host/tcp.c +1 -1
@@ -962,7 +962,7 @@ static int nvme_tcp_try_send_ddgst(struct nvme_tcp_request *req)int ret;struct msghdr msg = { .msg_flags =MSG_DONTWAIT |MSG_EOR };struct kvec iov = { - .iov_base = &req->ddgst + req->offset, + .iov_base = (u8 *)&req->ddgst + req->offset, .iov_len =NVME_TCP_DIGEST_LENGTH - req->offset };
drivers/nvme/target/tcp.c +1 -1
@@ -633,7 +633,7 @@ static int nvmet_try_send_ddgst(struct nvmet_tcp_cmd *cmd)struct nvmet_tcp_queue *queue = cmd->queue;struct msghdr msg = { .msg_flags =MSG_DONTWAIT };struct kvec iov = { - .iov_base = &cmd->exp_ddgst + cmd->offset, + .iov_base = (u8 *)&cmd->exp_ddgst + cmd->offset, .iov_len =NVME_TCP_DIGEST_LENGTH - cmd->offset };int ret;
drivers/pinctrl/bcm/pinctrl-ns.c +10 -19
@@ -5,7 +5,6 @@#include <linux/err.h> #include <linux/io.h> -#include <linux/mfd/syscon.h> #include <linux/module.h> #include <linux/of.h> #include <linux/of_device.h>
@@ -13,7 +12,6 @@#include <linux/pinctrl/pinctrl.h> #include <linux/pinctrl/pinmux.h> #include <linux/platform_device.h> -#include <linux/regmap.h> #include <linux/slab.h> #define FLAG_BCM4708 BIT(1)
@@ -24,8 +22,7 @@ struct ns_pinctrl {struct device *dev;unsigned int chipset_flag;struct pinctrl_dev *pctldev; -struct regmap *regmap; -u32 offset; +void __iomem *base;struct pinctrl_desc pctldesc;struct ns_pinctrl_group *groups;
@@ -232,9 +229,9 @@ static int ns_pinctrl_set_mux(struct pinctrl_dev *pctrl_dev, unset |=BIT (pin_number); } -regmap_read (ns_pinctrl->regmap, ns_pinctrl->offset, &tmp); + tmp =readl (ns_pinctrl->base); tmp &= ~unset; -regmap_write (ns_pinctrl->regmap, ns_pinctrl->offset, tmp); +writel (tmp, ns_pinctrl->base);return 0 ; }
@@ -266,13 +263,13 @@ static const struct of_device_id ns_pinctrl_of_match_table[] = {static int ns_pinctrl_probe (struct platform_device *pdev) {struct device *dev = &pdev->dev; -struct device_node *np = dev->of_node;const struct of_device_id *of_id;struct ns_pinctrl *ns_pinctrl;struct pinctrl_desc *pctldesc;struct pinctrl_pin_desc *pin;struct ns_pinctrl_group *group;struct ns_pinctrl_function *function; +struct resource *res;int i; ns_pinctrl =devm_kzalloc (dev,sizeof (*ns_pinctrl),GFP_KERNEL );
@@ -290,18 +287,12 @@ static int ns_pinctrl_probe(struct platform_device *pdev)return -EINVAL ; ns_pinctrl->chipset_flag = (uintptr_t )of_id->data; - ns_pinctrl->regmap =syscon_node_to_regmap (of_get_parent (np)); -if (IS_ERR (ns_pinctrl->regmap)) { -int err =PTR_ERR (ns_pinctrl->regmap); - -dev_err (dev,"Failed to map pinctrl regs: %d\n" , err); - -return err; - } - -if (of_property_read_u32 (np,"offset" , &ns_pinctrl->offset)) { -dev_err (dev,"Failed to get register offset\n" ); -return -ENOENT ; + res =platform_get_resource_byname (pdev,IORESOURCE_MEM , +"cru_gpio_control" ); + ns_pinctrl->base =devm_ioremap_resource (dev, res); +if (IS_ERR (ns_pinctrl->base)) { +dev_err (dev,"Failed to map pinctrl regs\n" ); +return PTR_ERR (ns_pinctrl->base); }memcpy (pctldesc, &ns_pinctrl_desc,sizeof (*pctldesc));
include/net/tls.h +2 -7
@@ -360,6 +360,7 @@ int tls_sk_query(struct sock *sk, int optname, char __user *optval, int __user *optlen);int tls_sk_attach (struct sock *sk,int optname,char __user *optval,unsigned int optlen); +void tls_err_abort (struct sock *sk,int err);int tls_set_sw_offload (struct sock *sk,struct tls_context *ctx,int tx);void tls_sw_strparser_arm (struct sock *sk,struct tls_context *ctx);
@@ -465,12 +466,6 @@ static inline bool tls_is_sk_tx_device_offloaded(struct sock *sk)#endif } -static inline void tls_err_abort (struct sock *sk,int err) -{ - sk->sk_err = err; - sk->sk_error_report (sk); -} -static inline bool tls_bigint_increment (unsigned char *seq,int len) {int i;
@@ -499,7 +494,7 @@ static inline void tls_advance_record_sn(struct sock *sk, struct cipher_context *ctx) {if (tls_bigint_increment (ctx->rec_seq, prot->rec_seq_size)) -tls_err_abort (sk,EBADMSG ); +tls_err_abort (sk, -EBADMSG );if (prot->version !=TLS_1_3_VERSION ) tls_bigint_increment(ctx->iv + TLS_CIPHER_AES_GCM_128_SALT_SIZE,
net/batman-adv/bridge_loop_avoidance.c +6 -2
@@ -1561,10 +1561,14 @@ int batadv_bla_init(struct batadv_priv *bat_priv)return 0 ; bat_priv->bla.claim_hash =batadv_hash_new (128 ); - bat_priv->bla.backbone_hash =batadv_hash_new (32 ); +if (!bat_priv->bla.claim_hash) +return -ENOMEM ; -if (!bat_priv->bla.claim_hash || !bat_priv->bla.backbone_hash) + bat_priv->bla.backbone_hash =batadv_hash_new (32 ); +if (!bat_priv->bla.backbone_hash) { +batadv_hash_destroy (bat_priv->bla.claim_hash);return -ENOMEM ; + }batadv_hash_set_lock_class (bat_priv->bla.claim_hash, &batadv_claim_hash_lock_class_key);
net/batman-adv/main.c +40 -16
77 lines not on this page · raw message
net/batman-adv/network-coding.c +3 -1
@@ -155,8 +155,10 @@ int batadv_nc_mesh_init(struct batadv_priv *bat_priv) &batadv_nc_coding_hash_lock_class_key); bat_priv->nc.decoding_hash =batadv_hash_new (128 ); -if (!bat_priv->nc.decoding_hash) +if (!bat_priv->nc.decoding_hash) { +batadv_hash_destroy (bat_priv->nc.coding_hash); goto err; + }batadv_hash_set_lock_class (bat_priv->nc.decoding_hash, &batadv_nc_decoding_hash_lock_class_key);
net/batman-adv/translation-table.c +3 -1
@@ -4405,8 +4405,10 @@ int batadv_tt_init(struct batadv_priv *bat_priv)return ret; ret =batadv_tt_global_init (bat_priv); -if (ret <0 ) +if (ret <0 ) { +batadv_tt_local_table_free (bat_priv);return ret; + } batadv_tvlv_handler_register(bat_priv, batadv_tt_tvlv_ogm_handler_v1, batadv_tt_tvlv_unicast_handler_v1,
net/core/dev.c +6 -0
@@ -2787,6 +2787,12 @@ static u16 skb_tx_hash(const struct net_device *dev, qoffset = sb_dev->tc_to_txq[tc].offset; qcount = sb_dev->tc_to_txq[tc].count; +if (unlikely (!qcount)) { +net_warn_ratelimited ("%s: invalid qcount, qoffset %u for tc %u\n" , + sb_dev->name, qoffset, tc); + qoffset =0 ; + qcount = dev->real_num_tx_queues; + } }if (skb_rx_queue_recorded (skb)) {
net/core/rtnetlink.c +6 -6
@@ -3729,7 +3729,7 @@ static int rtnl_fdb_add(struct sk_buff *skb, struct nlmsghdr *nlh,/* Support fdb on master device the net/bridge default case */ if ((!ndm->ndm_flags || ndm->ndm_flags &NTF_MASTER ) && - (dev->priv_flags &IFF_BRIDGE_PORT )) { +netif_is_bridge_port (dev)) {struct net_device *br_dev =netdev_master_upper_dev_get (dev);const struct net_device_ops *ops = br_dev->netdev_ops;
@@ -3840,7 +3840,7 @@ static int rtnl_fdb_del(struct sk_buff *skb, struct nlmsghdr *nlh,/* Support fdb on master device the net/bridge default case */ if ((!ndm->ndm_flags || ndm->ndm_flags &NTF_MASTER ) && - (dev->priv_flags &IFF_BRIDGE_PORT )) { +netif_is_bridge_port (dev)) {struct net_device *br_dev =netdev_master_upper_dev_get (dev);const struct net_device_ops *ops = br_dev->netdev_ops;
@@ -4066,13 +4066,13 @@ static int rtnl_fdb_dump(struct sk_buff *skb, struct netlink_callback *cb)continue ;if (!br_idx) {/* user did not specify a specific bridge */ -if (dev->priv_flags &IFF_BRIDGE_PORT ) { +if (netif_is_bridge_port (dev)) { br_dev =netdev_master_upper_dev_get (dev); cops = br_dev->netdev_ops; } }else {if (dev != br_dev && - !(dev->priv_flags &IFF_BRIDGE_PORT )) + !netif_is_bridge_port (dev))continue ; if (br_dev != netdev_master_upper_dev_get(dev) &&
@@ -4084,7 +4084,7 @@ static int rtnl_fdb_dump(struct sk_buff *skb, struct netlink_callback *cb)if (idx < s_idx) goto cont; -if (dev->priv_flags &IFF_BRIDGE_PORT ) { +if (netif_is_bridge_port (dev)) {if (cops && cops->ndo_fdb_dump) { err = cops->ndo_fdb_dump(skb, cb, br_dev, dev,
@@ -4234,7 +4234,7 @@ static int rtnl_fdb_get(struct sk_buff *in_skb, struct nlmsghdr *nlh,if (dev) {if (!ndm_flags || (ndm_flags &NTF_MASTER )) { -if (!(dev->priv_flags &IFF_BRIDGE_PORT )) { +if (!netif_is_bridge_port (dev)) {NL_SET_ERR_MSG (extack,"Device is not a bridge port" );return -EINVAL ; }
net/ipv4/route.c +6 -6
@@ -631,14 +631,14 @@ static void fnhe_remove_oldest(struct fnhe_hash_bucket *hash)kfree_rcu (oldest, rcu); } -static inline u32 fnhe_hashfun (__be32 daddr) +static u32 fnhe_hashfun (__be32 daddr) { -static u32 fnhe_hashrnd__read_mostly ; -u32 hval; +static siphash_key_t fnhe_hash_key__read_mostly ; +u64 hval; -net_get_random_once (&fnhe_hashrnd,sizeof (fnhe_hashrnd)); - hval =jhash_1word ((__force u32 ) daddr, fnhe_hashrnd); -return hash_32 (hval,FNHE_HASH_SHIFT ); +net_get_random_once (&fnhe_hash_key,sizeof (fnhe_hash_key)); + hval =siphash_1u32 ((__force u32 )daddr, &fnhe_hash_key); +return hash_64 (hval,FNHE_HASH_SHIFT ); }static void fill_route_from_fnhe (struct rtable *rt,struct fib_nh_exception *fnhe)
net/ipv4/tcp_bpf.c +12 -0
@@ -313,6 +313,7 @@ static int tcp_bpf_send_verdict(struct sock *sk, struct sk_psock *psock,bool cork = false, enospc =sk_msg_full (msg);struct sock *sk_redir;u32 tosend, delta =0 ; +u32 eval = __SK_NONE;int ret; more_data:
@@ -356,13 +357,24 @@ static int tcp_bpf_send_verdict(struct sock *sk, struct sk_psock *psock,case __SK_REDIRECT: sk_redir = psock->sk_redir;sk_msg_apply_bytes (psock, tosend); +if (!psock->apply_bytes) { +/* Clean up before releasing the sock lock. */ + eval = psock->eval; + psock->eval = __SK_NONE; + psock->sk_redir =NULL ; + }if (psock->cork) { cork = true; psock->cork =NULL ; }sk_msg_return (sk, msg, tosend);release_sock (sk); + ret =tcp_bpf_sendmsg_redir (sk_redir, msg, tosend, flags); + +if (eval == __SK_REDIRECT) +sock_put (sk_redir); +lock_sock (sk);if (unlikely (ret <0 )) {int free =sk_msg_free_nocharge (sk, msg);
net/ipv6/route.c +14 -6
@@ -41,6 +41,7 @@#include <linux/nsproxy.h> #include <linux/slab.h> #include <linux/jhash.h> +#include <linux/siphash.h> #include <net/net_namespace.h> #include <net/snmp.h> #include <net/ipv6.h>
@@ -1502,17 +1503,24 @@ static void rt6_exception_remove_oldest(struct rt6_exception_bucket *bucket)static u32 rt6_exception_hash (const struct in6_addr *dst,const struct in6_addr *src) { -static u32 seed__read_mostly ; -u32 val; +static siphash_key_t rt6_exception_key__read_mostly ; +struct { +struct in6_addr dst; +struct in6_addr src; + }__aligned(SIPHASH_ALIGNMENT) combined = { + .dst = *dst, + }; +u64 val; -net_get_random_once (&seed,sizeof (seed)); - val =jhash (dst,sizeof (*dst), seed); +net_get_random_once (&rt6_exception_key,sizeof (rt6_exception_key));#ifdef CONFIG_IPV6_SUBTREES if (src) - val =jhash (src,sizeof (*src), val); + combined.src = *src;#endif -return hash_32 (val,FIB6_EXCEPTION_BUCKET_SIZE_SHIFT ); + val =siphash (&combined,sizeof (combined), &rt6_exception_key); + +return hash_64 (val,FIB6_EXCEPTION_BUCKET_SIZE_SHIFT ); }/* Helper function to find the cached rt in the hash table
net/sctp/sm_statefuns.c +39 -28
163 lines not on this page · raw message
net/tls/tls_sw.c +14 -5
@@ -35,6 +35,7 @@* SOFTWARE. */ +#include <linux/bug.h> #include <linux/sched/signal.h> #include <linux/module.h> #include <linux/splice.h>
@@ -43,6 +44,14 @@#include <net/strparser.h> #include <net/tls.h> +noinline void tls_err_abort(struct sock *sk, int err) +{ +WARN_ON_ONCE (err >=0 ); +/* sk->sk_err should contain a positive error code. */ + sk->sk_err = -err; + sk->sk_error_report (sk); +} +static int __skb_nsg (struct sk_buff *skb,int offset,int len,unsigned int recursion_level) {
@@ -416,7 +425,7 @@ int tls_tx_records(struct sock *sk, int flags) tx_err:if (rc <0 && rc != -EAGAIN ) -tls_err_abort (sk,EBADMSG ); +tls_err_abort (sk, -EBADMSG );return rc; }
@@ -447,7 +456,7 @@ static void tls_encrypt_done(struct crypto_async_request *req, int err)/* If err is already set on socket, return the same code */ if (sk->sk_err) { - ctx->async_wait.err = sk->sk_err; + ctx->async_wait.err = -sk->sk_err; }else { ctx->async_wait.err = err;tls_err_abort (sk, err);
@@ -761,7 +770,7 @@ static int tls_push_record(struct sock *sk, int flags, msg_pl->sg.size + prot->tail_size, i);if (rc <0 ) {if (rc != -EINPROGRESS ) { -tls_err_abort (sk,EBADMSG ); +tls_err_abort (sk, -EBADMSG );if (split) { tls_ctx->pending_open_record_frags = true;tls_merge_open_record (sk, rec, tmp, orig_end);
@@ -1822,7 +1831,7 @@ int tls_sw_recvmsg(struct sock *sk, err =decrypt_skb_update (sk, skb, &msg->msg_iter, &chunk, &zc, async_capable);if (err <0 && err != -EINPROGRESS ) { -tls_err_abort (sk,EBADMSG ); +tls_err_abort (sk, -EBADMSG ); goto recv_end; }
@@ -2002,7 +2011,7 @@ ssize_t tls_sw_splice_read(struct socket *sock, loff_t *ppos, }if (err <0 ) { -tls_err_abort (sk,EBADMSG ); +tls_err_abort (sk, -EBADMSG ); goto splice_read_end; } ctx->decrypted = true;
net/wireless/nl80211.c +1 -1
@@ -3480,7 +3480,7 @@ static int nl80211_valid_4addr(struct cfg80211_registered_device *rdev, enum nl80211_iftype iftype) {if (!use_4addr) { -if (netdev && (netdev->priv_flags &IFF_BRIDGE_PORT )) +if (netdev &&netif_is_bridge_port (netdev))return -EBUSY ;return 0 ; }
net/wireless/scan.c +5 -2
@@ -379,14 +379,17 @@ cfg80211_add_nontrans_list(struct cfg80211_bss *trans_bss, } ssid_len = ssid[1 ]; ssid = ssid +2 ; -rcu_read_unlock ();/* check if nontrans_bss is in the list */ list_for_each_entry (bss, &trans_bss->nontrans_list, nontrans_list) { -if (is_bss (bss, nontrans_bss->bssid, ssid, ssid_len)) +if (is_bss (bss, nontrans_bss->bssid, ssid, ssid_len)) { +rcu_read_unlock ();return 0 ; + } } +rcu_read_unlock (); +/* add to the list */ list_add_tail (&nontrans_bss->nontrans_list, &trans_bss->nontrans_list);return 0 ;
net/wireless/util.c +7 -7
@@ -975,14 +975,14 @@ int cfg80211_change_iface(struct cfg80211_registered_device *rdev, !(rdev->wiphy.interface_modes & (1 << ntype)))return -EOPNOTSUPP ; -/* if it's part of a bridge, reject changing type to station/ibss */ -if ((dev->priv_flags &IFF_BRIDGE_PORT ) && - (ntype ==NL80211_IFTYPE_ADHOC || - ntype ==NL80211_IFTYPE_STATION || - ntype ==NL80211_IFTYPE_P2P_CLIENT )) -return -EBUSY ; -if (ntype != otype) { +/* if it's part of a bridge, reject changing type to station/ibss */ +if (netif_is_bridge_port (dev) && + (ntype ==NL80211_IFTYPE_ADHOC || + ntype ==NL80211_IFTYPE_STATION || + ntype ==NL80211_IFTYPE_P2P_CLIENT )) +return -EBUSY ; + dev->ieee80211_ptr->use_4addr = false; dev->ieee80211_ptr->mesh_id_up_len =0 ;wdev_lock (dev->ieee80211_ptr);
tools/perf/builtin-script.c +8 -4
@@ -3779,11 +3779,15 @@ int cmd_script(int argc, const char **argv) goto out_delete;uname (&uts); -if (data.is_pipe ||/* assume pipe_mode indicates native_arch */ - !strcmp (uts.machine, session->header.env.arch) || - (!strcmp (uts.machine,"x86_64" ) && - !strcmp (session->header.env.arch,"i386" ))) +if (data.is_pipe) {/* Assume pipe_mode indicates native_arch */ native_arch = true; + }else if (session->header.env.arch) { +if (!strcmp (uts.machine, session->header.env.arch)) + native_arch = true; +else if (!strcmp (uts.machine,"x86_64" ) && + !strcmp (session->header.env.arch,"i386" )) + native_arch = true; + } script.session = session;script__setup_sample_type (&script);