Linux 5.4.128
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.4.128 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
------------
Documentation/vm/slub.rst | 10 Makefile | 2 arch/arc/include/uapi/asm/sigcontext.h | 1 arch/arc/kernel/signal.c | 43 +++ arch/arm/boot/dts/dra7-l4.dtsi | 4 arch/arm/boot/dts/dra7.dtsi | 20 + arch/arm/mach-omap1/pm.c | 13 - arch/arm/mach-omap1/time.c | 10 arch/arm/mach-omap1/timer32k.c | 10 arch/arm/mach-omap2/board-generic.c | 4 arch/arm/mach-omap2/timer.c | 181 ++++++++++----- arch/x86/include/asm/fpu/internal.h | 13 - arch/x86/kernel/fpu/signal.c | 26 +- arch/x86/kvm/lapic.c | 3 arch/x86/kvm/x86.c | 5 drivers/clk/ti/clk-7xx.c | 1 drivers/dma/Kconfig | 1 drivers/dma/pl330.c | 6 drivers/dma/qcom/Kconfig | 1 drivers/dma/ste_dma40.c | 3 drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c | 6 drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 6 drivers/gpu/drm/radeon/radeon_uvd.c | 4 drivers/hwmon/scpi-hwmon.c | 9 drivers/net/can/usb/mcba_usb.c | 17 + drivers/net/ethernet/atheros/alx/main.c | 1 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 6 drivers/net/ethernet/chelsio/cxgb4/cxgb4_filter.c | 2 drivers/net/ethernet/ec_bhf.c | 4 drivers/net/ethernet/emulex/benet/be_main.c | 1 drivers/net/ethernet/freescale/fec_ptp.c | 8 drivers/net/ethernet/lantiq_xrx200.c | 5 drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c | 3 drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 8 drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 2 drivers/net/ethernet/mellanox/mlx5/core/rdma.c | 3 drivers/net/ethernet/mellanox/mlx5/core/transobj.c | 30 +- drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c | 2 drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c | 1 drivers/net/ethernet/stmicro/stmmac/dwmac1000.h | 8 drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c | 2 drivers/net/ethernet/xilinx/ll_temac_main.c | 8 drivers/net/hamradio/mkiss.c | 1 drivers/net/usb/cdc_eem.c | 2 drivers/net/usb/cdc_ncm.c | 2 drivers/net/usb/smsc75xx.c | 10 drivers/net/vrf.c | 6 drivers/pci/controller/pci-aardvark.c | 59 +++- drivers/pci/quirks.c | 89 +++++++ drivers/ptp/ptp_clock.c | 6 drivers/spi/spi-stm32-qspi.c | 5 drivers/staging/mt7621-pinctrl/pinctrl-rt2880.c | 2 drivers/usb/core/hub.c | 7 drivers/usb/dwc3/core.c | 2 drivers/usb/dwc3/debug.h | 3 drivers/usb/dwc3/debugfs.c | 21 - drivers/usb/dwc3/gadget.c | 3 fs/afs/main.c | 4 include/linux/cpuhotplug.h | 1 include/linux/mfd/rohm-bd70528.h | 4 include/linux/mlx5/transobj.h | 1 include/linux/ptp_clock_kernel.h | 2 include/linux/socket.h | 2 include/net/net_namespace.h | 7 include/uapi/linux/in.h | 3 kernel/trace/trace.c | 11 kernel/trace/trace_clock.c | 6 mm/memory-failure.c | 7 mm/slab_common.c | 3 mm/slub.c | 23 + net/batman-adv/bat_iv_ogm.c | 4 net/bridge/br_private.h | 4 net/bridge/br_vlan_tunnel.c | 38 +-- net/can/bcm.c | 62 ++++- net/can/j1939/transport.c | 54 +++- net/can/raw.c | 62 +++-- net/core/net_namespace.c | 12 net/core/rtnetlink.c | 8 net/ipv4/cipso_ipv4.c | 1 net/ipv4/icmp.c | 7 net/ipv4/igmp.c | 1 net/ipv4/udp.c | 10 net/ipv6/udp.c | 3 net/netfilter/nf_synproxy_core.c | 5 net/qrtr/qrtr.c | 2 net/rds/recv.c | 2 net/sched/act_ct.c | 21 + net/sched/sch_cake.c | 6 net/socket.c | 13 - net/unix/af_unix.c | 7 net/wireless/Makefile | 2 net/wireless/pmsr.c | 16 + sound/soc/codecs/rt5659.c | 26 +- tools/include/uapi/linux/in.h | 3 virt/kvm/arm/vgic/vgic-kvm-device.c | 4 95 files changed, 839 insertions(+), 319 deletions(-)
Aleksander Jan Bajkowski (2):
net: lantiq: disable interrupt before sheduling NAPI
lantiq: net: fix duplicated skb in rx descriptor ring
Andrew Lunn (1):
usb: core: hub: Disable autosuspend for Cypress CY7C65632
Andrew Morton (1):
mm/slub.c: include swab.h
Antti Järvinen (1):
PCI: Mark TI C667X to avoid bus reset
Arnaldo Carvalho de Melo (1):
tools headers UAPI: Sync linux/in.h copy with the kernel sources
Avraham Stern (1):
cfg80211: avoid double free of PMSR request
Axel Lin (1):
regulator: bd70528: Fix off-by-one for buck123 .n_voltages setting
Aya Levin (1):
net/mlx5e: Block offload of outer header csum for UDP tunnels
Bumyong Lee (1):
dmaengine: pl330: fix wrong usage of spinlock flags in dma_cyclc
Changbin Du (1):
net: make get_net_ns return error if NET_NS is disabled
Chen Li (1):
radeon: use memcpy_to/fromio for UVD fw upload
Chengyang Fan (1):
net: ipv4: fix memory leak in ip_mc_add1_src
Chiqijun (1):
PCI: Work around Huawei Intelligent NIC VF FLR erratum
Christophe JAILLET (4):
alx: Fix an error handling path in 'alx_probe()'
qlcnic: Fix an error handling path in 'qlcnic_probe()'
netxen_nic: Fix an error handling path in 'netxen_nic_probe()'
be2net: Fix an error handling path in 'be_probe()'
Dan Carpenter (1):
afs: Fix an IS_ERR() vs NULL check
Davide Caratti (1):
net/mlx5e: allow TSO on VXLAN over VLAN topologies
Dima Chumak (1):
net/mlx5e: Fix page reclaim for dead peer hairpin
Dongliang Mu (1):
net: usb: fix possible use-after-free in smsc75xx_bind
Eric Auger (1):
KVM: arm/arm64: Fix KVM_VGIC_V3_ADDR_TYPE_REDIST read
Eric Dumazet (1):
net/af_unix: fix a data-race in unix_dgram_sendmsg / unix_release_sock
Esben Haabendal (2):
net: ll_temac: Make sure to free skb when it is completely used
net: ll_temac: Fix TX BD buffer overwrite
Fugang Duan (1):
net: fec_ptp: add clock rate zero check
Greg Kroah-Hartman (1):
Linux 5.4.128
Huy Nguyen (1):
net/mlx5e: Remove dependency in IPsec initialization flows
Ido Schimmel (1):
rtnetlink: Fix regression in bridge VLAN configuration
Jack Pham (1):
usb: dwc3: debugfs: Add and remove endpoint dirs dynamically
Jack Yu (1):
ASoC: rt5659: Fix the lost powers for the HDA header
Jakub Kicinski (1):
ptp: improve max_adj check against unreasonable values
Jim Mattson (1):
kvm: LAPIC: Restore guard to prevent illegal APIC register access
Jisheng Zhang (1):
net: stmmac: dwmac1000: Fix extended MAC address registers definition
Joakim Zhang (2):
net: fec_ptp: fix issue caused by refactor the fec_devtype
net: stmmac: disable clocks in stmmac_remove_config_dt()
Johannes Berg (1):
cfg80211: make certificate generation more robust
Kees Cook (2):
mm/slub: clarify verification reporting mm/slub: fix redzoning for small allocations
Linyu Yuan (1):
net: cdc_eem: fix tx fixup skb leak
Maciej Żenczykowski (1):
net: cdc_ncm: switch to eth%d interface naming
Maor Gottlieb (1):
net/mlx5: Consider RoCE cap before init RDMA resources
Marcelo Ricardo Leitner (1):
net/sched: act_ct: handle DNAT tuple collision
Maxim Mikityanskiy (2):
netfilter: synproxy: Fix out of bounds when parsing TCP options
sch_cake: Fix out of bounds when parsing TCP options and header
Michael Chan (1):
bnxt_en: Rediscover PHY capabilities after firmware reset
Nanyong Sun (1):
net: ipv4: fix memory leak in netlbl_cipsov4_add_std
Nicolas Dichtel (1):
vrf: fix maximum MTU
Nikolay Aleksandrov (2):
net: bridge: fix vlan tunnel dst null pointer dereference
net: bridge: fix vlan tunnel dst refcnt when egressing
Norbert Slusarek (1):
can: bcm: fix infoleak in struct bcm_msg_head
Oleksij Rempel (1):
can: j1939: fix Use-after-Free, hold skb ref while in use
Pali Rohár (1):
PCI: aardvark: Fix kernel panic during PIO transfer
Paolo Abeni (1):
udp: fix race between close() and udp_abort()
Patrice Chotard (1):
spi: stm32-qspi: Always wait BUSY bit to be cleared in stm32_qspi_wait_cmd()
Pavel Machek (1):
cxgb4: fix wrong shift.
Pavel Skripkin (5):
net: rds: fix memory leak in rds_recvmsg
net: qrtr: fix OOB Read in qrtr_endpoint_post
net: hamradio: fix memory leak in mkiss_close
net: ethernet: fix potential use-after-free in ec_bhf_remove
can: mcba_usb: fix memory leak in mcba_usb
Peter Chen (1):
usb: dwc3: core: fix kernel panic when do reboot
Randy Dunlap (2):
dmaengine: ALTERA_MSGDMA depends on HAS_IOMEM
dmaengine: QCOM_HIDMA_MGMT depends on HAS_IOMEM
Remi Pommarel (1):
PCI: aardvark: Don't rely on jiffies while holding spinlock
Riwen Lu (1):
hwmon: (scpi-hwmon) shows the negative temperature properly
Sean Christopherson (1):
KVM: x86: Immediately reset the MMU context when the SMM flag is cleared
Sergio Paracuellos (1):
pinctrl: ralink: rt2880: avoid to error in calls is pin is already enabled
Shanker Donthineni (1):
PCI: Mark some NVIDIA GPUs to avoid bus reset
Somnath Kotur (1):
bnxt_en: Call bnxt_ethtool_free() in bnxt_init_one() error path
Sriharsha Basavapatna (1):
PCI: Add ACS quirk for Broadcom BCM57414 NIC
Steven Rostedt (VMware) (3):
tracing: Do not stop recording cmdlines when tracing is off
tracing: Do not stop recording comms if the trace file is being read
tracing: Do no increment trace_clock_global() by one
Sven Eckelmann (1):
batman-adv: Avoid WARN_ON timing related checks
Tetsuo Handa (1):
can: bcm/raw/isotp: use per module netdevice notifier
Thomas Gleixner (3):
x86/process: Check PF_KTHREAD and not current->mm for kernel threads x86/pkru: Write hardware init value to PKRU when xstate is init x86/fpu: Reset state for all signal restore failures
Toke Høiland-Jørgensen (1):
icmp: don't send out ICMP messages with a source address of 0.0.0.0
Tony Lindgren (3):
clocksource/drivers/timer-ti-dm: Add clockevent and clocksource support clocksource/drivers/timer-ti-dm: Prepare to handle dra7 timer wrap issue clocksource/drivers/timer-ti-dm: Handle dra7 timer wrap errata i940
Vineet Gupta (1):
ARCv2: save ABI registers across signal handling
Yang Yingliang (1):
dmaengine: stedma40: add missing iounmap() on error in d40_probe()
Yifan Zhang (2):
drm/amdgpu/gfx10: enlarge CP_MEC_DOORBELL_RANGE_UPPER to cover full doorbell. drm/amdgpu/gfx9: fix the doorbell missing when in CGPG issue.
afzal mohammed (1):
ARM: OMAP: replace setup_irq() by request_irq()
yangerkun (1):
mm/memory-failure: make sure wait for page writeback in memory_failure
Greg Kroah-Hartman
maintainerDocumentation/vm/slub.rst +5 -5
@@ -160,7 +160,7 @@ SLUB Debug output Here is a sample of slub debug output:: ==================================================================== - BUG kmalloc-8: Redzone overwritten + BUG kmalloc-8: Right Redzone overwritten -------------------------------------------------------------------- INFO: 0xc90f6d28-0xc90f6d2b. First byte 0x00 instead of 0xcc
@@ -168,10 +168,10 @@ Here is a sample of slub debug output:: INFO: Object 0xc90f6d20 @offset=3360 fp=0xc90f6d58 INFO: Allocated in get_modalias+0x61/0xf5 age=53 cpu=1 pid=554 - Bytes b4 0xc90f6d10: 00 00 00 00 00 00 00 00 5a 5a 5a 5a 5a 5a 5a 5a ........ZZZZZZZZ - Object 0xc90f6d20: 31 30 31 39 2e 30 30 35 1019.005 - Redzone 0xc90f6d28: 00 cc cc cc . - Padding 0xc90f6d50: 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZ + Bytes b4 (0xc90f6d10): 00 00 00 00 00 00 00 00 5a 5a 5a 5a 5a 5a 5a 5a ........ZZZZZZZZ + Object (0xc90f6d20): 31 30 31 39 2e 30 30 35 1019.005 + Redzone (0xc90f6d28): 00 cc cc cc . + Padding (0xc90f6d50): 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZ [<c010523d>] dump_trace+0x63/0x1eb [<c01053df>] show_trace_log_lvl+0x1a/0x2f
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 4 -SUBLEVEL = 127 +SUBLEVEL = 128 EXTRAVERSION = NAME = Kleptomaniac Octopus
arch/arc/include/uapi/asm/sigcontext.h +1 -0
@@ -18,6 +18,7 @@*/ struct sigcontext {struct user_regs_struct regs; +struct user_regs_arcv2 v2abi; };#endif /* _ASM_ARC_SIGCONTEXT_H */
arch/arc/kernel/signal.c +43 -0
61 lines not on this page · raw message
arch/arm/boot/dts/dra7-l4.dtsi +2 -2
@@ -1176,7 +1176,7 @@ }; }; - target-module@34000 { /* 0x48034000, ap 7 46.0 */ + timer3_target: target-module@34000 { /* 0x48034000, ap 7 46.0 */ compatible = "ti,sysc-omap4-timer", "ti,sysc"; ti,hwmods = "timer3"; reg = <0x34000 0x4>,
@@ -1204,7 +1204,7 @@ }; }; - target-module@36000 { /* 0x48036000, ap 9 4e.0 */ + timer4_target: target-module@36000 { /* 0x48036000, ap 9 4e.0 */ compatible = "ti,sysc-omap4-timer", "ti,sysc"; ti,hwmods = "timer4"; reg = <0x36000 0x4>,
arch/arm/boot/dts/dra7.dtsi +20 -0
@@ -46,6 +46,7 @@ timer { compatible = "arm,armv7-timer"; + status = "disabled"; /* See ARM architected timer wrap erratum i940 */ interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>, <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>, <GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>,
@@ -766,3 +767,22 @@ #include "dra7-l4.dtsi" #include "dra7xx-clocks.dtsi" + +/* Local timers, see ARM architected timer wrap erratum i940 */ +&timer3_target { + ti,no-reset-on-init; + ti,no-idle; + timer@0 { + assigned-clocks = <&l4per_clkctrl DRA7_L4PER_TIMER3_CLKCTRL 24>; + assigned-clock-parents = <&timer_sys_clk_div>; + }; +}; + +&timer4_target { + ti,no-reset-on-init; + ti,no-idle; + timer@0 { + assigned-clocks = <&l4per_clkctrl DRA7_L4PER_TIMER4_CLKCTRL 24>; + assigned-clock-parents = <&timer_sys_clk_div>; + }; +};
arch/arm/mach-omap1/pm.c +6 -7
@@ -596,11 +596,6 @@ static irqreturn_t omap_wakeup_interrupt(int irq, void *dev)return IRQ_HANDLED ; } -static struct irqaction omap_wakeup_irq = { - .name ="peripheral wakeup" , - .handler = omap_wakeup_interrupt -}; -static const struct platform_suspend_ops omap_pm_ops = {
@@ -613,6 +608,7 @@ static const struct platform_suspend_ops omap_pm_ops = {static int __init omap_pm_init (void ) {int error =0 ; +int irq;if (!cpu_class_is_omap1 ())return -ENODEV ;
@@ -656,9 +652,12 @@ static int __init omap_pm_init(void) arm_pm_idle = omap1_pm_idle;if (cpu_is_omap7xx ()) -setup_irq (INT_7XX_WAKE_UP_REQ , &omap_wakeup_irq); + irq =INT_7XX_WAKE_UP_REQ ;else if (cpu_is_omap16xx ()) -setup_irq (INT_1610_WAKE_UP_REQ , &omap_wakeup_irq); + irq =INT_1610_WAKE_UP_REQ ; +if (request_irq (irq, omap_wakeup_interrupt,0 ,"peripheral wakeup" , +NULL )) +pr_err ("Failed to request irq %d (peripheral wakeup)\n" , irq);/* Program new power ramp-up time * (0 for most boards since we don't lower voltage when in deep sleep)
arch/arm/mach-omap1/time.c +3 -7
@@ -155,15 +155,11 @@ static irqreturn_t omap_mpu_timer1_interrupt(int irq, void *dev_id)return IRQ_HANDLED ; } -static struct irqaction omap_mpu_timer1_irq = { - .name ="mpu_timer1" , - .flags =IRQF_TIMER |IRQF_IRQPOLL , - .handler = omap_mpu_timer1_interrupt, -}; -static __init void omap_init_mpu_timer (unsigned long rate) { -setup_irq (INT_TIMER1 , &omap_mpu_timer1_irq); +if (request_irq (INT_TIMER1 , omap_mpu_timer1_interrupt, +IRQF_TIMER |IRQF_IRQPOLL ,"mpu_timer1" ,NULL )) +pr_err ("Failed to request irq %d (mpu_timer1)\n" ,INT_TIMER1 );omap_mpu_timer_start (0 , (rate /HZ ) -1 ,1 ); clockevent_mpu_timer1.cpumask =cpumask_of (0 );
arch/arm/mach-omap1/timer32k.c +3 -7
@@ -148,15 +148,11 @@ static irqreturn_t omap_32k_timer_interrupt(int irq, void *dev_id)return IRQ_HANDLED ; } -static struct irqaction omap_32k_timer_irq = { - .name ="32KHz timer" , - .flags =IRQF_TIMER |IRQF_IRQPOLL , - .handler = omap_32k_timer_interrupt, -}; -static __init void omap_init_32k_timer (void ) { -setup_irq (INT_OS_TIMER , &omap_32k_timer_irq); +if (request_irq (INT_OS_TIMER , omap_32k_timer_interrupt, +IRQF_TIMER |IRQF_IRQPOLL ,"32KHz timer" ,NULL )) +pr_err ("Failed to request irq %d(32KHz timer)\n" ,INT_OS_TIMER ); clockevent_32k_timer.cpumask =cpumask_of (0 ); clockevents_config_and_register(&clockevent_32k_timer,
arch/arm/mach-omap2/board-generic.c +2 -2
@@ -327,7 +327,7 @@ DT_MACHINE_START(DRA74X_DT, "Generic DRA74X (Flattened Device Tree)") .init_late = dra7xx_init_late, .init_irq = omap_gic_of_init, .init_machine = omap_generic_init, - .init_time = omap5_realtime_timer_init, + .init_time = omap3_gptimer_timer_init, .dt_compat = dra74x_boards_compat, .restart = omap44xx_restart,MACHINE_END
@@ -350,7 +350,7 @@ DT_MACHINE_START(DRA72X_DT, "Generic DRA72X (Flattened Device Tree)") .init_late = dra7xx_init_late, .init_irq = omap_gic_of_init, .init_machine = omap_generic_init, - .init_time = omap5_realtime_timer_init, + .init_time = omap3_gptimer_timer_init, .dt_compat = dra72x_boards_compat, .restart = omap44xx_restart,MACHINE_END
arch/arm/mach-omap2/timer.c +126 -55
279 lines not on this page · raw message
arch/x86/include/asm/fpu/internal.h +10 -3
@@ -607,10 +607,17 @@ static inline void switch_fpu_finish(struct fpu *new_fpu)* PKRU state is switched eagerly because it needs to be valid before we * return to userland e.g. for a copy_to_user() operation. */ -if (current->mm) { +if (!(current->flags &PF_KTHREAD )) { +/* +* If the PKRU bit in xsave.header.xfeatures is not set, +* then the PKRU component was in init state, which means +* XRSTOR will set PKRU to 0. If the bit is not set then +* get_xsave_addr() will return NULL because the PKRU value +* in memory is not valid. This means pkru_val has to be +* set to 0 and not to init_pkru_value. +*/ pk =get_xsave_addr (&new_fpu->state.xsave,XFEATURE_PKRU ); -if (pk) - pkru_val = pk->pkru; + pkru_val = pk ? pk->pkru :0 ; }__write_pkru (pkru_val); }
arch/x86/kernel/fpu/signal.c +15 -11
@@ -289,13 +289,17 @@ static int __fpu__restore_sig(void __user *buf, void __user *buf_fx, int size)return 0 ; } -if (!access_ok (buf, size)) -return -EACCES ; +if (!access_ok (buf, size)) { + ret = -EACCES ; + goto out; + } -if (!static_cpu_has (X86_FEATURE_FPU )) -return fpregs_soft_set (current,NULL , -0 ,sizeof (struct user_i387_ia32_struct ), -NULL , buf) !=0 ; +if (!static_cpu_has (X86_FEATURE_FPU )) { + ret =fpregs_soft_set (current,NULL ,0 , +sizeof (struct user_i387_ia32_struct ), +NULL , buf); + goto out; + }if (use_xsave ()) {struct _fpx_sw_bytes fx_sw_user;
@@ -333,7 +337,7 @@ static int __fpu__restore_sig(void __user *buf, void __user *buf_fx, int size)if (ia32_fxstate) { ret =__copy_from_user (&env, buf,sizeof (env));if (ret) - goto err_out; + goto out; envp = &env; }else {/*
@@ -369,7 +373,7 @@ static int __fpu__restore_sig(void __user *buf, void __user *buf_fx, int size) ret =validate_xstate_header (&fpu->state.xsave.header); }if (ret) - goto err_out; + goto out;sanitize_restored_xstate (&fpu->state, envp, xfeatures, fx_only);
@@ -382,7 +386,7 @@ static int __fpu__restore_sig(void __user *buf, void __user *buf_fx, int size) ret =__copy_from_user (&fpu->state.fxsave, buf_fx, state_size);if (ret) { ret = -EFAULT ; - goto err_out; + goto out; }sanitize_restored_xstate (&fpu->state, envp, xfeatures, fx_only);
@@ -397,7 +401,7 @@ static int __fpu__restore_sig(void __user *buf, void __user *buf_fx, int size) }else { ret =__copy_from_user (&fpu->state.fsave, buf_fx, state_size);if (ret) - goto err_out; + goto out;fpregs_lock (); ret =copy_kernel_to_fregs_err (&fpu->state.fsave);
@@ -408,7 +412,7 @@ static int __fpu__restore_sig(void __user *buf, void __user *buf_fx, int size)fpregs_deactivate (fpu);fpregs_unlock (); -err_out: +out:if (ret)fpu__clear (fpu);return ret;
arch/x86/kvm/lapic.c +3 -0
@@ -1332,6 +1332,9 @@ int kvm_lapic_reg_read(struct kvm_lapic *apic, u32 offset, int len,if (!apic_x2apic_mode (apic)) valid_reg_mask |=APIC_REG_MASK (APIC_ARBPRI ); +if (alignment + len >4 ) +return 1 ; +if (offset >0x3f0 || !(valid_reg_mask &APIC_REG_MASK (offset)))return 1 ;
arch/x86/kvm/x86.c +4 -1
@@ -6279,7 +6279,10 @@ static unsigned emulator_get_hflags(struct x86_emulate_ctxt *ctxt)static void emulator_set_hflags (struct x86_emulate_ctxt *ctxt,unsigned emul_flags) { -emul_to_vcpu (ctxt)->arch.hflags = emul_flags; +struct kvm_vcpu *vcpu =emul_to_vcpu (ctxt); + + vcpu->arch.hflags = emul_flags; +kvm_mmu_reset_context (vcpu); } static int emulator_pre_leave_smm(struct x86_emulate_ctxt *ctxt,
drivers/clk/ti/clk-7xx.c +1 -0
@@ -793,6 +793,7 @@ static struct ti_dt_clk dra7xx_clks[] = {DT_CLK (NULL ,"timer_32k_ck" ,"sys_32k_ck" ),DT_CLK (NULL ,"sys_clkin_ck" ,"timer_sys_clk_div" ),DT_CLK (NULL ,"sys_clkin" ,"sys_clkin1" ), +DT_CLK (NULL ,"timer_sys_ck" ,"timer_sys_clk_div" ),DT_CLK (NULL ,"atl_dpll_clk_mux" ,"atl-clkctrl:0000:24" ),DT_CLK (NULL ,"atl_gfclk_mux" ,"atl-clkctrl:0000:26" ), DT_CLK(NULL, "dcan1_sys_clk_mux", "wkupaon-clkctrl:0068:24"),
drivers/dma/Kconfig +1 -0
@@ -59,6 +59,7 @@ config DMA_OF #devices config ALTERA_MSGDMA tristate "Altera / Intel mSGDMA Engine" + depends on HAS_IOMEM select DMA_ENGINE help Enable support for Altera / Intel mSGDMA controller.
drivers/dma/pl330.c +4 -2
@@ -2690,13 +2690,15 @@ static struct dma_async_tx_descriptor *pl330_prep_dma_cyclic(for (i =0 ; i < len / period_len; i++) { desc =pl330_get_desc (pch);if (!desc) { +unsigned long iflags; +dev_err (pch->dmac->ddma.dev,"%s:%d Unable to fetch desc\n" , __func__, __LINE__);if (!first)return NULL ; -spin_lock_irqsave (&pl330->pool_lock, flags); +spin_lock_irqsave (&pl330->pool_lock, iflags);while (!list_empty (&first->node)) { desc = list_entry(first->node.next,
@@ -2706,7 +2708,7 @@ static struct dma_async_tx_descriptor *pl330_prep_dma_cyclic(list_move_tail (&first->node, &pl330->desc_pool); -spin_unlock_irqrestore (&pl330->pool_lock, flags); +spin_unlock_irqrestore (&pl330->pool_lock, iflags);return NULL ; }
drivers/dma/qcom/Kconfig +1 -0
@@ -10,6 +10,7 @@ config QCOM_BAM_DMA config QCOM_HIDMA_MGMT tristate "Qualcomm Technologies HIDMA Management support" + depends on HAS_IOMEM select DMA_ENGINE help Enable support for the Qualcomm Technologies HIDMA Management.
drivers/dma/ste_dma40.c +3 -0
@@ -3678,6 +3678,9 @@ static int __init d40_probe(struct platform_device *pdev)kfree (base->lcla_pool.base_unaligned); +if (base->lcpa_base) +iounmap (base->lcpa_base); +if (base->phy_lcpa)release_mem_region (base->phy_lcpa, base->lcpa_size);
drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c +5 -1
@@ -3416,8 +3416,12 @@ static int gfx_v10_0_kiq_init_register(struct amdgpu_ring *ring)if (ring->use_doorbell) {WREG32_SOC15 (GC ,0 , mmCP_MEC_DOORBELL_RANGE_LOWER, (adev->doorbell_index.kiq *2 ) <<2 ); +/* If GC has entered CGPG, ringing doorbell > first page doesn't +* wakeup GC. Enlarge CP_MEC_DOORBELL_RANGE_UPPER to workaround +* this issue. +*/ WREG32_SOC15 (GC ,0 , mmCP_MEC_DOORBELL_RANGE_UPPER, - (adev->doorbell_index.userqueue_end *2 ) <<2 ); + (adev->doorbell.size -4 )); } WREG32_SOC15(GC, 0, mmCP_HQD_PQ_DOORBELL_CONTROL,
drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c +5 -1
@@ -3593,8 +3593,12 @@ static int gfx_v9_0_kiq_init_register(struct amdgpu_ring *ring)if (ring->use_doorbell) {WREG32_SOC15 (GC ,0 , mmCP_MEC_DOORBELL_RANGE_LOWER, (adev->doorbell_index.kiq *2 ) <<2 ); +/* If GC has entered CGPG, ringing doorbell > first page doesn't +* wakeup GC. Enlarge CP_MEC_DOORBELL_RANGE_UPPER to workaround +* this issue. +*/ WREG32_SOC15 (GC ,0 , mmCP_MEC_DOORBELL_RANGE_UPPER, - (adev->doorbell_index.userqueue_end *2 ) <<2 ); + (adev->doorbell.size -4 )); } WREG32_SOC15_RLC(GC, 0, mmCP_HQD_PQ_DOORBELL_CONTROL,
drivers/gpu/drm/radeon/radeon_uvd.c +2 -2
@@ -286,7 +286,7 @@ int radeon_uvd_resume(struct radeon_device *rdev)if (rdev->uvd.vcpu_bo ==NULL )return -EINVAL ; -memcpy (rdev->uvd.cpu_addr, rdev->uvd_fw->data, rdev->uvd_fw->size); +memcpy_toio ((void __iomem *)rdev->uvd.cpu_addr, rdev->uvd_fw->data, rdev->uvd_fw->size); size =radeon_bo_size (rdev->uvd.vcpu_bo); size -= rdev->uvd_fw->size;
@@ -294,7 +294,7 @@ int radeon_uvd_resume(struct radeon_device *rdev) ptr = rdev->uvd.cpu_addr; ptr += rdev->uvd_fw->size; -memset (ptr,0 , size); +memset_io ((void __iomem *)ptr,0 , size);return 0 ; }
drivers/hwmon/scpi-hwmon.c +9 -0
@@ -99,6 +99,15 @@ scpi_show_sensor(struct device *dev, struct device_attribute *attr, char *buf)scpi_scale_reading (&value, sensor); +/* +* Temperature sensor values are treated as signed values based on +* observation even though that is not explicitly specified, and +* because an unsigned u64 temperature does not really make practical +* sense especially when the temperature is below zero degrees Celsius. +*/ +if (sensor->info.class ==TEMPERATURE ) +return sprintf (buf,"%lld\n" , (s64 )value); +return sprintf (buf,"%llu\n" , value); }
drivers/net/can/usb/mcba_usb.c +15 -2
@@ -82,6 +82,8 @@ struct mcba_priv {bool can_ka_first_pass;bool can_speed_check;atomic_t free_ctx_cnt; +void *rxbuf[MCBA_MAX_RX_URBS ]; +dma_addr_t rxbuf_dma[MCBA_MAX_RX_URBS ]; };/* CAN frame */
@@ -633,6 +635,7 @@ static int mcba_usb_start(struct mcba_priv *priv)for (i =0 ; i <MCBA_MAX_RX_URBS ; i++) {struct urb *urb =NULL ;u8 *buf; +dma_addr_t buf_dma;/* create a URB, and a buffer for it */ urb =usb_alloc_urb (0 ,GFP_KERNEL );
@@ -642,7 +645,7 @@ static int mcba_usb_start(struct mcba_priv *priv) } buf =usb_alloc_coherent (priv->udev,MCBA_USB_RX_BUFF_SIZE , -GFP_KERNEL , &urb->transfer_dma); +GFP_KERNEL , &buf_dma);if (!buf) {netdev_err (netdev,"No memory left for USB buffer\n" );usb_free_urb (urb);
@@ -661,11 +664,14 @@ static int mcba_usb_start(struct mcba_priv *priv)if (err) {usb_unanchor_urb (urb);usb_free_coherent (priv->udev,MCBA_USB_RX_BUFF_SIZE , - buf, urb->transfer_dma); + buf, buf_dma);usb_free_urb (urb);break ; } + priv->rxbuf[i] = buf; + priv->rxbuf_dma[i] = buf_dma; +/* Drop reference, USB core will take care of freeing it */ usb_free_urb (urb); }
@@ -708,7 +714,14 @@ static int mcba_usb_open(struct net_device *netdev)static void mcba_urb_unlink (struct mcba_priv *priv) { +int i; +usb_kill_anchored_urbs (&priv->rx_submitted); + +for (i =0 ; i <MCBA_MAX_RX_URBS ; ++i) +usb_free_coherent (priv->udev,MCBA_USB_RX_BUFF_SIZE , + priv->rxbuf[i], priv->rxbuf_dma[i]); +usb_kill_anchored_urbs (&priv->tx_submitted); }
drivers/net/ethernet/atheros/alx/main.c +1 -0
@@ -1852,6 +1852,7 @@ static int alx_probe(struct pci_dev *pdev, const struct pci_device_id *ent)free_netdev (netdev); out_pci_release:pci_release_mem_regions (pdev); +pci_disable_pcie_error_reporting (pdev); out_pci_disable:pci_disable_device (pdev);return err;
drivers/net/ethernet/broadcom/bnxt/bnxt.c +6 -0
@@ -10610,6 +10610,8 @@ static void bnxt_fw_init_one_p3(struct bnxt *bp)bnxt_hwrm_coal_params_qcaps (bp); } +static int bnxt_probe_phy (struct bnxt *bp,bool fw_dflt); +static int bnxt_fw_init_one (struct bnxt *bp) {int rc;
@@ -10624,6 +10626,9 @@ static int bnxt_fw_init_one(struct bnxt *bp)netdev_err (bp->dev,"Firmware init phase 2 failed\n" );return rc; } + rc =bnxt_probe_phy (bp, false); +if (rc) +return rc; rc =bnxt_approve_mac (bp, bp->dev->dev_addr, false);if (rc)return rc;
@@ -11958,6 +11963,7 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) init_err_pci_clean:bnxt_free_hwrm_short_cmd_req (bp);bnxt_free_hwrm_resources (bp); +bnxt_ethtool_free (bp);kfree (bp->fw_health); bp->fw_health =NULL ;bnxt_cleanup_pci (bp);
drivers/net/ethernet/chelsio/cxgb4/cxgb4_filter.c +1 -1
@@ -198,7 +198,7 @@ static void set_nat_params(struct adapter *adap, struct filter_entry *f,WORD_MASK , f->fs.nat_lip[3 ] | f->fs.nat_lip[2 ] <<8 | f->fs.nat_lip[1 ] <<16 | - (u64)f->fs.nat_lip[0] << 25, 1); + (u64)f->fs.nat_lip[0] << 24, 1); } }
drivers/net/ethernet/ec_bhf.c +3 -1
@@ -576,10 +576,12 @@ static void ec_bhf_remove(struct pci_dev *dev)struct ec_bhf_priv *priv =netdev_priv (net_dev);unregister_netdev (net_dev); -free_netdev (net_dev);pci_iounmap (dev, priv->dma_io);pci_iounmap (dev, priv->io); + +free_netdev (net_dev); +pci_release_regions (dev);pci_clear_master (dev);pci_disable_device (dev);
drivers/net/ethernet/emulex/benet/be_main.c +1 -0
@@ -6030,6 +6030,7 @@ static int be_probe(struct pci_dev *pdev, const struct pci_device_id *pdev_id) unmap_bars:be_unmap_pci_bars (adapter); free_netdev: +pci_disable_pcie_error_reporting (pdev);free_netdev (netdev); rel_reg:pci_release_regions (pdev);
drivers/net/ethernet/freescale/fec_ptp.c +5 -3
@@ -220,15 +220,13 @@ static u64 fec_ptp_read(const struct cyclecounter *cc) {struct fec_enet_private *fep = container_of(cc, struct fec_enet_private, cc); -const struct platform_device_id *id_entry = -platform_get_device_id (fep->pdev);u32 tempval; tempval =readl (fep->hwp +FEC_ATIME_CTRL ); tempval |=FEC_T_CTRL_CAPTURE ;writel (tempval, fep->hwp +FEC_ATIME_CTRL ); -if (id_entry->driver_data &FEC_QUIRK_BUG_CAPTURE ) +if (fep->quirks &FEC_QUIRK_BUG_CAPTURE )udelay (1 );return readl (fep->hwp +FEC_ATIME );
@@ -599,6 +597,10 @@ void fec_ptp_init(struct platform_device *pdev, int irq_idx) fep->ptp_caps.enable = fec_ptp_enable; fep->cycle_speed =clk_get_rate (fep->clk_ptp); +if (!fep->cycle_speed) { + fep->cycle_speed =NSEC_PER_SEC ; +dev_err (&fep->pdev->dev,"clk_ptp clock rate is zero\n" ); + } fep->ptp_inc =NSEC_PER_SEC / fep->cycle_speed;spin_lock_init (&fep->tmreg_lock);
drivers/net/ethernet/lantiq_xrx200.c +3 -2
@@ -154,6 +154,7 @@ static int xrx200_close(struct net_device *net_dev)static int xrx200_alloc_skb (struct xrx200_chan *ch) { +struct sk_buff *skb = ch->skb[ch->dma.desc];dma_addr_t mapping;int ret =0 ;
@@ -168,6 +169,7 @@ static int xrx200_alloc_skb(struct xrx200_chan *ch) XRX200_DMA_DATA_LEN, DMA_FROM_DEVICE);if (unlikely (dma_mapping_error (ch->priv->dev, mapping))) {dev_kfree_skb_any (ch->skb[ch->dma.desc]); + ch->skb[ch->dma.desc] = skb; ret = -ENOMEM ; goto skip; }
@@ -198,7 +200,6 @@ static int xrx200_hw_receive(struct xrx200_chan *ch) ch->dma.desc %=LTQ_DESC_NUM ;if (ret) { - ch->skb[ch->dma.desc] = skb; net_dev->stats.rx_dropped++;netdev_err (net_dev,"failed to allocate new rx buffer\n" );return ret;
@@ -351,8 +352,8 @@ static irqreturn_t xrx200_dma_irq(int irq, void *ptr)struct xrx200_chan *ch = ptr;if (napi_schedule_prep (&ch->napi)) { -__napi_schedule (&ch->napi);ltq_dma_disable_irq (&ch->dma); +__napi_schedule (&ch->napi); }ltq_dma_ack_irq (&ch->dma);
drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c +0 -3
@@ -515,9 +515,6 @@ void mlx5e_ipsec_build_netdev(struct mlx5e_priv *priv)struct mlx5_core_dev *mdev = priv->mdev;struct net_device *netdev = priv->netdev; -if (!priv->ipsec) -return ; -if (!(mlx5_accel_ipsec_device_caps (mdev) &MLX5_ACCEL_IPSEC_CAP_ESP ) || !MLX5_CAP_ETH (mdev, swp)) {mlx5_core_dbg (mdev,"mlx5e: ESP and SWP offload not supported\n" );
drivers/net/ethernet/mellanox/mlx5/core/en_main.c +3 -5
@@ -5007,11 +5007,9 @@ static void mlx5e_build_nic_netdev(struct net_device *netdev) }if (mlx5_vxlan_allowed (mdev->vxlan) ||mlx5_geneve_tx_allowed (mdev)) { - netdev->hw_features |=NETIF_F_GSO_UDP_TUNNEL | -NETIF_F_GSO_UDP_TUNNEL_CSUM ; - netdev->hw_enc_features |=NETIF_F_GSO_UDP_TUNNEL | -NETIF_F_GSO_UDP_TUNNEL_CSUM ; - netdev->gso_partial_features =NETIF_F_GSO_UDP_TUNNEL_CSUM ; + netdev->hw_features |=NETIF_F_GSO_UDP_TUNNEL ; + netdev->hw_enc_features |=NETIF_F_GSO_UDP_TUNNEL ; + netdev->vlan_features |=NETIF_F_GSO_UDP_TUNNEL ; }if (mlx5e_tunnel_proto_supported (mdev,IPPROTO_GRE )) {
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c +1 -1
@@ -4079,7 +4079,7 @@ static void mlx5e_tc_hairpin_update_dead_peer(struct mlx5e_priv *priv,list_for_each_entry_safe (hpe, tmp, &init_wait_list, dead_peer_wait_list) {wait_for_completion (&hpe->res_ready);if (!IS_ERR_OR_NULL (hpe->hp) && hpe->peer_vhca_id == peer_vhca_id) - hpe->hp->pair->peer_gone = true; +mlx5_core_hairpin_clear_dead_peer (hpe->hp->pair);mlx5e_hairpin_put (priv, hpe); }
drivers/net/ethernet/mellanox/mlx5/core/rdma.c +3 -0
@@ -156,6 +156,9 @@ void mlx5_rdma_enable_roce(struct mlx5_core_dev *dev) {int err; +if (!MLX5_CAP_GEN (dev, roce)) +return ; + err =mlx5_nic_vport_enable_roce (dev);if (err) {mlx5_core_err (dev,"Failed to enable RoCE: %d\n" , err);
drivers/net/ethernet/mellanox/mlx5/core/transobj.c +24 -6
@@ -457,6 +457,15 @@ static int mlx5_hairpin_pair_queues(struct mlx5_hairpin *hp)return err; } +static void mlx5_hairpin_unpair_peer_sq (struct mlx5_hairpin *hp) +{ +int i; + +for (i =0 ; i < hp->num_channels; i++) +mlx5_hairpin_modify_sq (hp->peer_mdev, hp->sqn[i],MLX5_SQC_STATE_RDY , +MLX5_SQC_STATE_RST ,0 ,0 ); +} +static void mlx5_hairpin_unpair_queues (struct mlx5_hairpin *hp) {int i;
@@ -465,13 +474,9 @@ static void mlx5_hairpin_unpair_queues(struct mlx5_hairpin *hp)for (i =0 ; i < hp->num_channels; i++)mlx5_hairpin_modify_rq (hp->func_mdev, hp->rqn[i],MLX5_RQC_STATE_RDY ,MLX5_RQC_STATE_RST ,0 ,0 ); -/* unset peer SQs */ -if (hp->peer_gone) -return ; -for (i =0 ; i < hp->num_channels; i++) -mlx5_hairpin_modify_sq (hp->peer_mdev, hp->sqn[i],MLX5_SQC_STATE_RDY , -MLX5_SQC_STATE_RST ,0 ,0 ); +if (!hp->peer_gone) +mlx5_hairpin_unpair_peer_sq (hp); } struct mlx5_hairpin *
@@ -518,3 +523,16 @@ void mlx5_core_hairpin_destroy(struct mlx5_hairpin *hp)mlx5_hairpin_destroy_queues (hp);kfree (hp); } + +void mlx5_core_hairpin_clear_dead_peer (struct mlx5_hairpin *hp) +{ +int i; + +mlx5_hairpin_unpair_peer_sq (hp); + +/* destroy peer SQ */ +for (i =0 ; i < hp->num_channels; i++) +mlx5_core_destroy_sq (hp->peer_mdev, hp->sqn[i]); + + hp->peer_gone = true; +}
drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c +2 -0
@@ -1602,6 +1602,8 @@ netxen_nic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)free_netdev (netdev); err_out_free_res: +if (NX_IS_REVISION_P3 (pdev->revision)) +pci_disable_pcie_error_reporting (pdev);pci_release_regions (pdev); err_out_disable_pdev:
drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c +1 -0
@@ -2709,6 +2709,7 @@ qlcnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)kfree (ahw); err_out_free_res: +pci_disable_pcie_error_reporting (pdev);pci_release_regions (pdev); err_out_disable_pdev:
drivers/net/ethernet/stmicro/stmmac/dwmac1000.h +4 -4
@@ -76,10 +76,10 @@ enum power_event {#define LPI_CTRL_STATUS_TLPIEN 0x00000001/* Transmit LPI Entry */ /* GMAC HW ADDR regs */ -#define GMAC_ADDR_HIGH (reg) (((reg > 15) ? 0x00000800 : 0x00000040) + \ - (reg * 8)) -#define GMAC_ADDR_LOW (reg) (((reg > 15) ? 0x00000804 : 0x00000044) + \ - (reg * 8)) +#define GMAC_ADDR_HIGH (reg) ((reg > 15) ? 0x00000800 + (reg - 16) * 8 : \ + 0x00000040 + (reg * 8)) +#define GMAC_ADDR_LOW (reg) ((reg > 15) ? 0x00000804 + (reg - 16) * 8 : \ + 0x00000044 + (reg * 8))#define GMAC_MAX_PERFECT_ADDRESSES 1#define GMAC_PCS_BASE 0x000000c0/* PCS register base */
drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c +2 -0
@@ -624,6 +624,8 @@ stmmac_probe_config_dt(struct platform_device *pdev, const char **mac)void stmmac_remove_config_dt (struct platform_device *pdev,struct plat_stmmacenet_data *plat) { +clk_disable_unprepare (plat->stmmac_clk); +clk_disable_unprepare (plat->pclk);of_node_put (plat->phy_node);of_node_put (plat->mdio_node); }
drivers/net/ethernet/xilinx/ll_temac_main.c +6 -2
@@ -846,7 +846,7 @@ temac_start_xmit(struct sk_buff *skb, struct net_device *ndev)smp_mb ();/* Space might have just been freed - check again */ -if (temac_check_tx_bd_space (lp, num_frag)) +if (temac_check_tx_bd_space (lp, num_frag +1 ))return NETDEV_TX_BUSY ;netif_wake_queue (ndev);
@@ -873,7 +873,6 @@ temac_start_xmit(struct sk_buff *skb, struct net_device *ndev)return NETDEV_TX_OK ; } cur_p->phys =cpu_to_be32 (skb_dma_addr); -ptr_to_txbd ((void *)skb, cur_p);for (ii =0 ; ii < num_frag; ii++) {if (++lp->tx_bd_tail >=TX_BD_NUM )
@@ -912,6 +911,11 @@ temac_start_xmit(struct sk_buff *skb, struct net_device *ndev) } cur_p->app0 |=cpu_to_be32 (STS_CTRL_APP0_EOP ); +/* Mark last fragment with skb address, so it can be consumed +* in temac_start_xmit_done() +*/ +ptr_to_txbd ((void *)skb, cur_p); + tail_p = lp->tx_bd_p +sizeof (*lp->tx_bd_v) * lp->tx_bd_tail; lp->tx_bd_tail++;if (lp->tx_bd_tail >=TX_BD_NUM )
drivers/net/hamradio/mkiss.c +1 -0
@@ -800,6 +800,7 @@ static void mkiss_close(struct tty_struct *tty) ax->tty =NULL ;unregister_netdev (ax->dev); +free_netdev (ax->dev); }/* Perform I/O control on an active ax25 channel. */
drivers/net/usb/cdc_eem.c +1 -1
@@ -123,10 +123,10 @@ static struct sk_buff *eem_tx_fixup(struct usbnet *dev, struct sk_buff *skb, } skb2 =skb_copy_expand (skb,EEM_HEAD ,ETH_FCS_LEN + padlen, flags); +dev_kfree_skb_any (skb);if (!skb2)return NULL ; -dev_kfree_skb_any (skb); skb = skb2; done:
drivers/net/usb/cdc_ncm.c +1 -1
@@ -1662,7 +1662,7 @@ static void cdc_ncm_status(struct usbnet *dev, struct urb *urb)static const struct driver_info cdc_ncm_info = { .description ="CDC NCM" , .flags =FLAG_POINTTOPOINT |FLAG_NO_SETINT |FLAG_MULTI_PACKET - |FLAG_LINK_INTR , + |FLAG_LINK_INTR |FLAG_ETHER , .bind = cdc_ncm_bind, .unbind = cdc_ncm_unbind, .manage_power = usbnet_manage_power,
drivers/net/usb/smsc75xx.c +6 -4
@@ -1482,7 +1482,7 @@ static int smsc75xx_bind(struct usbnet *dev, struct usb_interface *intf) ret =smsc75xx_wait_ready (dev,0 );if (ret <0 ) {netdev_warn (dev->net,"device not ready in smsc75xx_bind\n" ); - goto err; + goto free_pdata; }smsc75xx_init_mac_address (dev);
@@ -1491,7 +1491,7 @@ static int smsc75xx_bind(struct usbnet *dev, struct usb_interface *intf) ret =smsc75xx_reset (dev);if (ret <0 ) {netdev_warn (dev->net,"smsc75xx_reset error %d\n" , ret); - goto err; + goto cancel_work; } dev->net->netdev_ops = &smsc75xx_netdev_ops;
@@ -1502,8 +1502,11 @@ static int smsc75xx_bind(struct usbnet *dev, struct usb_interface *intf) dev->net->max_mtu =MAX_SINGLE_PACKET_SIZE ;return 0 ; -err: +cancel_work: +cancel_work_sync (&pdata->set_multicast); +free_pdata:kfree (pdata); + dev->data[0 ] =0 ;return ret; }
@@ -1514,7 +1517,6 @@ static void smsc75xx_unbind(struct usbnet *dev, struct usb_interface *intf)cancel_work_sync (&pdata->set_multicast);netif_dbg (dev, ifdown, dev->net,"free pdata\n" );kfree (pdata); - pdata =NULL ; dev->data[0 ] =0 ; } }
drivers/net/vrf.c +2 -4
@@ -908,9 +908,6 @@ static int vrf_dev_init(struct net_device *dev) dev->flags =IFF_MASTER |IFF_NOARP ; -/* MTU is irrelevant for VRF device; set to 64k similar to lo */ - dev->mtu =64 *1024 ; -/* similarly, oper state is irrelevant; set to up to avoid confusion */ dev->operstate =IF_OPER_UP ;return 0 ;
@@ -1343,7 +1340,8 @@ static void vrf_setup(struct net_device *dev)* which breaks networking. */ dev->min_mtu =IPV6_MIN_MTU ; - dev->max_mtu =ETH_MAX_MTU ; + dev->max_mtu =IP6_MAX_MTU ; + dev->mtu = dev->max_mtu; } static int vrf_validate(struct nlattr *tb[], struct nlattr *data[],
drivers/pci/controller/pci-aardvark.c +45 -14
110 lines not on this page · raw message
drivers/pci/quirks.c +89 -0
119 lines not on this page · raw message
drivers/ptp/ptp_clock.c +3 -3
@@ -63,7 +63,7 @@ static void enqueue_external_timestamp(struct timestamp_event_queue *queue,spin_unlock_irqrestore (&queue->lock, flags); } -s32 scaled_ppm_to_ppb (long ppm) +long scaled_ppm_to_ppb (long ppm) {/* * The 'freq' field in the 'struct timex' is in parts per
@@ -80,7 +80,7 @@ s32 scaled_ppm_to_ppb(long ppm)s64 ppb =1 + ppm; ppb *=125 ; ppb >>=13 ; -return (s32 ) ppb; +return (long ) ppb; }EXPORT_SYMBOL (scaled_ppm_to_ppb);
@@ -138,7 +138,7 @@ static int ptp_clock_adjtime(struct posix_clock *pc, struct __kernel_timex *tx) delta =ktime_to_ns (kt); err = ops->adjtime (ops, delta); }else if (tx->modes &ADJ_FREQUENCY ) { -s32 ppb =scaled_ppm_to_ppb (tx->freq); +long ppb =scaled_ppm_to_ppb (tx->freq);if (ppb > ops->max_adj || ppb < -ops->max_adj)return -ERANGE ;if (ops->adjfine)
drivers/spi/spi-stm32-qspi.c +4 -1
@@ -291,7 +291,7 @@ static int stm32_qspi_wait_cmd(struct stm32_qspi *qspi,int err =0 ;if (!op->data.nbytes) -return stm32_qspi_wait_nobusy (qspi); + goto wait_nobusy;if (readl_relaxed (qspi->io_base +QSPI_SR ) &SR_TCF ) goto out;
@@ -312,6 +312,9 @@ static int stm32_qspi_wait_cmd(struct stm32_qspi *qspi, out:/* clear flags */ writel_relaxed (FCR_CTCF |FCR_CTEF , qspi->io_base +QSPI_FCR ); +wait_nobusy: +if (!err) + err =stm32_qspi_wait_nobusy (qspi);return err; }
drivers/staging/mt7621-pinctrl/pinctrl-rt2880.c +1 -1
@@ -127,7 +127,7 @@ static int rt2880_pmx_group_enable(struct pinctrl_dev *pctrldev,if (p->groups[group].enabled) {dev_err (p->dev,"%s is already enabled\n" , p->groups[group].name); -return -EBUSY ; +return 0 ; } p->groups[group].enabled =1 ;
drivers/usb/core/hub.c +7 -0
@@ -39,6 +39,8 @@#define USB_VENDOR_GENESYS_LOGIC 0x05e3#define USB_VENDOR_SMSC 0x0424#define USB_PRODUCT_USB5534B 0x5534 +#define USB_VENDOR_CYPRESS 0x04b4 +#define USB_PRODUCT_CY7C65632 0x6570#define HUB_QUIRK_CHECK_PORT_AUTOSUSPEND 0x01#define HUB_QUIRK_DISABLE_AUTOSUSPEND 0x02
@@ -5514,6 +5516,11 @@ static const struct usb_device_id hub_id_table[] = { .idProduct = USB_PRODUCT_USB5534B, .bInterfaceClass = USB_CLASS_HUB, .driver_info = HUB_QUIRK_DISABLE_AUTOSUSPEND}, + { .match_flags = USB_DEVICE_ID_MATCH_VENDOR + | USB_DEVICE_ID_MATCH_PRODUCT, + .idVendor = USB_VENDOR_CYPRESS, + .idProduct = USB_PRODUCT_CY7C65632, + .driver_info = HUB_QUIRK_DISABLE_AUTOSUSPEND}, { .match_flags = USB_DEVICE_ID_MATCH_VENDOR | USB_DEVICE_ID_MATCH_INT_CLASS, .idVendor = USB_VENDOR_GENESYS_LOGIC,
drivers/usb/dwc3/core.c +1 -1
@@ -1575,8 +1575,8 @@ static int dwc3_remove(struct platform_device *pdev)pm_runtime_get_sync (&pdev->dev); -dwc3_debugfs_exit (dwc);dwc3_core_exit_mode (dwc); +dwc3_debugfs_exit (dwc);dwc3_core_exit (dwc);dwc3_ulpi_exit (dwc);
drivers/usb/dwc3/debug.h +3 -0
@@ -409,9 +409,12 @@ static inline const char *dwc3_gadget_generic_cmd_status_string(int status)#ifdef CONFIG_DEBUG_FS +extern void dwc3_debugfs_create_endpoint_dir (struct dwc3_ep *dep);extern void dwc3_debugfs_init (struct dwc3 *);extern void dwc3_debugfs_exit (struct dwc3 *);#else +static inline void dwc3_debugfs_create_endpoint_dir (struct dwc3_ep *dep) +{ }static inline void dwc3_debugfs_init (struct dwc3 *d) { }static inline void dwc3_debugfs_exit (struct dwc3 *d)
drivers/usb/dwc3/debugfs.c +2 -19
@@ -878,30 +878,14 @@ static void dwc3_debugfs_create_endpoint_files(struct dwc3_ep *dep, } } -static void dwc3_debugfs_create_endpoint_dir (struct dwc3_ep *dep, -struct dentry *parent) +void dwc3_debugfs_create_endpoint_dir (struct dwc3_ep *dep) {struct dentry *dir; - dir =debugfs_create_dir (dep->name, parent); + dir =debugfs_create_dir (dep->name, dep->dwc->root);dwc3_debugfs_create_endpoint_files (dep, dir); } -static void dwc3_debugfs_create_endpoint_dirs (struct dwc3 *dwc, -struct dentry *parent) -{ -int i; - -for (i =0 ; i < dwc->num_eps; i++) { -struct dwc3_ep *dep = dwc->eps[i]; - -if (!dep) -continue ; - -dwc3_debugfs_create_endpoint_dir (dep, parent); - } -} -void dwc3_debugfs_init (struct dwc3 *dwc) {struct dentry *root;
@@ -935,7 +919,6 @@ void dwc3_debugfs_init(struct dwc3 *dwc) &dwc3_testmode_fops);debugfs_create_file ("link_state" ,S_IRUGO |S_IWUSR , root, dwc, &dwc3_link_state_fops); -dwc3_debugfs_create_endpoint_dirs (dwc, root); } }
drivers/usb/dwc3/gadget.c +3 -0
@@ -2483,6 +2483,8 @@ static int dwc3_gadget_init_endpoint(struct dwc3 *dwc, u8 epnum)INIT_LIST_HEAD (&dep->started_list);INIT_LIST_HEAD (&dep->cancelled_list); +dwc3_debugfs_create_endpoint_dir (dep); +return 0 ; }
@@ -2526,6 +2528,7 @@ static void dwc3_gadget_free_endpoints(struct dwc3 *dwc)list_del (&dep->endpoint.ep_list); } +debugfs_remove_recursive (debugfs_lookup (dep->name, dwc->root));kfree (dep); } }
fs/afs/main.c +2 -2
@@ -196,8 +196,8 @@ static int __init afs_init(void) goto error_fs; afs_proc_symlink =proc_symlink ("fs/afs" ,NULL ,"../self/net/afs" ); -if (IS_ERR (afs_proc_symlink)) { - ret =PTR_ERR (afs_proc_symlink); +if (!afs_proc_symlink) { + ret = -ENOMEM ; goto error_proc; }
include/linux/cpuhotplug.h +1 -0
@@ -119,6 +119,7 @@ enum cpuhp_state {CPUHP_AP_ARM_L2X0_STARTING ,CPUHP_AP_EXYNOS4_MCT_TIMER_STARTING ,CPUHP_AP_ARM_ARCH_TIMER_STARTING , +CPUHP_AP_OMAP_DM_TIMER_STARTING ,CPUHP_AP_ARM_GLOBAL_TIMER_STARTING ,CPUHP_AP_JCORE_TIMER_STARTING , CPUHP_AP_ARM_TWD_STARTING,
include/linux/mfd/rohm-bd70528.h +1 -3
@@ -25,9 +25,7 @@ struct bd70528_data {struct mutex rtc_timer_lock; }; -#define BD70528_BUCK_VOLTS 17 -#define BD70528_BUCK_VOLTS 17 -#define BD70528_BUCK_VOLTS 17 +#define BD70528_BUCK_VOLTS 0x10#define BD70528_LDO_VOLTS 0x20#define BD70528_REG_BUCK1_EN 0x0F
include/linux/mlx5/transobj.h +1 -0
@@ -92,4 +92,5 @@ mlx5_core_hairpin_create(struct mlx5_core_dev *func_mdev, struct mlx5_hairpin_params *params);void mlx5_core_hairpin_destroy (struct mlx5_hairpin *pair); +void mlx5_core_hairpin_clear_dead_peer (struct mlx5_hairpin *hp);#endif /* __TRANSOBJ_H__ */
include/linux/ptp_clock_kernel.h +1 -1
@@ -218,7 +218,7 @@ extern int ptp_clock_index(struct ptp_clock *ptp);* @ppm: Parts per million, but with a 16 bit binary fractional field */ -extern s32 scaled_ppm_to_ppb (long ppm); +extern long scaled_ppm_to_ppb (long ppm);/** * ptp_find_pin() - obtain the pin index of a given auxiliary function
include/linux/socket.h +0 -2
@@ -406,6 +406,4 @@ extern int __sys_getpeername(int fd, struct sockaddr __user *usockaddr,extern int __sys_socketpair (int family,int type,int protocol,int __user *usockvec);extern int __sys_shutdown (int fd,int how); - -extern struct ns_common *get_net_ns (struct ns_common *ns);#endif /* _LINUX_SOCKET_H */
include/net/net_namespace.h +7 -0
@@ -195,6 +195,8 @@ struct net *copy_net_ns(unsigned long flags, struct user_namespace *user_ns,void net_ns_get_ownership (const struct net *net,kuid_t *uid,kgid_t *gid);void net_ns_barrier (void ); + +struct ns_common *get_net_ns (struct ns_common *ns);#else /* CONFIG_NET_NS */ #include <linux/sched.h> #include <linux/nsproxy.h>
@@ -214,6 +216,11 @@ static inline void net_ns_get_ownership(const struct net *net, }static inline void net_ns_barrier (void ) {} + +static inline struct ns_common *get_net_ns (struct ns_common *ns) +{ +return ERR_PTR (-EINVAL ); +}#endif /* CONFIG_NET_NS */
include/uapi/linux/in.h +3 -0
@@ -284,6 +284,9 @@ struct sockaddr_in {/* Address indicating an error return. */ #define INADDR_NONE ((unsigned long int) 0xffffffff) +/* Dummy address for src of ICMP replies if no real address is set (RFC7600). */ +#define INADDR_DUMMY ((unsigned long int) 0xc0000008) +/* Network number for local host loopback. */ #define IN_LOOPBACKNET 127
kernel/trace/trace.c +0 -11
@@ -1948,9 +1948,6 @@ struct saved_cmdlines_buffer { };static struct saved_cmdlines_buffer *savedcmd; -/* temporary disable recording */ -static atomic_t trace_record_taskinfo_disabled__read_mostly ; -static inline char *get_saved_cmdlines (int idx) {return &savedcmd->saved_cmdlines[idx *TASK_COMM_LEN ];
@@ -2236,8 +2233,6 @@ static bool tracing_record_taskinfo_skip(int flags) {if (unlikely (!(flags & (TRACE_RECORD_CMDLINE |TRACE_RECORD_TGID ))))return true; -if (atomic_read (&trace_record_taskinfo_disabled) || !tracing_is_on ()) -return true;if (!__this_cpu_read (trace_taskinfo_save))return true;return false;
@@ -3460,9 +3455,6 @@ static void *s_start(struct seq_file *m, loff_t *pos)return ERR_PTR (-EBUSY );#endif -if (!iter->snapshot) -atomic_inc (&trace_record_taskinfo_disabled); -if (*pos != iter->pos) { iter->ent =NULL ; iter->cpu =0 ;
@@ -3505,9 +3497,6 @@ static void s_stop(struct seq_file *m, void *p)return ;#endif -if (!iter->snapshot) -atomic_dec (&trace_record_taskinfo_disabled); -trace_access_unlock (iter->cpu_file);trace_event_read_unlock (); }
kernel/trace/trace_clock.c +3 -3
@@ -115,9 +115,9 @@ u64 notrace trace_clock_global(void) prev_time =READ_ONCE (trace_clock_struct.prev_time); now =sched_clock_cpu (this_cpu); -/* Make sure that now is always greater than prev_time */ +/* Make sure that now is always greater than or equal to prev_time */ if ((s64)(now - prev_time) <0 ) - now = prev_time +1 ; + now = prev_time;/* * If in an NMI context then dont risk lockups and simply return
@@ -131,7 +131,7 @@ u64 notrace trace_clock_global(void)/* Reread prev_time in case it was already updated */ prev_time =READ_ONCE (trace_clock_struct.prev_time);if ((s64)(now - prev_time) <0 ) - now = prev_time +1 ; + now = prev_time; trace_clock_struct.prev_time = now;
mm/memory-failure.c +6 -1
@@ -1382,7 +1382,12 @@ int memory_failure(unsigned long pfn, int flags)return 0 ; } -if (!PageTransTail (p) && !PageLRU (p)) +/* +* __munlock_pagevec may clear a writeback page's LRU flag without +* page_lock. We need wait writeback completion for this page or it +* may trigger vfs BUG while evict inode. +*/ +if (!PageTransTail (p) && !PageLRU (p) && !PageWriteback (p)) goto identify_page_state;/*
mm/slab_common.c +1 -2
@@ -85,8 +85,7 @@ EXPORT_SYMBOL(kmem_cache_size);#ifdef CONFIG_DEBUG_VM static int kmem_cache_sanity_check (const char *name,unsigned int size) { -if (!name ||in_interrupt () || size <sizeof (void *) || - size >KMALLOC_MAX_SIZE ) { +if (!name ||in_interrupt () || size >KMALLOC_MAX_SIZE ) {pr_err ("kmem_cache_create(%s) integrity check failed\n" , name);return -EINVAL ; }
mm/slub.c +13 -10
@@ -15,6 +15,7 @@#include <linux/module.h> #include <linux/bit_spinlock.h> #include <linux/interrupt.h> +#include <linux/swab.h> #include <linux/bitops.h> #include <linux/slab.h> #include "slab.h"
@@ -688,15 +689,15 @@ static void print_trailer(struct kmem_cache *s, struct page *page, u8 *p) p, p - addr, get_freepointer(s, p));if (s->flags &SLAB_RED_ZONE ) -print_section (KERN_ERR ,"Redzone " , p - s->red_left_pad, +print_section (KERN_ERR ,"Redzone " , p - s->red_left_pad, s->red_left_pad);else if (p > addr +16 )print_section (KERN_ERR ,"Bytes b4 " , p -16 ,16 ); -print_section (KERN_ERR ,"Object " , p, +print_section (KERN_ERR ,"Object " , p, min_t(unsigned int, s->object_size, PAGE_SIZE));if (s->flags &SLAB_RED_ZONE ) -print_section (KERN_ERR ,"Redzone " , p + s->object_size, +print_section (KERN_ERR ,"Redzone " , p + s->object_size, s->inuse - s->object_size); off =get_info_end (s);
@@ -708,7 +709,7 @@ static void print_trailer(struct kmem_cache *s, struct page *page, u8 *p)if (off !=size_from_object (s))/* Beginning of the filler is the free pointer */ -print_section (KERN_ERR ,"Padding " , p + off, +print_section (KERN_ERR ,"Padding " , p + off,size_from_object (s) - off);dump_stack ();
@@ -882,11 +883,11 @@ static int check_object(struct kmem_cache *s, struct page *page,u8 *endobject = object + s->object_size;if (s->flags &SLAB_RED_ZONE ) { -if (!check_bytes_and_report (s, page, object,"Redzone" , +if (!check_bytes_and_report (s, page, object,"Left Redzone" , object - s->red_left_pad, val, s->red_left_pad))return 0 ; -if (!check_bytes_and_report (s, page, object,"Redzone" , +if (!check_bytes_and_report (s, page, object,"Right Redzone" , endobject, val, s->inuse - s->object_size))return 0 ; }else {
@@ -901,7 +902,7 @@ static int check_object(struct kmem_cache *s, struct page *page,if (val !=SLUB_RED_ACTIVE && (s->flags & __OBJECT_POISON) && (!check_bytes_and_report (s, page, p,"Poison" , p,POISON_FREE , s->object_size -1 ) || - !check_bytes_and_report (s, page, p,"Poison" , + !check_bytes_and_report (s, page, p,"End Poison" , p + s->object_size -1 ,POISON_END ,1 )))return 0 ;/*
@@ -3586,15 +3587,17 @@ static int calculate_sizes(struct kmem_cache *s, int forced_order)*/ s->inuse = size; -if (((flags & (SLAB_TYPESAFE_BY_RCU |SLAB_POISON )) || - s->ctor)) { +if ((flags & (SLAB_TYPESAFE_BY_RCU |SLAB_POISON )) || + ((flags &SLAB_RED_ZONE ) && s->object_size <sizeof (void *)) || + s->ctor) {/* * Relocate free pointer after the object if it is not * permitted to overwrite the first word of the object on * kmem_cache_free. * * This is the case if we do RCU, have a constructor or -* destructor or are poisoning the objects. +* destructor, are poisoning the objects, or are +* redzoning an object smaller than sizeof(void *). * * The assumption that s->offset >= s->inuse means free * pointer is outside of the object is used in the
net/batman-adv/bat_iv_ogm.c +3 -1
@@ -409,8 +409,10 @@ static void batadv_iv_ogm_emit(struct batadv_forw_packet *forw_packet)if (WARN_ON (!forw_packet->if_outgoing))return ; -if (WARN_ON (forw_packet->if_outgoing->soft_iface != soft_iface)) +if (forw_packet->if_outgoing->soft_iface != soft_iface) { +pr_warn ("%s: soft interface switch for queued OGM\n" , __func__);return ; + }if (forw_packet->if_incoming->if_status !=BATADV_IF_ACTIVE )return ;
net/bridge/br_private.h +2 -2
@@ -96,8 +96,8 @@ struct br_vlan_stats { };struct br_tunnel_info { -__be64 tunnel_id; -struct metadata_dst *tunnel_dst; +__be64 tunnel_id; +struct metadata_dst __rcu *tunnel_dst; };/* private vlan flags */
net/bridge/br_vlan_tunnel.c +24 -14
@@ -41,26 +41,33 @@ static struct net_bridge_vlan *br_vlan_tunnel_lookup(struct rhashtable *tbl, br_vlan_tunnel_rht_params); } +static void vlan_tunnel_info_release (struct net_bridge_vlan *vlan) +{ +struct metadata_dst *tdst =rtnl_dereference (vlan->tinfo.tunnel_dst); + +WRITE_ONCE (vlan->tinfo.tunnel_id,0 ); +RCU_INIT_POINTER (vlan->tinfo.tunnel_dst,NULL ); +dst_release (&tdst->dst); +} +void vlan_tunnel_info_del (struct net_bridge_vlan_group *vg,struct net_bridge_vlan *vlan) { -if (!vlan->tinfo.tunnel_dst) +if (!rcu_access_pointer (vlan->tinfo.tunnel_dst))return ;rhashtable_remove_fast (&vg->tunnel_hash, &vlan->tnode, br_vlan_tunnel_rht_params); - vlan->tinfo.tunnel_id =0 ; -dst_release (&vlan->tinfo.tunnel_dst->dst); - vlan->tinfo.tunnel_dst =NULL ; +vlan_tunnel_info_release (vlan); }static int __vlan_tunnel_info_add (struct net_bridge_vlan_group *vg,struct net_bridge_vlan *vlan,u32 tun_id) { -struct metadata_dst *metadata =NULL ; +struct metadata_dst *metadata =rtnl_dereference (vlan->tinfo.tunnel_dst);__be64 key =key32_to_tunnel_id (cpu_to_be32 (tun_id));int err; -if (vlan->tinfo.tunnel_dst) +if (metadata)return -EEXIST ; metadata = __ip_tun_set_dst(0, 0, 0, 0, 0, TUNNEL_KEY,
@@ -69,8 +76,8 @@ static int __vlan_tunnel_info_add(struct net_bridge_vlan_group *vg,return -EINVAL ; metadata->u.tun_info.mode |=IP_TUNNEL_INFO_TX |IP_TUNNEL_INFO_BRIDGE ; - vlan->tinfo.tunnel_dst = metadata; - vlan->tinfo.tunnel_id = key; +rcu_assign_pointer (vlan->tinfo.tunnel_dst, metadata); +WRITE_ONCE (vlan->tinfo.tunnel_id, key); err =rhashtable_lookup_insert_fast (&vg->tunnel_hash, &vlan->tnode, br_vlan_tunnel_rht_params);
@@ -79,9 +86,7 @@ static int __vlan_tunnel_info_add(struct net_bridge_vlan_group *vg,return 0 ; out: -dst_release (&vlan->tinfo.tunnel_dst->dst); - vlan->tinfo.tunnel_dst =NULL ; - vlan->tinfo.tunnel_id =0 ; +vlan_tunnel_info_release (vlan);return err; }
@@ -181,12 +186,15 @@ int br_handle_ingress_vlan_tunnel(struct sk_buff *skb,int br_handle_egress_vlan_tunnel (struct sk_buff *skb,struct net_bridge_vlan *vlan) { +struct metadata_dst *tunnel_dst; +__be64 tunnel_id;int err; -if (!vlan || !vlan->tinfo.tunnel_id) +if (!vlan)return 0 ; -if (unlikely (!skb_vlan_tag_present (skb))) + tunnel_id =READ_ONCE (vlan->tinfo.tunnel_id); +if (!tunnel_id ||unlikely (!skb_vlan_tag_present (skb)))return 0 ;skb_dst_drop (skb);
@@ -194,7 +202,9 @@ int br_handle_egress_vlan_tunnel(struct sk_buff *skb,if (err)return err; -skb_dst_set (skb,dst_clone (&vlan->tinfo.tunnel_dst->dst)); + tunnel_dst =rcu_dereference (vlan->tinfo.tunnel_dst); +if (tunnel_dst &&dst_hold_safe (&tunnel_dst->dst)) +skb_dst_set (skb, &tunnel_dst->dst);return 0 ; }
net/can/bcm.c +49 -13
141 lines not on this page · raw message
net/can/j1939/transport.c +40 -14
157 lines not on this page · raw message
net/can/raw.c +48 -14
123 lines not on this page · raw message
net/core/net_namespace.c +12 -0
@@ -643,6 +643,18 @@ void __put_net(struct net *net) }EXPORT_SYMBOL_GPL (__put_net); +/** +* get_net_ns - increment the refcount of the network namespace +* @ns: common namespace (net) +* +* Returns the net's common namespace. +*/ +struct ns_common *get_net_ns (struct ns_common *ns) +{ + return &get_net(container_of(ns, struct net, ns))->ns; +} +EXPORT_SYMBOL_GPL (get_net_ns); +struct net *get_net_ns_by_fd (int fd) {struct file *file;
net/core/rtnetlink.c +5 -3
@@ -4535,10 +4535,12 @@ static int rtnl_bridge_notify(struct net_device *dev)if (err <0 ) goto errout; -if (!skb->len) { - err = -EINVAL ; +/* Notification info is only filled for bridge ports, not the bridge +* device itself. Therefore, a zero notification length is valid and +* should not result in an error. +*/ +if (!skb->len) goto errout; - }rtnl_notify (skb, net,0 ,RTNLGRP_LINK ,NULL ,GFP_ATOMIC );return 0 ;
net/ipv4/cipso_ipv4.c +1 -0
@@ -472,6 +472,7 @@ void cipso_v4_doi_free(struct cipso_v4_doi *doi_def)kfree (doi_def->map.std->lvl.local);kfree (doi_def->map.std->cat.cipso);kfree (doi_def->map.std->cat.local); +kfree (doi_def->map.std);break ; }kfree (doi_def);
net/ipv4/icmp.c +7 -0
@@ -739,6 +739,13 @@ void __icmp_send(struct sk_buff *skb_in, int type, int code, __be32 info, icmp_param.data_len = room; icmp_param.head_len =sizeof (struct icmphdr ); +/* if we don't have a source address at this point, fall back to the +* dummy address instead of sending out a packet with a source address +* of 0.0.0.0 +*/ +if (!fl4.saddr) + fl4.saddr =htonl (INADDR_DUMMY ); +icmp_push_reply (&icmp_param, &fl4, &ipc, &rt); ende:ip_rt_put (rt);
net/ipv4/igmp.c +1 -0
@@ -1803,6 +1803,7 @@ void ip_mc_destroy_dev(struct in_device *in_dev)while ((i =rtnl_dereference (in_dev->mc_list)) !=NULL ) { in_dev->mc_list = i->next_rcu; in_dev->mc_count--; +ip_mc_clear_src (i);ip_ma_put (i); } }
net/ipv4/udp.c +10 -0
@@ -2511,6 +2511,9 @@ void udp_destroy_sock(struct sock *sk) {struct udp_sock *up =udp_sk (sk);bool slow =lock_sock_fast (sk); + +/* protects from races with udp_abort() */ +sock_set_flag (sk,SOCK_DEAD );udp_flush_pending_frames (sk);unlock_sock_fast (sk, slow);if (static_branch_unlikely (&udp_encap_needed_key)) {
@@ -2770,10 +2773,17 @@ int udp_abort(struct sock *sk, int err) {lock_sock (sk); +/* udp{v6}_destroy_sock() sets it under the sk lock, avoid racing +* with close() +*/ +if (sock_flag (sk,SOCK_DEAD )) + goto out; + sk->sk_err = err; sk->sk_error_report (sk);__udp_disconnect (sk,0 ); +out:release_sock (sk);return 0 ;
net/ipv6/udp.c +3 -0
@@ -1539,6 +1539,9 @@ void udpv6_destroy_sock(struct sock *sk) {struct udp_sock *up =udp_sk (sk);lock_sock (sk); + +/* protects from races with udp_abort() */ +sock_set_flag (sk,SOCK_DEAD );udp_v6_flush_pending_frames (sk);release_sock (sk);
net/netfilter/nf_synproxy_core.c +5 -0
@@ -31,6 +31,9 @@ synproxy_parse_options(const struct sk_buff *skb, unsigned int doff,int length = (th->doff *4 ) -sizeof (*th);u8 buf[40 ], *ptr; +if (unlikely (length <0 )) +return false; + ptr =skb_header_pointer (skb, doff +sizeof (*th), length, buf);if (ptr ==NULL )return false;
@@ -47,6 +50,8 @@ synproxy_parse_options(const struct sk_buff *skb, unsigned int doff, length--;continue ;default : +if (length <2 ) +return true; opsize = *ptr++;if (opsize <2 )return true;
net/qrtr/qrtr.c +1 -1
@@ -257,7 +257,7 @@ int qrtr_endpoint_post(struct qrtr_endpoint *ep, const void *data, size_t len)const struct qrtr_hdr_v2 *v2;struct sk_buff *skb;struct qrtr_cb *cb; -unsigned int size; +size_t size;unsigned int ver;size_t hdrlen;
net/rds/recv.c +1 -1
@@ -714,7 +714,7 @@ int rds_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,if (rds_cmsg_recv (inc, msg, rs)) { ret = -EFAULT ; - goto out; +break ; }rds_recvmsg_zcookie (rs, msg);
net/sched/act_ct.c +13 -8
@@ -361,14 +361,19 @@ static int tcf_ct_act_nat(struct sk_buff *skb, } err =ct_nat_execute (skb, ct, ctinfo, range, maniptype); -if (err ==NF_ACCEPT && - ct->status &IPS_SRC_NAT && ct->status &IPS_DST_NAT ) { -if (maniptype ==NF_NAT_MANIP_SRC ) - maniptype =NF_NAT_MANIP_DST ; -else - maniptype =NF_NAT_MANIP_SRC ; - - err =ct_nat_execute (skb, ct, ctinfo, range, maniptype); +if (err ==NF_ACCEPT && ct->status &IPS_DST_NAT ) { +if (ct->status &IPS_SRC_NAT ) { +if (maniptype ==NF_NAT_MANIP_SRC ) + maniptype =NF_NAT_MANIP_DST ; +else + maniptype =NF_NAT_MANIP_SRC ; + + err =ct_nat_execute (skb, ct, ctinfo, range, + maniptype); + }else if (CTINFO2DIR (ctinfo) ==IP_CT_DIR_ORIGINAL ) { + err =ct_nat_execute (skb, ct, ctinfo,NULL , +NF_NAT_MANIP_SRC ); + } }return err;#else
net/sched/sch_cake.c +5 -1
@@ -907,7 +907,7 @@ static struct tcphdr *cake_get_tcphdr(const struct sk_buff *skb, } tcph =skb_header_pointer (skb, offset,sizeof (_tcph), &_tcph); -if (!tcph) +if (!tcph || tcph->doff <5 )return NULL ; return skb_header_pointer(skb, offset,
@@ -931,6 +931,8 @@ static const void *cake_get_tcpopt(const struct tcphdr *tcph, length--;continue ; } +if (length <2 ) +break ; opsize = *ptr++;if (opsize <2 || opsize > length)break ;
@@ -1068,6 +1070,8 @@ static bool cake_tcph_may_drop(const struct tcphdr *tcph, length--;continue ; } +if (length <2 ) +break ; opsize = *ptr++;if (opsize <2 || opsize > length)break ;
net/socket.c +0 -13
@@ -1071,19 +1071,6 @@ static long sock_do_ioctl(struct net *net, struct socket *sock,* what to do with it - that's up to the protocol still. */ -/** -* get_net_ns - increment the refcount of the network namespace -* @ns: common namespace (net) -* -* Returns the net's common namespace. -*/ - -struct ns_common *get_net_ns (struct ns_common *ns) -{ - return &get_net(container_of(ns, struct net, ns))->ns; -} -EXPORT_SYMBOL_GPL (get_net_ns); -static long sock_ioctl (struct file *file,unsigned cmd,unsigned long arg) {struct socket *sock;
net/unix/af_unix.c +4 -3
@@ -537,12 +537,14 @@ static void unix_release_sock(struct sock *sk, int embrion) u->path.mnt =NULL ; state = sk->sk_state; sk->sk_state =TCP_CLOSE ; + + skpair =unix_peer (sk); +unix_peer (sk) =NULL ; +unix_state_unlock (sk);wake_up_interruptible_all (&u->peer_wait); - skpair =unix_peer (sk); -if (skpair !=NULL ) {if (sk->sk_type ==SOCK_STREAM || sk->sk_type ==SOCK_SEQPACKET ) {unix_state_lock (skpair);
@@ -557,7 +559,6 @@ static void unix_release_sock(struct sock *sk, int embrion)unix_dgram_peer_wake_disconnect (sk, skpair);sock_put (skpair);/* It may now die */ -unix_peer (sk) =NULL ; }/* Try to flush out this socket. Throw out buffers at least */
net/wireless/Makefile +1 -1
@@ -28,7 +28,7 @@ $(obj)/shipped-certs.c: $(wildcard $(srctree)/$(src)/certs/*.hex) @$(kecho) " GEN $@" @(echo '#include "reg.h"'; \ echo 'const u8 shipped_regdb_certs[] = {'; \ - cat $^ ; \ + echo | cat - $^ ; \ echo '};'; \ echo 'unsigned int shipped_regdb_certs_len = sizeof(shipped_regdb_certs);'; \ ) > $@
net/wireless/pmsr.c +14 -2
@@ -293,6 +293,7 @@ void cfg80211_pmsr_complete(struct wireless_dev *wdev, gfp_t gfp) {struct cfg80211_registered_device *rdev =wiphy_to_rdev (wdev->wiphy); +struct cfg80211_pmsr_request *tmp, *prev, *to_free =NULL ;struct sk_buff *msg;void *hdr;
@@ -323,9 +324,20 @@ void cfg80211_pmsr_complete(struct wireless_dev *wdev,nlmsg_free (msg); free_request:spin_lock_bh (&wdev->pmsr_lock); -list_del (&req->list); +/* +* cfg80211_pmsr_process_abort() may have already moved this request +* to the free list, and will free it later. In this case, don't free +* it here. +*/ +list_for_each_entry_safe (tmp, prev, &wdev->pmsr_list, list) { +if (tmp == req) { +list_del (&req->list); + to_free = req; +break ; + } + }spin_unlock_bh (&wdev->pmsr_lock); -kfree (req); +kfree (to_free); }EXPORT_SYMBOL_GPL (cfg80211_pmsr_complete);
sound/soc/codecs/rt5659.c +21 -5
@@ -2470,13 +2470,18 @@ static int set_dmic_power(struct snd_soc_dapm_widget *w,return 0 ; } -static const struct snd_soc_dapm_widget rt5659_dapm_widgets[] = { +static const struct snd_soc_dapm_widget rt5659_particular_dapm_widgets[] = {SND_SOC_DAPM_SUPPLY ("LDO2" ,RT5659_PWR_ANLG_3 ,RT5659_PWR_LDO2_BIT ,0 ,NULL ,0 ), -SND_SOC_DAPM_SUPPLY ("PLL" ,RT5659_PWR_ANLG_3 ,RT5659_PWR_PLL_BIT ,0 , -NULL ,0 ), +SND_SOC_DAPM_SUPPLY ("MICBIAS1" ,RT5659_PWR_ANLG_2 ,RT5659_PWR_MB1_BIT , +0 ,NULL ,0 ),SND_SOC_DAPM_SUPPLY ("Mic Det Power" ,RT5659_PWR_VOL ,RT5659_PWR_MIC_DET_BIT ,0 ,NULL ,0 ), +}; + +static const struct snd_soc_dapm_widget rt5659_dapm_widgets[] = { +SND_SOC_DAPM_SUPPLY ("PLL" ,RT5659_PWR_ANLG_3 ,RT5659_PWR_PLL_BIT ,0 , +NULL ,0 ),SND_SOC_DAPM_SUPPLY ("Mono Vref" ,RT5659_PWR_ANLG_1 ,RT5659_PWR_VREF3_BIT ,0 ,NULL ,0 ),
@@ -2501,8 +2506,6 @@ static const struct snd_soc_dapm_widget rt5659_dapm_widgets[] = { RT5659_ADC_MONO_R_ASRC_SFT, 0, NULL, 0),/* Input Side */ -SND_SOC_DAPM_SUPPLY ("MICBIAS1" ,RT5659_PWR_ANLG_2 ,RT5659_PWR_MB1_BIT , -0 ,NULL ,0 ),SND_SOC_DAPM_SUPPLY ("MICBIAS2" ,RT5659_PWR_ANLG_2 ,RT5659_PWR_MB2_BIT ,0 ,NULL ,0 ), SND_SOC_DAPM_SUPPLY("MICBIAS3", RT5659_PWR_ANLG_2, RT5659_PWR_MB3_BIT,
@@ -3697,10 +3700,23 @@ static int rt5659_set_bias_level(struct snd_soc_component *component,static int rt5659_probe (struct snd_soc_component *component) { +struct snd_soc_dapm_context *dapm = +snd_soc_component_get_dapm (component);struct rt5659_priv *rt5659 =snd_soc_component_get_drvdata (component); rt5659->component = component; +switch (rt5659->pdata.jd_src) { +case RT5659_JD_HDA_HEADER : +break ; + +default : +snd_soc_dapm_new_controls (dapm, + rt5659_particular_dapm_widgets, +ARRAY_SIZE (rt5659_particular_dapm_widgets)); +break ; + } +return 0 ; }
tools/include/uapi/linux/in.h +3 -0
@@ -284,6 +284,9 @@ struct sockaddr_in {/* Address indicating an error return. */ #define INADDR_NONE ((unsigned long int) 0xffffffff) +/* Dummy address for src of ICMP replies if no real address is set (RFC7600). */ +#define INADDR_DUMMY ((unsigned long int) 0xc0000008) +/* Network number for local host loopback. */ #define IN_LOOPBACKNET 127
virt/kvm/arm/vgic/vgic-kvm-device.c +2 -2
@@ -87,8 +87,8 @@ int kvm_vgic_addr(struct kvm *kvm, unsigned long type, u64 *addr, bool write) r =vgic_v3_set_redist_base (kvm,0 , *addr,0 ); goto out; } - rdreg =list_first_entry (&vgic->rd_regions, - struct vgic_redist_region, list); + rdreg =list_first_entry_or_null (&vgic->rd_regions, + struct vgic_redist_region, list);if (!rdreg) addr_ptr = &undef_value;else
Samuel Zou
Tested-by Hulk RobotQuoted 4 lines · Greg Kroah-Hartman
I'm announcing the release of the 5.4.128 kernel.
All users of the 5.4 kernel series must upgrade.
Quoted 9 lines
The updated 5.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.gitlinux-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=summarythanks,
greg k-h
Tested on arm64 and x86 for 5.4.128,
Kernel repo:
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
Branch: linux-5.4.y
Version: 5.4.128
Commit: 4037804c55745738e0950658a5132790e6ac52e4
Compiler: gcc version 7.3.0 (GCC)
arm64:
--------------------------------------------------------------------
Testcase Result Summary:
total: 8905
passed: 8905
failed: 0
timeout: 0
--------------------------------------------------------------------
x86:
--------------------------------------------------------------------
Testcase Result Summary:
total: 8905
passed: 8905
failed: 0
timeout: 0
--------------------------------------------------------------------