óÐÉÓÏË ÉÚÍÅÎÅÎÉÊ × Linux 5.10.188

 
ACPI: button: Add lid disable DMI quirk for Nextbook Ares 8A [+ + +]
Author: Hans de Goede <hdegoede@redhat.com>
Date:   Sat Apr 29 12:38:41 2023 +0200

    ACPI: button: Add lid disable DMI quirk for Nextbook Ares 8A
    
    [ Upstream commit 4fd5556608bfa9c2bf276fc115ef04288331aded ]
    
    The LID0 device on the Nextbook Ares 8A tablet always reports lid
    closed causing userspace to suspend the device as soon as booting
    is complete.
    
    Add a DMI quirk to disable the broken lid functionality.
    
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ACPI: video: Add backlight=native DMI quirk for Apple iMac11,3 [+ + +]
Author: Hans de Goede <hdegoede@redhat.com>
Date:   Wed May 17 11:23:58 2023 +0200

    ACPI: video: Add backlight=native DMI quirk for Apple iMac11,3
    
    [ Upstream commit 48436f2e9834b46b47b038b605c8142a1c07bc85 ]
    
    Linux defaults to picking the non-working ACPI video backlight interface
    on the Apple iMac11,3 .
    
    Add a DMI quirk to pick the working native radeon_bl0 interface instead.
    
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ACPI: video: Add backlight=native DMI quirk for Lenovo ThinkPad X131e (3371 AMD version) [+ + +]
Author: Hans de Goede <hdegoede@redhat.com>
Date:   Wed May 17 11:23:59 2023 +0200

    ACPI: video: Add backlight=native DMI quirk for Lenovo ThinkPad X131e (3371 AMD version)
    
    [ Upstream commit bd5d93df86a7ddf98a2a37e9c3751e3cb334a66c ]
    
    Linux defaults to picking the non-working ACPI video backlight interface
    on the Lenovo ThinkPad X131e (3371 AMD version).
    
    Add a DMI quirk to pick the working native radeon_bl0 interface instead.
    
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Linux: Add MODULE_FIRMWARE() for FIRMWARE_TG357766. [+ + +]
Author: Tobias Heider <me@tobhe.de>
Date:   Wed Jun 28 02:13:32 2023 +0200

    Add MODULE_FIRMWARE() for FIRMWARE_TG357766.
    
    [ Upstream commit 046f753da6143ee16452966915087ec8b0de3c70 ]
    
    Fixes a bug where on the M1 mac mini initramfs-tools fails to
    include the necessary firmware into the initrd.
    
    Fixes: c4dab50697ff ("tg3: Download 57766 EEE service patch firmware")
    Signed-off-by: Tobias Heider <me@tobhe.de>
    Reviewed-by: Michael Chan <michael.chan@broadcom.com>
    Link: https://lore.kernel.org/r/ZJt7LKzjdz8+dClx@tobhe.de
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ALSA: ac97: Fix possible NULL dereference in snd_ac97_mixer [+ + +]
Author: Su Hui <suhui@nfschina.com>
Date:   Thu Jun 15 10:17:32 2023 +0800

    ALSA: ac97: Fix possible NULL dereference in snd_ac97_mixer
    
    [ Upstream commit 79597c8bf64ca99eab385115743131d260339da5 ]
    
    smatch error:
    sound/pci/ac97/ac97_codec.c:2354 snd_ac97_mixer() error:
    we previously assumed 'rac97' could be null (see line 2072)
    
    remove redundant assignment, return error if rac97 is NULL.
    
    Fixes: da3cec35dd3c ("ALSA: Kill snd_assert() in sound/pci/*")
    Signed-off-by: Su Hui <suhui@nfschina.com>
    Link: https://lore.kernel.org/r/20230615021732.1972194-1-suhui@nfschina.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: hda/realtek - remove 3k pull low procedure [+ + +]
Author: Kailang Yang <kailang@realtek.com>
Date:   Thu Jul 13 15:57:13 2023 +0800

    ALSA: hda/realtek - remove 3k pull low procedure
    
    commit 69ea4c9d02b7947cdd612335a61cc1a02e544ccd upstream.
    
    This was the ALC283 depop procedure.
    Maybe this procedure wasn't suitable with new codec.
    So, let us remove it. But HP 15z-fc000 must do 3k pull low. If it
    reboot with plugged headset,
    it will have errors show don't find codec error messages. Run 3k pull
    low will solve issues.
    So, let AMD chipset will run this for workarround.
    
    Fixes: 5aec98913095 ("ALSA: hda/realtek - ALC236 headset MIC recording issue")
    Signed-off-by: Kailang Yang <kailang@realtek.com>
    Cc: <stable@vger.kernel.org>
    Reported-by: Joseph C. Sible <josephcsible@gmail.com>
    Closes: https://lore.kernel.org/r/CABpewhE4REgn9RJZduuEU6Z_ijXNeQWnrxO1tg70Gkw=F8qNYg@mail.gmail.com/
    Link: https://lore.kernel.org/r/4678992299664babac4403d9978e7ba7@realtek.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: hda/realtek: Enable Mute LED on HP Laptop 15s-eq2xxx [+ + +]
Author: Luka Guzenko <l.guzenko@web.de>
Date:   Tue Jul 18 18:12:41 2023 +0200

    ALSA: hda/realtek: Enable Mute LED on HP Laptop 15s-eq2xxx
    
    commit 0659400f18c0e6c0c69d74fe5d09e7f6fbbd52a2 upstream.
    
    The HP Laptop 15s-eq2xxx uses ALC236 codec and controls the mute LED using
    COEF 0x07 index 1. No existing quirk covers this configuration.
    Adds a new quirk and enables it for the device.
    
    Signed-off-by: Luka Guzenko <l.guzenko@web.de>
    Cc: <stable@vger.kernel.org>
    Link: https://lore.kernel.org/r/20230718161241.393181-1-l.guzenko@web.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: jack: Fix mutex call in snd_jack_report() [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Thu Jul 6 17:53:57 2023 +0200

    ALSA: jack: Fix mutex call in snd_jack_report()
    
    [ Upstream commit 89dbb335cb6a627a4067bc42caa09c8bc3326d40 ]
    
    snd_jack_report() is supposed to be callable from an IRQ context, too,
    and it's indeed used in that way from virtsnd driver.  The fix for
    input_dev race in commit 1b6a6fc5280e ("ALSA: jack: Access input_dev
    under mutex"), however, introduced a mutex lock in snd_jack_report(),
    and this resulted in a potential sleep-in-atomic.
    
    For addressing that problem, this patch changes the relevant code to
    use the object get/put and removes the mutex usage.  That is,
    snd_jack_report(), it takes input_get_device() and leaves with
    input_put_device() for assuring the input_dev being assigned.
    
    Although the whole mutex could be reduced, we keep it because it can
    be still a protection for potential races between creation and
    deletion.
    
    Fixes: 1b6a6fc5280e ("ALSA: jack: Access input_dev under mutex")
    Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
    Closes: https://lore.kernel.org/r/cf95f7fe-a748-4990-8378-000491b40329@moroto.mountain
    Tested-by: Amadeusz Sławiński <amadeuszx.slawinski@linux.intel.com>
    Cc: <stable@vger.kernel.org>
    Link: https://lore.kernel.org/r/20230706155357.3470-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
amdgpu: validate offset_in_bo of drm_amdgpu_gem_va [+ + +]
Author: Chia-I Wu <olvaffe@gmail.com>
Date:   Thu Jun 1 15:44:12 2023 -0700

    amdgpu: validate offset_in_bo of drm_amdgpu_gem_va
    
    [ Upstream commit 9f0bcf49e9895cb005d78b33a5eebfa11711b425 ]
    
    This is motivated by OOB access in amdgpu_vm_update_range when
    offset_in_bo+map_size overflows.
    
    v2: keep the validations in amdgpu_vm_bo_map
    v3: add the validations to amdgpu_vm_bo_map/amdgpu_vm_bo_replace_map
        rather than to amdgpu_gem_va_ioctl
    
    Fixes: 9f7eb5367d00 ("drm/amdgpu: actually use the VM map parameters")
    Reviewed-by: Christian König <christian.koenig@amd.com>
    Signed-off-by: Chia-I Wu <olvaffe@gmail.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
apparmor: fix missing error check for rhashtable_insert_fast [+ + +]
Author: Danila Chernetsov <listdansp@mail.ru>
Date:   Tue Apr 4 19:05:49 2023 +0000

    apparmor: fix missing error check for rhashtable_insert_fast
    
    [ Upstream commit 000518bc5aef25d3f703592a0296d578c98b1517 ]
    
     rhashtable_insert_fast() could return err value when memory allocation is
     failed. but unpack_profile() do not check values and this always returns
     success value. This patch just adds error check code.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: e025be0f26d5 ("apparmor: support querying extended trusted helper extra data")
    
    Signed-off-by: Danila Chernetsov <listdansp@mail.ru>
    Signed-off-by: John Johansen <john.johansen@canonical.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ARC: define ASM_NL and __ALIGN(_STR) outside #ifdef __ASSEMBLY__ guard [+ + +]
Author: Masahiro Yamada <masahiroy@kernel.org>
Date:   Mon Jun 12 00:50:50 2023 +0900

    ARC: define ASM_NL and __ALIGN(_STR) outside #ifdef __ASSEMBLY__ guard
    
    [ Upstream commit 92e2921eeafdfca9acd9b83f07d2b7ca099bac24 ]
    
    ASM_NL is useful not only in *.S files but also in .c files for using
    inline assembler in C code.
    
    On ARC, however, ASM_NL is evaluated inconsistently. It is expanded to
    a backquote (`) in *.S files, but a semicolon (;) in *.c files because
    arch/arc/include/asm/linkage.h defines it inside #ifdef __ASSEMBLY__,
    so the definition for C code falls back to the default value defined in
    include/linux/linkage.h.
    
    If ASM_NL is used in inline assembler in .c files, it will result in
    wrong assembly code because a semicolon is not an instruction separator,
    but the start of a comment for ARC.
    
    Move ASM_NL (also __ALIGN and __ALIGN_STR) out of the #ifdef.
    
    Fixes: 9df62f054406 ("arch: use ASM_NL instead of ';' for assembler new line character in the macro")
    Fixes: 8d92e992a785 ("ARC: define __ALIGN_STR and __ALIGN symbols for ARC")
    Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
arm64: dts: microchip: sparx5: do not use PSCI on reference boards [+ + +]
Author: Robert Marko <robert.marko@sartura.hr>
Date:   Tue Feb 21 11:50:37 2023 +0100

    arm64: dts: microchip: sparx5: do not use PSCI on reference boards
    
    [ Upstream commit 70be83708c925b3f72c508e4756e48ad2330c830 ]
    
    PSCI is not implemented on SparX-5 at all, there is no ATF and U-boot that
    is shipped does not implement it as well.
    
    I have tried flashing the latest BSP 2022.12 U-boot which did not work.
    After contacting Microchip, they confirmed that there is no ATF for the
    SoC nor PSCI implementation which is unfortunate in 2023.
    
    So, disable PSCI as otherwise kernel crashes as soon as it tries probing
    PSCI with, and the crash is only visible if earlycon is used.
    
    Since PSCI is not implemented, switch core bringup to use spin-tables
    which are implemented in the vendor U-boot and actually work.
    
    Tested on PCB134 with eMMC (VSC5640EV).
    
    Fixes: 6694aee00a4b ("arm64: dts: sparx5: Add basic cpu support")
    Signed-off-by: Robert Marko <robert.marko@sartura.hr>
    Acked-by: Steen Hegelund <Steen.Hegelund@microchip.com>
    Link: https://lore.kernel.org/r/20230221105039.316819-1-robert.marko@sartura.hr
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: dts: qcom: apq8096: fix fixed regulator name property [+ + +]
Author: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Date:   Sun May 7 19:45:16 2023 +0200

    arm64: dts: qcom: apq8096: fix fixed regulator name property
    
    [ Upstream commit c77612a07d18d4425fd8ddd532a8a9b8e1970c53 ]
    
    Correct the typo in 'regulator-name' property.
    
      apq8096-ifc6640.dtb: v1p05-regulator: 'regulator-name' is a required property
      apq8096-ifc6640.dtb: v1p05-regulator: Unevaluated properties are not allowed ('reglator-name' was unexpected)
    
    Fixes: 6cbdec2d3ca6 ("arm64: dts: qcom: msm8996: Introduce IFC6640")
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org>
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Link: https://lore.kernel.org/r/20230507174516.264936-3-krzysztof.kozlowski@linaro.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: dts: qcom: msm8916: correct camss unit address [+ + +]
Author: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Date:   Wed Apr 19 23:18:40 2023 +0200

    arm64: dts: qcom: msm8916: correct camss unit address
    
    [ Upstream commit 48798d992ce276cf0d57bf75318daf8eabd02aa4 ]
    
    Match unit-address to reg entry to fix dtbs W=1 warnings:
    
      Warning (simple_bus_reg): /soc@0/camss@1b00000: simple-bus unit address format error, expected "1b0ac00"
    
    Fixes: 58f479f90a7c ("arm64: dts: qcom: msm8916: Add CAMSS support")
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org>
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Link: https://lore.kernel.org/r/20230419211856.79332-2-krzysztof.kozlowski@linaro.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: dts: qcom: msm8994: correct SPMI unit address [+ + +]
Author: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Date:   Wed Apr 19 23:18:46 2023 +0200

    arm64: dts: qcom: msm8994: correct SPMI unit address
    
    [ Upstream commit 24f0f6a8059c7108d4ee3476c95db1e7ff4feb79 ]
    
    Match unit-address to reg entry to fix dtbs W=1 warnings:
    
      Warning (simple_bus_reg): /soc/spmi@fc4c0000: simple-bus unit address format error, expected "fc4cf000"
    
    Fixes: b0ad598f8ec0 ("arm64: dts: qcom: msm8994: Add SPMI PMIC arbiter device")
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org>
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Link: https://lore.kernel.org/r/20230419211856.79332-8-krzysztof.kozlowski@linaro.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: dts: qcom: msm8996: correct camss unit address [+ + +]
Author: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Date:   Wed Apr 19 23:18:47 2023 +0200

    arm64: dts: qcom: msm8996: correct camss unit address
    
    [ Upstream commit e959ced1d0e5ef0b1f66a0c2d0e1ae80790e5ca5 ]
    
    Match unit-address to reg entry to fix dtbs W=1 warnings:
    
      Warning (simple_bus_reg): /soc/camss@a00000: simple-bus unit address format error, expected "a34000"
    
    Fixes: e0531312e78f ("arm64: dts: qcom: msm8996: Add CAMSS support")
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org>
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Link: https://lore.kernel.org/r/20230419211856.79332-9-krzysztof.kozlowski@linaro.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: dts: renesas: ulcb-kf: Remove flow control for SCIF1 [+ + +]
Author: Wolfram Sang <wsa+renesas@sang-engineering.com>
Date:   Thu May 25 10:48:22 2023 +0200

    arm64: dts: renesas: ulcb-kf: Remove flow control for SCIF1
    
    [ Upstream commit 1a2c4e5635177939a088d22fa35c6a7032725663 ]
    
    The schematics are misleading, the flow control is for HSCIF1. We need
    SCIF1 for GNSS/GPS which does not use flow control.
    
    Fixes: c6c816e22bc8 ("arm64: dts: ulcb-kf: enable SCIF1")
    Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
    Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Link: https://lore.kernel.org/r/20230525084823.4195-2-wsa+renesas@sang-engineering.com
    Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: dts: ti: k3-j7200: Fix physical address of pin [+ + +]
Author: Keerthy <j-keerthy@ti.com>
Date:   Wed Apr 19 09:30:06 2023 +0530

    arm64: dts: ti: k3-j7200: Fix physical address of pin
    
    [ Upstream commit 3d011933000ed9054c649952d83162d24f020a93 ]
    
    wkup_pmx splits into multiple regions. Like
    
        wkup_pmx0 -> 13 pins (WKUP_PADCONFIG 0 - 12)
        wkup_pmx1 -> 2 pins (WKUP_PADCONFIG 14 - 15)
        wkup_pmx2 -> 59 pins (WKUP_PADCONFIG 26 - 84)
        wkup_pmx3 -> 8 pins (WKUP_PADCONFIG 93 - 100)
    
    With this split, pin offset needs to be adjusted to
    match with new pmx for all pins above wkup_pmx0.
    
    Example a pin under wkup_pmx1 should start from 0 instead of
    old offset(0x38 WKUP_PADCONFIG 14 offset)
    
    J7200 Datasheet (Table 6-106, Section 6.4 Pin Multiplexing) :
    https://www.ti.com/lit/ds/symlink/dra821u.pdf
    
    Fixes: 9ae21ac445e9 ("arm64: dts: ti: k3-j7200: Fix wakeup pinmux range")
    
    Signed-off-by: Keerthy <j-keerthy@ti.com>
    Signed-off-by: Udit Kumar <u-kumar1@ti.com>
    Link: https://lore.kernel.org/r/20230419040007.3022780-2-u-kumar1@ti.com
    Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: mm: fix VA-range sanity check [+ + +]
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Thu Jun 15 11:26:28 2023 +0100

    arm64: mm: fix VA-range sanity check
    
    [ Upstream commit ab9b4008092c86dc12497af155a0901cc1156999 ]
    
    Both create_mapping_noalloc() and update_mapping_prot() sanity-check
    their 'virt' parameter, but the check itself doesn't make much sense.
    The condition used today appears to be a historical accident.
    
    The sanity-check condition:
    
            if ((virt >= PAGE_END) && (virt < VMALLOC_START)) {
                    [ ... warning here ... ]
                    return;
            }
    
    ... can only be true for the KASAN shadow region or the module region,
    and there's no reason to exclude these specifically for creating and
    updateing mappings.
    
    When arm64 support was first upstreamed in commit:
    
      c1cc1552616d0f35 ("arm64: MMU initialisation")
    
    ... the condition was:
    
            if (virt < VMALLOC_START) {
                    [ ... warning here ... ]
                    return;
            }
    
    At the time, VMALLOC_START was the lowest kernel address, and this was
    checking whether 'virt' would be translated via TTBR1.
    
    Subsequently in commit:
    
      14c127c957c1c607 ("arm64: mm: Flip kernel VA space")
    
    ... the condition was changed to:
    
            if ((virt >= VA_START) && (virt < VMALLOC_START)) {
                    [ ... warning here ... ]
                    return;
            }
    
    This appear to have been a thinko. The commit moved the linear map to
    the bottom of the kernel address space, with VMALLOC_START being at the
    halfway point. The old condition would warn for changes to the linear
    map below this, and at the time VA_START was the end of the linear map.
    
    Subsequently we cleaned up the naming of VA_START in commit:
    
      77ad4ce69321abbe ("arm64: memory: rename VA_START to PAGE_END")
    
    ... keeping the erroneous condition as:
    
            if ((virt >= PAGE_END) && (virt < VMALLOC_START)) {
                    [ ... warning here ... ]
                    return;
            }
    
    Correct the condition to check against the start of the TTBR1 address
    space, which is currently PAGE_OFFSET. This simplifies the logic, and
    more clearly matches the "outside kernel range" message in the warning.
    
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Cc: Russell King <linux@armlinux.org.uk>
    Cc: Steve Capper <steve.capper@arm.com>
    Cc: Will Deacon <will@kernel.org>
    Reviewed-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
    Link: https://lore.kernel.org/r/20230615102628.1052103-1-mark.rutland@arm.com
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: set __exception_irq_entry with __irq_entry as a default [+ + +]
Author: Youngmin Nam <youngmin.nam@samsung.com>
Date:   Mon Apr 24 10:04:36 2023 +0900

    arm64: set __exception_irq_entry with __irq_entry as a default
    
    [ Upstream commit f6794950f0e5ba37e3bbedda4d6ab0aad7395dd3 ]
    
    filter_irq_stacks() is supposed to cut entries which are related irq entries
    from its call stack.
    And in_irqentry_text() which is called by filter_irq_stacks()
    uses __irqentry_text_start/end symbol to find irq entries in callstack.
    
    But it doesn't work correctly as without "CONFIG_FUNCTION_GRAPH_TRACER",
    arm64 kernel doesn't include gic_handle_irq which is entry point of arm64 irq
    between __irqentry_text_start and __irqentry_text_end as we discussed in below link.
    https://lore.kernel.org/all/CACT4Y+aReMGLYua2rCLHgFpS9io5cZC04Q8GLs-uNmrn1ezxYQ@mail.gmail.com/#t
    
    This problem can makes unintentional deep call stack entries especially
    in KASAN enabled situation as below.
    
    [ 2479.383395]I[0:launcher-loader: 1719] Stack depot reached limit capacity
    [ 2479.383538]I[0:launcher-loader: 1719] WARNING: CPU: 0 PID: 1719 at lib/stackdepot.c:129 __stack_depot_save+0x464/0x46c
    [ 2479.385693]I[0:launcher-loader: 1719] pstate: 624000c5 (nZCv daIF +PAN -UAO +TCO -DIT -SSBS BTYPE=--)
    [ 2479.385724]I[0:launcher-loader: 1719] pc : __stack_depot_save+0x464/0x46c
    [ 2479.385751]I[0:launcher-loader: 1719] lr : __stack_depot_save+0x460/0x46c
    [ 2479.385774]I[0:launcher-loader: 1719] sp : ffffffc0080073c0
    [ 2479.385793]I[0:launcher-loader: 1719] x29: ffffffc0080073e0 x28: ffffffd00b78a000 x27: 0000000000000000
    [ 2479.385839]I[0:launcher-loader: 1719] x26: 000000000004d1dd x25: ffffff891474f000 x24: 00000000ca64d1dd
    [ 2479.385882]I[0:launcher-loader: 1719] x23: 0000000000000200 x22: 0000000000000220 x21: 0000000000000040
    [ 2479.385925]I[0:launcher-loader: 1719] x20: ffffffc008007440 x19: 0000000000000000 x18: 0000000000000000
    [ 2479.385969]I[0:launcher-loader: 1719] x17: 2065726568207475 x16: 000000000000005e x15: 2d2d2d2d2d2d2d20
    [ 2479.386013]I[0:launcher-loader: 1719] x14: 5d39313731203a72 x13: 00000000002f6b30 x12: 00000000002f6af8
    [ 2479.386057]I[0:launcher-loader: 1719] x11: 00000000ffffffff x10: ffffffb90aacf000 x9 : e8a74a6c16008800
    [ 2479.386101]I[0:launcher-loader: 1719] x8 : e8a74a6c16008800 x7 : 00000000002f6b30 x6 : 00000000002f6af8
    [ 2479.386145]I[0:launcher-loader: 1719] x5 : ffffffc0080070c8 x4 : ffffffd00b192380 x3 : ffffffd0092b313c
    [ 2479.386189]I[0:launcher-loader: 1719] x2 : 0000000000000001 x1 : 0000000000000004 x0 : 0000000000000022
    [ 2479.386231]I[0:launcher-loader: 1719] Call trace:
    [ 2479.386248]I[0:launcher-loader: 1719]  __stack_depot_save+0x464/0x46c
    [ 2479.386273]I[0:launcher-loader: 1719]  kasan_save_stack+0x58/0x70
    [ 2479.386303]I[0:launcher-loader: 1719]  save_stack_info+0x34/0x138
    [ 2479.386331]I[0:launcher-loader: 1719]  kasan_save_free_info+0x18/0x24
    [ 2479.386358]I[0:launcher-loader: 1719]  ____kasan_slab_free+0x16c/0x170
    [ 2479.386385]I[0:launcher-loader: 1719]  __kasan_slab_free+0x10/0x20
    [ 2479.386410]I[0:launcher-loader: 1719]  kmem_cache_free+0x238/0x53c
    [ 2479.386435]I[0:launcher-loader: 1719]  mempool_free_slab+0x1c/0x28
    [ 2479.386460]I[0:launcher-loader: 1719]  mempool_free+0x7c/0x1a0
    [ 2479.386484]I[0:launcher-loader: 1719]  bvec_free+0x34/0x80
    [ 2479.386514]I[0:launcher-loader: 1719]  bio_free+0x60/0x98
    [ 2479.386540]I[0:launcher-loader: 1719]  bio_put+0x50/0x21c
    [ 2479.386567]I[0:launcher-loader: 1719]  f2fs_write_end_io+0x4ac/0x4d0
    [ 2479.386594]I[0:launcher-loader: 1719]  bio_endio+0x2dc/0x300
    [ 2479.386622]I[0:launcher-loader: 1719]  __dm_io_complete+0x324/0x37c
    [ 2479.386650]I[0:launcher-loader: 1719]  dm_io_dec_pending+0x60/0xa4
    [ 2479.386676]I[0:launcher-loader: 1719]  clone_endio+0xf8/0x2f0
    [ 2479.386700]I[0:launcher-loader: 1719]  bio_endio+0x2dc/0x300
    [ 2479.386727]I[0:launcher-loader: 1719]  blk_update_request+0x258/0x63c
    [ 2479.386754]I[0:launcher-loader: 1719]  scsi_end_request+0x50/0x304
    [ 2479.386782]I[0:launcher-loader: 1719]  scsi_io_completion+0x88/0x160
    [ 2479.386808]I[0:launcher-loader: 1719]  scsi_finish_command+0x17c/0x194
    [ 2479.386833]I[0:launcher-loader: 1719]  scsi_complete+0xcc/0x158
    [ 2479.386859]I[0:launcher-loader: 1719]  blk_mq_complete_request+0x4c/0x5c
    [ 2479.386885]I[0:launcher-loader: 1719]  scsi_done_internal+0xf4/0x1e0
    [ 2479.386910]I[0:launcher-loader: 1719]  scsi_done+0x14/0x20
    [ 2479.386935]I[0:launcher-loader: 1719]  ufshcd_compl_one_cqe+0x578/0x71c
    [ 2479.386963]I[0:launcher-loader: 1719]  ufshcd_mcq_poll_cqe_nolock+0xc8/0x150
    [ 2479.386991]I[0:launcher-loader: 1719]  ufshcd_intr+0x868/0xc0c
    [ 2479.387017]I[0:launcher-loader: 1719]  __handle_irq_event_percpu+0xd0/0x348
    [ 2479.387044]I[0:launcher-loader: 1719]  handle_irq_event_percpu+0x24/0x74
    [ 2479.387068]I[0:launcher-loader: 1719]  handle_irq_event+0x74/0xe0
    [ 2479.387091]I[0:launcher-loader: 1719]  handle_fasteoi_irq+0x174/0x240
    [ 2479.387118]I[0:launcher-loader: 1719]  handle_irq_desc+0x7c/0x2c0
    [ 2479.387147]I[0:launcher-loader: 1719]  generic_handle_domain_irq+0x1c/0x28
    [ 2479.387174]I[0:launcher-loader: 1719]  gic_handle_irq+0x64/0x158
    [ 2479.387204]I[0:launcher-loader: 1719]  call_on_irq_stack+0x2c/0x54
    [ 2479.387231]I[0:launcher-loader: 1719]  do_interrupt_handler+0x70/0xa0
    [ 2479.387258]I[0:launcher-loader: 1719]  el1_interrupt+0x34/0x68
    [ 2479.387283]I[0:launcher-loader: 1719]  el1h_64_irq_handler+0x18/0x24
    [ 2479.387308]I[0:launcher-loader: 1719]  el1h_64_irq+0x68/0x6c
    [ 2479.387332]I[0:launcher-loader: 1719]  blk_attempt_bio_merge+0x8/0x170
    [ 2479.387356]I[0:launcher-loader: 1719]  blk_mq_attempt_bio_merge+0x78/0x98
    [ 2479.387383]I[0:launcher-loader: 1719]  blk_mq_submit_bio+0x324/0xa40
    [ 2479.387409]I[0:launcher-loader: 1719]  __submit_bio+0x104/0x138
    [ 2479.387436]I[0:launcher-loader: 1719]  submit_bio_noacct_nocheck+0x1d0/0x4a0
    [ 2479.387462]I[0:launcher-loader: 1719]  submit_bio_noacct+0x618/0x804
    [ 2479.387487]I[0:launcher-loader: 1719]  submit_bio+0x164/0x180
    [ 2479.387511]I[0:launcher-loader: 1719]  f2fs_submit_read_bio+0xe4/0x1c4
    [ 2479.387537]I[0:launcher-loader: 1719]  f2fs_mpage_readpages+0x888/0xa4c
    [ 2479.387563]I[0:launcher-loader: 1719]  f2fs_readahead+0xd4/0x19c
    [ 2479.387587]I[0:launcher-loader: 1719]  read_pages+0xb0/0x4ac
    [ 2479.387614]I[0:launcher-loader: 1719]  page_cache_ra_unbounded+0x238/0x288
    [ 2479.387642]I[0:launcher-loader: 1719]  do_page_cache_ra+0x60/0x6c
    [ 2479.387669]I[0:launcher-loader: 1719]  page_cache_ra_order+0x318/0x364
    [ 2479.387695]I[0:launcher-loader: 1719]  ondemand_readahead+0x30c/0x3d8
    [ 2479.387722]I[0:launcher-loader: 1719]  page_cache_sync_ra+0xb4/0xc8
    [ 2479.387749]I[0:launcher-loader: 1719]  filemap_read+0x268/0xd24
    [ 2479.387777]I[0:launcher-loader: 1719]  f2fs_file_read_iter+0x1a0/0x62c
    [ 2479.387806]I[0:launcher-loader: 1719]  vfs_read+0x258/0x34c
    [ 2479.387831]I[0:launcher-loader: 1719]  ksys_pread64+0x8c/0xd0
    [ 2479.387857]I[0:launcher-loader: 1719]  __arm64_sys_pread64+0x48/0x54
    [ 2479.387881]I[0:launcher-loader: 1719]  invoke_syscall+0x58/0x158
    [ 2479.387909]I[0:launcher-loader: 1719]  el0_svc_common+0xf0/0x134
    [ 2479.387935]I[0:launcher-loader: 1719]  do_el0_svc+0x44/0x114
    [ 2479.387961]I[0:launcher-loader: 1719]  el0_svc+0x2c/0x80
    [ 2479.387985]I[0:launcher-loader: 1719]  el0t_64_sync_handler+0x48/0x114
    [ 2479.388010]I[0:launcher-loader: 1719]  el0t_64_sync+0x190/0x194
    [ 2479.388038]I[0:launcher-loader: 1719] Kernel panic - not syncing: kernel: panic_on_warn set ...
    
    So let's set __exception_irq_entry with __irq_entry as a default.
    Applying this patch, we can see gic_hande_irq is included in Systemp.map as below.
    
    * Before
    ffffffc008010000 T __do_softirq
    ffffffc008010000 T __irqentry_text_end
    ffffffc008010000 T __irqentry_text_start
    ffffffc008010000 T __softirqentry_text_start
    ffffffc008010000 T _stext
    ffffffc00801066c T __softirqentry_text_end
    ffffffc008010670 T __entry_text_start
    
    * After
    ffffffc008010000 T __irqentry_text_start
    ffffffc008010000 T _stext
    ffffffc008010000 t gic_handle_irq
    ffffffc00801013c t gic_handle_irq
    ffffffc008010294 T __irqentry_text_end
    ffffffc008010298 T __do_softirq
    ffffffc008010298 T __softirqentry_text_start
    ffffffc008010904 T __softirqentry_text_end
    ffffffc008010908 T __entry_text_start
    
    Signed-off-by: Youngmin Nam <youngmin.nam@samsung.com>
    Signed-off-by: SEO HOYOUNG <hy50.seo@samsung.com>
    Reviewed-by: Mark Rutland <mark.rutland@arm.com>
    Link: https://lore.kernel.org/r/20230424010436.779733-1-youngmin.nam@samsung.com
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ARM: 9303/1: kprobes: avoid missing-declaration warnings [+ + +]
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Fri Jun 2 19:28:42 2023 +0100

    ARM: 9303/1: kprobes: avoid missing-declaration warnings
    
    [ Upstream commit 1b9c3ddcec6a55e15d3e38e7405e2d078db02020 ]
    
    checker_stack_use_t32strd() and kprobe_handler() can be made static since
    they are not used from other files, while coverage_start_registers()
    and __kprobes_test_case() are used from assembler code, and just need
    a declaration to avoid a warning with the global definition.
    
    arch/arm/probes/kprobes/checkers-common.c:43:18: error: no previous prototype for 'checker_stack_use_t32strd'
    arch/arm/probes/kprobes/core.c:236:16: error: no previous prototype for 'kprobe_handler'
    arch/arm/probes/kprobes/test-core.c:723:10: error: no previous prototype for 'coverage_start_registers'
    arch/arm/probes/kprobes/test-core.c:918:14: error: no previous prototype for '__kprobes_test_case_start'
    arch/arm/probes/kprobes/test-core.c:952:14: error: no previous prototype for '__kprobes_test_case_end_16'
    arch/arm/probes/kprobes/test-core.c:967:14: error: no previous prototype for '__kprobes_test_case_end_32'
    
    Fixes: 6624cf651f1a ("ARM: kprobes: collects stack consumption for store instructions")
    Fixes: 454f3e132d05 ("ARM/kprobes: Remove jprobe arm implementation")
    Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Reviewed-by: Kees Cook <keescook@chromium.org>
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ARM: dts: BCM5301X: Drop "clock-names" from the SPI node [+ + +]
Author: Rafał Miłecki <rafal@milecki.pl>
Date:   Wed May 3 14:28:30 2023 +0200

    ARM: dts: BCM5301X: Drop "clock-names" from the SPI node
    
    [ Upstream commit d3c8e2c5757153bbfad70019ec1decbca86f3def ]
    
    There is no such property in the SPI controller binding documentation.
    Also Linux driver doesn't look for it.
    
    This fixes:
    arch/arm/boot/dts/bcm4708-asus-rt-ac56u.dtb: spi@18029200: Unevaluated properties are not allowed ('clock-names' was unexpected)
            From schema: Documentation/devicetree/bindings/spi/brcm,spi-bcm-qspi.yaml
    
    Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
    Link: https://lore.kernel.org/r/20230503122830.3200-1-zajec5@gmail.com
    Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ARM: dts: BCM5301X: fix duplex-full => full-duplex [+ + +]
Author: Christian Lamparter <chunkeey@gmail.com>
Date:   Thu Jun 8 17:36:29 2023 +0200

    ARM: dts: BCM5301X: fix duplex-full => full-duplex
    
    [ Upstream commit fd274b733bfdde3ca72f0fa2a37f032f3a8c402c ]
    
    this typo was found by the dtbs_check
    | ports:port@5:fixed-link: 'oneOf' conditional failed,
    |  {'speed': [[1000]], 'duplex-full': True} is not of type 'array'
    | 'duplex-full' does not match any of the regexes: 'pinctrl-[0-]..."
    
    this should have been full-duplex;
    
    Fixes: 935327a73553 ("ARM: dts: BCM5301X: Add DT for Meraki MR26")
    Fixes: ec88a9c344d9 ("ARM: BCM5301X: Add DT for Meraki MR32")
    Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
    Link: https://lore.kernel.org/r/50522f45566951a9eabd22820647924cc6b4a264.1686238550.git.chunkeey@gmail.com
    Signed-off-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ARM: dts: gta04: Move model property out of pinctrl node [+ + +]
Author: Tony Lindgren <tony@atomide.com>
Date:   Wed May 17 13:32:25 2023 +0300

    ARM: dts: gta04: Move model property out of pinctrl node
    
    [ Upstream commit 4ffec92e70ac5097b9f67ec154065305b16a3b46 ]
    
    The model property should be at the top level, let's move it out
    of the pinctrl node.
    
    Fixes: d2eaf949d2c3 ("ARM: dts: omap3-gta04a5one: define GTA04A5 variant with OneNAND")
    Cc: Andreas Kemnade <andreas@kemnade.info>
    Cc: H. Nikolaus Schaller <hns@goldelico.com>
    Signed-off-by: Tony Lindgren <tony@atomide.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ARM: dts: iwg20d-q7-common: Fix backlight pwm specifier [+ + +]
Author: Geert Uytterhoeven <geert+renesas@glider.be>
Date:   Tue May 23 17:35:16 2023 +0200

    ARM: dts: iwg20d-q7-common: Fix backlight pwm specifier
    
    [ Upstream commit 0501fdec106a291c43b3c1b525cf22ab4c24b2d8 ]
    
    make dtbs_check:
    
        arch/arm/boot/dts/renesas/r8a7743-iwg20d-q7.dtb: backlight: pwms: [[58, 0, 5000000], [0]] is too long
                From schema: Documentation/devicetree/bindings/leds/backlight/pwm-backlight.yaml
        arch/arm/boot/dts/renesas/r8a7743-iwg20d-q7-dbcm-ca.dtb: backlight: pwms: [[67, 0, 5000000], [0]] is too long
                From schema: Documentation/devicetree/bindings/leds/backlight/pwm-backlight.yaml
        arch/arm/boot/dts/renesas/r8a7744-iwg20d-q7-dbcm-ca.dtb: backlight: pwms: [[67, 0, 5000000], [0]] is too long
                From schema: Documentation/devicetree/bindings/leds/backlight/pwm-backlight.yaml
        arch/arm/boot/dts/renesas/r8a7744-iwg20d-q7.dtb: backlight: pwms: [[58, 0, 5000000], [0]] is too long
                From schema: Documentation/devicetree/bindings/leds/backlight/pwm-backlight.yaml
    
    PWM specifiers referring to R-Car PWM Timer Controllers should contain
    only two cells.
    
    Fix this by dropping the bogus third cell.
    
    Fixes: 6f89dd9e9325d05b ("ARM: dts: iwg20d-q7-common: Add LCD support")
    Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Link: https://lore.kernel.org/r/6e5c3167424a43faf8c1fa68d9667b3d87dc86d8.1684855911.git.geert+renesas@glider.be
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ARM: dts: meson8: correct uart_B and uart_C clock references [+ + +]
Author: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
Date:   Tue May 16 22:30:29 2023 +0200

    ARM: dts: meson8: correct uart_B and uart_C clock references
    
    [ Upstream commit 98b503c7fb13a17a47d8ebf15fa8f7c10118e75c ]
    
    On Meson8 uart_B and uart_C do not work, because they are relying on
    incorrect clocks. Change the references of pclk to the correct CLKID
    (UART1 for uart_B and UART2 for uart_C), to allow use of the two uarts.
    
    This was originally reported by Hans-Frieder Vogt for Meson8b [0], but
    the same bug is also present in meson8.dtsi
    
    [0] https://lore.kernel.org/linux-amlogic/trinity-bf20bcb9-790b-4ab9-99e3-0831ef8257f4-1680878185420@3c-app-gmx-bap55/
    
    Fixes: 57007bfb5469 ("ARM: dts: meson8: Fix the UART device-tree schema validation")
    Reported-by: Hans-Frieder Vogt <hfdevel@gmx.net> # for meson8b.dtsi
    Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
    Link: https://lore.kernel.org/r/20230516203029.1031174-1-martin.blumenstingl@googlemail.com
    Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ARM: dts: meson8b: correct uart_B and uart_C clock references [+ + +]
Author: hfdevel@gmx.net <hfdevel@gmx.net>
Date:   Fri Apr 7 16:36:25 2023 +0200

    ARM: dts: meson8b: correct uart_B and uart_C clock references
    
    [ Upstream commit d542ce8d4769cdef6a7bc3437e59cfed9c68f0e4 ]
    
    With the current device tree for meson8b, uarts B (e.g. available on pins
    8/10 on Odroid-C1) and C (pins 3/5 on Odroid-C1) do not work, because they
    are relying on incorrect clocks. Change the references of pclk to the
    correct CLKID, to allow use of the two uarts.
    
    Fixes: 3375aa77135f ("ARM: dts: meson8b: Fix the UART device-tree schema validation")
    Signed-off-by: Hans-Frieder Vogt <hfdevel@gmx.net>
    Reviewed-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
    Link: https://lore.kernel.org/r/trinity-bf20bcb9-790b-4ab9-99e3-0831ef8257f4-1680878185420@3c-app-gmx-bap55
    Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ARM: dts: stm32: Fix audio routing on STM32MP15xx DHCOM PDK2 [+ + +]
Author: Marek Vasut <marex@denx.de>
Date:   Tue Jun 6 20:01:12 2023 +0200

    ARM: dts: stm32: Fix audio routing on STM32MP15xx DHCOM PDK2
    
    [ Upstream commit e3f2778b1b6ced649bffdc7cbb05b80bb92f2108 ]
    
    The audio routing flow is not correct, the flow should be from source
    (second element in the pair) to sink (first element in the pair). The
    flow now is from "HP_OUT" to "Playback", where "Playback" is source
    and "HP_OUT" is sink, i.e. the direction is swapped and there is no
    direct link between the two either.
    
    Fill in the correct routing, where "HP_OUT" supplies the "Headphone Jack",
    "Line In Jack" supplies "LINE_IN" input, "Microphone Jack" supplies "MIC_IN"
    input and "Mic Bias" supplies "Microphone Jack".
    
    Fixes: 34e0c7847dcf ("ARM: dts: stm32: Add DH Electronics DHCOM STM32MP1 SoM and PDK2 board")
    Signed-off-by: Marek Vasut <marex@denx.de>
    Signed-off-by: Alexandre Torgue <alexandre.torgue@foss.st.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ARM: dts: stm32: fix i2s endpoint format property for stm32mp15xx-dkx [+ + +]
Author: Olivier Moysan <olivier.moysan@foss.st.com>
Date:   Tue Jun 6 13:56:04 2023 +0200

    ARM: dts: stm32: fix i2s endpoint format property for stm32mp15xx-dkx
    
    [ Upstream commit 076c74c592cabe4a47537fe5205b5b678bed010d ]
    
    Use "dai-format" to configure DAI audio format as specified in
    audio-graph-port.yaml bindings.
    
    Fixes: 144d1ba70548 ("ARM: dts: stm32: Adapt STM32MP157 DK boards to stm32 DT diversity")
    Signed-off-by: Olivier Moysan <olivier.moysan@foss.st.com>
    Signed-off-by: Alexandre Torgue <alexandre.torgue@foss.st.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ARM: dts: stm32: Move ethernet MAC EEPROM from SoM to carrier boards [+ + +]
Author: Marek Vasut <marex@denx.de>
Date:   Fri May 5 23:37:29 2023 +0200

    ARM: dts: stm32: Move ethernet MAC EEPROM from SoM to carrier boards
    
    [ Upstream commit 9660efc2af37f3c12dc6e6a5511ad99e0addc297 ]
    
    The ethernet MAC EEPROM is not populated on the SoM itself, it has to be
    populated on each carrier board. Move the EEPROM into the correct place
    in DTs, i.e. the carrier board DTs. Add label to the EEPROM too.
    
    Fixes: 7e76f82acd9e1 ("ARM: dts: stm32: Split Avenger96 into DHCOR SoM and Avenger96 board")
    Signed-off-by: Marek Vasut <marex@denx.de>
    Signed-off-by: Alexandre Torgue <alexandre.torgue@foss.st.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ARM: dts: stm32: Shorten the AV96 HDMI sound card name [+ + +]
Author: Marek Vasut <marex@denx.de>
Date:   Thu May 18 02:42:32 2023 +0200

    ARM: dts: stm32: Shorten the AV96 HDMI sound card name
    
    [ Upstream commit 0cf765e598712addec34d0208cc1418c151fefb2 ]
    
    Fix the following error in kernel log due to too long sound card name:
    "
    asoc-audio-graph-card sound: ASoC: driver name too long 'STM32MP1-AV96-HDMI' -> 'STM32MP1-AV96-H'
    "
    
    Fixes: e027da342772 ("ARM: dts: stm32: Add bindings for audio on AV96")
    Signed-off-by: Marek Vasut <marex@denx.de>
    Signed-off-by: Alexandre Torgue <alexandre.torgue@foss.st.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ARM: ep93xx: fix missing-prototype warnings [+ + +]
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Tue May 16 17:30:58 2023 +0200

    ARM: ep93xx: fix missing-prototype warnings
    
    [ Upstream commit 419013740ea1e4343d8ade535d999f59fa28e460 ]
    
    ep93xx_clocksource_read() is only called from the file it is declared in,
    while ep93xx_timer_init() is declared in a header that is not included here.
    
    arch/arm/mach-ep93xx/timer-ep93xx.c:120:13: error: no previous prototype for 'ep93xx_timer_init'
    arch/arm/mach-ep93xx/timer-ep93xx.c:63:5: error: no previous prototype for 'ep93xx_clocksource_read'
    
    Fixes: 000bc17817bf ("ARM: ep93xx: switch to GENERIC_CLOCKEVENTS")
    Acked-by: Alexander Sverdlin <alexander.sverdlin@gmail.com>
    Link: https://lore.kernel.org/r/20230516153109.514251-3-arnd@kernel.org
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ARM: omap2: fix missing tick_broadcast() prototype [+ + +]
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Tue May 16 17:31:04 2023 +0200

    ARM: omap2: fix missing tick_broadcast() prototype
    
    [ Upstream commit 861bc1d2886d47bd57a2cbf2cda87fdbe3eb9d08 ]
    
    omap2 contains a hack to define tick_broadcast() on non-SMP
    configurations in place of the normal SMP definition. This one
    causes a warning because of a missing prototype:
    
    arch/arm/mach-omap2/board-generic.c:44:6: error: no previous prototype for 'tick_broadcast'
    
    Make sure to always include the header with the declaration.
    
    Fixes: d86ad463d670 ("ARM: OMAP2+: Fix regression for using local timer on non-SMP SoCs")
    Acked-by: Aaro Koskinen <aaro.koskinen@iki.fi>
    Link: https://lore.kernel.org/r/20230516153109.514251-9-arnd@kernel.org
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ARM: orion5x: fix d2net gpio initialization [+ + +]
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Tue May 16 17:31:05 2023 +0200

    ARM: orion5x: fix d2net gpio initialization
    
    commit f8ef1233939495c405a9faa4bd1ae7d3f581bae4 upstream.
    
    The DT version of this board has a custom file with the gpio
    device. However, it does nothing because the d2net_init()
    has no caller or prototype:
    
    arch/arm/mach-orion5x/board-d2net.c:101:13: error: no previous prototype for 'd2net_init'
    
    Call it from the board-dt file as intended.
    
    Fixes: 94b0bd366e36 ("ARM: orion5x: convert d2net to Device Tree")
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20230516153109.514251-10-arnd@kernel.org
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ASoC: es8316: Do not set rate constraints for unsupported MCLKs [+ + +]
Author: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
Date:   Tue May 30 21:11:39 2023 +0300

    ASoC: es8316: Do not set rate constraints for unsupported MCLKs
    
    [ Upstream commit 60413129ee2b38a80347489270af7f6e1c1de4d0 ]
    
    When using the codec through the generic audio graph card, there are at
    least two calls of es8316_set_dai_sysclk(), with the effect of limiting
    the allowed sample rates according to the MCLK/LRCK ratios supported by
    the codec:
    
    1. During audio card setup, to set the initial MCLK - see
       asoc_simple_init_dai().
    
    2. Before opening a stream, to update MCLK, according to the stream
       sample rate and the multiplication factor - see
       asoc_simple_hw_params().
    
    In some cases the initial MCLK might be set to a frequency that doesn't
    match any of the supported ratios, e.g. 12287999 instead of 12288000,
    which is only 1 Hz below the supported clock, as that is what the
    hardware reports. This creates an empty list of rate constraints, which
    is further passed to snd_pcm_hw_constraint_list() via
    es8316_pcm_startup(), and causes the following error on the very first
    access of the sound card:
    
      $ speaker-test -D hw:Analog,0 -F S16_LE -c 2 -t wav
      Broken configuration for playback: no configurations available: Invalid argument
      Setting of hwparams failed: Invalid argument
    
    Note that all subsequent retries succeed thanks to the updated MCLK set
    at point 2 above, which uses a computed frequency value instead of a
    reading from the hardware registers. Normally this would have mitigated
    the issue, but es8316_pcm_startup() executes before the 2nd call to
    es8316_set_dai_sysclk(), hence it cannot make use of the updated
    constraints.
    
    Since es8316_pcm_hw_params() performs anyway a final validation of MCLK
    against the stream sample rate and the supported MCLK/LRCK ratios, fix
    the issue by ensuring that sysclk_constraints list is only set when at
    least one supported sample rate is autodetected by the codec.
    
    Fixes: b8b88b70875a ("ASoC: add es8316 codec driver")
    Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
    Link: https://lore.kernel.org/r/20230530181140.483936-3-cristian.ciocaltea@collabora.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: es8316: Increment max value for ALC Capture Target Volume control [+ + +]
Author: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
Date:   Tue May 30 21:11:38 2023 +0300

    ASoC: es8316: Increment max value for ALC Capture Target Volume control
    
    [ Upstream commit 6f073429037cd79d7311cd8236311c53f5ea8f01 ]
    
    The following error occurs when trying to restore a previously saved
    ALSA mixer state (tested on a Rock 5B board):
    
      $ alsactl --no-ucm -f /tmp/asound.state store hw:Analog
      $ alsactl --no-ucm -I -f /tmp/asound.state restore hw:Analog
      alsactl: set_control:1475: Cannot write control '2:0:0:ALC Capture Target Volume:0' : Invalid argument
    
    According to ES8316 datasheet, the register at address 0x2B, which is
    related to the above mixer control, contains by default the value 0xB0.
    Considering the corresponding ALC target bits (ALCLVL) are 7:4, the
    control is initialized with 11, which is one step above the maximum
    value allowed by the driver:
    
     ALCLVL | dB gain
     -------+--------
      0000  |  -16.5
      0001  |  -15.0
      0010  |  -13.5
      ....  |  .....
      0111  |   -6.0
      1000  |   -4.5
      1001  |   -3.0
      1010  |   -1.5
      ....  |  .....
      1111  |   -1.5
    
    The tests performed using the VU meter feature (--vumeter=TYPE) of
    arecord/aplay confirm the specs are correct and there is no measured
    gain if the 1011-1111 range would have been mapped to 0 dB:
    
     dB gain | VU meter %
     --------+-----------
       -6.0  |  30-31
       -4.5  |  35-36
       -3.0  |  42-43
       -1.5  |  50-51
        0.0  |  50-51
    
    Increment the max value allowed for ALC Capture Target Volume control,
    so that it matches the hardware default.  Additionally, update the
    related TLV to prevent an artificial extension of the dB gain range.
    
    Fixes: b8b88b70875a ("ASoC: add es8316 codec driver")
    Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
    Link: https://lore.kernel.org/r/20230530181140.483936-2-cristian.ciocaltea@collabora.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: fsl_sai: Disable bit clock with transmitter [+ + +]
Author: Matus Gajdos <matuszpd@gmail.com>
Date:   Wed Jul 12 14:49:33 2023 +0200

    ASoC: fsl_sai: Disable bit clock with transmitter
    
    commit 269f399dc19f0e5c51711c3ba3bd06e0ef6ef403 upstream.
    
    Otherwise bit clock remains running writing invalid data to the DAC.
    
    Signed-off-by: Matus Gajdos <matuszpd@gmail.com>
    Acked-by: Shengjiu Wang <shengjiu.wang@gmail.com>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20230712124934.32232-1-matuszpd@gmail.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: imx-audmix: check return value of devm_kasprintf() [+ + +]
Author: Claudiu Beznea <claudiu.beznea@microchip.com>
Date:   Wed Jun 14 15:15:09 2023 +0300

    ASoC: imx-audmix: check return value of devm_kasprintf()
    
    [ Upstream commit 2f76e1d6ca524a888d29aafe29f2ad2003857971 ]
    
    devm_kasprintf() returns a pointer to dynamically allocated memory.
    Pointer could be NULL in case allocation fails. Check pointer validity.
    Identified with coccinelle (kmerr.cocci script).
    
    Fixes: b86ef5367761 ("ASoC: fsl: Add Audio Mixer machine driver")
    Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
    Link: https://lore.kernel.org/r/20230614121509.443926-1-claudiu.beznea@microchip.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: mediatek: mt8173: Fix irq error path [+ + +]
Author: Ricardo Ribalda Delgado <ribalda@chromium.org>
Date:   Mon Jun 12 11:05:32 2023 +0200

    ASoC: mediatek: mt8173: Fix irq error path
    
    commit f9c058d14f4fe23ef523a7ff73734d51c151683c upstream.
    
    After reordering the irq probe, the error path was not properly done.
    Lets fix it.
    
    Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
    Cc: stable@kernel.org
    Fixes: 4cbb264d4e91 ("ASoC: mediatek: mt8173: Enable IRQ when pdata is ready")
    Signed-off-by: Ricardo Ribalda Delgado <ribalda@chromium.org>
    Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
    Link: https://lore.kernel.org/r/20230612-mt8173-fixup-v2-2-432aa99ce24d@chromium.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: mediatek: mt8173: Fix snd_soc_component_initialize error path [+ + +]
Author: Ricardo Ribalda Delgado <ribalda@chromium.org>
Date:   Mon Jun 12 11:05:31 2023 +0200

    ASoC: mediatek: mt8173: Fix snd_soc_component_initialize error path
    
    commit a46d37012a5be1737393b8f82fd35665e4556eee upstream.
    
    If the second component fails to initialize, cleanup the first on.
    
    Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
    Cc: stable@kernel.org
    Fixes: f1b5bf07365d ("ASoC: mt2701/mt8173: replace platform to component")
    Signed-off-by: Ricardo Ribalda Delgado <ribalda@chromium.org>
    Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
    Link: https://lore.kernel.org/r/20230612-mt8173-fixup-v2-1-432aa99ce24d@chromium.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
autofs: use flexible array in ioctl structure [+ + +]
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Tue May 23 10:19:35 2023 +0200

    autofs: use flexible array in ioctl structure
    
    commit e910c8e3aa02dc456e2f4c32cb479523c326b534 upstream.
    
    Commit df8fc4e934c1 ("kbuild: Enable -fstrict-flex-arrays=3") introduced a warning
    for the autofs_dev_ioctl structure:
    
    In function 'check_name',
        inlined from 'validate_dev_ioctl' at fs/autofs/dev-ioctl.c:131:9,
        inlined from '_autofs_dev_ioctl' at fs/autofs/dev-ioctl.c:624:8:
    fs/autofs/dev-ioctl.c:33:14: error: 'strchr' reading 1 or more bytes from a region of size 0 [-Werror=stringop-overread]
       33 |         if (!strchr(name, '/'))
          |              ^~~~~~~~~~~~~~~~~
    In file included from include/linux/auto_dev-ioctl.h:10,
                     from fs/autofs/autofs_i.h:10,
                     from fs/autofs/dev-ioctl.c:14:
    include/uapi/linux/auto_dev-ioctl.h: In function '_autofs_dev_ioctl':
    include/uapi/linux/auto_dev-ioctl.h:112:14: note: source object 'path' of size 0
      112 |         char path[0];
          |              ^~~~
    
    This is easily fixed by changing the gnu 0-length array into a c99
    flexible array. Since this is a uapi structure, we have to be careful
    about possible regressions but this one should be fine as they are
    equivalent here. While it would break building with ancient gcc versions
    that predate c99, it helps building with --std=c99 and -Wpedantic builds
    in user space, as well as non-gnu compilers. This means we probably
    also want it fixed in stable kernels.
    
    Cc: stable@vger.kernel.org
    Cc: Kees Cook <keescook@chromium.org>
    Cc: "Gustavo A. R. Silva" <gustavoars@kernel.org>
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Kees Cook <keescook@chromium.org>
    Link: https://lore.kernel.org/r/20230523081944.581710-1-arnd@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
bcache: Fix __bch_btree_node_alloc to make the failure behavior consistent [+ + +]
Author: Zheng Wang <zyytlz.wz@163.com>
Date:   Thu Jun 15 20:12:22 2023 +0800

    bcache: Fix __bch_btree_node_alloc to make the failure behavior consistent
    
    commit 80fca8a10b604afad6c14213fdfd816c4eda3ee4 upstream.
    
    In some specific situations, the return value of __bch_btree_node_alloc
    may be NULL. This may lead to a potential NULL pointer dereference in
    caller function like a calling chain :
    btree_split->bch_btree_node_alloc->__bch_btree_node_alloc.
    
    Fix it by initializing the return value in __bch_btree_node_alloc.
    
    Fixes: cafe56359144 ("bcache: A block layer cache")
    Cc: stable@vger.kernel.org
    Signed-off-by: Zheng Wang <zyytlz.wz@163.com>
    Signed-off-by: Coly Li <colyli@suse.de>
    Link: https://lore.kernel.org/r/20230615121223.22502-6-colyli@suse.de
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

bcache: fixup btree_cache_wait list damage [+ + +]
Author: Mingzhe Zou <mingzhe.zou@easystack.cn>
Date:   Thu Jun 15 20:12:23 2023 +0800

    bcache: fixup btree_cache_wait list damage
    
    commit f0854489fc07d2456f7cc71a63f4faf9c716ffbe upstream.
    
    We get a kernel crash about "list_add corruption. next->prev should be
    prev (ffff9c801bc01210), but was ffff9c77b688237c.
    (next=ffffae586d8afe68)."
    
    crash> struct list_head 0xffff9c801bc01210
    struct list_head {
      next = 0xffffae586d8afe68,
      prev = 0xffffae586d8afe68
    }
    crash> struct list_head 0xffff9c77b688237c
    struct list_head {
      next = 0x0,
      prev = 0x0
    }
    crash> struct list_head 0xffffae586d8afe68
    struct list_head struct: invalid kernel virtual address: ffffae586d8afe68  type: "gdb_readmem_callback"
    Cannot access memory at address 0xffffae586d8afe68
    
    [230469.019492] Call Trace:
    [230469.032041]  prepare_to_wait+0x8a/0xb0
    [230469.044363]  ? bch_btree_keys_free+0x6c/0xc0 [escache]
    [230469.056533]  mca_cannibalize_lock+0x72/0x90 [escache]
    [230469.068788]  mca_alloc+0x2ae/0x450 [escache]
    [230469.080790]  bch_btree_node_get+0x136/0x2d0 [escache]
    [230469.092681]  bch_btree_check_thread+0x1e1/0x260 [escache]
    [230469.104382]  ? finish_wait+0x80/0x80
    [230469.115884]  ? bch_btree_check_recurse+0x1a0/0x1a0 [escache]
    [230469.127259]  kthread+0x112/0x130
    [230469.138448]  ? kthread_flush_work_fn+0x10/0x10
    [230469.149477]  ret_from_fork+0x35/0x40
    
    bch_btree_check_thread() and bch_dirty_init_thread() may call
    mca_cannibalize() to cannibalize other cached btree nodes. Only one thread
    can do it at a time, so the op of other threads will be added to the
    btree_cache_wait list.
    
    We must call finish_wait() to remove op from btree_cache_wait before free
    it's memory address. Otherwise, the list will be damaged. Also should call
    bch_cannibalize_unlock() to release the btree_cache_alloc_lock and wake_up
    other waiters.
    
    Fixes: 8e7102273f59 ("bcache: make bch_btree_check() to be multithreaded")
    Fixes: b144e45fc576 ("bcache: make bch_sectors_dirty_init() to be multithreaded")
    Cc: stable@vger.kernel.org
    Signed-off-by: Mingzhe Zou <mingzhe.zou@easystack.cn>
    Signed-off-by: Coly Li <colyli@suse.de>
    Link: https://lore.kernel.org/r/20230615121223.22502-7-colyli@suse.de
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

bcache: Remove unnecessary NULL point check in node allocations [+ + +]
Author: Zheng Wang <zyytlz.wz@163.com>
Date:   Thu Jun 15 20:12:21 2023 +0800

    bcache: Remove unnecessary NULL point check in node allocations
    
    commit 028ddcac477b691dd9205c92f991cc15259d033e upstream.
    
    Due to the previous fix of __bch_btree_node_alloc, the return value will
    never be a NULL pointer. So IS_ERR is enough to handle the failure
    situation. Fix it by replacing IS_ERR_OR_NULL check by an IS_ERR check.
    
    Fixes: cafe56359144 ("bcache: A block layer cache")
    Cc: stable@vger.kernel.org
    Signed-off-by: Zheng Wang <zyytlz.wz@163.com>
    Signed-off-by: Coly Li <colyli@suse.de>
    Link: https://lore.kernel.org/r/20230615121223.22502-5-colyli@suse.de
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
blk-iocost: use spin_lock_irqsave in adjust_inuse_and_calc_cost [+ + +]
Author: Li Nan <linan122@huawei.com>
Date:   Sat May 27 17:19:04 2023 +0800

    blk-iocost: use spin_lock_irqsave in adjust_inuse_and_calc_cost
    
    [ Upstream commit 8d211554679d0b23702bd32ba04aeac0c1c4f660 ]
    
    adjust_inuse_and_calc_cost() use spin_lock_irq() and IRQ will be enabled
    when unlock. DEADLOCK might happen if we have held other locks and disabled
    IRQ before invoking it.
    
    Fix it by using spin_lock_irqsave() instead, which can keep IRQ state
    consistent with before when unlock.
    
      ================================
      WARNING: inconsistent lock state
      5.10.0-02758-g8e5f91fd772f #26 Not tainted
      --------------------------------
      inconsistent {IN-HARDIRQ-W} -> {HARDIRQ-ON-W} usage.
      kworker/2:3/388 [HC0[0]:SC0[0]:HE0:SE1] takes:
      ffff888118c00c28 (&bfqd->lock){?.-.}-{2:2}, at: spin_lock_irq
      ffff888118c00c28 (&bfqd->lock){?.-.}-{2:2}, at: bfq_bio_merge+0x141/0x390
      {IN-HARDIRQ-W} state was registered at:
        __lock_acquire+0x3d7/0x1070
        lock_acquire+0x197/0x4a0
        __raw_spin_lock_irqsave
        _raw_spin_lock_irqsave+0x3b/0x60
        bfq_idle_slice_timer_body
        bfq_idle_slice_timer+0x53/0x1d0
        __run_hrtimer+0x477/0xa70
        __hrtimer_run_queues+0x1c6/0x2d0
        hrtimer_interrupt+0x302/0x9e0
        local_apic_timer_interrupt
        __sysvec_apic_timer_interrupt+0xfd/0x420
        run_sysvec_on_irqstack_cond
        sysvec_apic_timer_interrupt+0x46/0xa0
        asm_sysvec_apic_timer_interrupt+0x12/0x20
      irq event stamp: 837522
      hardirqs last  enabled at (837521): [<ffffffff84b9419d>] __raw_spin_unlock_irqrestore
      hardirqs last  enabled at (837521): [<ffffffff84b9419d>] _raw_spin_unlock_irqrestore+0x3d/0x40
      hardirqs last disabled at (837522): [<ffffffff84b93fa3>] __raw_spin_lock_irq
      hardirqs last disabled at (837522): [<ffffffff84b93fa3>] _raw_spin_lock_irq+0x43/0x50
      softirqs last  enabled at (835852): [<ffffffff84e00558>] __do_softirq+0x558/0x8ec
      softirqs last disabled at (835845): [<ffffffff84c010ff>] asm_call_irq_on_stack+0xf/0x20
    
      other info that might help us debug this:
       Possible unsafe locking scenario:
    
             CPU0
             ----
        lock(&bfqd->lock);
        <Interrupt>
          lock(&bfqd->lock);
    
       *** DEADLOCK ***
    
      3 locks held by kworker/2:3/388:
       #0: ffff888107af0f38 ((wq_completion)kthrotld){+.+.}-{0:0}, at: process_one_work+0x742/0x13f0
       #1: ffff8881176bfdd8 ((work_completion)(&td->dispatch_work)){+.+.}-{0:0}, at: process_one_work+0x777/0x13f0
       #2: ffff888118c00c28 (&bfqd->lock){?.-.}-{2:2}, at: spin_lock_irq
       #2: ffff888118c00c28 (&bfqd->lock){?.-.}-{2:2}, at: bfq_bio_merge+0x141/0x390
    
      stack backtrace:
      CPU: 2 PID: 388 Comm: kworker/2:3 Not tainted 5.10.0-02758-g8e5f91fd772f #26
      Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.14.0-0-g155821a1990b-prebuilt.qemu.org 04/01/2014
      Workqueue: kthrotld blk_throtl_dispatch_work_fn
      Call Trace:
       __dump_stack lib/dump_stack.c:77 [inline]
       dump_stack+0x107/0x167
       print_usage_bug
       valid_state
       mark_lock_irq.cold+0x32/0x3a
       mark_lock+0x693/0xbc0
       mark_held_locks+0x9e/0xe0
       __trace_hardirqs_on_caller
       lockdep_hardirqs_on_prepare.part.0+0x151/0x360
       trace_hardirqs_on+0x5b/0x180
       __raw_spin_unlock_irq
       _raw_spin_unlock_irq+0x24/0x40
       spin_unlock_irq
       adjust_inuse_and_calc_cost+0x4fb/0x970
       ioc_rqos_merge+0x277/0x740
       __rq_qos_merge+0x62/0xb0
       rq_qos_merge
       bio_attempt_back_merge+0x12c/0x4a0
       blk_mq_sched_try_merge+0x1b6/0x4d0
       bfq_bio_merge+0x24a/0x390
       __blk_mq_sched_bio_merge+0xa6/0x460
       blk_mq_sched_bio_merge
       blk_mq_submit_bio+0x2e7/0x1ee0
       __submit_bio_noacct_mq+0x175/0x3b0
       submit_bio_noacct+0x1fb/0x270
       blk_throtl_dispatch_work_fn+0x1ef/0x2b0
       process_one_work+0x83e/0x13f0
       process_scheduled_works
       worker_thread+0x7e3/0xd80
       kthread+0x353/0x470
       ret_from_fork+0x1f/0x30
    
    Fixes: b0853ab4a238 ("blk-iocost: revamp in-period donation snapbacks")
    Signed-off-by: Li Nan <linan122@huawei.com>
    Acked-by: Tejun Heo <tj@kernel.org>
    Reviewed-by: Yu Kuai <yukuai3@huawei.com>
    Link: https://lore.kernel.org/r/20230527091904.3001833-1-linan666@huaweicloud.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
block/partition: fix signedness issue for Amiga partitions [+ + +]
Author: Michael Schmitz <schmitzmic@gmail.com>
Date:   Wed Jul 5 11:38:08 2023 +1200

    block/partition: fix signedness issue for Amiga partitions
    
    commit 7eb1e47696aa231b1a567846bbe3a1e1befe1854 upstream.
    
    Making 'blk' sector_t (i.e. 64 bit if LBD support is active) fails the
    'blk>0' test in the partition block loop if a value of (signed int) -1 is
    used to mark the end of the partition block list.
    
    Explicitly cast 'blk' to signed int to allow use of -1 to terminate the
    partition block linked list.
    
    Fixes: b6f3f28f604b ("block: add overflow checks for Amiga partition support")
    Reported-by: Christian Zigotzky <chzigotzky@xenosoft.de>
    Link: https://lore.kernel.org/r/024ce4fa-cc6d-50a2-9aae-3701d0ebf668@xenosoft.de
    Signed-off-by: Michael Schmitz <schmitzmic@gmail.com>
    Reviewed-by: Martin Steigerwald <martin@lichtvoll.de>
    Tested-by: Christian Zigotzky <chzigotzky@xenosoft.de>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
block: add overflow checks for Amiga partition support [+ + +]
Author: Michael Schmitz <schmitzmic@gmail.com>
Date:   Wed Jun 21 08:17:25 2023 +1200

    block: add overflow checks for Amiga partition support
    
    commit b6f3f28f604ba3de4724ad82bea6adb1300c0b5f upstream.
    
    The Amiga partition parser module uses signed int for partition sector
    address and count, which will overflow for disks larger than 1 TB.
    
    Use u64 as type for sector address and size to allow using disks up to
    2 TB without LBD support, and disks larger than 2 TB with LBD. The RBD
    format allows to specify disk sizes up to 2^128 bytes (though native
    OS limitations reduce this somewhat, to max 2^68 bytes), so check for
    u64 overflow carefully to protect against overflowing sector_t.
    
    Bail out if sector addresses overflow 32 bits on kernels without LBD
    support.
    
    This bug was reported originally in 2012, and the fix was created by
    the RDB author, Joanne Dow <jdow@earthlink.net>. A patch had been
    discussed and reviewed on linux-m68k at that time but never officially
    submitted (now resubmitted as patch 1 in this series).
    This patch adds additional error checking and warning messages.
    
    Reported-by: Martin Steigerwald <Martin@lichtvoll.de>
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=43511
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Message-ID: <201206192146.09327.Martin@lichtvoll.de>
    Cc: <stable@vger.kernel.org> # 5.2
    Signed-off-by: Michael Schmitz <schmitzmic@gmail.com>
    Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org>
    Reviewed-by: Christoph Hellwig <hch@infradead.org>
    Link: https://lore.kernel.org/r/20230620201725.7020-4-schmitzmic@gmail.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

block: change all __u32 annotations to __be32 in affs_hardblocks.h [+ + +]
Author: Michael Schmitz <schmitzmic@gmail.com>
Date:   Wed Jun 21 08:17:24 2023 +1200

    block: change all __u32 annotations to __be32 in affs_hardblocks.h
    
    commit 95a55437dc49fb3342c82e61f5472a71c63d9ed0 upstream.
    
    The Amiga partition parser module uses signed int for partition sector
    address and count, which will overflow for disks larger than 1 TB.
    
    Use u64 as type for sector address and size to allow using disks up to
    2 TB without LBD support, and disks larger than 2 TB with LBD. The RBD
    format allows to specify disk sizes up to 2^128 bytes (though native
    OS limitations reduce this somewhat, to max 2^68 bytes), so check for
    u64 overflow carefully to protect against overflowing sector_t.
    
    This bug was reported originally in 2012, and the fix was created by
    the RDB author, Joanne Dow <jdow@earthlink.net>. A patch had been
    discussed and reviewed on linux-m68k at that time but never officially
    submitted (now resubmitted as patch 1 of this series).
    
    Patch 3 (this series) adds additional error checking and warning
    messages. One of the error checks now makes use of the previously
    unused rdb_CylBlocks field, which causes a 'sparse' warning
    (cast to restricted __be32).
    
    Annotate all 32 bit fields in affs_hardblocks.h as __be32, as the
    on-disk format of RDB and partition blocks is always big endian.
    
    Reported-by: Martin Steigerwald <Martin@lichtvoll.de>
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=43511
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Message-ID: <201206192146.09327.Martin@lichtvoll.de>
    Cc: <stable@vger.kernel.org> # 5.2
    Signed-off-by: Michael Schmitz <schmitzmic@gmail.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org>
    Link: https://lore.kernel.org/r/20230620201725.7020-3-schmitzmic@gmail.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

block: fix signed int overflow in Amiga partition support [+ + +]
Author: Michael Schmitz <schmitzmic@gmail.com>
Date:   Wed Jun 21 08:17:23 2023 +1200

    block: fix signed int overflow in Amiga partition support
    
    commit fc3d092c6bb48d5865fec15ed5b333c12f36288c upstream.
    
    The Amiga partition parser module uses signed int for partition sector
    address and count, which will overflow for disks larger than 1 TB.
    
    Use sector_t as type for sector address and size to allow using disks
    up to 2 TB without LBD support, and disks larger than 2 TB with LBD.
    
    This bug was reported originally in 2012, and the fix was created by
    the RDB author, Joanne Dow <jdow@earthlink.net>. A patch had been
    discussed and reviewed on linux-m68k at that time but never officially
    submitted. This patch differs from Joanne's patch only in its use of
    sector_t instead of unsigned int. No checking for overflows is done
    (see patch 3 of this series for that).
    
    Reported-by: Martin Steigerwald <Martin@lichtvoll.de>
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=43511
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Message-ID: <201206192146.09327.Martin@lichtvoll.de>
    Cc: <stable@vger.kernel.org> # 5.2
    Signed-off-by: Michael Schmitz <schmitzmic@gmail.com>
    Tested-by: Martin Steigerwald <Martin@lichtvoll.de>
    Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Link: https://lore.kernel.org/r/20230620201725.7020-2-schmitzmic@gmail.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
bpf, riscv: Support riscv jit to provide bpf_line_info [+ + +]
Author: Pu Lehui <pulehui@huawei.com>
Date:   Mon May 30 17:28:11 2022 +0800

    bpf, riscv: Support riscv jit to provide bpf_line_info
    
    [ Upstream commit 3cb70413041fdf028fa1ba3986fd0c6aec9e3dcb ]
    
    Add support for riscv jit to provide bpf_line_info. We need to
    consider the prologue offset in ctx->offset, but unlike x86 and
    arm64, ctx->offset of riscv does not provide an extra slot for
    the prologue, so here we just calculate the len of prologue and
    add it to ctx->offset at the end. Both RV64 and RV32 have been
    tested.
    
    Signed-off-by: Pu Lehui <pulehui@huawei.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20220530092815.1112406-3-pulehui@huawei.com
    Stable-dep-of: c56fb2aab235 ("riscv, bpf: Fix inconsistent JIT image generation")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bpf: Address KCSAN report on bpf_lru_list [+ + +]
Author: Martin KaFai Lau <martin.lau@kernel.org>
Date:   Wed May 10 21:37:48 2023 -0700

    bpf: Address KCSAN report on bpf_lru_list
    
    [ Upstream commit ee9fd0ac3017c4313be91a220a9ac4c99dde7ad4 ]
    
    KCSAN reported a data-race when accessing node->ref.
    Although node->ref does not have to be accurate,
    take this chance to use a more common READ_ONCE() and WRITE_ONCE()
    pattern instead of data_race().
    
    There is an existing bpf_lru_node_is_ref() and bpf_lru_node_set_ref().
    This patch also adds bpf_lru_node_clear_ref() to do the
    WRITE_ONCE(node->ref, 0) also.
    
    ==================================================================
    BUG: KCSAN: data-race in __bpf_lru_list_rotate / __htab_lru_percpu_map_update_elem
    
    write to 0xffff888137038deb of 1 bytes by task 11240 on cpu 1:
    __bpf_lru_node_move kernel/bpf/bpf_lru_list.c:113 [inline]
    __bpf_lru_list_rotate_active kernel/bpf/bpf_lru_list.c:149 [inline]
    __bpf_lru_list_rotate+0x1bf/0x750 kernel/bpf/bpf_lru_list.c:240
    bpf_lru_list_pop_free_to_local kernel/bpf/bpf_lru_list.c:329 [inline]
    bpf_common_lru_pop_free kernel/bpf/bpf_lru_list.c:447 [inline]
    bpf_lru_pop_free+0x638/0xe20 kernel/bpf/bpf_lru_list.c:499
    prealloc_lru_pop kernel/bpf/hashtab.c:290 [inline]
    __htab_lru_percpu_map_update_elem+0xe7/0x820 kernel/bpf/hashtab.c:1316
    bpf_percpu_hash_update+0x5e/0x90 kernel/bpf/hashtab.c:2313
    bpf_map_update_value+0x2a9/0x370 kernel/bpf/syscall.c:200
    generic_map_update_batch+0x3ae/0x4f0 kernel/bpf/syscall.c:1687
    bpf_map_do_batch+0x2d9/0x3d0 kernel/bpf/syscall.c:4534
    __sys_bpf+0x338/0x810
    __do_sys_bpf kernel/bpf/syscall.c:5096 [inline]
    __se_sys_bpf kernel/bpf/syscall.c:5094 [inline]
    __x64_sys_bpf+0x43/0x50 kernel/bpf/syscall.c:5094
    do_syscall_x64 arch/x86/entry/common.c:50 [inline]
    do_syscall_64+0x41/0xc0 arch/x86/entry/common.c:80
    entry_SYSCALL_64_after_hwframe+0x63/0xcd
    
    read to 0xffff888137038deb of 1 bytes by task 11241 on cpu 0:
    bpf_lru_node_set_ref kernel/bpf/bpf_lru_list.h:70 [inline]
    __htab_lru_percpu_map_update_elem+0x2f1/0x820 kernel/bpf/hashtab.c:1332
    bpf_percpu_hash_update+0x5e/0x90 kernel/bpf/hashtab.c:2313
    bpf_map_update_value+0x2a9/0x370 kernel/bpf/syscall.c:200
    generic_map_update_batch+0x3ae/0x4f0 kernel/bpf/syscall.c:1687
    bpf_map_do_batch+0x2d9/0x3d0 kernel/bpf/syscall.c:4534
    __sys_bpf+0x338/0x810
    __do_sys_bpf kernel/bpf/syscall.c:5096 [inline]
    __se_sys_bpf kernel/bpf/syscall.c:5094 [inline]
    __x64_sys_bpf+0x43/0x50 kernel/bpf/syscall.c:5094
    do_syscall_x64 arch/x86/entry/common.c:50 [inline]
    do_syscall_64+0x41/0xc0 arch/x86/entry/common.c:80
    entry_SYSCALL_64_after_hwframe+0x63/0xcd
    
    value changed: 0x01 -> 0x00
    
    Reported by Kernel Concurrency Sanitizer on:
    CPU: 0 PID: 11241 Comm: syz-executor.3 Not tainted 6.3.0-rc7-syzkaller-00136-g6a66fdd29ea1 #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 03/30/2023
    ==================================================================
    
    Reported-by: syzbot+ebe648a84e8784763f82@syzkaller.appspotmail.com
    Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
    Acked-by: Yonghong Song <yhs@fb.com>
    Link: https://lore.kernel.org/r/20230511043748.1384166-1-martin.lau@linux.dev
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf: Remove extra lock_sock for TCP_ZEROCOPY_RECEIVE [+ + +]
Author: Stanislav Fomichev <sdf@google.com>
Date:   Fri Jan 15 08:34:59 2021 -0800

    bpf: Remove extra lock_sock for TCP_ZEROCOPY_RECEIVE
    
    [ Upstream commit 9cacf81f8161111db25f98e78a7a0e32ae142b3f ]
    
    Add custom implementation of getsockopt hook for TCP_ZEROCOPY_RECEIVE.
    We skip generic hooks for TCP_ZEROCOPY_RECEIVE and have a custom
    call in do_tcp_getsockopt using the on-stack data. This removes
    3% overhead for locking/unlocking the socket.
    
    Without this patch:
         3.38%     0.07%  tcp_mmap  [kernel.kallsyms]  [k] __cgroup_bpf_run_filter_getsockopt
                |
                 --3.30%--__cgroup_bpf_run_filter_getsockopt
                           |
                            --0.81%--__kmalloc
    
    With the patch applied:
         0.52%     0.12%  tcp_mmap  [kernel.kallsyms]  [k] __cgroup_bpf_run_filter_getsockopt_kern
    
    Note, exporting uapi/tcp.h requires removing netinet/tcp.h
    from test_progs.h because those headers have confliciting
    definitions.
    
    Signed-off-by: Stanislav Fomichev <sdf@google.com>
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Acked-by: Martin KaFai Lau <kafai@fb.com>
    Link: https://lore.kernel.org/bpf/20210115163501.805133-2-sdf@google.com
    Stable-dep-of: 2598619e012c ("sctp: add bpf_bypass_getsockopt proto callback")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bpftool: JIT limited misreported as negative value on aarch64 [+ + +]
Author: Alan Maguire <alan.maguire@oracle.com>
Date:   Fri May 12 12:31:34 2023 +0100

    bpftool: JIT limited misreported as negative value on aarch64
    
    [ Upstream commit 04cb8453a91c7c22f60ddadb6cef0d19abb33bb5 ]
    
    On aarch64, "bpftool feature" reports an incorrect BPF JIT limit:
    
    $ sudo /sbin/bpftool feature
    Scanning system configuration...
    bpf() syscall restricted to privileged users
    JIT compiler is enabled
    JIT compiler hardening is disabled
    JIT compiler kallsyms exports are enabled for root
    skipping kernel config, can't open file: No such file or directory
    Global memory limit for JIT compiler for unprivileged users is -201326592 bytes
    
    This is because /proc/sys/net/core/bpf_jit_limit reports
    
    $ sudo cat /proc/sys/net/core/bpf_jit_limit
    68169519595520
    
    ...and an int is assumed in read_procfs().  Change read_procfs()
    to return a long to avoid negative value reporting.
    
    Fixes: 7a4522bbef0c ("tools: bpftool: add probes for /proc/ eBPF parameters")
    Reported-by: Nicky Veitch <nicky.veitch@oracle.com>
    Signed-off-by: Alan Maguire <alan.maguire@oracle.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: Jiri Olsa <jolsa@kernel.org>
    Acked-by: Quentin Monnet <quentin@isovalent.com>
    Link: https://lore.kernel.org/bpf/20230512113134.58996-1-alan.maguire@oracle.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bridge: Add extack warning when enabling STP in netns. [+ + +]
Author: Kuniyuki Iwashima <kuniyu@amazon.com>
Date:   Wed Jul 12 08:44:49 2023 -0700

    bridge: Add extack warning when enabling STP in netns.
    
    [ Upstream commit 56a16035bb6effb37177867cea94c13a8382f745 ]
    
    When we create an L2 loop on a bridge in netns, we will see packets storm
    even if STP is enabled.
    
      # unshare -n
      # ip link add br0 type bridge
      # ip link add veth0 type veth peer name veth1
      # ip link set veth0 master br0 up
      # ip link set veth1 master br0 up
      # ip link set br0 type bridge stp_state 1
      # ip link set br0 up
      # sleep 30
      # ip -s link show br0
      2: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
          link/ether b6:61:98:1c:1c:b5 brd ff:ff:ff:ff:ff:ff
          RX: bytes  packets  errors  dropped missed  mcast
          956553768  12861249 0       0       0       12861249  <-. Keep
          TX: bytes  packets  errors  dropped carrier collsns     |  increasing
          1027834    11951    0       0       0       0         <-'   rapidly
    
    This is because llc_rcv() drops all packets in non-root netns and BPDU
    is dropped.
    
    Let's add extack warning when enabling STP in netns.
    
      # unshare -n
      # ip link add br0 type bridge
      # ip link set br0 type bridge stp_state 1
      Warning: bridge: STP does not work in non-root netns.
    
    Note this commit will be reverted later when we namespacify the whole LLC
    infra.
    
    Fixes: e730c15519d0 ("[NET]: Make packet reception network namespace safe")
    Suggested-by: Harry Coin <hcoin@quietfountain.com>
    Link: https://lore.kernel.org/netdev/0f531295-e289-022d-5add-5ceffa0df9bc@quietfountain.com/
    Suggested-by: Ido Schimmel <idosch@idosch.org>
    Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Acked-by: Nikolay Aleksandrov <razor@blackwall.org>
    Reviewed-by: Ido Schimmel <idosch@nvidia.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
btrfs: add handling for RAID1C23/DUP to btrfs_reduce_alloc_profile [+ + +]
Author: Matt Corallo <blnxfsl@bluematt.me>
Date:   Mon Jun 5 16:49:45 2023 -0700

    btrfs: add handling for RAID1C23/DUP to btrfs_reduce_alloc_profile
    
    commit 160fe8f6fdb13da6111677be6263e5d65e875987 upstream.
    
    Callers of `btrfs_reduce_alloc_profile` expect it to return exactly
    one allocation profile flag, and failing to do so may ultimately
    result in a WARN_ON and remount-ro when allocating new blocks, like
    the below transaction abort on 6.1.
    
    `btrfs_reduce_alloc_profile` has two ways of determining the profile,
    first it checks if a conversion balance is currently running and
    uses the profile we're converting to. If no balance is currently
    running, it returns the max-redundancy profile which at least one
    block in the selected block group has.
    
    This works by simply checking each known allocation profile bit in
    redundancy order. However, `btrfs_reduce_alloc_profile` has not been
    updated as new flags have been added - first with the `DUP` profile
    and later with the RAID1C34 profiles.
    
    Because of the way it checks, if we have blocks with different
    profiles and at least one is known, that profile will be selected.
    However, if none are known we may return a flag set with multiple
    allocation profiles set.
    
    This is currently only possible when a balance from one of the three
    unhandled profiles to another of the unhandled profiles is canceled
    after allocating at least one block using the new profile.
    
    In that case, a transaction abort like the below will occur and the
    filesystem will need to be mounted with -o skip_balance to get it
    mounted rw again (but the balance cannot be resumed without a
    similar abort).
    
      [770.648] ------------[ cut here ]------------
      [770.648] BTRFS: Transaction aborted (error -22)
      [770.648] WARNING: CPU: 43 PID: 1159593 at fs/btrfs/extent-tree.c:4122 find_free_extent+0x1d94/0x1e00 [btrfs]
      [770.648] CPU: 43 PID: 1159593 Comm: btrfs Tainted: G        W 6.1.0-0.deb11.7-powerpc64le #1  Debian 6.1.20-2~bpo11+1a~test
      [770.648] Hardware name: T2P9D01 REV 1.00 POWER9 0x4e1202 opal:skiboot-bc106a0 PowerNV
      [770.648] NIP:  c00800000f6784fc LR: c00800000f6784f8 CTR: c000000000d746c0
      [770.648] REGS: c000200089afe9a0 TRAP: 0700   Tainted: G        W (6.1.0-0.deb11.7-powerpc64le Debian 6.1.20-2~bpo11+1a~test)
      [770.648] MSR:  9000000002029033 <SF,HV,VEC,EE,ME,IR,DR,RI,LE>  CR: 28848282  XER: 20040000
      [770.648] CFAR: c000000000135110 IRQMASK: 0
                GPR00: c00800000f6784f8 c000200089afec40 c00800000f7ea800 0000000000000026
                GPR04: 00000001004820c2 c000200089afea00 c000200089afe9f8 0000000000000027
                GPR08: c000200ffbfe7f98 c000000002127f90 ffffffffffffffd8 0000000026d6a6e8
                GPR12: 0000000028848282 c000200fff7f3800 5deadbeef0000122 c00000002269d000
                GPR16: c0002008c7797c40 c000200089afef17 0000000000000000 0000000000000000
                GPR20: 0000000000000000 0000000000000001 c000200008bc5a98 0000000000000001
                GPR24: 0000000000000000 c0000003c73088d0 c000200089afef17 c000000016d3a800
                GPR28: c0000003c7308800 c00000002269d000 ffffffffffffffea 0000000000000001
      [770.648] NIP [c00800000f6784fc] find_free_extent+0x1d94/0x1e00 [btrfs]
      [770.648] LR [c00800000f6784f8] find_free_extent+0x1d90/0x1e00 [btrfs]
      [770.648] Call Trace:
      [770.648] [c000200089afec40] [c00800000f6784f8] find_free_extent+0x1d90/0x1e00 [btrfs] (unreliable)
      [770.648] [c000200089afed30] [c00800000f681398] btrfs_reserve_extent+0x1a0/0x2f0 [btrfs]
      [770.648] [c000200089afeea0] [c00800000f681bf0] btrfs_alloc_tree_block+0x108/0x670 [btrfs]
      [770.648] [c000200089afeff0] [c00800000f66bd68] __btrfs_cow_block+0x170/0x850 [btrfs]
      [770.648] [c000200089aff100] [c00800000f66c58c] btrfs_cow_block+0x144/0x288 [btrfs]
      [770.648] [c000200089aff1b0] [c00800000f67113c] btrfs_search_slot+0x6b4/0xcb0 [btrfs]
      [770.648] [c000200089aff2a0] [c00800000f679f60] lookup_inline_extent_backref+0x128/0x7c0 [btrfs]
      [770.648] [c000200089aff3b0] [c00800000f67b338] lookup_extent_backref+0x70/0x190 [btrfs]
      [770.648] [c000200089aff470] [c00800000f67b54c] __btrfs_free_extent+0xf4/0x1490 [btrfs]
      [770.648] [c000200089aff5a0] [c00800000f67d770] __btrfs_run_delayed_refs+0x328/0x1530 [btrfs]
      [770.648] [c000200089aff740] [c00800000f67ea2c] btrfs_run_delayed_refs+0xb4/0x3e0 [btrfs]
      [770.648] [c000200089aff800] [c00800000f699aa4] btrfs_commit_transaction+0x8c/0x12b0 [btrfs]
      [770.648] [c000200089aff8f0] [c00800000f6dc628] reset_balance_state+0x1c0/0x290 [btrfs]
      [770.648] [c000200089aff9a0] [c00800000f6e2f7c] btrfs_balance+0x1164/0x1500 [btrfs]
      [770.648] [c000200089affb40] [c00800000f6f8e4c] btrfs_ioctl+0x2b54/0x3100 [btrfs]
      [770.648] [c000200089affc80] [c00000000053be14] sys_ioctl+0x794/0x1310
      [770.648] [c000200089affd70] [c00000000002af98] system_call_exception+0x138/0x250
      [770.648] [c000200089affe10] [c00000000000c654] system_call_common+0xf4/0x258
      [770.648] --- interrupt: c00 at 0x7fff94126800
      [770.648] NIP:  00007fff94126800 LR: 0000000107e0b594 CTR: 0000000000000000
      [770.648] REGS: c000200089affe80 TRAP: 0c00   Tainted: G        W (6.1.0-0.deb11.7-powerpc64le Debian 6.1.20-2~bpo11+1a~test)
      [770.648] MSR:  900000000000d033 <SF,HV,EE,PR,ME,IR,DR,RI,LE>  CR: 24002848  XER: 00000000
      [770.648] IRQMASK: 0
                GPR00: 0000000000000036 00007fffc9439da0 00007fff94217100 0000000000000003
                GPR04: 00000000c4009420 00007fffc9439ee8 0000000000000000 0000000000000000
                GPR08: 00000000803c7416 0000000000000000 0000000000000000 0000000000000000
                GPR12: 0000000000000000 00007fff9467d120 0000000107e64c9c 0000000107e64d0a
                GPR16: 0000000107e64d06 0000000107e64cf1 0000000107e64cc4 0000000107e64c73
                GPR20: 0000000107e64c31 0000000107e64bf1 0000000107e64be7 0000000000000000
                GPR24: 0000000000000000 00007fffc9439ee0 0000000000000003 0000000000000001
                GPR28: 00007fffc943f713 0000000000000000 00007fffc9439ee8 0000000000000000
      [770.648] NIP [00007fff94126800] 0x7fff94126800
      [770.648] LR [0000000107e0b594] 0x107e0b594
      [770.648] --- interrupt: c00
      [770.648] Instruction dump:
      [770.648] 3b00ffe4 e8898828 481175f5 60000000 4bfff4fc 3be00000 4bfff570 3d220000
      [770.648] 7fc4f378 e8698830 4811cd95 e8410018 <0fe00000> f9c10060 f9e10068 fa010070
      [770.648] ---[ end trace 0000000000000000 ]---
      [770.648] BTRFS: error (device dm-2: state A) in find_free_extent_update_loop:4122: errno=-22 unknown
      [770.648] BTRFS info (device dm-2: state EA): forced readonly
      [770.648] BTRFS: error (device dm-2: state EA) in __btrfs_free_extent:3070: errno=-22 unknown
      [770.648] BTRFS error (device dm-2: state EA): failed to run delayed ref for logical 17838685708288 num_bytes 24576 type 184 action 2 ref_mod 1: -22
      [770.648] BTRFS: error (device dm-2: state EA) in btrfs_run_delayed_refs:2144: errno=-22 unknown
      [770.648] BTRFS: error (device dm-2: state EA) in reset_balance_state:3599: errno=-22 unknown
    
    Fixes: 47e6f7423b91 ("btrfs: add support for 3-copy replication (raid1c3)")
    Fixes: 8d6fac0087e5 ("btrfs: add support for 4-copy replication (raid1c4)")
    CC: stable@vger.kernel.org # 5.10+
    Signed-off-by: Matt Corallo <blnxfsl@bluematt.me>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

btrfs: add xxhash to fast checksum implementations [+ + +]
Author: David Sterba <dsterba@suse.com>
Date:   Tue Apr 4 00:06:02 2023 +0200

    btrfs: add xxhash to fast checksum implementations
    
    [ Upstream commit efcfcbc6a36195c42d98e0ee697baba36da94dc8 ]
    
    The implementation of XXHASH is now CPU only but still fast enough to be
    considered for the synchronous checksumming, like non-generic crc32c.
    
    A userspace benchmark comparing it to various implementations (patched
    hash-speedtest from btrfs-progs):
    
      Block size:     4096
      Iterations:     1000000
      Implementation: builtin
      Units:          CPU cycles
    
            NULL-NOP: cycles:     73384294, cycles/i       73
         NULL-MEMCPY: cycles:    228033868, cycles/i      228,    61664.320 MiB/s
          CRC32C-ref: cycles:  24758559416, cycles/i    24758,      567.950 MiB/s
           CRC32C-NI: cycles:   1194350470, cycles/i     1194,    11773.433 MiB/s
      CRC32C-ADLERSW: cycles:   6150186216, cycles/i     6150,     2286.372 MiB/s
      CRC32C-ADLERHW: cycles:    626979180, cycles/i      626,    22427.453 MiB/s
          CRC32C-PCL: cycles:    466746732, cycles/i      466,    30126.699 MiB/s
              XXHASH: cycles:    860656400, cycles/i      860,    16338.188 MiB/s
    
    Comparing purely software implementation (ref), current outdated
    accelerated using crc32q instruction (NI), optimized implementations by
    M. Adler (https://stackoverflow.com/questions/17645167/implementing-sse-4-2s-crc32c-in-software/17646775#17646775)
    and the best one that was taken from kernel using the PCLMULQDQ
    instruction (PCL).
    
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

btrfs: fix race when deleting quota root from the dirty cow roots list [+ + +]
Author: Filipe Manana <fdmanana@suse.com>
Date:   Mon Jun 19 17:21:47 2023 +0100

    btrfs: fix race when deleting quota root from the dirty cow roots list
    
    commit b31cb5a6eb7a48b0a7bfdf06832b1fd5088d8c79 upstream.
    
    When disabling quotas we are deleting the quota root from the list
    fs_info->dirty_cowonly_roots without taking the lock that protects it,
    which is struct btrfs_fs_info::trans_lock. This unsynchronized list
    manipulation may cause chaos if there's another concurrent manipulation
    of this list, such as when adding a root to it with
    ctree.c:add_root_to_dirty_list().
    
    This can result in all sorts of weird failures caused by a race, such as
    the following crash:
    
      [337571.278245] general protection fault, probably for non-canonical address 0xdead000000000108: 0000 [#1] PREEMPT SMP PTI
      [337571.278933] CPU: 1 PID: 115447 Comm: btrfs Tainted: G        W          6.4.0-rc6-btrfs-next-134+ #1
      [337571.279153] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.14.0-0-g155821a1990b-prebuilt.qemu.org 04/01/2014
      [337571.279572] RIP: 0010:commit_cowonly_roots+0x11f/0x250 [btrfs]
      [337571.279928] Code: 85 38 06 00 (...)
      [337571.280363] RSP: 0018:ffff9f63446efba0 EFLAGS: 00010206
      [337571.280582] RAX: ffff942d98ec2638 RBX: ffff9430b82b4c30 RCX: 0000000449e1c000
      [337571.280798] RDX: dead000000000100 RSI: ffff9430021e4900 RDI: 0000000000036070
      [337571.281015] RBP: ffff942d98ec2000 R08: ffff942d98ec2000 R09: 000000000000015b
      [337571.281254] R10: 0000000000000009 R11: 0000000000000001 R12: ffff942fe8fbf600
      [337571.281476] R13: ffff942dabe23040 R14: ffff942dabe20800 R15: ffff942d92cf3b48
      [337571.281723] FS:  00007f478adb7340(0000) GS:ffff94349fa40000(0000) knlGS:0000000000000000
      [337571.281950] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [337571.282184] CR2: 00007f478ab9a3d5 CR3: 000000001e02c001 CR4: 0000000000370ee0
      [337571.282416] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      [337571.282647] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
      [337571.282874] Call Trace:
      [337571.283101]  <TASK>
      [337571.283327]  ? __die_body+0x1b/0x60
      [337571.283570]  ? die_addr+0x39/0x60
      [337571.283796]  ? exc_general_protection+0x22e/0x430
      [337571.284022]  ? asm_exc_general_protection+0x22/0x30
      [337571.284251]  ? commit_cowonly_roots+0x11f/0x250 [btrfs]
      [337571.284531]  btrfs_commit_transaction+0x42e/0xf90 [btrfs]
      [337571.284803]  ? _raw_spin_unlock+0x15/0x30
      [337571.285031]  ? release_extent_buffer+0x103/0x130 [btrfs]
      [337571.285305]  reset_balance_state+0x152/0x1b0 [btrfs]
      [337571.285578]  btrfs_balance+0xa50/0x11e0 [btrfs]
      [337571.285864]  ? __kmem_cache_alloc_node+0x14a/0x410
      [337571.286086]  btrfs_ioctl+0x249a/0x3320 [btrfs]
      [337571.286358]  ? mod_objcg_state+0xd2/0x360
      [337571.286577]  ? refill_obj_stock+0xb0/0x160
      [337571.286798]  ? seq_release+0x25/0x30
      [337571.287016]  ? __rseq_handle_notify_resume+0x3ba/0x4b0
      [337571.287235]  ? percpu_counter_add_batch+0x2e/0xa0
      [337571.287455]  ? __x64_sys_ioctl+0x88/0xc0
      [337571.287675]  __x64_sys_ioctl+0x88/0xc0
      [337571.287901]  do_syscall_64+0x38/0x90
      [337571.288126]  entry_SYSCALL_64_after_hwframe+0x72/0xdc
      [337571.288352] RIP: 0033:0x7f478aaffe9b
    
    So fix this by locking struct btrfs_fs_info::trans_lock before deleting
    the quota root from that list.
    
    Fixes: bed92eae26cc ("Btrfs: qgroup implementation and prototypes")
    CC: stable@vger.kernel.org # 4.14+
    Signed-off-by: Filipe Manana <fdmanana@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

btrfs: fix warning when putting transaction with qgroups enabled after abort [+ + +]
Author: Filipe Manana <fdmanana@suse.com>
Date:   Fri Jul 14 13:42:06 2023 +0100

    btrfs: fix warning when putting transaction with qgroups enabled after abort
    
    commit aa84ce8a78a1a5c10cdf9c7a5fb0c999fbc2c8d6 upstream.
    
    If we have a transaction abort with qgroups enabled we get a warning
    triggered when doing the final put on the transaction, like this:
    
      [552.6789] ------------[ cut here ]------------
      [552.6815] WARNING: CPU: 4 PID: 81745 at fs/btrfs/transaction.c:144 btrfs_put_transaction+0x123/0x130 [btrfs]
      [552.6817] Modules linked in: btrfs blake2b_generic xor (...)
      [552.6819] CPU: 4 PID: 81745 Comm: btrfs-transacti Tainted: G        W          6.4.0-rc6-btrfs-next-134+ #1
      [552.6819] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.2-0-gea1b7a073390-prebuilt.qemu.org 04/01/2014
      [552.6819] RIP: 0010:btrfs_put_transaction+0x123/0x130 [btrfs]
      [552.6821] Code: bd a0 01 00 (...)
      [552.6821] RSP: 0018:ffffa168c0527e28 EFLAGS: 00010286
      [552.6821] RAX: ffff936042caed00 RBX: ffff93604a3eb448 RCX: 0000000000000000
      [552.6821] RDX: ffff93606421b028 RSI: ffffffff92ff0878 RDI: ffff93606421b010
      [552.6821] RBP: ffff93606421b000 R08: 0000000000000000 R09: ffffa168c0d07c20
      [552.6821] R10: 0000000000000000 R11: ffff93608dc52950 R12: ffffa168c0527e70
      [552.6821] R13: ffff93606421b000 R14: ffff93604a3eb420 R15: ffff93606421b028
      [552.6821] FS:  0000000000000000(0000) GS:ffff93675fb00000(0000) knlGS:0000000000000000
      [552.6821] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [552.6821] CR2: 0000558ad262b000 CR3: 000000014feda005 CR4: 0000000000370ee0
      [552.6822] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      [552.6822] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
      [552.6822] Call Trace:
      [552.6822]  <TASK>
      [552.6822]  ? __warn+0x80/0x130
      [552.6822]  ? btrfs_put_transaction+0x123/0x130 [btrfs]
      [552.6824]  ? report_bug+0x1f4/0x200
      [552.6824]  ? handle_bug+0x42/0x70
      [552.6824]  ? exc_invalid_op+0x14/0x70
      [552.6824]  ? asm_exc_invalid_op+0x16/0x20
      [552.6824]  ? btrfs_put_transaction+0x123/0x130 [btrfs]
      [552.6826]  btrfs_cleanup_transaction+0xe7/0x5e0 [btrfs]
      [552.6828]  ? _raw_spin_unlock_irqrestore+0x23/0x40
      [552.6828]  ? try_to_wake_up+0x94/0x5e0
      [552.6828]  ? __pfx_process_timeout+0x10/0x10
      [552.6828]  transaction_kthread+0x103/0x1d0 [btrfs]
      [552.6830]  ? __pfx_transaction_kthread+0x10/0x10 [btrfs]
      [552.6832]  kthread+0xee/0x120
      [552.6832]  ? __pfx_kthread+0x10/0x10
      [552.6832]  ret_from_fork+0x29/0x50
      [552.6832]  </TASK>
      [552.6832] ---[ end trace 0000000000000000 ]---
    
    This corresponds to this line of code:
    
      void btrfs_put_transaction(struct btrfs_transaction *transaction)
      {
          (...)
              WARN_ON(!RB_EMPTY_ROOT(
                              &transaction->delayed_refs.dirty_extent_root));
          (...)
      }
    
    The warning happens because btrfs_qgroup_destroy_extent_records(), called
    in the transaction abort path, we free all entries from the rbtree
    "dirty_extent_root" with rbtree_postorder_for_each_entry_safe(), but we
    don't actually empty the rbtree - it's still pointing to nodes that were
    freed.
    
    So set the rbtree's root node to NULL to avoid this warning (assign
    RB_ROOT).
    
    Fixes: 81f7eb00ff5b ("btrfs: destroy qgroup extent records on transaction abort")
    CC: stable@vger.kernel.org # 5.10+
    Reviewed-by: Josef Bacik <josef@toxicpanda.com>
    Reviewed-by: Qu Wenruo <wqu@suse.com>
    Signed-off-by: Filipe Manana <fdmanana@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
bus: ti-sysc: Fix dispc quirk masking bool variables [+ + +]
Author: Tony Lindgren <tony@atomide.com>
Date:   Wed May 17 10:04:16 2023 +0300

    bus: ti-sysc: Fix dispc quirk masking bool variables
    
    [ Upstream commit f620596fa347170852da499e778a5736d79a4b79 ]
    
    Fix warning drivers/bus/ti-sysc.c:1806 sysc_quirk_dispc()
    warn: masking a bool.
    
    While at it let's add a comment for what were doing to make
    the code a bit easier to follow.
    
    Fixes: 7324a7a0d5e2 ("bus: ti-sysc: Implement display subsystem reset quirk")
    Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
    Closes: https://lore.kernel.org/linux-omap/a8ec8a68-9c2c-4076-bf47-09fccce7659f@kili.mountain/
    Signed-off-by: Tony Lindgren <tony@atomide.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
can: bcm: Fix UAF in bcm_proc_show() [+ + +]
Author: YueHaibing <yuehaibing@huawei.com>
Date:   Sat Jul 15 17:25:43 2023 +0800

    can: bcm: Fix UAF in bcm_proc_show()
    
    commit 55c3b96074f3f9b0aee19bf93cd71af7516582bb upstream.
    
    BUG: KASAN: slab-use-after-free in bcm_proc_show+0x969/0xa80
    Read of size 8 at addr ffff888155846230 by task cat/7862
    
    CPU: 1 PID: 7862 Comm: cat Not tainted 6.5.0-rc1-00153-gc8746099c197 #230
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.15.0-1 04/01/2014
    Call Trace:
     <TASK>
     dump_stack_lvl+0xd5/0x150
     print_report+0xc1/0x5e0
     kasan_report+0xba/0xf0
     bcm_proc_show+0x969/0xa80
     seq_read_iter+0x4f6/0x1260
     seq_read+0x165/0x210
     proc_reg_read+0x227/0x300
     vfs_read+0x1d5/0x8d0
     ksys_read+0x11e/0x240
     do_syscall_64+0x35/0xb0
     entry_SYSCALL_64_after_hwframe+0x63/0xcd
    
    Allocated by task 7846:
     kasan_save_stack+0x1e/0x40
     kasan_set_track+0x21/0x30
     __kasan_kmalloc+0x9e/0xa0
     bcm_sendmsg+0x264b/0x44e0
     sock_sendmsg+0xda/0x180
     ____sys_sendmsg+0x735/0x920
     ___sys_sendmsg+0x11d/0x1b0
     __sys_sendmsg+0xfa/0x1d0
     do_syscall_64+0x35/0xb0
     entry_SYSCALL_64_after_hwframe+0x63/0xcd
    
    Freed by task 7846:
     kasan_save_stack+0x1e/0x40
     kasan_set_track+0x21/0x30
     kasan_save_free_info+0x27/0x40
     ____kasan_slab_free+0x161/0x1c0
     slab_free_freelist_hook+0x119/0x220
     __kmem_cache_free+0xb4/0x2e0
     rcu_core+0x809/0x1bd0
    
    bcm_op is freed before procfs entry be removed in bcm_release(),
    this lead to bcm_proc_show() may read the freed bcm_op.
    
    Fixes: ffd980f976e7 ("[CAN]: Add broadcast manager (bcm) protocol")
    Signed-off-by: YueHaibing <yuehaibing@huawei.com>
    Reviewed-by: Oliver Hartkopp <socketcan@hartkopp.net>
    Acked-by: Oliver Hartkopp <socketcan@hartkopp.net>
    Link: https://lore.kernel.org/all/20230715092543.15548-1-yuehaibing@huawei.com
    Cc: stable@vger.kernel.org
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

can: isotp: isotp_sendmsg(): fix return error fix on TX path [+ + +]
Author: Oliver Hartkopp <socketcan@hartkopp.net>
Date:   Wed Jun 7 09:27:08 2023 +0200

    can: isotp: isotp_sendmsg(): fix return error fix on TX path
    
    commit e38910c0072b541a91954682c8b074a93e57c09b upstream.
    
    With commit d674a8f123b4 ("can: isotp: isotp_sendmsg(): fix return
    error on FC timeout on TX path") the missing correct return value in
    the case of a protocol error was introduced.
    
    But the way the error value has been read and sent to the user space
    does not follow the common scheme to clear the error after reading
    which is provided by the sock_error() function. This leads to an error
    report at the following write() attempt although everything should be
    working.
    
    Fixes: d674a8f123b4 ("can: isotp: isotp_sendmsg(): fix return error on FC timeout on TX path")
    Reported-by: Carsten Schmidt <carsten.schmidt-achim@t-online.de>
    Signed-off-by: Oliver Hartkopp <socketcan@hartkopp.net>
    Link: https://lore.kernel.org/all/20230607072708.38809-1-socketcan@hartkopp.net
    Cc: stable@vger.kernel.org
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ceph: don't let check_caps skip sending responses for revoke msgs [+ + +]
Author: Xiubo Li <xiubli@redhat.com>
Date:   Wed Jun 28 07:57:09 2023 +0800

    ceph: don't let check_caps skip sending responses for revoke msgs
    
    commit 257e6172ab36ebbe295a6c9ee9a9dd0fe54c1dc2 upstream.
    
    If a client sends out a cap update dropping caps with the prior 'seq'
    just before an incoming cap revoke request, then the client may drop
    the revoke because it believes it's already released the requested
    capabilities.
    
    This causes the MDS to wait indefinitely for the client to respond
    to the revoke. It's therefore always a good idea to ack the cap
    revoke request with the bumped up 'seq'.
    
    Cc: stable@vger.kernel.org
    Link: https://tracker.ceph.com/issues/61782
    Signed-off-by: Xiubo Li <xiubli@redhat.com>
    Reviewed-by: Milind Changire <mchangir@redhat.com>
    Reviewed-by: Patrick Donnelly <pdonnell@redhat.com>
    Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
clk: cdce925: check return value of kasprintf() [+ + +]
Author: Claudiu Beznea <claudiu.beznea@microchip.com>
Date:   Tue May 30 12:39:07 2023 +0300

    clk: cdce925: check return value of kasprintf()
    
    [ Upstream commit bb7d09ddbf361d51eae46f38e7c8a2b85914ea2a ]
    
    kasprintf() returns a pointer to dynamically allocated memory.
    Pointer could be NULL in case allocation fails. Check pointer validity.
    Identified with coccinelle (kmerr.cocci script).
    
    Fixes: 19fbbbbcd3a3 ("Add TI CDCE925 I2C controlled clock synthesizer driver")
    Depends-on: e665f029a283 ("clk: Convert to using %pOFn instead of device_node.name")
    Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
    Link: https://lore.kernel.org/r/20230530093913.1656095-3-claudiu.beznea@microchip.com
    Signed-off-by: Stephen Boyd <sboyd@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

clk: imx: clk-imx8mn: fix memory leak in imx8mn_clocks_probe [+ + +]
Author: Hao Luo <m202171776@hust.edu.cn>
Date:   Tue Apr 11 09:51:07 2023 +0800

    clk: imx: clk-imx8mn: fix memory leak in imx8mn_clocks_probe
    
    [ Upstream commit 188d070de9132667956f5aadd98d2bd87d3eac89 ]
    
    Use devm_of_iomap() instead of of_iomap() to automatically handle
    the unused ioremap region.
    
    If any error occurs, regions allocated by kzalloc() will leak,
    but using devm_kzalloc() instead will automatically free the memory
    using devm_kfree().
    
    Fixes: daeb14545514 ("clk: imx: imx8mn: Switch to clk_hw based API")
    Fixes: 96d6392b54db ("clk: imx: Add support for i.MX8MN clock driver")
    Signed-off-by: Hao Luo <m202171776@hust.edu.cn>
    Reviewed-by: Dongliang Mu <dzm91@hust.edu.cn>
    Reviewed-by: Peng Fan <peng.fan@nxp.com>
    Link: https://lore.kernel.org/r/20230411015107.2645-1-m202171776@hust.edu.cn
    Signed-off-by: Abel Vesa <abel.vesa@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

clk: imx: clk-imx8mp: improve error handling in imx8mp_clocks_probe() [+ + +]
Author: Yuxing Liu <lyx2022@hust.edu.cn>
Date:   Wed May 3 07:06:07 2023 +0000

    clk: imx: clk-imx8mp: improve error handling in imx8mp_clocks_probe()
    
    [ Upstream commit 878b02d5f3b56cb090dbe2c70c89273be144087f ]
    
    Replace of_iomap() and kzalloc() with devm_of_iomap() and devm_kzalloc()
    which can automatically release the related memory when the device
    or driver is removed or unloaded to avoid potential memory leak.
    
    In this case, iounmap(anatop_base) in line 427,433 are removed
    as manual release is not required.
    
    Besides, referring to clk-imx8mq.c, check the return code of
    of_clk_add_hw_provider, if it returns negtive, print error info
    and unregister hws, which makes the program more robust.
    
    Fixes: 9c140d992676 ("clk: imx: Add support for i.MX8MP clock driver")
    Signed-off-by: Yuxing Liu <lyx2022@hust.edu.cn>
    Reviewed-by: Dongliang Mu <dzm91@hust.edu.cn>
    Reviewed-by: Abel Vesa <abel.vesa@linaro.org>
    Link: https://lore.kernel.org/r/20230503070607.2462-1-lyx2022@hust.edu.cn
    Signed-off-by: Abel Vesa <abel.vesa@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

clk: keystone: sci-clk: check return value of kasprintf() [+ + +]
Author: Claudiu Beznea <claudiu.beznea@microchip.com>
Date:   Tue May 30 12:39:11 2023 +0300

    clk: keystone: sci-clk: check return value of kasprintf()
    
    [ Upstream commit b73ed981da6d25c921aaefa7ca3df85bbd85b7fc ]
    
    kasprintf() returns a pointer to dynamically allocated memory.
    Pointer could be NULL in case allocation fails. Check pointer validity.
    Identified with coccinelle (kmerr.cocci script).
    
    Fixes: b745c0794e2f ("clk: keystone: Add sci-clk driver support")
    Depends-on: 96488c09b0f4 ("clk: keystone: sci-clk: cut down the clock name length")
    Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
    Link: https://lore.kernel.org/r/20230530093913.1656095-7-claudiu.beznea@microchip.com
    Reviewed-by: Tony Lindgren <tony@atomide.com>
    Signed-off-by: Stephen Boyd <sboyd@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

clk: qcom: gcc-ipq6018: Use floor ops for sdcc clocks [+ + +]
Author: Mantas Pucka <mantas@8devices.com>
Date:   Tue Apr 25 12:11:49 2023 +0300

    clk: qcom: gcc-ipq6018: Use floor ops for sdcc clocks
    
    [ Upstream commit 56e5ae0116aef87273cf1812d608645b076e4f02 ]
    
    SDCC clocks must be rounded down to avoid overclocking the controller.
    
    Fixes: d9db07f088af ("clk: qcom: Add ipq6018 Global Clock Controller support")
    Signed-off-by: Mantas Pucka <mantas@8devices.com>
    Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org>
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Link: https://lore.kernel.org/r/1682413909-24927-1-git-send-email-mantas@8devices.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

clk: qcom: ipq6018: fix networking resets [+ + +]
Author: Robert Marko <robimarko@gmail.com>
Date:   Fri May 26 21:08:55 2023 +0200

    clk: qcom: ipq6018: fix networking resets
    
    [ Upstream commit 349b5bed539b491b7894a5186a895751fd8ba6c7 ]
    
    Networking resets in IPQ6018 all use bitmask as they require multiple
    bits to be set and cleared instead of a single bit.
    
    So, current networking resets have the same register and bit 0 set which
    is clearly incorrect.
    
    Fixes: d9db07f088af ("clk: qcom: Add ipq6018 Global Clock Controller support")
    Signed-off-by: Robert Marko <robimarko@gmail.com>
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Link: https://lore.kernel.org/r/20230526190855.2941291-2-robimarko@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

clk: qcom: reset: Allow specifying custom reset delay [+ + +]
Author: Stephan Gerhold <stephan.gerhold@kernkonzept.com>
Date:   Wed Jul 6 15:41:29 2022 +0200

    clk: qcom: reset: Allow specifying custom reset delay
    
    [ Upstream commit 2cb8a39b6781ea23accd1fa93b3ad000d0948aec ]
    
    The amount of time required between asserting and deasserting the reset
    signal can vary depending on the involved hardware component. Sometimes
    1 us might not be enough and a larger delay is necessary to conform to
    the specifications.
    
    Usually this is worked around in the consuming drivers, by replacing
    reset_control_reset() with a sequence of reset_control_assert(), waiting
    for a custom delay, followed by reset_control_deassert().
    
    However, in some cases the driver making use of the reset is generic and
    can be used with different reset controllers. In this case the reset
    time requirement is better handled directly by the reset controller
    driver.
    
    Make this possible by adding an "udelay" field to the qcom_reset_map
    that allows setting a different reset delay (in microseconds).
    
    Signed-off-by: Stephan Gerhold <stephan.gerhold@kernkonzept.com>
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Link: https://lore.kernel.org/r/20220706134132.3623415-4-stephan.gerhold@kernkonzept.com
    Stable-dep-of: 349b5bed539b ("clk: qcom: ipq6018: fix networking resets")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

clk: qcom: reset: support resetting multiple bits [+ + +]
Author: Robert Marko <robimarko@gmail.com>
Date:   Mon Nov 7 14:28:59 2022 +0100

    clk: qcom: reset: support resetting multiple bits
    
    [ Upstream commit 4a5210893625f89723ea210d7c630b730abb37ad ]
    
    This patch adds the support for giving the complete bitmask
    in reset structure and reset operation will use this bitmask
    for all reset operations.
    
    Currently, reset structure only takes a single bit for each reset
    and then calculates the bitmask by using the BIT() macro.
    
    However, this is not sufficient anymore for newer SoC-s like IPQ8074,
    IPQ6018 and more, since their networking resets require multiple bits
    to be asserted in order to properly reset the HW block completely.
    
    So, in order to allow asserting multiple bits add "bitmask" field to
    qcom_reset_map, and then use that bitmask value if its populated in the
    driver, if its not populated, then we just default to existing behaviour
    and calculate the bitmask on the fly.
    
    Signed-off-by: Robert Marko <robimarko@gmail.com>
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Link: https://lore.kernel.org/r/20221107132901.489240-1-robimarko@gmail.com
    Stable-dep-of: 349b5bed539b ("clk: qcom: ipq6018: fix networking resets")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

clk: si5341: Add sysfs properties to allow checking/resetting device faults [+ + +]
Author: Robert Hancock <robert.hancock@calian.com>
Date:   Thu Mar 25 13:26:43 2021 -0600

    clk: si5341: Add sysfs properties to allow checking/resetting device faults
    
    [ Upstream commit 9b13ff4340dff30f361462999a6a122fcc4e473f ]
    
    Add sysfs property files to allow viewing the current and latched states of
    the input present and PLL lock bits, and allow resetting the latched fault
    state. This allows manual checks or automated userspace polling for faults
    occurring after initialization.
    
    Signed-off-by: Robert Hancock <robert.hancock@calian.com>
    Link: https://lore.kernel.org/r/20210325192643.2190069-10-robert.hancock@calian.com
    Signed-off-by: Stephen Boyd <sboyd@kernel.org>
    Stable-dep-of: 2560114c06d7 ("clk: si5341: return error if one synth clock registration fails")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

clk: si5341: Allow different output VDD_SEL values [+ + +]
Author: Robert Hancock <robert.hancock@calian.com>
Date:   Thu Mar 25 13:26:40 2021 -0600

    clk: si5341: Allow different output VDD_SEL values
    
    [ Upstream commit b7bbf6ec4940d1a69811ec354edeeb9751fa8e85 ]
    
    The driver was not previously programming the VDD_SEL values for each
    output to indicate what external VDDO voltage was used for each. Add
    ability to specify a regulator supplying the VDDO pin for each output of
    the device. The voltage of the regulator is used to automatically set the
    VDD_SEL value appropriately. If no regulator is specified and the chip is
    being reconfigured, assume 2.5V which appears to be the chip default.
    
    Signed-off-by: Robert Hancock <robert.hancock@calian.com>
    Link: https://lore.kernel.org/r/20210325192643.2190069-7-robert.hancock@calian.com
    Signed-off-by: Stephen Boyd <sboyd@kernel.org>
    Stable-dep-of: 2560114c06d7 ("clk: si5341: return error if one synth clock registration fails")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

clk: si5341: check return value of {devm_}kasprintf() [+ + +]
Author: Claudiu Beznea <claudiu.beznea@microchip.com>
Date:   Tue May 30 12:39:09 2023 +0300

    clk: si5341: check return value of {devm_}kasprintf()
    
    [ Upstream commit 36e4ef82016a2b785cf2317eade77e76699b7bff ]
    
    {devm_}kasprintf() returns a pointer to dynamically allocated memory.
    Pointer could be NULL in case allocation fails. Check pointer validity.
    Identified with coccinelle (kmerr.cocci script).
    
    Fixes: 3044a860fd09 ("clk: Add Si5341/Si5340 driver")
    Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
    Link: https://lore.kernel.org/r/20230530093913.1656095-5-claudiu.beznea@microchip.com
    Signed-off-by: Stephen Boyd <sboyd@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

clk: si5341: free unused memory on probe failure [+ + +]
Author: Claudiu Beznea <claudiu.beznea@microchip.com>
Date:   Tue May 30 12:39:10 2023 +0300

    clk: si5341: free unused memory on probe failure
    
    [ Upstream commit 267ad94b13c53d8c99a336f0841b1fa1595b1d0f ]
    
    Pointers from synth_clock_names[] should be freed at the end of probe
    either on probe success or failure path.
    
    Fixes: b7bbf6ec4940 ("clk: si5341: Allow different output VDD_SEL values")
    Fixes: 9b13ff4340df ("clk: si5341: Add sysfs properties to allow checking/resetting device faults")
    Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
    Link: https://lore.kernel.org/r/20230530093913.1656095-6-claudiu.beznea@microchip.com
    Signed-off-by: Stephen Boyd <sboyd@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

clk: si5341: return error if one synth clock registration fails [+ + +]
Author: Claudiu Beznea <claudiu.beznea@microchip.com>
Date:   Tue May 30 12:39:08 2023 +0300

    clk: si5341: return error if one synth clock registration fails
    
    [ Upstream commit 2560114c06d7a752b3f4639f28cece58fed11267 ]
    
    In case devm_clk_hw_register() fails for one of synth clocks the probe
    continues. Later on, when registering output clocks which have as parents
    all the synth clocks, in case there is registration failure for at least
    one synth clock the information passed to clk core for registering output
    clock is not right: init.num_parents is fixed but init.parents may contain
    an array with less parents.
    
    Fixes: 3044a860fd09 ("clk: Add Si5341/Si5340 driver")
    Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
    Link: https://lore.kernel.org/r/20230530093913.1656095-4-claudiu.beznea@microchip.com
    Signed-off-by: Stephen Boyd <sboyd@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

clk: tegra: tegra124-emc: Fix potential memory leak [+ + +]
Author: Yuan Can <yuancan@huawei.com>
Date:   Fri Dec 9 09:41:24 2022 +0000

    clk: tegra: tegra124-emc: Fix potential memory leak
    
    [ Upstream commit 53a06e5924c0d43c11379a08c5a78529c3e61595 ]
    
    The tegra and tegra needs to be freed in the error handling path, otherwise
    it will be leaked.
    
    Fixes: 2db04f16b589 ("clk: tegra: Add EMC clock driver")
    Signed-off-by: Yuan Can <yuancan@huawei.com>
    Link: https://lore.kernel.org/r/20221209094124.71043-1-yuancan@huawei.com
    Acked-by: Thierry Reding <treding@nvidia.com>
    Signed-off-by: Stephen Boyd <sboyd@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

clk: ti: clkctrl: check return value of kasprintf() [+ + +]
Author: Claudiu Beznea <claudiu.beznea@microchip.com>
Date:   Tue May 30 12:39:12 2023 +0300

    clk: ti: clkctrl: check return value of kasprintf()
    
    [ Upstream commit bd46cd0b802d9c9576ca78007aa084ae3e74907b ]
    
    kasprintf() returns a pointer to dynamically allocated memory.
    Pointer could be NULL in case allocation fails. Check pointer validity.
    Identified with coccinelle (kmerr.cocci script).
    
    Fixes: 852049594b9a ("clk: ti: clkctrl: convert subclocks to use proper names also")
    Fixes: 6c3090520554 ("clk: ti: clkctrl: Fix hidden dependency to node name")
    Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
    Link: https://lore.kernel.org/r/20230530093913.1656095-8-claudiu.beznea@microchip.com
    Reviewed-by: Tony Lindgren <tony@atomide.com>
    Signed-off-by: Stephen Boyd <sboyd@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

clk: vc5: check memory returned by kasprintf() [+ + +]
Author: Claudiu Beznea <claudiu.beznea@microchip.com>
Date:   Tue May 30 12:39:06 2023 +0300

    clk: vc5: check memory returned by kasprintf()
    
    [ Upstream commit 144601f6228de5598f03e693822b60a95c367a17 ]
    
    kasprintf() returns a pointer to dynamically allocated memory.
    Pointer could be NULL in case allocation fails. Check pointer validity.
    Identified with coccinelle (kmerr.cocci script).
    
    Fixes: f491276a5168 ("clk: vc5: Allow Versaclock driver to support multiple instances")
    Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
    Link: https://lore.kernel.org/r/20230530093913.1656095-2-claudiu.beznea@microchip.com
    Reviewed-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
    Signed-off-by: Stephen Boyd <sboyd@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
clocksource/drivers/cadence-ttc: Fix memory leak in ttc_timer_probe [+ + +]
Author: Feng Mingxi <m202271825@hust.edu.cn>
Date:   Tue Apr 25 06:56:11 2023 +0000

    clocksource/drivers/cadence-ttc: Fix memory leak in ttc_timer_probe
    
    [ Upstream commit 8b5bf64c89c7100c921bd807ba39b2eb003061ab ]
    
    Smatch reports:
    drivers/clocksource/timer-cadence-ttc.c:529 ttc_timer_probe()
    warn: 'timer_baseaddr' from of_iomap() not released on lines: 498,508,516.
    
    timer_baseaddr may have the problem of not being released after use,
    I replaced it with the devm_of_iomap() function and added the clk_put()
    function to cleanup the "clk_ce" and "clk_cs".
    
    Fixes: e932900a3279 ("arm: zynq: Use standard timer binding")
    Fixes: 70504f311d4b ("clocksource/drivers/cadence_ttc: Convert init function to return error")
    Signed-off-by: Feng Mingxi <m202271825@hust.edu.cn>
    Reviewed-by: Dongliang Mu <dzm91@hust.edu.cn>
    Acked-by: Michal Simek <michal.simek@amd.com>
    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
    Link: https://lore.kernel.org/r/20230425065611.702917-1-m202271825@hust.edu.cn
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
coresight: Fix loss of connection info when a module is unloaded [+ + +]
Author: James Clark <james.clark@arm.com>
Date:   Tue Apr 25 15:35:28 2023 +0100

    coresight: Fix loss of connection info when a module is unloaded
    
    [ Upstream commit c45b2835e7b205783bdfe08cc98fa86a7c5eeb74 ]
    
    child_fwnode should be a read only property based on the DT or ACPI. If
    it's cleared on the parent device when a child is unloaded, then when
    the child is loaded again the connection won't be remade.
    
    child_dev should be cleared instead which signifies that the connection
    should be remade when the child_fwnode registers a new coresight_device.
    
    Similarly the reference count shouldn't be decremented as long as the
    parent device exists. The correct place to drop the reference is in
    coresight_release_platform_data() which is already done.
    
    Reproducible on Juno with the following steps:
    
      # load all coresight modules.
      $ cd /sys/bus/coresight/devices/
      $ echo 1 > tmc_etr0/enable_sink
      $ echo 1 > etm0/enable_source
      # Works fine ^
    
      $ echo 0 > etm0/enable_source
      $ rmmod coresight-funnel
      $ modprobe coresight-funnel
      $ echo 1 > etm0/enable_source
      -bash: echo: write error: Invalid argument
    
    Fixes: 37ea1ffddffa ("coresight: Use fwnode handle instead of device names")
    Fixes: 2af89ebacf29 ("coresight: Clear the connection field properly")
    Tested-by: Suzuki K Poulose <suzuki.poulose@arm.com>
    Reviewed-by: Mike Leach <mike.leach@linaro.org>
    Signed-off-by: James Clark <james.clark@arm.com>
    Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
    Link: https://lore.kernel.org/r/20230425143542.2305069-2-james.clark@arm.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
cpufreq: intel_pstate: Fix energy_performance_preference for passive [+ + +]
Author: Tero Kristo <tero.kristo@linux.intel.com>
Date:   Wed Jun 21 09:58:39 2023 +0300

    cpufreq: intel_pstate: Fix energy_performance_preference for passive
    
    [ Upstream commit 03f44ffb3d5be2fceda375d92c70ab6de4df7081 ]
    
    If the intel_pstate driver is set to passive mode, then writing the
    same value to the energy_performance_preference sysfs twice will fail.
    This is caused by the wrong return value used (index of the matched
    energy_perf_string), instead of the length of the passed in parameter.
    Fix by forcing the internal return value to zero when the same
    preference is passed in by user. This same issue is not present when
    active mode is used for the driver.
    
    Fixes: f6ebbcf08f37 ("cpufreq: intel_pstate: Implement passive mode with HWP enabled")
    Reported-by: Niklas Neronin <niklas.neronin@intel.com>
    Signed-off-by: Tero Kristo <tero.kristo@linux.intel.com>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
crypto: marvell/cesa - Fix type mismatch warning [+ + +]
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Tue May 23 10:33:04 2023 +0200

    crypto: marvell/cesa - Fix type mismatch warning
    
    [ Upstream commit efbc7764c4446566edb76ca05e903b5905673d2e ]
    
    Commit df8fc4e934c1 ("kbuild: Enable -fstrict-flex-arrays=3") uncovered
    a type mismatch in cesa 3des support that leads to a memcpy beyond the
    end of a structure:
    
    In function 'fortify_memcpy_chk',
        inlined from 'mv_cesa_des3_ede_setkey' at drivers/crypto/marvell/cesa/cipher.c:307:2:
    include/linux/fortify-string.h:583:25: error: call to '__write_overflow_field' declared with attribute warning: detected write beyond size of field (1st parameter); maybe use struct_group()? [-Werror=attribute-warning]
      583 |                         __write_overflow_field(p_size_field, size);
          |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    This is probably harmless as the actual data that is copied has the correct
    type, but clearly worth fixing nonetheless.
    
    Fixes: 4ada48397823 ("crypto: marvell/cesa - add Triple-DES support")
    Cc: Kees Cook <keescook@chromium.org>
    Cc: Gustavo A. R. Silva <gustavoars@kernel.org>
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Reviewed-by: Kees Cook <keescook@chromium.org>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

crypto: nx - fix build warnings when DEBUG_FS is not enabled [+ + +]
Author: Randy Dunlap <rdunlap@infradead.org>
Date:   Fri May 19 15:33:34 2023 -0700

    crypto: nx - fix build warnings when DEBUG_FS is not enabled
    
    [ Upstream commit b04b076fb56560b39d695ac3744db457e12278fd ]
    
    Fix build warnings when DEBUG_FS is not enabled by using an empty
    do-while loop instead of a value:
    
    In file included from ../drivers/crypto/nx/nx.c:27:
    ../drivers/crypto/nx/nx.c: In function 'nx_register_algs':
    ../drivers/crypto/nx/nx.h:173:33: warning: statement with no effect [-Wunused-value]
      173 | #define NX_DEBUGFS_INIT(drv)    (0)
    ../drivers/crypto/nx/nx.c:573:9: note: in expansion of macro 'NX_DEBUGFS_INIT'
      573 |         NX_DEBUGFS_INIT(&nx_driver);
    ../drivers/crypto/nx/nx.c: In function 'nx_remove':
    ../drivers/crypto/nx/nx.h:174:33: warning: statement with no effect [-Wunused-value]
      174 | #define NX_DEBUGFS_FINI(drv)    (0)
    ../drivers/crypto/nx/nx.c:793:17: note: in expansion of macro 'NX_DEBUGFS_FINI'
      793 |                 NX_DEBUGFS_FINI(&nx_driver);
    
    Also, there is no need to build nx_debugfs.o when DEBUG_FS is not
    enabled, so change the Makefile to accommodate that.
    
    Fixes: ae0222b7289d ("powerpc/crypto: nx driver code supporting nx encryption")
    Fixes: aef7b31c8833 ("powerpc/crypto: Build files for the nx device driver")
    Signed-off-by: Randy Dunlap <rdunlap@infradead.org>
    Cc: Breno Leitão <leitao@debian.org>
    Cc: Nayna Jain <nayna@linux.ibm.com>
    Cc: Paulo Flabiano Smorigo <pfsmorigo@gmail.com>
    Cc: Herbert Xu <herbert@gondor.apana.org.au>
    Cc: "David S. Miller" <davem@davemloft.net>
    Cc: linux-crypto@vger.kernel.org
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: Nicholas Piggin <npiggin@gmail.com>
    Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
    Cc: linuxppc-dev@lists.ozlabs.org
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
dax: Fix dax_mapping_release() use after free [+ + +]
Author: Dan Williams <dan.j.williams@intel.com>
Date:   Fri Jun 2 23:13:54 2023 -0700

    dax: Fix dax_mapping_release() use after free
    
    [ Upstream commit 6d24b170a9db0456f577b1ab01226a2254c016a8 ]
    
    A CONFIG_DEBUG_KOBJECT_RELEASE test of removing a device-dax region
    provider (like modprobe -r dax_hmem) yields:
    
     kobject: 'mapping0' (ffff93eb460e8800): kobject_release, parent 0000000000000000 (delayed 2000)
     [..]
     DEBUG_LOCKS_WARN_ON(1)
     WARNING: CPU: 23 PID: 282 at kernel/locking/lockdep.c:232 __lock_acquire+0x9fc/0x2260
     [..]
     RIP: 0010:__lock_acquire+0x9fc/0x2260
     [..]
     Call Trace:
      <TASK>
     [..]
      lock_acquire+0xd4/0x2c0
      ? ida_free+0x62/0x130
      _raw_spin_lock_irqsave+0x47/0x70
      ? ida_free+0x62/0x130
      ida_free+0x62/0x130
      dax_mapping_release+0x1f/0x30
      device_release+0x36/0x90
      kobject_delayed_cleanup+0x46/0x150
    
    Due to attempting ida_free() on an ida object that has already been
    freed. Devices typically only hold a reference on their parent while
    registered. If a child needs a parent object to complete its release it
    needs to hold a reference that it drops from its release callback.
    Arrange for a dax_mapping to pin its parent dev_dax instance until
    dax_mapping_release().
    
    Fixes: 0b07ce872a9e ("device-dax: introduce 'mapping' devices")
    Signed-off-by: Dan Williams <dan.j.williams@intel.com>
    Link: https://lore.kernel.org/r/168577283412.1672036.16111545266174261446.stgit@dwillia2-xfh.jf.intel.com
    Reviewed-by: Dave Jiang <dave.jiang@intel.com>
    Reviewed-by: Fan Ni <fan.ni@samsung.com>
    Reviewed-by: Ira Weiny <ira.weiny@intel.com>
    Signed-off-by: Vishal Verma <vishal.l.verma@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

dax: Introduce alloc_dev_dax_id() [+ + +]
Author: Dan Williams <dan.j.williams@intel.com>
Date:   Fri Jun 2 23:14:05 2023 -0700

    dax: Introduce alloc_dev_dax_id()
    
    [ Upstream commit 70aab281e18c68a1284bc387de127c2fc0bed3f8 ]
    
    The reference counting of dax_region objects is needlessly complicated,
    has lead to confusion [1], and has hidden a bug [2]. Towards cleaning up
    that mess introduce alloc_dev_dax_id() to minimize the holding of a
    dax_region reference to only what dev_dax_release() needs, the
    dax_region->ida.
    
    Part of the reason for the mess was the design to dereference a
    dax_region in all cases in free_dev_dax_id() even if the id was
    statically assigned by the upper level dax_region driver. Remove the
    need to call "is_static(dax_region)" by tracking whether the id is
    dynamic directly in the dev_dax instance itself.
    
    With that flag the dax_region pinning and release per dev_dax instance
    can move to alloc_dev_dax_id() and free_dev_dax_id() respectively.
    
    A follow-on cleanup address the unnecessary references in the dax_region
    setup and drivers.
    
    Fixes: 0f3da14a4f05 ("device-dax: introduce 'seed' devices")
    Link: http://lore.kernel.org/r/20221203095858.612027-1-liuyongqiang13@huawei.com [1]
    Link: http://lore.kernel.org/r/3cf0890b-4eb0-e70e-cd9c-2ecc3d496263@hpe.com [2]
    Reported-by: Yongqiang Liu <liuyongqiang13@huawei.com>
    Reported-by: Paul Cassella <cassella@hpe.com>
    Reported-by: Ira Weiny <ira.weiny@intel.com>
    Signed-off-by: Dan Williams <dan.j.williams@intel.com>
    Link: https://lore.kernel.org/r/168577284563.1672036.13493034988900989554.stgit@dwillia2-xfh.jf.intel.com
    Reviewed-by: Ira Weiny <ira.weiny@intel.com>
    Signed-off-by: Vishal Verma <vishal.l.verma@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
debugobjects: Recheck debug_objects_enabled before reporting [+ + +]
Author: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Date:   Wed Jun 7 19:19:02 2023 +0900

    debugobjects: Recheck debug_objects_enabled before reporting
    
    [ Upstream commit 8b64d420fe2450f82848178506d3e3a0bd195539 ]
    
    syzbot is reporting false a positive ODEBUG message immediately after
    ODEBUG was disabled due to OOM.
    
      [ 1062.309646][T22911] ODEBUG: Out of memory. ODEBUG disabled
      [ 1062.886755][ T5171] ------------[ cut here ]------------
      [ 1062.892770][ T5171] ODEBUG: assert_init not available (active state 0) object: ffffc900056afb20 object type: timer_list hint: process_timeout+0x0/0x40
    
      CPU 0 [ T5171]                CPU 1 [T22911]
      --------------                --------------
      debug_object_assert_init() {
        if (!debug_objects_enabled)
          return;
        db = get_bucket(addr);
                                    lookup_object_or_alloc() {
                                      debug_objects_enabled = 0;
                                      return NULL;
                                    }
                                    debug_objects_oom() {
                                      pr_warn("Out of memory. ODEBUG disabled\n");
                                      // all buckets get emptied here, and
                                    }
        lookup_object_or_alloc(addr, db, descr, false, true) {
          // this bucket is already empty.
          return ERR_PTR(-ENOENT);
        }
        // Emits false positive warning.
        debug_print_object(&o, "assert_init");
      }
    
    Recheck debug_object_enabled in debug_print_object() to avoid that.
    
    Reported-by: syzbot <syzbot+7937ba6a50bdd00fffdf@syzkaller.appspotmail.com>
    Suggested-by: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Link: https://lore.kernel.org/r/492fe2ae-5141-d548-ebd5-62f5fe2e57f7@I-love.SAKURA.ne.jp
    Closes: https://syzkaller.appspot.com/bug?extid=7937ba6a50bdd00fffdf
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
devlink: report devlink_port_type_warn source device [+ + +]
Author: Petr Oros <poros@redhat.com>
Date:   Thu Jun 15 11:54:47 2023 +0200

    devlink: report devlink_port_type_warn source device
    
    [ Upstream commit a52305a81d6bb74b90b400dfa56455d37872fe4b ]
    
    devlink_port_type_warn is scheduled for port devlink and warning
    when the port type is not set. But from this warning it is not easy
    found out which device (driver) has no devlink port set.
    
    [ 3709.975552] Type was not set for devlink port.
    [ 3709.975579] WARNING: CPU: 1 PID: 13092 at net/devlink/leftover.c:6775 devlink_port_type_warn+0x11/0x20
    [ 3709.993967] Modules linked in: openvswitch nf_conncount nf_nat nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 nfnetlink bluetooth rpcsec_gss_krb5 auth_rpcgss nfsv4 dns_resolver nfs lockd grace fscache netfs vhost_net vhost vhost_iotlb tap tun bridge stp llc qrtr intel_rapl_msr intel_rapl_common i10nm_edac nfit libnvdimm x86_pkg_temp_thermal mlx5_ib intel_powerclamp coretemp dell_wmi ledtrig_audio sparse_keymap ipmi_ssif kvm_intel ib_uverbs rfkill ib_core video kvm iTCO_wdt acpi_ipmi intel_vsec irqbypass ipmi_si iTCO_vendor_support dcdbas ipmi_devintf mei_me ipmi_msghandler rapl mei intel_cstate isst_if_mmio isst_if_mbox_pci dell_smbios intel_uncore isst_if_common i2c_i801 dell_wmi_descriptor wmi_bmof i2c_smbus intel_pch_thermal pcspkr acpi_power_meter xfs libcrc32c sd_mod sg nvme_tcp mgag200 i2c_algo_bit nvme_fabrics drm_shmem_helper drm_kms_helper nvme syscopyarea ahci sysfillrect sysimgblt nvme_core fb_sys_fops crct10dif_pclmul libahci mlx5_core sfc crc32_pclmul nvme_common drm
    [ 3709.994030]  crc32c_intel mtd t10_pi mlxfw libata tg3 mdio megaraid_sas psample ghash_clmulni_intel pci_hyperv_intf wmi dm_multipath sunrpc dm_mirror dm_region_hash dm_log dm_mod be2iscsi bnx2i cnic uio cxgb4i cxgb4 tls libcxgbi libcxgb qla4xxx iscsi_boot_sysfs iscsi_tcp libiscsi_tcp libiscsi scsi_transport_iscsi fuse
    [ 3710.108431] CPU: 1 PID: 13092 Comm: kworker/1:1 Kdump: loaded Not tainted 5.14.0-319.el9.x86_64 #1
    [ 3710.108435] Hardware name: Dell Inc. PowerEdge R750/0PJ80M, BIOS 1.8.2 09/14/2022
    [ 3710.108437] Workqueue: events devlink_port_type_warn
    [ 3710.108440] RIP: 0010:devlink_port_type_warn+0x11/0x20
    [ 3710.108443] Code: 84 76 fe ff ff 48 c7 03 20 0e 1a ad 31 c0 e9 96 fd ff ff 66 0f 1f 44 00 00 0f 1f 44 00 00 48 c7 c7 18 24 4e ad e8 ef 71 62 ff <0f> 0b c3 cc cc cc cc 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 f6 87
    [ 3710.108445] RSP: 0018:ff3b6d2e8b3c7e90 EFLAGS: 00010282
    [ 3710.108447] RAX: 0000000000000000 RBX: ff366d6580127080 RCX: 0000000000000027
    [ 3710.108448] RDX: 0000000000000027 RSI: 00000000ffff86de RDI: ff366d753f41f8c8
    [ 3710.108449] RBP: ff366d658ff5a0c0 R08: ff366d753f41f8c0 R09: ff3b6d2e8b3c7e18
    [ 3710.108450] R10: 0000000000000001 R11: 0000000000000023 R12: ff366d753f430600
    [ 3710.108451] R13: ff366d753f436900 R14: 0000000000000000 R15: ff366d753f436905
    [ 3710.108452] FS:  0000000000000000(0000) GS:ff366d753f400000(0000) knlGS:0000000000000000
    [ 3710.108453] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [ 3710.108454] CR2: 00007f1c57bc74e0 CR3: 000000111d26a001 CR4: 0000000000773ee0
    [ 3710.108456] PKRU: 55555554
    [ 3710.108457] Call Trace:
    [ 3710.108458]  <TASK>
    [ 3710.108459]  process_one_work+0x1e2/0x3b0
    [ 3710.108466]  ? rescuer_thread+0x390/0x390
    [ 3710.108468]  worker_thread+0x50/0x3a0
    [ 3710.108471]  ? rescuer_thread+0x390/0x390
    [ 3710.108473]  kthread+0xdd/0x100
    [ 3710.108477]  ? kthread_complete_and_exit+0x20/0x20
    [ 3710.108479]  ret_from_fork+0x1f/0x30
    [ 3710.108485]  </TASK>
    [ 3710.108486] ---[ end trace 1b4b23cd0c65d6a0 ]---
    
    After patch:
    [  402.473064] ice 0000:41:00.0: Type was not set for devlink port.
    [  402.473064] ice 0000:41:00.1: Type was not set for devlink port.
    
    Signed-off-by: Petr Oros <poros@redhat.com>
    Reviewed-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
    Reviewed-by: Jakub Kicinski <kuba@kernel.org>
    Link: https://lore.kernel.org/r/20230615095447.8259-1-poros@redhat.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drivers: meson: secure-pwrc: always enable DMA domain [+ + +]
Author: Alexey Romanov <avromanov@sberdevices.ru>
Date:   Sat Jun 10 12:04:14 2023 +0300

    drivers: meson: secure-pwrc: always enable DMA domain
    
    [ Upstream commit 0bb4644d583789c97e74d3e3047189f0c59c4742 ]
    
    Starting from commit e45f243409db ("firmware: meson_sm:
    populate platform devices from sm device tree data") pwrc
    is probed successfully and disables unused pwr domains.
    By A1 SoC family design, any TEE requires DMA pwr domain
    always enabled.
    
    Fixes: b3dde5013e13 ("soc: amlogic: Add support for Secure power domains controller")
    Signed-off-by: Alexey Romanov <avromanov@sberdevices.ru>
    Acked-by: Neil Armstrong <neil.armstrong@linaro.org>
    Link: https://lore.kernel.org/r/20230610090414.90529-1-avromanov@sberdevices.ru
    [narmstrong: added fixes tag]
    Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/amd/display: Correct `DMUB_FW_VERSION` macro [+ + +]
Author: Mario Limonciello <mario.limonciello@amd.com>
Date:   Fri Jun 23 10:05:19 2023 -0500

    drm/amd/display: Correct `DMUB_FW_VERSION` macro
    
    commit 274d205cb59f43815542e04b42a9e6d0b9b95eff upstream.
    
    The `DMUB_FW_VERSION` macro has a mistake in that the revision field
    is off by one byte. The last byte is typically used for other purposes
    and not a revision.
    
    Cc: stable@vger.kernel.org
    Cc: Sean Wang <sean.ns.wang@amd.com>
    Cc: Marc Rossi <Marc.Rossi@amd.com>
    Cc: Hamza Mahfooz <Hamza.Mahfooz@amd.com>
    Cc: Tsung-hua (Ryan) Lin <Tsung-hua.Lin@amd.com>
    Reviewed-by: Leo Li <sunpeng.li@amd.com>
    Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amd/display: Explicitly specify update type per plane info change [+ + +]
Author: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Date:   Thu May 2 13:21:48 2019 -0400

    drm/amd/display: Explicitly specify update type per plane info change
    
    [ Upstream commit 710cc1e7cd461446a9325c9bd1e9a54daa462952 ]
    
    [Why]
    The bit for flip addr is being set causing the determination for
    FAST vs MEDIUM to always return MEDIUM when plane info is provided
    as a surface update. This causes extreme stuttering for the typical
    atomic update path on Linux.
    
    [How]
    Don't use update_flags->raw for determining FAST vs MEDIUM. It's too
    fragile to changes like this.
    
    Explicitly specify the update type per update flag instead. It's not
    as clever as checking the bits itself but at least it's correct.
    
    Fixes: aa5fdb1ab5b6 ("drm/amd/display: Explicitly specify update type per plane info change")
    Reviewed-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
    Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
    Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/amdgpu: Validate VM ioctl flags. [+ + +]
Author: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Date:   Sat May 13 14:51:00 2023 +0200

    drm/amdgpu: Validate VM ioctl flags.
    
    commit a2b308044dcaca8d3e580959a4f867a1d5c37fac upstream.
    
    None have been defined yet, so reject anybody setting any. Mesa sets
    it to 0 anyway.
    
    Signed-off-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amdkfd: Fix potential deallocation of previously deallocated memory. [+ + +]
Author: Daniil Dulov <d.dulov@aladdin.ru>
Date:   Thu May 11 04:23:14 2023 -0700

    drm/amdkfd: Fix potential deallocation of previously deallocated memory.
    
    [ Upstream commit cabbdea1f1861098991768d7bbf5a49ed1608213 ]
    
    Pointer mqd_mem_obj can be deallocated in kfd_gtt_sa_allocate().
    The function then returns non-zero value, which causes the second deallocation.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: d1f8f0d17d40 ("drm/amdkfd: Move non-sdma mqd allocation out of init_mqd")
    Signed-off-by: Daniil Dulov <d.dulov@aladdin.ru>
    Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com>
    Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/atomic: Allow vblank-enabled + self-refresh "disable" [+ + +]
Author: Brian Norris <briannorris@chromium.org>
Date:   Mon Jan 9 17:18:16 2023 -0800

    drm/atomic: Allow vblank-enabled + self-refresh "disable"
    
    commit 9d0e3cac3517942a6e00eeecfe583a98715edb16 upstream.
    
    The self-refresh helper framework overloads "disable" to sometimes mean
    "go into self-refresh mode," and this mode activates automatically
    (e.g., after some period of unchanging display output). In such cases,
    the display pipe is still considered "on", and user-space is not aware
    that we went into self-refresh mode. Thus, users may expect that
    vblank-related features (such as DRM_IOCTL_WAIT_VBLANK) still work
    properly.
    
    However, we trigger the WARN_ONCE() here if a CRTC driver tries to leave
    vblank enabled.
    
    Add a different expectation: that CRTCs *should* leave vblank enabled
    when going into self-refresh.
    
    This patch is preparation for another patch -- "drm/rockchip: vop: Leave
    vblank enabled in self-refresh" -- which resolves conflicts between the
    above self-refresh behavior and the API tests in IGT's kms_vblank test
    module.
    
    == Some alternatives discussed: ==
    
    It's likely that on many display controllers, vblank interrupts will
    turn off when the CRTC is disabled, and so in some cases, self-refresh
    may not support vblank. To support such cases, we might consider
    additions to the generic helpers such that we fire vblank events based
    on a timer.
    
    However, there is currently only one driver using the common
    self-refresh helpers (i.e., rockchip), and at least as of commit
    bed030a49f3e ("drm/rockchip: Don't fully disable vop on self refresh"),
    the CRTC hardware is powered enough to continue to generate vblank
    interrupts.
    
    So we chose the simpler option of leaving vblank interrupts enabled. We
    can reevaluate this decision and perhaps augment the helpers if/when we
    gain a second driver that has different requirements.
    
    v3:
     * include discussion summary
    
    v2:
     * add 'ret != 0' warning case for self-refresh
     * describe failing test case and relation to drm/rockchip patch better
    
    Cc: <stable@vger.kernel.org> # dependency for "drm/rockchip: vop: Leave
                                 # vblank enabled in self-refresh"
    Signed-off-by: Brian Norris <briannorris@chromium.org>
    Signed-off-by: Sean Paul <seanpaul@chromium.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20230109171809.v3.1.I3904f697863649eb1be540ecca147a66e42bfad7@changeid
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/atomic: Fix potential use-after-free in nonblocking commits [+ + +]
Author: Daniel Vetter <daniel.vetter@ffwll.ch>
Date:   Fri Jul 21 15:58:38 2023 +0200

    drm/atomic: Fix potential use-after-free in nonblocking commits
    
    commit 4e076c73e4f6e90816b30fcd4a0d7ab365087255 upstream.
    
    This requires a bit of background.  Properly done a modeset driver's
    unload/remove sequence should be
    
            drm_dev_unplug();
            drm_atomic_helper_shutdown();
            drm_dev_put();
    
    The trouble is that the drm_dev_unplugged() checks are by design racy,
    they do not synchronize against all outstanding ioctl.  This is because
    those ioctl could block forever (both for modeset and for driver
    specific ioctls), leading to deadlocks in hotunplug.  Instead the code
    sections that touch the hardware need to be annotated with
    drm_dev_enter/exit, to avoid accessing hardware resources after the
    unload/remove has finished.
    
    To avoid use-after-free issues all the involved userspace visible
    objects are supposed to hold a reference on the underlying drm_device,
    like drm_file does.
    
    The issue now is that we missed one, the atomic modeset ioctl can be run
    in a nonblocking fashion, and in that case it cannot rely on the implied
    drm_device reference provided by the ioctl calling context.  This can
    result in a use-after-free if an nonblocking atomic commit is carefully
    raced against a driver unload.
    
    Fix this by unconditionally grabbing a drm_device reference for any
    drm_atomic_state structures.  Strictly speaking this isn't required for
    blocking commits and TEST_ONLY calls, but it's the simpler approach.
    
    Thanks to shanzhulig for the initial idea of grabbing an unconditional
    reference, I just added comments, a condensed commit message and fixed a
    minor potential issue in where exactly we drop the final reference.
    
    Reported-by: shanzhulig <shanzhulig@gmail.com>
    Suggested-by: shanzhulig <shanzhulig@gmail.com>
    Reviewed-by: Maxime Ripard <mripard@kernel.org>
    Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
    Cc: Thomas Zimmermann <tzimmermann@suse.de>
    Cc: David Airlie <airlied@gmail.com>
    Cc: stable@kernel.org
    Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
    Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/bridge: tc358768: Add atomic_get_input_bus_fmts() implementation [+ + +]
Author: Francesco Dolcini <francesco.dolcini@toradex.com>
Date:   Thu Mar 30 11:59:41 2023 +0200

    drm/bridge: tc358768: Add atomic_get_input_bus_fmts() implementation
    
    [ Upstream commit cec5ccef85bd0128cf895612de54a9d21d2015d0 ]
    
    Add atomic_get_input_bus_fmts() implementation, tc358768 has a parallel
    RGB input interface with the actual bus format depending on the amount
    of parallel input data lines.
    
    Without this change when the tc358768 is used with less than 24bit the
    color mapping is completely wrong.
    
    Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
    Reviewed-by: Robert Foss <rfoss@kernel.org>
    Signed-off-by: Robert Foss <rfoss@kernel.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20230330095941.428122-7-francesco@dolcini.it
    Stable-dep-of: ee18698e212b ("drm/bridge: tc358768: fix TCLK_TRAILCNT computation")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/bridge: tc358768: always enable HS video mode [+ + +]
Author: Francesco Dolcini <francesco.dolcini@toradex.com>
Date:   Thu Apr 27 16:29:26 2023 +0200

    drm/bridge: tc358768: always enable HS video mode
    
    [ Upstream commit 75a8aeac2573ab258c53676eba9b3796ea691988 ]
    
    Always enable HS video mode setting the TXMD bit, without this change no
    video output is present with DSI sinks that are setting
    MIPI_DSI_MODE_LPM flag (tested with LT8912B DSI-HDMI bridge).
    
    Previously the driver was enabling HS mode only when the DSI sink was
    not explicitly setting the MIPI_DSI_MODE_LPM, however this is not
    correct.
    
    The MIPI_DSI_MODE_LPM is supposed to indicate that the sink is willing
    to receive data in low power mode, however clearing the
    TC358768_DSI_CONTROL_TXMD bit will make the TC358768 send video in
    LP mode that is not the intended behavior.
    
    Fixes: ff1ca6397b1d ("drm/bridge: Add tc358768 driver")
    Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
    Reviewed-by: Robert Foss <rfoss@kernel.org>
    Signed-off-by: Robert Foss <rfoss@kernel.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20230427142934.55435-2-francesco@dolcini.it
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/bridge: tc358768: fix PLL parameters computation [+ + +]
Author: Francesco Dolcini <francesco.dolcini@toradex.com>
Date:   Thu Apr 27 16:29:27 2023 +0200

    drm/bridge: tc358768: fix PLL parameters computation
    
    [ Upstream commit 6a4020b4c63911977aaf8047f904a300d15de739 ]
    
    According to Toshiba documentation the PLL input clock after the divider
    should be not less than 4MHz, fix the PLL parameters computation
    accordingly.
    
    Fixes: ff1ca6397b1d ("drm/bridge: Add tc358768 driver")
    Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
    Reviewed-by: Robert Foss <rfoss@kernel.org>
    Signed-off-by: Robert Foss <rfoss@kernel.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20230427142934.55435-3-francesco@dolcini.it
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/bridge: tc358768: fix PLL target frequency [+ + +]
Author: Francesco Dolcini <francesco.dolcini@toradex.com>
Date:   Thu Apr 27 16:29:28 2023 +0200

    drm/bridge: tc358768: fix PLL target frequency
    
    [ Upstream commit ffd2e4bbea626d565b9817312b0fcfb382fecb88 ]
    
    Correctly compute the PLL target frequency, the current formula works
    correctly only when the input bus width is 24bit, actually to properly
    compute the PLL target frequency what is relevant is the bits-per-pixel
    on the DSI link.
    
    No regression expected since the DSI format is currently hard-coded as
    MIPI_DSI_FMT_RGB888.
    
    Fixes: ff1ca6397b1d ("drm/bridge: Add tc358768 driver")
    Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
    Reviewed-by: Robert Foss <rfoss@kernel.org>
    Signed-off-by: Robert Foss <rfoss@kernel.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20230427142934.55435-4-francesco@dolcini.it
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/bridge: tc358768: fix TCLK_TRAILCNT computation [+ + +]
Author: Francesco Dolcini <francesco.dolcini@toradex.com>
Date:   Thu Apr 27 16:29:30 2023 +0200

    drm/bridge: tc358768: fix TCLK_TRAILCNT computation
    
    [ Upstream commit ee18698e212b1659dd0850d7e2ae0f22e16ed3d3 ]
    
    Correct computation of TCLK_TRAILCNT register.
    
    The driver does not implement non-continuous clock mode, so the actual
    value doesn't make a practical difference yet. However this change also
    ensures that the value does not write to reserved registers bits in case
    of under/overflow.
    
    This register must be set to a value that ensures that
    
    TCLK-TRAIL > 60ns
     and
    TEOT <= (105 ns + 12 x UI)
    
    with the actual value of TCLK-TRAIL being
    
    (TCLK_TRAILCNT + (1 to 2)) xHSByteClkCycle +
     (2 + (1 to 2)) * HSBYTECLKCycle - (PHY output delay)
    
    with PHY output delay being about
    
    (2 to 3) x MIPIBitClk cycle in the BitClk conversion.
    
    Fixes: ff1ca6397b1d ("drm/bridge: Add tc358768 driver")
    Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
    Reviewed-by: Robert Foss <rfoss@kernel.org>
    Signed-off-by: Robert Foss <rfoss@kernel.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20230427142934.55435-2-francesco@dolcini.it
    Link: https://patchwork.freedesktop.org/patch/msgid/20230427142934.55435-3-francesco@dolcini.it
    Link: https://patchwork.freedesktop.org/patch/msgid/20230427142934.55435-4-francesco@dolcini.it
    Link: https://patchwork.freedesktop.org/patch/msgid/20230427142934.55435-5-francesco@dolcini.it
    Link: https://patchwork.freedesktop.org/patch/msgid/20230427142934.55435-2-francesco@dolcini.it
    Link: https://patchwork.freedesktop.org/patch/msgid/20230427142934.55435-3-francesco@dolcini.it
    Link: https://patchwork.freedesktop.org/patch/msgid/20230427142934.55435-4-francesco@dolcini.it
    Link: https://patchwork.freedesktop.org/patch/msgid/20230427142934.55435-5-francesco@dolcini.it
    Link: https://patchwork.freedesktop.org/patch/msgid/20230427142934.55435-2-francesco@dolcini.it
    Link: https://patchwork.freedesktop.org/patch/msgid/20230427142934.55435-3-francesco@dolcini.it
    Link: https://patchwork.freedesktop.org/patch/msgid/20230427142934.55435-4-francesco@dolcini.it
    Link: https://patchwork.freedesktop.org/patch/msgid/20230427142934.55435-5-francesco@dolcini.it
    Link: https://patchwork.freedesktop.org/patch/msgid/20230427142934.55435-2-francesco@dolcini.it
    Link: https://patchwork.freedesktop.org/patch/msgid/20230427142934.55435-3-francesco@dolcini.it
    Link: https://patchwork.freedesktop.org/patch/msgid/20230427142934.55435-4-francesco@dolcini.it
    Link: https://patchwork.freedesktop.org/patch/msgid/20230427142934.55435-5-francesco@dolcini.it
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/bridge: tc358768: fix TCLK_ZEROCNT computation [+ + +]
Author: Francesco Dolcini <francesco.dolcini@toradex.com>
Date:   Thu Apr 27 16:29:29 2023 +0200

    drm/bridge: tc358768: fix TCLK_ZEROCNT computation
    
    [ Upstream commit f9cf811374f42fca31ac34aaf59ee2ae72b89879 ]
    
    Correct computation of TCLK_ZEROCNT register.
    
    This register must be set to a value that ensure that
    (TCLK-PREPARECNT + TCLK-ZERO) > 300ns
    
    with the actual value of (TCLK-PREPARECNT + TCLK-ZERO) being
    
    (1 to 2) + (TCLK_ZEROCNT + 1)) x HSByteClkCycle + (PHY output delay)
    
    with PHY output delay being about
    
    (2 to 3) x MIPIBitClk cycle in the BitClk conversion.
    
    Fixes: ff1ca6397b1d ("drm/bridge: Add tc358768 driver")
    Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
    Reviewed-by: Robert Foss <rfoss@kernel.org>
    Signed-off-by: Robert Foss <rfoss@kernel.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20230427142934.55435-5-francesco@dolcini.it
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/bridge: tc358768: fix THS_TRAILCNT computation [+ + +]
Author: Francesco Dolcini <francesco.dolcini@toradex.com>
Date:   Thu Apr 27 16:29:33 2023 +0200

    drm/bridge: tc358768: fix THS_TRAILCNT computation
    
    [ Upstream commit bac7842cd179572e8e0fc2d7b5254e40c6e9e057 ]
    
    Correct computation of THS_TRAILCNT register.
    
    This register must be set to a value that ensure that
    THS_TRAIL > 60 ns + 4 x UI
     and
    THS_TRAIL > 8 x UI
     and
    THS_TRAIL < TEOT
     with
    TEOT = 105 ns + (12 x UI)
    
    with the actual value of THS_TRAIL being
    
    (1 + THS_TRAILCNT) x ByteClk cycle + ((1 to 2) + 2) xHSBYTECLK cycle +
     - (PHY output delay)
    
    with PHY output delay being about
    
    (8 + (5 to 6)) x MIPIBitClk cycle in the BitClk conversion.
    
    Fixes: ff1ca6397b1d ("drm/bridge: Add tc358768 driver")
    Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
    Reviewed-by: Robert Foss <rfoss@kernel.org>
    Signed-off-by: Robert Foss <rfoss@kernel.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20230427142934.55435-9-francesco@dolcini.it
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/bridge: tc358768: fix THS_ZEROCNT computation [+ + +]
Author: Francesco Dolcini <francesco.dolcini@toradex.com>
Date:   Thu Apr 27 16:29:31 2023 +0200

    drm/bridge: tc358768: fix THS_ZEROCNT computation
    
    [ Upstream commit 77a089328da791118af9692543a5eedc79eb5fd4 ]
    
    Correct computation of THS_ZEROCNT register.
    
    This register must be set to a value that ensure that
    THS_PREPARE + THS_ZERO > 145ns + 10*UI
    
    with the actual value of (THS_PREPARE + THS_ZERO) being
    
    ((1 to 2) + 1 + (TCLK_ZEROCNT + 1) + (3 to 4)) x ByteClk cycle +
      + HSByteClk x (2 + (1 to 2)) + (PHY delay)
    
    with PHY delay being about
    
    (8 + (5 to 6)) x MIPIBitClk cycle in the BitClk conversion.
    
    Fixes: ff1ca6397b1d ("drm/bridge: Add tc358768 driver")
    Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
    Reviewed-by: Robert Foss <rfoss@kernel.org>
    Signed-off-by: Robert Foss <rfoss@kernel.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20230427142934.55435-7-francesco@dolcini.it
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/bridge: tc358768: fix TXTAGOCNT computation [+ + +]
Author: Francesco Dolcini <francesco.dolcini@toradex.com>
Date:   Thu Apr 27 16:29:32 2023 +0200

    drm/bridge: tc358768: fix TXTAGOCNT computation
    
    [ Upstream commit 3666aad8185af8d0ce164fd3c4974235417d6d0b ]
    
    Correct computation of TXTAGOCNT register.
    
    This register must be set to a value that ensure that the
    TTA-GO period = (4 x TLPX)
    
    with the actual value of TTA-GO being
    
    4 x (TXTAGOCNT + 1) x (HSByteClk cycle)
    
    Fixes: ff1ca6397b1d ("drm/bridge: Add tc358768 driver")
    Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
    Reviewed-by: Robert Foss <rfoss@kernel.org>
    Signed-off-by: Robert Foss <rfoss@kernel.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20230427142934.55435-8-francesco@dolcini.it
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/client: Fix memory leak in drm_client_modeset_probe [+ + +]
Author: Jocelyn Falempe <jfalempe@redhat.com>
Date:   Tue Jul 11 11:20:44 2023 +0200

    drm/client: Fix memory leak in drm_client_modeset_probe
    
    commit 2329cc7a101af1a844fbf706c0724c0baea38365 upstream.
    
    When a new mode is set to modeset->mode, the previous mode should be freed.
    This fixes the following kmemleak report:
    
    drm_mode_duplicate+0x45/0x220 [drm]
    drm_client_modeset_probe+0x944/0xf50 [drm]
    __drm_fb_helper_initial_config_and_unlock+0xb4/0x2c0 [drm_kms_helper]
    drm_fbdev_client_hotplug+0x2bc/0x4d0 [drm_kms_helper]
    drm_client_register+0x169/0x240 [drm]
    ast_pci_probe+0x142/0x190 [ast]
    local_pci_probe+0xdc/0x180
    work_for_cpu_fn+0x4e/0xa0
    process_one_work+0x8b7/0x1540
    worker_thread+0x70a/0xed0
    kthread+0x29f/0x340
    ret_from_fork+0x1f/0x30
    
    cc: <stable@vger.kernel.org>
    Reported-by: Zhang Yi <yizhan@redhat.com>
    Signed-off-by: Jocelyn Falempe <jfalempe@redhat.com>
    Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
    Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
    Link: https://patchwork.freedesktop.org/patch/msgid/20230711092203.68157-3-jfalempe@redhat.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/client: Fix memory leak in drm_client_target_cloned [+ + +]
Author: Jocelyn Falempe <jfalempe@redhat.com>
Date:   Tue Jul 11 11:20:43 2023 +0200

    drm/client: Fix memory leak in drm_client_target_cloned
    
    commit c2a88e8bdf5f6239948d75283d0ae7e0c7945b03 upstream.
    
    dmt_mode is allocated and never freed in this function.
    It was found with the ast driver, but most drivers using generic fbdev
    setup are probably affected.
    
    This fixes the following kmemleak report:
      backtrace:
        [<00000000b391296d>] drm_mode_duplicate+0x45/0x220 [drm]
        [<00000000e45bb5b3>] drm_client_target_cloned.constprop.0+0x27b/0x480 [drm]
        [<00000000ed2d3a37>] drm_client_modeset_probe+0x6bd/0xf50 [drm]
        [<0000000010e5cc9d>] __drm_fb_helper_initial_config_and_unlock+0xb4/0x2c0 [drm_kms_helper]
        [<00000000909f82ca>] drm_fbdev_client_hotplug+0x2bc/0x4d0 [drm_kms_helper]
        [<00000000063a69aa>] drm_client_register+0x169/0x240 [drm]
        [<00000000a8c61525>] ast_pci_probe+0x142/0x190 [ast]
        [<00000000987f19bb>] local_pci_probe+0xdc/0x180
        [<000000004fca231b>] work_for_cpu_fn+0x4e/0xa0
        [<0000000000b85301>] process_one_work+0x8b7/0x1540
        [<000000003375b17c>] worker_thread+0x70a/0xed0
        [<00000000b0d43cd9>] kthread+0x29f/0x340
        [<000000008d770833>] ret_from_fork+0x1f/0x30
    unreferenced object 0xff11000333089a00 (size 128):
    
    cc: <stable@vger.kernel.org>
    Fixes: 1d42bbc8f7f9 ("drm/fbdev: fix cloning on fbcon")
    Reported-by: Zhang Yi <yizhan@redhat.com>
    Signed-off-by: Jocelyn Falempe <jfalempe@redhat.com>
    Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
    Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
    Link: https://patchwork.freedesktop.org/patch/msgid/20230711092203.68157-2-jfalempe@redhat.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/msm/dp: Free resources after unregistering them [+ + +]
Author: Bjorn Andersson <quic_bjorande@quicinc.com>
Date:   Mon Jun 12 15:02:59 2023 -0700

    drm/msm/dp: Free resources after unregistering them
    
    [ Upstream commit fa0048a4b1fa7a50c8b0e514f5b428abdf69a6f8 ]
    
    The DP component's unbind operation walks through the submodules to
    unregister and clean things up. But if the unbind happens because the DP
    controller itself is being removed, all the memory for those submodules
    has just been freed.
    
    Change the order of these operations to avoid the many use-after-free
    that otherwise happens in this code path.
    
    Fixes: c943b4948b58 ("drm/msm/dp: add displayPort driver support")
    Signed-off-by: Bjorn Andersson <quic_bjorande@quicinc.com>
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Patchwork: https://patchwork.freedesktop.org/patch/542166/
    Link: https://lore.kernel.org/r/20230612220259.1884381-1-quic_bjorande@quicinc.com
    Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/msm/dpu: do not enable color-management if DSPPs are not available [+ + +]
Author: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Date:   Mon Jun 12 21:25:33 2023 +0300

    drm/msm/dpu: do not enable color-management if DSPPs are not available
    
    [ Upstream commit 3bcfc7b90465efd337d39b91b43972162f0d1908 ]
    
    We can not support color management without DSPP blocks being provided
    in the HW catalog. Do not enable color management for CRTCs if num_dspps
    is 0.
    
    Fixes: 4259ff7ae509 ("drm/msm/dpu: add support for pcc color block in dpu driver")
    Reported-by: Yongqin Liu <yongqin.liu@linaro.org>
    Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
    Reviewed-by: Marijn Suijten <marijn.suijten@somainline.org>
    Reviewed-by: Sumit Semwal <sumit.semwal@linaro.org>
    Tested-by: Yongqin Liu <yongqin.liu@linaro.org>
    Patchwork: https://patchwork.freedesktop.org/patch/542141/
    Link: https://lore.kernel.org/r/20230612182534.3345805-1-dmitry.baryshkov@linaro.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/panel: sharp-ls043t1le01: adjust mode settings [+ + +]
Author: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Date:   Sun May 7 20:26:38 2023 +0300

    drm/panel: sharp-ls043t1le01: adjust mode settings
    
    [ Upstream commit dee23b2c9e3ff46d59c5d45e1436eceb878e7c9a ]
    
    Using current settings causes panel flickering on APQ8074 dragonboard.
    Adjust panel settings to follow the vendor-provided mode. This also
    enables MIPI_DSI_MODE_VIDEO_SYNC_PULSE, which is also specified by the
    vendor dtsi for the mentioned dragonboard.
    
    Fixes: ee0172383190 ("drm/panel: Add Sharp LS043T1LE01 MIPI DSI panel")
    Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
    Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20230507172639.2320934-1-dmitry.baryshkov@linaro.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/panel: simple: Add connector_type for innolux_at043tn24 [+ + +]
Author: Fabio Estevam <festevam@denx.de>
Date:   Tue Jun 20 08:22:02 2023 -0300

    drm/panel: simple: Add connector_type for innolux_at043tn24
    
    [ Upstream commit 2c56a751845ddfd3078ebe79981aaaa182629163 ]
    
    The innolux at043tn24 display is a parallel LCD. Pass the 'connector_type'
    information to avoid the following warning:
    
    panel-simple panel: Specify missing connector_type
    
    Signed-off-by: Fabio Estevam <festevam@denx.de>
    Fixes: 41bcceb4de9c ("drm/panel: simple: Add support for Innolux AT043TN24")
    Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
    Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20230620112202.654981-1-festevam@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/panel: simple: Add Powertip PH800480T013 drm_display_mode flags [+ + +]
Author: Marek Vasut <marex@denx.de>
Date:   Thu Jun 15 22:16:02 2023 +0200

    drm/panel: simple: Add Powertip PH800480T013 drm_display_mode flags
    
    [ Upstream commit 1c519980aced3da1fae37c1339cf43b24eccdee7 ]
    
    Add missing drm_display_mode DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC
    flags. Those are used by various bridges in the pipeline to correctly
    configure its sync signals polarity.
    
    Fixes: d69de69f2be1 ("drm/panel: simple: Add Powertip PH800480T013 panel")
    Signed-off-by: Marek Vasut <marex@denx.de>
    Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
    Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20230615201602.565948-1-marex@denx.de
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/panel: simple: fix active size for Ampire AM-480272H3TMQW-T01H [+ + +]
Author: Dario Binacchi <dario.binacchi@amarulasolutions.com>
Date:   Tue May 16 10:50:39 2023 +0200

    drm/panel: simple: fix active size for Ampire AM-480272H3TMQW-T01H
    
    [ Upstream commit f24b49550814fdee4a98b9552e35e243ccafd4a8 ]
    
    The previous setting was related to the overall dimension and not to the
    active display area.
    In the "PHYSICAL SPECIFICATIONS" section, the datasheet shows the
    following parameters:
    
     ----------------------------------------------------------
    |       Item        |         Specifications        | unit |
     ----------------------------------------------------------
    | Display area      | 98.7 (W) x 57.5 (H)           |  mm  |
     ----------------------------------------------------------
    | Overall dimension | 105.5(W) x 67.2(H) x 4.96(D)  |  mm  |
     ----------------------------------------------------------
    
    Fixes: 966fea78adf2 ("drm/panel: simple: Add support for Ampire AM-480272H3TMQW-T01H")
    Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com>
    Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
    [narmstrong: fixed Fixes commit id length]
    Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20230516085039.3797303-1-dario.binacchi@amarulasolutions.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/radeon: fix possible division-by-zero errors [+ + +]
Author: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
Date:   Fri May 19 08:33:27 2023 -0700

    drm/radeon: fix possible division-by-zero errors
    
    [ Upstream commit 1becc57cd1a905e2aa0e1eca60d2a37744525c4a ]
    
    Function rv740_get_decoded_reference_divider() may return 0 due to
    unpredictable reference divider value calculated in
    radeon_atom_get_clock_dividers(). This will lead to
    division-by-zero error once that value is used as a divider
    in calculating 'clk_s'.
    While unlikely, this issue should nonetheless be prevented so add a
    sanity check for such cases by testing 'decoded_ref' value against 0.
    
    Found by Linux Verification Center (linuxtesting.org) with static
    analysis tool SVACE.
    
    v2: minor coding style fixes (Alex)
    In practice this should actually happen as the vbios should be
    properly populated.
    
    Fixes: 66229b200598 ("drm/radeon/kms: add dpm support for rv7xx (v4)")
    Signed-off-by: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/rockchip: vop: Leave vblank enabled in self-refresh [+ + +]
Author: Brian Norris <briannorris@chromium.org>
Date:   Mon Jan 9 17:18:17 2023 -0800

    drm/rockchip: vop: Leave vblank enabled in self-refresh
    
    commit 2bdba9d4a3baa758c2ca7f5b37b35c7b3391dc42 upstream.
    
    If we disable vblank when entering self-refresh, vblank APIs (like
    DRM_IOCTL_WAIT_VBLANK) no longer work. But user space is not aware when
    we enter self-refresh, so this appears to be an API violation -- that
    DRM_IOCTL_WAIT_VBLANK fails with EINVAL whenever the display is idle and
    enters self-refresh.
    
    The downstream driver used by many of these systems never used to
    disable vblank for PSR, and in fact, even upstream, we didn't do that
    until radically redesigning the state machine in commit 6c836d965bad
    ("drm/rockchip: Use the helpers for PSR").
    
    Thus, it seems like a reasonable API fix to simply restore that
    behavior, and leave vblank enabled.
    
    Note that this appears to potentially unbalance the
    drm_crtc_vblank_{off,on}() calls in some cases, but:
    (a) drm_crtc_vblank_on() documents this as OK and
    (b) if I do the naive balancing, I find state machine issues such that
        we're not in sync properly; so it's easier to take advantage of (a).
    
    This issue was exposed by IGT's kms_vblank tests, and reported by
    KernelCI. The bug has been around a while (longer than KernelCI
    noticed), but was only exposed once self-refresh was bugfixed more
    recently, and so KernelCI could properly test it. Some other notes in:
    
      https://lore.kernel.org/dri-devel/Y6OCg9BPnJvimQLT@google.com/
      Re: renesas/master bisection: igt-kms-rockchip.kms_vblank.pipe-A-wait-forked on rk3399-gru-kevin
    
    == Backporting notes: ==
    
    Marking as 'Fixes' commit 6c836d965bad ("drm/rockchip: Use the helpers
    for PSR"), but it probably depends on commit bed030a49f3e
    ("drm/rockchip: Don't fully disable vop on self refresh") as well.
    
    We also need the previous patch ("drm/atomic: Allow vblank-enabled +
    self-refresh "disable""), of course.
    
    v3:
     * no update
    
    v2:
     * skip unnecessary lock/unlock
    
    Fixes: 6c836d965bad ("drm/rockchip: Use the helpers for PSR")
    Cc: <stable@vger.kernel.org>
    Reported-by: "kernelci.org bot" <bot@kernelci.org>
    Link: https://lore.kernel.org/dri-devel/Y5itf0+yNIQa6fU4@sirena.org.uk/
    Signed-off-by: Brian Norris <briannorris@chromium.org>
    Signed-off-by: Sean Paul <seanpaul@chromium.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20230109171809.v3.2.Ic07cba4ab9a7bd3618a9e4258b8f92ea7d10ae5a@changeid
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/vram-helper: fix function names in vram helper doc [+ + +]
Author: Luc Ma <luc@sietium.com>
Date:   Mon May 8 08:09:16 2023 +0800

    drm/vram-helper: fix function names in vram helper doc
    
    [ Upstream commit b8e392245105b50706f18418054821e71e637288 ]
    
    Refer to drmm_vram_helper_init() instead of the non-existent
    drmm_vram_helper_alloc_mm().
    
    Fixes: a5f23a72355d ("drm/vram-helper: Managed vram helpers")
    Signed-off-by: Luc Ma <luc@sietium.com>
    Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
    Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
    Link: https://patchwork.freedesktop.org/patch/msgid/64583db2.630a0220.eb75d.8f51@mx.google.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm: sun4i_tcon: use devm_clk_get_enabled in `sun4i_tcon_init_clocks` [+ + +]
Author: XuDong Liu <m202071377@hust.edu.cn>
Date:   Sun Apr 30 19:23:46 2023 +0800

    drm: sun4i_tcon: use devm_clk_get_enabled in `sun4i_tcon_init_clocks`
    
    [ Upstream commit 123ee07ba5b7123e0ce0e0f9d64938026c16a2ce ]
    
    Smatch reports:
    drivers/gpu/drm/sun4i/sun4i_tcon.c:805 sun4i_tcon_init_clocks() warn:
    'tcon->clk' from clk_prepare_enable() not released on lines: 792,801.
    
    In the function sun4i_tcon_init_clocks(), tcon->clk and tcon->sclk0 are
    not disabled in the error handling, which affects the release of
    these variable. Although sun4i_tcon_bind(), which calls
    sun4i_tcon_init_clocks(), use sun4i_tcon_free_clocks to disable the
    variables mentioned, but the error handling branch of
    sun4i_tcon_init_clocks() ignores the required disable process.
    
    To fix this issue, use the devm_clk_get_enabled to automatically
    balance enable and disabled calls. As original implementation use
    sun4i_tcon_free_clocks() to disable clk explicitly, we delete the
    related calls and error handling that are no longer needed.
    
    Fixes: 9026e0d122ac ("drm: Add Allwinner A10 Display Engine support")
    Fixes: b14e945bda8a ("drm/sun4i: tcon: Prepare and enable TCON channel 0 clock at init")
    Fixes: 8e9240472522 ("drm/sun4i: support TCONs without channel 1")
    Fixes: 34d698f6e349 ("drm/sun4i: Add has_channel_0 TCON quirk")
    Signed-off-by: XuDong Liu <m202071377@hust.edu.cn>
    Reviewed-by: Dongliang Mu <dzm91@hust.edu.cn>
    Signed-off-by: Maxime Ripard <maxime@cerno.tech>
    Link: https://patchwork.freedesktop.org/patch/msgid/20230430112347.4689-1-m202071377@hust.edu.cn
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
erofs: avoid infinite loop in z_erofs_do_read_page() when reading beyond EOF [+ + +]
Author: Chunhai Guo <guochunhai@vivo.com>
Date:   Mon Jul 10 17:34:10 2023 +0800

    erofs: avoid infinite loop in z_erofs_do_read_page() when reading beyond EOF
    
    [ Upstream commit 8191213a5835b0317c5e4d0d337ae1ae00c75253 ]
    
    z_erofs_do_read_page() may loop infinitely due to the inappropriate
    truncation in the below statement. Since the offset is 64 bits and min_t()
    truncates the result to 32 bits. The solution is to replace unsigned int
    with a 64-bit type, such as erofs_off_t.
        cur = end - min_t(unsigned int, offset + end - map->m_la, end);
    
        - For example:
            - offset = 0x400160000
            - end = 0x370
            - map->m_la = 0x160370
            - offset + end - map->m_la = 0x400000000
            - offset + end - map->m_la = 0x00000000 (truncated as unsigned int)
        - Expected result:
            - cur = 0
        - Actual result:
            - cur = 0x370
    
    Signed-off-by: Chunhai Guo <guochunhai@vivo.com>
    Fixes: 3883a79abd02 ("staging: erofs: introduce VLE decompression support")
    Reviewed-by: Gao Xiang <hsiangkao@linux.alibaba.com>
    Reviewed-by: Chao Yu <chao@kernel.org>
    Link: https://lore.kernel.org/r/20230710093410.44071-1-guochunhai@vivo.com
    Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

erofs: fix compact 4B support for 16k block size [+ + +]
Author: Gao Xiang <xiang@kernel.org>
Date:   Thu Jun 1 19:23:41 2023 +0800

    erofs: fix compact 4B support for 16k block size
    
    commit 001b8ccd0650727e54ec16ef72bf1b8eeab7168e upstream.
    
    In compact 4B, two adjacent lclusters are packed together as a unit to
    form on-disk indexes for effective random access, as below:
    
    (amortized = 4, vcnt = 2)
           _____________________________________________
          |___@_____ encoded bits __________|_ blkaddr _|
          0        .                                    amortized * vcnt = 8
          .             .
          .                  .              amortized * vcnt - 4 = 4
          .                        .
          .____________________________.
          |_type (2 bits)_|_clusterofs_|
    
    Therefore, encoded bits for each pack are 32 bits (4 bytes). IOWs,
    since each lcluster can get 16 bits for its type and clusterofs, the
    maximum supported lclustersize for compact 4B format is 16k (14 bits).
    
    Fix this to enable compact 4B format for 16k lclusters (blocks), which
    is tested on an arm64 server with 16k page size.
    
    Fixes: 152a333a5895 ("staging: erofs: add compacted compression indexes support")
    Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
    Link: https://lore.kernel.org/r/20230601112341.56960-1-hsiangkao@linux.alibaba.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
evm: Complete description of evm_inode_setattr() [+ + +]
Author: Roberto Sassu <roberto.sassu@huawei.com>
Date:   Mon Mar 6 11:40:36 2023 +0100

    evm: Complete description of evm_inode_setattr()
    
    [ Upstream commit b1de86d4248b273cb12c4cd7d20c08d459519f7d ]
    
    Add the description for missing parameters of evm_inode_setattr() to
    avoid the warning arising with W=n compile option.
    
    Fixes: 817b54aa45db ("evm: add evm_inode_setattr to prevent updating an invalid security.evm") # v3.2+
    Fixes: c1632a0f1120 ("fs: port ->setattr() to pass mnt_idmap") # v6.3+
    Signed-off-by: Roberto Sassu <roberto.sassu@huawei.com>
    Reviewed-by: Stefan Berger <stefanb@linux.ibm.com>
    Signed-off-by: Mimi Zohar <zohar@linux.ibm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ext4: correct inline offset when handling xattrs in inode body [+ + +]
Author: Eric Whitney <enwlinux@gmail.com>
Date:   Mon May 22 14:15:20 2023 -0400

    ext4: correct inline offset when handling xattrs in inode body
    
    commit 6909cf5c4101214f4305a62d582a5b93c7e1eb9a upstream.
    
    When run on a file system where the inline_data feature has been
    enabled, xfstests generic/269, generic/270, and generic/476 cause ext4
    to emit error messages indicating that inline directory entries are
    corrupted.  This occurs because the inline offset used to locate
    inline directory entries in the inode body is not updated when an
    xattr in that shared region is deleted and the region is shifted in
    memory to recover the space it occupied.  If the deleted xattr precedes
    the system.data attribute, which points to the inline directory entries,
    that attribute will be moved further up in the region.  The inline
    offset continues to point to whatever is located in system.data's former
    location, with unfortunate effects when used to access directory entries
    or (presumably) inline data in the inode body.
    
    Cc: stable@kernel.org
    Signed-off-by: Eric Whitney <enwlinux@gmail.com>
    Link: https://lore.kernel.org/r/20230522181520.1570360-1-enwlinux@gmail.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ext4: Fix reusing stale buffer heads from last failed mounting [+ + +]
Author: Zhihao Cheng <chengzhihao1@huawei.com>
Date:   Wed Mar 15 09:31:23 2023 +0800

    ext4: Fix reusing stale buffer heads from last failed mounting
    
    commit 26fb5290240dc31cae99b8b4dd2af7f46dfcba6b upstream.
    
    Following process makes ext4 load stale buffer heads from last failed
    mounting in a new mounting operation:
    mount_bdev
     ext4_fill_super
     | ext4_load_and_init_journal
     |  ext4_load_journal
     |   jbd2_journal_load
     |    load_superblock
     |     journal_get_superblock
     |      set_buffer_verified(bh) // buffer head is verified
     |   jbd2_journal_recover // failed caused by EIO
     | goto failed_mount3a // skip 'sb->s_root' initialization
     deactivate_locked_super
      kill_block_super
       generic_shutdown_super
        if (sb->s_root)
        // false, skip ext4_put_super->invalidate_bdev->
        // invalidate_mapping_pages->mapping_evict_folio->
        // filemap_release_folio->try_to_free_buffers, which
        // cannot drop buffer head.
       blkdev_put
        blkdev_put_whole
         if (atomic_dec_and_test(&bdev->bd_openers))
         // false, systemd-udev happens to open the device. Then
         // blkdev_flush_mapping->kill_bdev->truncate_inode_pages->
         // truncate_inode_folio->truncate_cleanup_folio->
         // folio_invalidate->block_invalidate_folio->
         // filemap_release_folio->try_to_free_buffers will be skipped,
         // dropping buffer head is missed again.
    
    Second mount:
    ext4_fill_super
     ext4_load_and_init_journal
      ext4_load_journal
       ext4_get_journal
        jbd2_journal_init_inode
         journal_init_common
          bh = getblk_unmovable
           bh = __find_get_block // Found stale bh in last failed mounting
          journal->j_sb_buffer = bh
       jbd2_journal_load
        load_superblock
         journal_get_superblock
          if (buffer_verified(bh))
          // true, skip journal->j_format_version = 2, value is 0
        jbd2_journal_recover
         do_one_pass
          next_log_block += count_tags(journal, bh)
          // According to journal_tag_bytes(), 'tag_bytes' calculating is
          // affected by jbd2_has_feature_csum3(), jbd2_has_feature_csum3()
          // returns false because 'j->j_format_version >= 2' is not true,
          // then we get wrong next_log_block. The do_one_pass may exit
          // early whenoccuring non JBD2_MAGIC_NUMBER in 'next_log_block'.
    
    The filesystem is corrupted here, journal is partially replayed, and
    new journal sequence number actually is already used by last mounting.
    
    The invalidate_bdev() can drop all buffer heads even racing with bare
    reading block device(eg. systemd-udev), so we can fix it by invalidating
    bdev in error handling path in __ext4_fill_super().
    
    Fetch a reproducer in [Link].
    
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=217171
    Fixes: 25ed6e8a54df ("jbd2: enable journal clients to enable v2 checksumming")
    Cc: stable@vger.kernel.org # v3.5
    Signed-off-by: Zhihao Cheng <chengzhihao1@huawei.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Link: https://lore.kernel.org/r/20230315013128.3911115-2-chengzhihao1@huawei.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ext4: fix wrong unit use in ext4_mb_clear_bb [+ + +]
Author: Kemeng Shi <shikemeng@huaweicloud.com>
Date:   Sat Jun 3 23:03:18 2023 +0800

    ext4: fix wrong unit use in ext4_mb_clear_bb
    
    commit 247c3d214c23dfeeeb892e91a82ac1188bdaec9f upstream.
    
    Function ext4_issue_discard need count in cluster. Pass count_clusters
    instead of count to fix the mismatch.
    
    Signed-off-by: Kemeng Shi <shikemeng@huaweicloud.com>
    Cc: stable@kernel.org
    Reviewed-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
    Link: https://lore.kernel.org/r/20230603150327.3596033-11-shikemeng@huaweicloud.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ext4: fix wrong unit use in ext4_mb_new_blocks [+ + +]
Author: Kemeng Shi <shikemeng@huaweicloud.com>
Date:   Sat Jun 3 23:03:19 2023 +0800

    ext4: fix wrong unit use in ext4_mb_new_blocks
    
    commit 2ec6d0a5ea72689a79e6f725fd8b443a788ae279 upstream.
    
    Function ext4_free_blocks_simple needs count in cluster. Function
    ext4_free_blocks accepts count in block. Convert count to cluster
    to fix the mismatch.
    
    Signed-off-by: Kemeng Shi <shikemeng@huaweicloud.com>
    Cc: stable@kernel.org
    Reviewed-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
    Link: https://lore.kernel.org/r/20230603150327.3596033-12-shikemeng@huaweicloud.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ext4: get block from bh in ext4_free_blocks for fast commit replay [+ + +]
Author: Kemeng Shi <shikemeng@huaweicloud.com>
Date:   Sat Jun 3 23:03:16 2023 +0800

    ext4: get block from bh in ext4_free_blocks for fast commit replay
    
    commit 11b6890be0084ad4df0e06d89a9fdcc948472c65 upstream.
    
    ext4_free_blocks will retrieve block from bh if block parameter is zero.
    Retrieve block before ext4_free_blocks_simple to avoid potentially
    passing wrong block to ext4_free_blocks_simple.
    
    Signed-off-by: Kemeng Shi <shikemeng@huaweicloud.com>
    Cc: stable@kernel.org
    Reviewed-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
    Link: https://lore.kernel.org/r/20230603150327.3596033-9-shikemeng@huaweicloud.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ext4: only update i_reserved_data_blocks on successful block allocation [+ + +]
Author: Baokun Li <libaokun1@huawei.com>
Date:   Mon Apr 24 11:38:35 2023 +0800

    ext4: only update i_reserved_data_blocks on successful block allocation
    
    commit de25d6e9610a8b30cce9bbb19b50615d02ebca02 upstream.
    
    In our fault injection test, we create an ext4 file, migrate it to
    non-extent based file, then punch a hole and finally trigger a WARN_ON
    in the ext4_da_update_reserve_space():
    
    EXT4-fs warning (device sda): ext4_da_update_reserve_space:369:
    ino 14, used 11 with only 10 reserved data blocks
    
    When writing back a non-extent based file, if we enable delalloc, the
    number of reserved blocks will be subtracted from the number of blocks
    mapped by ext4_ind_map_blocks(), and the extent status tree will be
    updated. We update the extent status tree by first removing the old
    extent_status and then inserting the new extent_status. If the block range
    we remove happens to be in an extent, then we need to allocate another
    extent_status with ext4_es_alloc_extent().
    
           use old    to remove   to add new
        |----------|------------|------------|
                  old extent_status
    
    The problem is that the allocation of a new extent_status failed due to a
    fault injection, and __es_shrink() did not get free memory, resulting in
    a return of -ENOMEM. Then do_writepages() retries after receiving -ENOMEM,
    we map to the same extent again, and the number of reserved blocks is again
    subtracted from the number of blocks in that extent. Since the blocks in
    the same extent are subtracted twice, we end up triggering WARN_ON at
    ext4_da_update_reserve_space() because used > ei->i_reserved_data_blocks.
    
    For non-extent based file, we update the number of reserved blocks after
    ext4_ind_map_blocks() is executed, which causes a problem that when we call
    ext4_ind_map_blocks() to create a block, it doesn't always create a block,
    but we always reduce the number of reserved blocks. So we move the logic
    for updating reserved blocks to ext4_ind_map_blocks() to ensure that the
    number of reserved blocks is updated only after we do succeed in allocating
    some new blocks.
    
    Fixes: 5f634d064c70 ("ext4: Fix quota accounting error with fallocate")
    Cc: stable@kernel.org
    Signed-off-by: Baokun Li <libaokun1@huawei.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Link: https://lore.kernel.org/r/20230424033846.4732-2-libaokun1@huawei.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ext4: Remove ext4 locking of moved directory [+ + +]
Author: Jan Kara <jack@suse.cz>
Date:   Thu Jun 1 12:58:21 2023 +0200

    ext4: Remove ext4 locking of moved directory
    
    commit 3658840cd363f2be094f5dfd2f0b174a9055dd0f upstream.
    
    Remove locking of moved directory in ext4_rename2(). We will take care
    of it in VFS instead. This effectively reverts commit 0813299c586b
    ("ext4: Fix possible corruption when moving a directory") and followup
    fixes.
    
    CC: Ted Tso <tytso@mit.edu>
    CC: stable@vger.kernel.org
    Signed-off-by: Jan Kara <jack@suse.cz>
    Message-Id: <20230601105830.13168-1-jack@suse.cz>
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
extcon: Fix kernel doc of property capability fields to avoid warnings [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Wed Mar 22 16:39:53 2023 +0200

    extcon: Fix kernel doc of property capability fields to avoid warnings
    
    [ Upstream commit 73346b9965ebda2feb7fef8629e9b28baee820e3 ]
    
    Kernel documentation has to be synchronized with a code, otherwise
    the validator is not happy:
    
         Function parameter or member 'usb_bits' not described in 'extcon_cable'
         Function parameter or member 'chg_bits' not described in 'extcon_cable'
         Function parameter or member 'jack_bits' not described in 'extcon_cable'
         Function parameter or member 'disp_bits' not described in 'extcon_cable'
    
    Describe the fields added in the past.
    
    Fixes: ceaa98f442cf ("extcon: Add the support for the capability of each property")
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

extcon: Fix kernel doc of property fields to avoid warnings [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Wed Mar 22 16:39:52 2023 +0200

    extcon: Fix kernel doc of property fields to avoid warnings
    
    [ Upstream commit 7e77e0b7a9f4cdf91cb0950749b40c840ea63efc ]
    
    Kernel documentation has to be synchronized with a code, otherwise
    the validator is not happy:
    
         Function parameter or member 'usb_propval' not described in 'extcon_cable'
         Function parameter or member 'chg_propval' not described in 'extcon_cable'
         Function parameter or member 'jack_propval' not described in 'extcon_cable'
         Function parameter or member 'disp_propval' not described in 'extcon_cable'
    
    Describe the fields added in the past.
    
    Fixes: 067c1652e7a7 ("extcon: Add the support for extcon property according to extcon type")
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
f2fs: fix error path handling in truncate_dnode() [+ + +]
Author: Chao Yu <chao@kernel.org>
Date:   Thu Jun 29 09:41:02 2023 +0800

    f2fs: fix error path handling in truncate_dnode()
    
    [ Upstream commit 0135c482fa97e2fd8245cb462784112a00ed1211 ]
    
    If truncate_node() fails in truncate_dnode(), it missed to call
    f2fs_put_page(), fix it.
    
    Fixes: 7735730d39d7 ("f2fs: fix to propagate error from __get_meta_page()")
    Signed-off-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

f2fs: fix to avoid NULL pointer dereference f2fs_write_end_io() [+ + +]
Author: Chao Yu <chao@kernel.org>
Date:   Tue May 23 14:17:25 2023 +0800

    f2fs: fix to avoid NULL pointer dereference f2fs_write_end_io()
    
    commit d8189834d4348ae608083e1f1f53792cfcc2a9bc upstream.
    
    butt3rflyh4ck reports a bug as below:
    
    When a thread always calls F2FS_IOC_RESIZE_FS to resize fs, if resize fs is
    failed, f2fs kernel thread would invoke callback function to update f2fs io
    info, it would call  f2fs_write_end_io and may trigger null-ptr-deref in
    NODE_MAPPING.
    
    general protection fault, probably for non-canonical address
    KASAN: null-ptr-deref in range [0x0000000000000030-0x0000000000000037]
    RIP: 0010:NODE_MAPPING fs/f2fs/f2fs.h:1972 [inline]
    RIP: 0010:f2fs_write_end_io+0x727/0x1050 fs/f2fs/data.c:370
     <TASK>
     bio_endio+0x5af/0x6c0 block/bio.c:1608
     req_bio_endio block/blk-mq.c:761 [inline]
     blk_update_request+0x5cc/0x1690 block/blk-mq.c:906
     blk_mq_end_request+0x59/0x4c0 block/blk-mq.c:1023
     lo_complete_rq+0x1c6/0x280 drivers/block/loop.c:370
     blk_complete_reqs+0xad/0xe0 block/blk-mq.c:1101
     __do_softirq+0x1d4/0x8ef kernel/softirq.c:571
     run_ksoftirqd kernel/softirq.c:939 [inline]
     run_ksoftirqd+0x31/0x60 kernel/softirq.c:931
     smpboot_thread_fn+0x659/0x9e0 kernel/smpboot.c:164
     kthread+0x33e/0x440 kernel/kthread.c:379
     ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:308
    
    The root cause is below race case can cause leaving dirty metadata
    in f2fs after filesystem is remount as ro:
    
    Thread A                                Thread B
    - f2fs_ioc_resize_fs
     - f2fs_readonly   --- return false
     - f2fs_resize_fs
                                            - f2fs_remount
                                             - write_checkpoint
                                             - set f2fs as ro
      - free_segment_range
       - update meta_inode's data
    
    Then, if f2fs_put_super()  fails to write_checkpoint due to readonly
    status, and meta_inode's dirty data will be writebacked after node_inode
    is put, finally, f2fs_write_end_io will access NULL pointer on
    sbi->node_inode.
    
    Thread A                                IRQ context
    - f2fs_put_super
     - write_checkpoint fails
     - iput(node_inode)
     - node_inode = NULL
     - iput(meta_inode)
      - write_inode_now
       - f2fs_write_meta_page
                                            - f2fs_write_end_io
                                             - NODE_MAPPING(sbi)
                                             : access NULL pointer on node_inode
    
    Fixes: b4b10061ef98 ("f2fs: refactor resize_fs to avoid meta updates in progress")
    Reported-by: butt3rflyh4ck <butterflyhuangxx@gmail.com>
    Closes: https://lore.kernel.org/r/1684480657-2375-1-git-send-email-yangtiezhu@loongson.cn
    Tested-by: butt3rflyh4ck <butterflyhuangxx@gmail.com>
    Signed-off-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Signed-off-by: Stefan Ghinea <stefan.ghinea@windriver.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
fanotify: disallow mount/sb marks on kernel internal pseudo fs [+ + +]
Author: Amir Goldstein <amir73il@gmail.com>
Date:   Thu Jun 29 07:20:44 2023 +0300

    fanotify: disallow mount/sb marks on kernel internal pseudo fs
    
    commit 69562eb0bd3e6bb8e522a7b254334e0fb30dff0c upstream.
    
    Hopefully, nobody is trying to abuse mount/sb marks for watching all
    anonymous pipes/inodes.
    
    I cannot think of a good reason to allow this - it looks like an
    oversight that dated back to the original fanotify API.
    
    Link: https://lore.kernel.org/linux-fsdevel/20230628101132.kvchg544mczxv2pm@quack3/
    Fixes: 0ff21db9fcc3 ("fanotify: hooks the fanotify_mark syscall to the vfsmount code")
    Signed-off-by: Amir Goldstein <amir73il@gmail.com>
    Reviewed-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Jan Kara <jack@suse.cz>
    Message-Id: <20230629042044.25723-1-amir73il@gmail.com>
    [backport to 5.x.y]
    Signed-off-by: Amir Goldstein <amir73il@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
fbdev: au1200fb: Fix missing IRQ check in au1200fb_drv_probe [+ + +]
Author: Zhang Shurong <zhang_shurong@foxmail.com>
Date:   Sat Jul 15 16:16:56 2023 +0800

    fbdev: au1200fb: Fix missing IRQ check in au1200fb_drv_probe
    
    [ Upstream commit 4e88761f5f8c7869f15a2046b1a1116f4fab4ac8 ]
    
    This func misses checking for platform_get_irq()'s call and may passes the
    negative error codes to request_irq(), which takes unsigned IRQ #,
    causing it to fail with -EINVAL, overriding an original error code.
    
    Fix this by stop calling request_irq() with invalid IRQ #s.
    
    Fixes: 1630d85a8312 ("au1200fb: fix hardcoded IRQ")
    Signed-off-by: Zhang Shurong <zhang_shurong@foxmail.com>
    Signed-off-by: Helge Deller <deller@gmx.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

fbdev: imsttfb: Fix use after free bug in imsttfb_probe [+ + +]
Author: Zheng Wang <zyytlz.wz@163.com>
Date:   Thu Apr 27 11:08:41 2023 +0800

    fbdev: imsttfb: Fix use after free bug in imsttfb_probe
    
    commit c75f5a55061091030a13fef71b9995b89bc86213 upstream.
    
    A use-after-free bug may occur if init_imstt invokes framebuffer_release
    and free the info ptr. The caller, imsttfb_probe didn't notice that and
    still keep the ptr as private data in pdev.
    
    If we remove the driver which will call imsttfb_remove to make cleanup,
    UAF happens.
    
    Fix it by return error code if bad case happens in init_imstt.
    
    Signed-off-by: Zheng Wang <zyytlz.wz@163.com>
    Signed-off-by: Helge Deller <deller@gmx.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

fbdev: imxfb: warn about invalid left/right margin [+ + +]
Author: Martin Kaiser <martin@kaiser.cx>
Date:   Wed Jun 28 15:24:37 2023 +0200

    fbdev: imxfb: warn about invalid left/right margin
    
    [ Upstream commit 4e47382fbca916d7db95cbf9e2d7ca2e9d1ca3fe ]
    
    Warn about invalid var->left_margin or var->right_margin. Their values
    are read from the device tree.
    
    We store var->left_margin-3 and var->right_margin-1 in register
    fields. These fields should be >= 0.
    
    Fixes: 7e8549bcee00 ("imxfb: Fix margin settings")
    Signed-off-by: Martin Kaiser <martin@kaiser.cx>
    Signed-off-by: Helge Deller <deller@gmx.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

fbdev: omapfb: lcd_mipid: Fix an error handling path in mipid_spi_probe() [+ + +]
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Sun Jun 4 17:42:28 2023 +0200

    fbdev: omapfb: lcd_mipid: Fix an error handling path in mipid_spi_probe()
    
    [ Upstream commit 79a3908d1ea6c35157a6d907b1a9d8ec06015e7a ]
    
    If 'mipid_detect()' fails, we must free 'md' to avoid a memory leak.
    
    Fixes: 66d2f99d0bb5 ("omapfb: add support for MIPI-DCS compatible LCDs")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Signed-off-by: Helge Deller <deller@gmx.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
firmware: stratix10-svc: Fix a potential resource leak in svc_create_memory_pool() [+ + +]
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Tue Jun 13 16:15:21 2023 -0500

    firmware: stratix10-svc: Fix a potential resource leak in svc_create_memory_pool()
    
    commit 1995f15590ca222f91193ed11461862b450abfd6 upstream.
    
    svc_create_memory_pool() is only called from stratix10_svc_drv_probe().
    Most of resources in the probe are managed, but not this memremap() call.
    
    There is also no memunmap() call in the file.
    
    So switch to devm_memremap() to avoid a resource leak.
    
    Cc: stable@vger.kernel.org
    Fixes: 7ca5ce896524 ("firmware: add Intel Stratix10 service layer driver")
    Link: https://lore.kernel.org/all/783e9dfbba34e28505c9efa8bba41f97fd0fa1dc.1686109400.git.christophe.jaillet@wanadoo.fr/
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Signed-off-by: Dinh Nguyen <dinguyen@kernel.org>
    Message-ID: <20230613211521.16366-1-dinguyen@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
fs: avoid empty option when generating legacy mount string [+ + +]
Author: Thomas Weißschuh <linux@weissschuh.net>
Date:   Wed Jun 7 19:28:48 2023 +0200

    fs: avoid empty option when generating legacy mount string
    
    commit 62176420274db5b5127cd7a0083a9aeb461756ee upstream.
    
    As each option string fragment is always prepended with a comma it would
    happen that the whole string always starts with a comma. This could be
    interpreted by filesystem drivers as an empty option and may produce
    errors.
    
    For example the NTFS driver from ntfs.ko behaves like this and fails
    when mounted via the new API.
    
    Link: https://github.com/util-linux/util-linux/issues/2298
    Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
    Fixes: 3e1aeb00e6d1 ("vfs: Implement a filesystem superblock creation/configuration context")
    Cc: stable@vger.kernel.org
    Message-Id: <20230607-fs-empty-option-v1-1-20c8dbf4671b@weissschuh.net>
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

fs: dlm: return positive pid value for F_GETLK [+ + +]
Author: Alexander Aring <aahringo@redhat.com>
Date:   Fri May 19 11:21:24 2023 -0400

    fs: dlm: return positive pid value for F_GETLK
    
    commit 92655fbda5c05950a411eaabc19e025e86e2a291 upstream.
    
    The GETLK pid values have all been negated since commit 9d5b86ac13c5
    ("fs/locks: Remove fl_nspid and use fs-specific l_pid for remote locks").
    Revert this for local pids, and leave in place negative pids for remote
    owners.
    
    Cc: stable@vger.kernel.org
    Fixes: 9d5b86ac13c5 ("fs/locks: Remove fl_nspid and use fs-specific l_pid for remote locks")
    Signed-off-by: Alexander Aring <aahringo@redhat.com>
    Signed-off-by: David Teigland <teigland@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

fs: Establish locking order for unrelated directories [+ + +]
Author: Jan Kara <jack@suse.cz>
Date:   Thu Jun 1 12:58:24 2023 +0200

    fs: Establish locking order for unrelated directories
    
    commit f23ce757185319886ca80c4864ce5f81ac6cc9e9 upstream.
    
    Currently the locking order of inode locks for directories that are not
    in ancestor relationship is not defined because all operations that
    needed to lock two directories like this were serialized by
    sb->s_vfs_rename_mutex. However some filesystems need to lock two
    subdirectories for RENAME_EXCHANGE operations and for this we need the
    locking order established even for two tree-unrelated directories.
    Provide a helper function lock_two_inodes() that establishes lock
    ordering for any two inodes and use it in lock_two_directories().
    
    CC: stable@vger.kernel.org
    Signed-off-by: Jan Kara <jack@suse.cz>
    Message-Id: <20230601105830.13168-4-jack@suse.cz>
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

fs: Lock moved directories [+ + +]
Author: Jan Kara <jack@suse.cz>
Date:   Thu Jun 1 12:58:25 2023 +0200

    fs: Lock moved directories
    
    commit 28eceeda130f5058074dd007d9c59d2e8bc5af2e upstream.
    
    When a directory is moved to a different directory, some filesystems
    (udf, ext4, ocfs2, f2fs, and likely gfs2, reiserfs, and others) need to
    update their pointer to the parent and this must not race with other
    operations on the directory. Lock the directories when they are moved.
    Although not all filesystems need this locking, we perform it in
    vfs_rename() because getting the lock ordering right is really difficult
    and we don't want to expose these locking details to filesystems.
    
    CC: stable@vger.kernel.org
    Signed-off-by: Jan Kara <jack@suse.cz>
    Message-Id: <20230601105830.13168-5-jack@suse.cz>
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

fs: no need to check source [+ + +]
Author: Jan Kara <jack@suse.cz>
Date:   Mon Jul 3 16:49:11 2023 +0200

    fs: no need to check source
    
    commit 66d8fc0539b0d49941f313c9509a8384e4245ac1 upstream.
    
    The @source inode must be valid. It is even checked via IS_SWAPFILE()
    above making it pretty clear. So no need to check it when we unlock.
    
    What doesn't need to exist is the @target inode. The lock_two_inodes()
    helper currently swaps the @inode1 and @inode2 arguments if @inode1 is
    NULL to have consistent lock class usage. However, we know that at least
    for vfs_rename() that @inode1 is @source and thus is never NULL as per
    above. We also know that @source is a different inode than @target as
    that is checked right at the beginning of vfs_rename(). So we know that
    @source is valid and locked and that @target is locked. So drop the
    check whether @source is non-NULL.
    
    Fixes: 28eceeda130f ("fs: Lock moved directories")
    Reported-by: kernel test robot <lkp@intel.com>
    Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
    Closes: https://lore.kernel.org/r/202307030026.9sE2pk2x-lkp@intel.com
    Message-Id: <20230703-vfs-rename-source-v1-1-37eebb29b65b@kernel.org>
    [brauner: use commit message from patch I sent concurrently]
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

fs: pipe: reveal missing function protoypes [+ + +]
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Tue May 16 21:56:12 2023 +0200

    fs: pipe: reveal missing function protoypes
    
    [ Upstream commit 247c8d2f9837a3e29e3b6b7a4aa9c36c37659dd4 ]
    
    A couple of functions from fs/pipe.c are used both internally
    and for the watch queue code, but the declaration is only
    visible when the latter is enabled:
    
    fs/pipe.c:1254:5: error: no previous prototype for 'pipe_resize_ring'
    fs/pipe.c:758:15: error: no previous prototype for 'account_pipe_buffers'
    fs/pipe.c:764:6: error: no previous prototype for 'too_many_pipe_buffers_soft'
    fs/pipe.c:771:6: error: no previous prototype for 'too_many_pipe_buffers_hard'
    fs/pipe.c:777:6: error: no previous prototype for 'pipe_is_unprivileged_user'
    
    Make the visible unconditionally to avoid these warnings.
    
    Fixes: c73be61cede5 ("pipe: Add general notification queue support")
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Message-Id: <20230516195629.551602-1-arnd@kernel.org>
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ftrace: Fix possible warning on checking all pages used in ftrace_process_locs() [+ + +]
Author: Zheng Yejian <zhengyejian1@huawei.com>
Date:   Wed Jul 12 14:04:52 2023 +0800

    ftrace: Fix possible warning on checking all pages used in ftrace_process_locs()
    
    commit 26efd79c4624294e553aeaa3439c646729bad084 upstream.
    
    As comments in ftrace_process_locs(), there may be NULL pointers in
    mcount_loc section:
     > Some architecture linkers will pad between
     > the different mcount_loc sections of different
     > object files to satisfy alignments.
     > Skip any NULL pointers.
    
    After commit 20e5227e9f55 ("ftrace: allow NULL pointers in mcount_loc"),
    NULL pointers will be accounted when allocating ftrace pages but skipped
    before adding into ftrace pages, this may result in some pages not being
    used. Then after commit 706c81f87f84 ("ftrace: Remove extra helper
    functions"), warning may occur at:
      WARN_ON(pg->next);
    
    To fix it, only warn for case that no pointers skipped but pages not used
    up, then free those unused pages after releasing ftrace_lock.
    
    Link: https://lore.kernel.org/linux-trace-kernel/20230712060452.3175675-1-zhengyejian1@huawei.com
    
    Cc: stable@vger.kernel.org
    Fixes: 706c81f87f84 ("ftrace: Remove extra helper functions")
    Suggested-by: Steven Rostedt <rostedt@goodmis.org>
    Signed-off-by: Zheng Yejian <zhengyejian1@huawei.com>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ftrace: Store the order of pages allocated in ftrace_page [+ + +]
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date:   Thu Apr 1 16:14:17 2021 -0400

    ftrace: Store the order of pages allocated in ftrace_page
    
    commit db42523b4f3e83ff86b53cdda219a9767c8b047f upstream.
    
    Instead of saving the size of the records field of the ftrace_page, store
    the order it uses to allocate the pages, as that is what is needed to know
    in order to free the pages. This simplifies the code.
    
    Link: https://lore.kernel.org/lkml/CAHk-=whyMxheOqXAORt9a7JK9gc9eHTgCJ55Pgs4p=X3RrQubQ@mail.gmail.com/
    
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    [ change log written by Steven Rostedt ]
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
    Signed-off-by: Zheng Yejian <zhengyejian1@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
fuse: revalidate: don't invalidate if interrupted [+ + +]
Author: Miklos Szeredi <mszeredi@redhat.com>
Date:   Wed Jun 7 17:49:20 2023 +0200

    fuse: revalidate: don't invalidate if interrupted
    
    commit a9d1c4c6df0e568207907c04aed9e7beb1294c42 upstream.
    
    If the LOOKUP request triggered from fuse_dentry_revalidate() is
    interrupted, then the dentry will be invalidated, possibly resulting in
    submounts being unmounted.
    
    Reported-by: Xu Rongbo <xurongbo@baidu.com>
    Closes: https://lore.kernel.org/all/CAJfpegswN_CJJ6C3RZiaK6rpFmNyWmXfaEpnQUJ42KCwNF5tWw@mail.gmail.com/
    Fixes: 9e6268db496a ("[PATCH] FUSE - read-write operations")
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
gtp: Fix use-after-free in __gtp_encap_destroy(). [+ + +]
Author: Kuniyuki Iwashima <kuniyu@amazon.com>
Date:   Thu Jun 22 14:32:31 2023 -0700

    gtp: Fix use-after-free in __gtp_encap_destroy().
    
    [ Upstream commit ce3aee7114c575fab32a5e9e939d4bbb3dcca79f ]
    
    syzkaller reported use-after-free in __gtp_encap_destroy(). [0]
    
    It shows the same process freed sk and touched it illegally.
    
    Commit e198987e7dd7 ("gtp: fix suspicious RCU usage") added lock_sock()
    and release_sock() in __gtp_encap_destroy() to protect sk->sk_user_data,
    but release_sock() is called after sock_put() releases the last refcnt.
    
    [0]:
    BUG: KASAN: slab-use-after-free in instrument_atomic_read_write include/linux/instrumented.h:96 [inline]
    BUG: KASAN: slab-use-after-free in atomic_try_cmpxchg_acquire include/linux/atomic/atomic-instrumented.h:541 [inline]
    BUG: KASAN: slab-use-after-free in queued_spin_lock include/asm-generic/qspinlock.h:111 [inline]
    BUG: KASAN: slab-use-after-free in do_raw_spin_lock include/linux/spinlock.h:186 [inline]
    BUG: KASAN: slab-use-after-free in __raw_spin_lock_bh include/linux/spinlock_api_smp.h:127 [inline]
    BUG: KASAN: slab-use-after-free in _raw_spin_lock_bh+0x75/0xe0 kernel/locking/spinlock.c:178
    Write of size 4 at addr ffff88800dbef398 by task syz-executor.2/2401
    
    CPU: 1 PID: 2401 Comm: syz-executor.2 Not tainted 6.4.0-rc5-01219-gfa0e21fa4443 #2
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.0-0-gd239552ce722-prebuilt.qemu.org 04/01/2014
    Call Trace:
     <TASK>
     __dump_stack lib/dump_stack.c:88 [inline]
     dump_stack_lvl+0x72/0xa0 lib/dump_stack.c:106
     print_address_description mm/kasan/report.c:351 [inline]
     print_report+0xcc/0x620 mm/kasan/report.c:462
     kasan_report+0xb2/0xe0 mm/kasan/report.c:572
     check_region_inline mm/kasan/generic.c:181 [inline]
     kasan_check_range+0x39/0x1c0 mm/kasan/generic.c:187
     instrument_atomic_read_write include/linux/instrumented.h:96 [inline]
     atomic_try_cmpxchg_acquire include/linux/atomic/atomic-instrumented.h:541 [inline]
     queued_spin_lock include/asm-generic/qspinlock.h:111 [inline]
     do_raw_spin_lock include/linux/spinlock.h:186 [inline]
     __raw_spin_lock_bh include/linux/spinlock_api_smp.h:127 [inline]
     _raw_spin_lock_bh+0x75/0xe0 kernel/locking/spinlock.c:178
     spin_lock_bh include/linux/spinlock.h:355 [inline]
     release_sock+0x1f/0x1a0 net/core/sock.c:3526
     gtp_encap_disable_sock drivers/net/gtp.c:651 [inline]
     gtp_encap_disable+0xb9/0x220 drivers/net/gtp.c:664
     gtp_dev_uninit+0x19/0x50 drivers/net/gtp.c:728
     unregister_netdevice_many_notify+0x97e/0x1520 net/core/dev.c:10841
     rtnl_delete_link net/core/rtnetlink.c:3216 [inline]
     rtnl_dellink+0x3c0/0xb30 net/core/rtnetlink.c:3268
     rtnetlink_rcv_msg+0x450/0xb10 net/core/rtnetlink.c:6423
     netlink_rcv_skb+0x15d/0x450 net/netlink/af_netlink.c:2548
     netlink_unicast_kernel net/netlink/af_netlink.c:1339 [inline]
     netlink_unicast+0x700/0x930 net/netlink/af_netlink.c:1365
     netlink_sendmsg+0x91c/0xe30 net/netlink/af_netlink.c:1913
     sock_sendmsg_nosec net/socket.c:724 [inline]
     sock_sendmsg+0x1b7/0x200 net/socket.c:747
     ____sys_sendmsg+0x75a/0x990 net/socket.c:2493
     ___sys_sendmsg+0x11d/0x1c0 net/socket.c:2547
     __sys_sendmsg+0xfe/0x1d0 net/socket.c:2576
     do_syscall_x64 arch/x86/entry/common.c:50 [inline]
     do_syscall_64+0x3f/0x90 arch/x86/entry/common.c:80
     entry_SYSCALL_64_after_hwframe+0x72/0xdc
    RIP: 0033:0x7f1168b1fe5d
    Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 73 9f 1b 00 f7 d8 64 89 01 48
    RSP: 002b:00007f1167edccc8 EFLAGS: 00000246 ORIG_RAX: 000000000000002e
    RAX: ffffffffffffffda RBX: 00000000004bbf80 RCX: 00007f1168b1fe5d
    RDX: 0000000000000000 RSI: 00000000200002c0 RDI: 0000000000000003
    RBP: 00000000004bbf80 R08: 0000000000000000 R09: 0000000000000000
    R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
    R13: 000000000000000b R14: 00007f1168b80530 R15: 0000000000000000
     </TASK>
    
    Allocated by task 1483:
     kasan_save_stack+0x22/0x50 mm/kasan/common.c:45
     kasan_set_track+0x25/0x30 mm/kasan/common.c:52
     __kasan_slab_alloc+0x59/0x70 mm/kasan/common.c:328
     kasan_slab_alloc include/linux/kasan.h:186 [inline]
     slab_post_alloc_hook mm/slab.h:711 [inline]
     slab_alloc_node mm/slub.c:3451 [inline]
     slab_alloc mm/slub.c:3459 [inline]
     __kmem_cache_alloc_lru mm/slub.c:3466 [inline]
     kmem_cache_alloc+0x16d/0x340 mm/slub.c:3475
     sk_prot_alloc+0x5f/0x280 net/core/sock.c:2073
     sk_alloc+0x34/0x6c0 net/core/sock.c:2132
     inet6_create net/ipv6/af_inet6.c:192 [inline]
     inet6_create+0x2c7/0xf20 net/ipv6/af_inet6.c:119
     __sock_create+0x2a1/0x530 net/socket.c:1535
     sock_create net/socket.c:1586 [inline]
     __sys_socket_create net/socket.c:1623 [inline]
     __sys_socket_create net/socket.c:1608 [inline]
     __sys_socket+0x137/0x250 net/socket.c:1651
     __do_sys_socket net/socket.c:1664 [inline]
     __se_sys_socket net/socket.c:1662 [inline]
     __x64_sys_socket+0x72/0xb0 net/socket.c:1662
     do_syscall_x64 arch/x86/entry/common.c:50 [inline]
     do_syscall_64+0x3f/0x90 arch/x86/entry/common.c:80
     entry_SYSCALL_64_after_hwframe+0x72/0xdc
    
    Freed by task 2401:
     kasan_save_stack+0x22/0x50 mm/kasan/common.c:45
     kasan_set_track+0x25/0x30 mm/kasan/common.c:52
     kasan_save_free_info+0x2e/0x50 mm/kasan/generic.c:521
     ____kasan_slab_free mm/kasan/common.c:236 [inline]
     ____kasan_slab_free mm/kasan/common.c:200 [inline]
     __kasan_slab_free+0x10c/0x1b0 mm/kasan/common.c:244
     kasan_slab_free include/linux/kasan.h:162 [inline]
     slab_free_hook mm/slub.c:1781 [inline]
     slab_free_freelist_hook mm/slub.c:1807 [inline]
     slab_free mm/slub.c:3786 [inline]
     kmem_cache_free+0xb4/0x490 mm/slub.c:3808
     sk_prot_free net/core/sock.c:2113 [inline]
     __sk_destruct+0x500/0x720 net/core/sock.c:2207
     sk_destruct+0xc1/0xe0 net/core/sock.c:2222
     __sk_free+0xed/0x3d0 net/core/sock.c:2233
     sk_free+0x7c/0xa0 net/core/sock.c:2244
     sock_put include/net/sock.h:1981 [inline]
     __gtp_encap_destroy+0x165/0x1b0 drivers/net/gtp.c:634
     gtp_encap_disable_sock drivers/net/gtp.c:651 [inline]
     gtp_encap_disable+0xb9/0x220 drivers/net/gtp.c:664
     gtp_dev_uninit+0x19/0x50 drivers/net/gtp.c:728
     unregister_netdevice_many_notify+0x97e/0x1520 net/core/dev.c:10841
     rtnl_delete_link net/core/rtnetlink.c:3216 [inline]
     rtnl_dellink+0x3c0/0xb30 net/core/rtnetlink.c:3268
     rtnetlink_rcv_msg+0x450/0xb10 net/core/rtnetlink.c:6423
     netlink_rcv_skb+0x15d/0x450 net/netlink/af_netlink.c:2548
     netlink_unicast_kernel net/netlink/af_netlink.c:1339 [inline]
     netlink_unicast+0x700/0x930 net/netlink/af_netlink.c:1365
     netlink_sendmsg+0x91c/0xe30 net/netlink/af_netlink.c:1913
     sock_sendmsg_nosec net/socket.c:724 [inline]
     sock_sendmsg+0x1b7/0x200 net/socket.c:747
     ____sys_sendmsg+0x75a/0x990 net/socket.c:2493
     ___sys_sendmsg+0x11d/0x1c0 net/socket.c:2547
     __sys_sendmsg+0xfe/0x1d0 net/socket.c:2576
     do_syscall_x64 arch/x86/entry/common.c:50 [inline]
     do_syscall_64+0x3f/0x90 arch/x86/entry/common.c:80
     entry_SYSCALL_64_after_hwframe+0x72/0xdc
    
    The buggy address belongs to the object at ffff88800dbef300
     which belongs to the cache UDPv6 of size 1344
    The buggy address is located 152 bytes inside of
     freed 1344-byte region [ffff88800dbef300, ffff88800dbef840)
    
    The buggy address belongs to the physical page:
    page:00000000d31bfed5 refcount:1 mapcount:0 mapping:0000000000000000 index:0xffff88800dbeed40 pfn:0xdbe8
    head:00000000d31bfed5 order:3 entire_mapcount:0 nr_pages_mapped:0 pincount:0
    memcg:ffff888008ee0801
    flags: 0x100000000010200(slab|head|node=0|zone=1)
    page_type: 0xffffffff()
    raw: 0100000000010200 ffff88800c7a3000 dead000000000122 0000000000000000
    raw: ffff88800dbeed40 0000000080160015 00000001ffffffff ffff888008ee0801
    page dumped because: kasan: bad access detected
    
    Memory state around the buggy address:
     ffff88800dbef280: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
     ffff88800dbef300: fa fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    >ffff88800dbef380: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
                                ^
     ffff88800dbef400: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
     ffff88800dbef480: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    
    Fixes: e198987e7dd7 ("gtp: fix suspicious RCU usage")
    Reported-by: syzkaller <syzkaller@googlegroups.com>
    Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Reviewed-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Link: https://lore.kernel.org/r/20230622213231.24651-1-kuniyu@amazon.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
gve: Set default duplex configuration to full [+ + +]
Author: Junfeng Guo <junfeng.guo@intel.com>
Date:   Thu Jul 6 12:41:28 2023 +0800

    gve: Set default duplex configuration to full
    
    [ Upstream commit 0503efeadbf6bb8bf24397613a73b67e665eac5f ]
    
    Current duplex mode was unset in the driver, resulting in the default
    parameter being set to 0, which corresponds to half duplex. It might
    mislead users to have incorrect expectation about the driver's
    transmission capabilities.
    Set the default duplex configuration to full, as the driver runs in
    full duplex mode at this point.
    
    Fixes: 7e074d5a76ca ("gve: Enable Link Speed Reporting in the driver.")
    Signed-off-by: Junfeng Guo <junfeng.guo@intel.com>
    Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
    Message-ID: <20230706044128.2726747-1-junfeng.guo@intel.com>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
HID: logitech-hidpp: add HIDPP_QUIRK_DELAYED_INIT for the T651. [+ + +]
Author: Mike Hommey <mh@glandium.org>
Date:   Sun Jun 18 08:09:57 2023 +0900

    HID: logitech-hidpp: add HIDPP_QUIRK_DELAYED_INIT for the T651.
    
    commit 5fe251112646d8626818ea90f7af325bab243efa upstream.
    
    commit 498ba2069035 ("HID: logitech-hidpp: Don't restart communication if
    not necessary") put restarting communication behind that flag, and this
    was apparently necessary on the T651, but the flag was not set for it.
    
    Fixes: 498ba2069035 ("HID: logitech-hidpp: Don't restart communication if not necessary")
    Cc: stable@vger.kernel.org
    Signed-off-by: Mike Hommey <mh@glandium.org>
    Link: https://lore.kernel.org/r/20230617230957.6mx73th4blv7owqk@glandium.org
    Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

HID: wacom: Use ktime_t rather than int when dealing with timestamps [+ + +]
Author: Jason Gerecke <jason.gerecke@wacom.com>
Date:   Thu Jun 8 14:38:28 2023 -0700

    HID: wacom: Use ktime_t rather than int when dealing with timestamps
    
    commit 9a6c0e28e215535b2938c61ded54603b4e5814c5 upstream.
    
    Code which interacts with timestamps needs to use the ktime_t type
    returned by functions like ktime_get. The int type does not offer
    enough space to store these values, and attempting to use it is a
    recipe for problems. In this particular case, overflows would occur
    when calculating/storing timestamps leading to incorrect values being
    reported to userspace. In some cases these bad timestamps cause input
    handling in userspace to appear hung.
    
    Link: https://gitlab.freedesktop.org/libinput/libinput/-/issues/901
    Fixes: 17d793f3ed53 ("HID: wacom: insert timestamp to packed Bluetooth (BT) events")
    CC: stable@vger.kernel.org
    Signed-off-by: Jason Gerecke <jason.gerecke@wacom.com>
    Reviewed-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
    Link: https://lore.kernel.org/r/20230608213828.2108-1-jason.gerecke@wacom.com
    Signed-off-by: Benjamin Tissoires <bentiss@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
hwmon: (adm1275) Allow setting sample averaging [+ + +]
Author: Potin Lai <potin.lai@quantatw.com>
Date:   Wed Mar 2 20:38:16 2022 +0800

    hwmon: (adm1275) Allow setting sample averaging
    
    [ Upstream commit a3cd66d7cbadcc0c29884f25b754fd22699c719c ]
    
    Current driver assume PWR_AVG and VI_AVG as 1 by default, and user needs
    to set sample averaging via sysfs manually.
    
    This patch parses the properties "adi,power-sample-average" and
    "adi,volt-curr-sample-average" from device tree, and setting sample
    averaging during probe. Input value must be one of value in the
    list [1, 2, 4, 8, 16, 32, 64, 128].
    
    Signed-off-by: Potin Lai <potin.lai@quantatw.com>
    Link: https://lore.kernel.org/r/20220302123817.27025-2-potin.lai@quantatw.com
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Stable-dep-of: b153a0bb4199 ("hwmon: (pmbus/adm1275) Fix problems with temperature monitoring on ADM1272")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwmon: (adm1275) enable adm1272 temperature reporting [+ + +]
Author: Chu Lin <linchuyuan@google.com>
Date:   Wed May 12 17:10:43 2021 +0000

    hwmon: (adm1275) enable adm1272 temperature reporting
    
    [ Upstream commit 9da9c2dc57b2fa2e65521894cb66df4bf615214d ]
    
    adm1272 supports temperature reporting but it is disabled by default.
    
    Tested:
    ls temp1_*
    temp1_crit           temp1_highest        temp1_max
    temp1_crit_alarm     temp1_input          temp1_max_alarm
    
    cat temp1_input
    26642
    
    Signed-off-by: Chu Lin <linchuyuan@google.com>
    Link: https://lore.kernel.org/r/20210512171043.2433694-1-linchuyuan@google.com
    [groeck: Updated subject to reflect correct driver]
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Stable-dep-of: b153a0bb4199 ("hwmon: (pmbus/adm1275) Fix problems with temperature monitoring on ADM1272")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwmon: (gsc-hwmon) fix fan pwm temperature scaling [+ + +]
Author: Tim Harvey <tharvey@gateworks.com>
Date:   Tue Jun 6 08:30:04 2023 -0700

    hwmon: (gsc-hwmon) fix fan pwm temperature scaling
    
    [ Upstream commit a6d80df47ee2c69db99e4f2f8871aa4db154620b ]
    
    The GSC fan pwm temperature register is in centidegrees celcius but the
    Linux hwmon convention is to use milidegrees celcius. Fix the scaling.
    
    Fixes: 3bce5377ef66 ("hwmon: Add Gateworks System Controller support")
    Signed-off-by: Tim Harvey <tharvey@gateworks.com>
    Link: https://lore.kernel.org/r/20230606153004.1448086-1-tharvey@gateworks.com
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwmon: (pmbus/adm1275) Fix problems with temperature monitoring on ADM1272 [+ + +]
Author: Guenter Roeck <linux@roeck-us.net>
Date:   Fri Jun 2 14:34:47 2023 -0700

    hwmon: (pmbus/adm1275) Fix problems with temperature monitoring on ADM1272
    
    [ Upstream commit b153a0bb4199566abd337119207f82b59a8cd1ca ]
    
    The PMON_CONFIG register on ADM1272 is a 16 bit register. Writing a 8 bit
    value into it clears the upper 8 bits of the register, resulting in
    unexpected side effects. Fix by writing the 16 bit register value.
    
    Also, it has been reported that temperature readings are sometimes widely
    inaccurate, to the point where readings may result in device shutdown due
    to errant overtemperature faults. Improve by enabling temperature sampling.
    
    While at it, move the common code for ADM1272 and ADM1278 into a separate
    function, and clarify in the error message that an attempt was made to
    enable both VOUT and temperature monitoring.
    
    Last but not least, return the error code reported by the underlying I2C
    controller and not -ENODEV if updating the PMON_CONFIG register fails.
    After all, this does not indicate that the chip is not present, but an
    error in the communication with the chip.
    
    Fixes: 4ff0ce227a1e ("hwmon: (pmbus/adm1275) Add support for ADM1272")
    Fixes: 9da9c2dc57b2 ("hwmon: (adm1275) enable adm1272 temperature reporting")
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Link: https://lore.kernel.org/r/20230602213447.3557346-1-linux@roeck-us.net
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
hwrng: imx-rngc - fix the timeout for init and self check [+ + +]
Author: Martin Kaiser <martin@kaiser.cx>
Date:   Thu Jun 15 15:49:59 2023 +0100

    hwrng: imx-rngc - fix the timeout for init and self check
    
    commit d744ae7477190967a3ddc289e2cd4ae59e8b1237 upstream.
    
    Fix the timeout that is used for the initialisation and for the self
    test. wait_for_completion_timeout expects a timeout in jiffies, but
    RNGC_TIMEOUT is in milliseconds. Call msecs_to_jiffies to do the
    conversion.
    
    Cc: stable@vger.kernel.org
    Fixes: 1d5449445bd0 ("hwrng: mx-rngc - add a driver for Freescale RNGC")
    Signed-off-by: Martin Kaiser <martin@kaiser.cx>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

hwrng: st - keep clock enabled while hwrng is registered [+ + +]
Author: Martin Kaiser <martin@kaiser.cx>
Date:   Fri Jun 16 09:58:13 2023 +0100

    hwrng: st - keep clock enabled while hwrng is registered
    
    [ Upstream commit 501e197a02d4aef157f53ba3a0b9049c3e52fedc ]
    
    The st-rng driver uses devres to register itself with the hwrng core,
    the driver will be unregistered from hwrng when its device goes out of
    scope. This happens after the driver's remove function is called.
    
    However, st-rng's clock is disabled in the remove function. There's a
    short timeframe where st-rng is still registered with the hwrng core
    although its clock is disabled. I suppose the clock must be active to
    access the hardware and serve requests from the hwrng core.
    
    Switch to devm_clk_get_enabled and let devres disable the clock and
    unregister the hwrng. This avoids the race condition.
    
    Fixes: 3e75241be808 ("hwrng: drivers - Use device-managed registration API")
    Signed-off-by: Martin Kaiser <martin@kaiser.cx>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwrng: virtio - add an internal buffer [+ + +]
Author: Laurent Vivier <lvivier@redhat.com>
Date:   Thu Oct 28 12:11:08 2021 +0200

    hwrng: virtio - add an internal buffer
    
    [ Upstream commit bf3175bc50a3754dc427e2f5046e17a9fafc8be7 ]
    
    hwrng core uses two buffers that can be mixed in the
    virtio-rng queue.
    
    If the buffer is provided with wait=0 it is enqueued in the
    virtio-rng queue but unused by the caller.
    On the next call, core provides another buffer but the
    first one is filled instead and the new one queued.
    And the caller reads the data from the new one that is not
    updated, and the data in the first one are lost.
    
    To avoid this mix, virtio-rng needs to use its own unique
    internal buffer at a cost of a data copy to the caller buffer.
    
    Signed-off-by: Laurent Vivier <lvivier@redhat.com>
    Link: https://lore.kernel.org/r/20211028101111.128049-2-lvivier@redhat.com
    Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
    Stable-dep-of: ac52578d6e8d ("hwrng: virtio - Fix race on data_avail and actual data")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwrng: virtio - always add a pending request [+ + +]
Author: Laurent Vivier <lvivier@redhat.com>
Date:   Thu Oct 28 12:11:11 2021 +0200

    hwrng: virtio - always add a pending request
    
    [ Upstream commit 9a4b612d675b03f7fc9fa1957ca399c8223f3954 ]
    
    If we ensure we have already some data available by enqueuing
    again the buffer once data are exhausted, we can return what we
    have without waiting for the device answer.
    
    Signed-off-by: Laurent Vivier <lvivier@redhat.com>
    Link: https://lore.kernel.org/r/20211028101111.128049-5-lvivier@redhat.com
    Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
    Stable-dep-of: ac52578d6e8d ("hwrng: virtio - Fix race on data_avail and actual data")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwrng: virtio - don't wait on cleanup [+ + +]
Author: Laurent Vivier <lvivier@redhat.com>
Date:   Thu Oct 28 12:11:09 2021 +0200

    hwrng: virtio - don't wait on cleanup
    
    [ Upstream commit 2bb31abdbe55742c89f4dc0cc26fcbc8467364f6 ]
    
    When virtio-rng device was dropped by the hwrng core we were forced
    to wait the buffer to come back from the device to not have
    remaining ongoing operation that could spoil the buffer.
    
    But now, as the buffer is internal to the virtio-rng we can release
    the waiting loop immediately, the buffer will be retrieve and use
    when the virtio-rng driver will be selected again.
    
    This avoids to hang on an rng_current write command if the virtio-rng
    device is blocked by a lack of entropy. This allows to select
    another entropy source if the current one is empty.
    
    Signed-off-by: Laurent Vivier <lvivier@redhat.com>
    Link: https://lore.kernel.org/r/20211028101111.128049-3-lvivier@redhat.com
    Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
    Stable-dep-of: ac52578d6e8d ("hwrng: virtio - Fix race on data_avail and actual data")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwrng: virtio - don't waste entropy [+ + +]
Author: Laurent Vivier <lvivier@redhat.com>
Date:   Thu Oct 28 12:11:10 2021 +0200

    hwrng: virtio - don't waste entropy
    
    [ Upstream commit 5c8e933050044d6dd2a000f9a5756ae73cbe7c44 ]
    
    if we don't use all the entropy available in the buffer, keep it
    and use it later.
    
    Signed-off-by: Laurent Vivier <lvivier@redhat.com>
    Link: https://lore.kernel.org/r/20211028101111.128049-4-lvivier@redhat.com
    Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
    Stable-dep-of: ac52578d6e8d ("hwrng: virtio - Fix race on data_avail and actual data")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwrng: virtio - Fix race on data_avail and actual data [+ + +]
Author: Herbert Xu <herbert@gondor.apana.org.au>
Date:   Thu May 4 11:59:32 2023 +0800

    hwrng: virtio - Fix race on data_avail and actual data
    
    [ Upstream commit ac52578d6e8d300dd50f790f29a24169b1edd26c ]
    
    The virtio rng device kicks off a new entropy request whenever the
    data available reaches zero.  When a new request occurs at the end
    of a read operation, that is, when the result of that request is
    only needed by the next reader, then there is a race between the
    writing of the new data and the next reader.
    
    This is because there is no synchronisation whatsoever between the
    writer and the reader.
    
    Fix this by writing data_avail with smp_store_release and reading
    it with smp_load_acquire when we first enter read.  The subsequent
    reads are safe because they're either protected by the first load
    acquire, or by the completion mechanism.
    
    Also remove the redundant zeroing of data_idx in random_recv_done
    (data_idx must already be zero at this point) and data_avail in
    request_entropy (ditto).
    
    Reported-by: syzbot+726dc8c62c3536431ceb@syzkaller.appspotmail.com
    Fixes: f7f510ec1957 ("virtio: An entropy device, as suggested by hpa.")
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Acked-by: Michael S. Tsirkin <mst@redhat.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
i2c: qup: Add missing unwind goto in qup_i2c_probe() [+ + +]
Author: Shuai Jiang <d202180596@hust.edu.cn>
Date:   Tue Apr 18 21:56:12 2023 +0800

    i2c: qup: Add missing unwind goto in qup_i2c_probe()
    
    commit cd9489623c29aa2f8cc07088168afb6e0d5ef06d upstream.
    
    Smatch Warns:
            drivers/i2c/busses/i2c-qup.c:1784 qup_i2c_probe()
            warn: missing unwind goto?
    
    The goto label "fail_runtime" and "fail" will disable qup->pclk,
    but here qup->pclk failed to obtain, in order to be consistent,
    change the direct return to goto label "fail_dma".
    
    Fixes: 9cedf3b2f099 ("i2c: qup: Add bam dma capabilities")
    Signed-off-by: Shuai Jiang <d202180596@hust.edu.cn>
    Reviewed-by: Dongliang Mu <dzm91@hust.edu.cn>
    Reviewed-by: Andi Shyti <andi.shyti@kernel.org>
    Signed-off-by: Wolfram Sang <wsa@kernel.org>
    Cc: <stable@vger.kernel.org> # v4.6+
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

i2c: xiic: Defer xiic_wakeup() and __xiic_start_xfer() in xiic_process() [+ + +]
Author: Marek Vasut <marex@denx.de>
Date:   Mon Aug 23 23:41:42 2021 +0200

    i2c: xiic: Defer xiic_wakeup() and __xiic_start_xfer() in xiic_process()
    
    [ Upstream commit 743e227a895923c37a333eb2ebf3e391f00c406d ]
    
    The __xiic_start_xfer() manipulates the interrupt flags, xiic_wakeup()
    may result in return from xiic_xfer() early. Defer both to the end of
    the xiic_process() interrupt thread, so that they are executed after
    all the other interrupt bits handling completed and once it completely
    safe to perform changes to the interrupt bits in the hardware.
    
    Signed-off-by: Marek Vasut <marex@denx.de>
    Acked-by: Michal Simek <michal.simek@xilinx.com>
    Signed-off-by: Wolfram Sang <wsa@kernel.org>
    Stable-dep-of: cb6e45c9a0ad ("i2c: xiic: Don't try to handle more interrupt events after error")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

i2c: xiic: Don't try to handle more interrupt events after error [+ + +]
Author: Robert Hancock <robert.hancock@calian.com>
Date:   Tue Jun 6 12:25:58 2023 -0600

    i2c: xiic: Don't try to handle more interrupt events after error
    
    [ Upstream commit cb6e45c9a0ad9e0f8664fd06db0227d185dc76ab ]
    
    In xiic_process, it is possible that error events such as arbitration
    lost or TX error can be raised in conjunction with other interrupt flags
    such as TX FIFO empty or bus not busy. Error events result in the
    controller being reset and the error returned to the calling request,
    but the function could potentially try to keep handling the other
    events, such as by writing more messages into the TX FIFO. Since the
    transaction has already failed, this is not helpful and will just cause
    issues.
    
    This problem has been present ever since:
    
    commit 7f9906bd7f72 ("i2c: xiic: Service all interrupts in isr")
    
    which allowed non-error events to be handled after errors, but became
    more obvious after:
    
    commit 743e227a8959 ("i2c: xiic: Defer xiic_wakeup() and
    __xiic_start_xfer() in xiic_process()")
    
    which reworked the code to add a WARN_ON which triggers if both the
    xfer_more and wakeup_req flags were set, since this combination is
    not supposed to happen, but was occurring in this scenario.
    
    Skip further interrupt handling after error flags are detected to avoid
    this problem.
    
    Fixes: 7f9906bd7f72 ("i2c: xiic: Service all interrupts in isr")
    Signed-off-by: Robert Hancock <robert.hancock@calian.com>
    Acked-by: Andi Shyti <andi.shyti@kernel.org>
    Signed-off-by: Wolfram Sang <wsa@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
iavf: Fix out-of-bounds when setting channels on remove [+ + +]
Author: Ding Hui <dinghui@sangfor.com.cn>
Date:   Tue May 9 19:11:48 2023 +0800

    iavf: Fix out-of-bounds when setting channels on remove
    
    [ Upstream commit 7c4bced3caa749ce468b0c5de711c98476b23a52 ]
    
    If we set channels greater during iavf_remove(), and waiting reset done
    would be timeout, then returned with error but changed num_active_queues
    directly, that will lead to OOB like the following logs. Because the
    num_active_queues is greater than tx/rx_rings[] allocated actually.
    
    Reproducer:
    
      [root@host ~]# cat repro.sh
      #!/bin/bash
    
      pf_dbsf="0000:41:00.0"
      vf0_dbsf="0000:41:02.0"
      g_pids=()
    
      function do_set_numvf()
      {
          echo 2 >/sys/bus/pci/devices/${pf_dbsf}/sriov_numvfs
          sleep $((RANDOM%3+1))
          echo 0 >/sys/bus/pci/devices/${pf_dbsf}/sriov_numvfs
          sleep $((RANDOM%3+1))
      }
    
      function do_set_channel()
      {
          local nic=$(ls -1 --indicator-style=none /sys/bus/pci/devices/${vf0_dbsf}/net/)
          [ -z "$nic" ] && { sleep $((RANDOM%3)) ; return 1; }
          ifconfig $nic 192.168.18.5 netmask 255.255.255.0
          ifconfig $nic up
          ethtool -L $nic combined 1
          ethtool -L $nic combined 4
          sleep $((RANDOM%3))
      }
    
      function on_exit()
      {
          local pid
          for pid in "${g_pids[@]}"; do
              kill -0 "$pid" &>/dev/null && kill "$pid" &>/dev/null
          done
          g_pids=()
      }
    
      trap "on_exit; exit" EXIT
    
      while :; do do_set_numvf ; done &
      g_pids+=($!)
      while :; do do_set_channel ; done &
      g_pids+=($!)
    
      wait
    
    Result:
    
    [ 3506.152887] iavf 0000:41:02.0: Removing device
    [ 3510.400799] ==================================================================
    [ 3510.400820] BUG: KASAN: slab-out-of-bounds in iavf_free_all_tx_resources+0x156/0x160 [iavf]
    [ 3510.400823] Read of size 8 at addr ffff88b6f9311008 by task repro.sh/55536
    [ 3510.400823]
    [ 3510.400830] CPU: 101 PID: 55536 Comm: repro.sh Kdump: loaded Tainted: G           O     --------- -t - 4.18.0 #1
    [ 3510.400832] Hardware name: Powerleader PR2008AL/H12DSi-N6, BIOS 2.0 04/09/2021
    [ 3510.400835] Call Trace:
    [ 3510.400851]  dump_stack+0x71/0xab
    [ 3510.400860]  print_address_description+0x6b/0x290
    [ 3510.400865]  ? iavf_free_all_tx_resources+0x156/0x160 [iavf]
    [ 3510.400868]  kasan_report+0x14a/0x2b0
    [ 3510.400873]  iavf_free_all_tx_resources+0x156/0x160 [iavf]
    [ 3510.400880]  iavf_remove+0x2b6/0xc70 [iavf]
    [ 3510.400884]  ? iavf_free_all_rx_resources+0x160/0x160 [iavf]
    [ 3510.400891]  ? wait_woken+0x1d0/0x1d0
    [ 3510.400895]  ? notifier_call_chain+0xc1/0x130
    [ 3510.400903]  pci_device_remove+0xa8/0x1f0
    [ 3510.400910]  device_release_driver_internal+0x1c6/0x460
    [ 3510.400916]  pci_stop_bus_device+0x101/0x150
    [ 3510.400919]  pci_stop_and_remove_bus_device+0xe/0x20
    [ 3510.400924]  pci_iov_remove_virtfn+0x187/0x420
    [ 3510.400927]  ? pci_iov_add_virtfn+0xe10/0xe10
    [ 3510.400929]  ? pci_get_subsys+0x90/0x90
    [ 3510.400932]  sriov_disable+0xed/0x3e0
    [ 3510.400936]  ? bus_find_device+0x12d/0x1a0
    [ 3510.400953]  i40e_free_vfs+0x754/0x1210 [i40e]
    [ 3510.400966]  ? i40e_reset_all_vfs+0x880/0x880 [i40e]
    [ 3510.400968]  ? pci_get_device+0x7c/0x90
    [ 3510.400970]  ? pci_get_subsys+0x90/0x90
    [ 3510.400982]  ? pci_vfs_assigned.part.7+0x144/0x210
    [ 3510.400987]  ? __mutex_lock_slowpath+0x10/0x10
    [ 3510.400996]  i40e_pci_sriov_configure+0x1fa/0x2e0 [i40e]
    [ 3510.401001]  sriov_numvfs_store+0x214/0x290
    [ 3510.401005]  ? sriov_totalvfs_show+0x30/0x30
    [ 3510.401007]  ? __mutex_lock_slowpath+0x10/0x10
    [ 3510.401011]  ? __check_object_size+0x15a/0x350
    [ 3510.401018]  kernfs_fop_write+0x280/0x3f0
    [ 3510.401022]  vfs_write+0x145/0x440
    [ 3510.401025]  ksys_write+0xab/0x160
    [ 3510.401028]  ? __ia32_sys_read+0xb0/0xb0
    [ 3510.401031]  ? fput_many+0x1a/0x120
    [ 3510.401032]  ? filp_close+0xf0/0x130
    [ 3510.401038]  do_syscall_64+0xa0/0x370
    [ 3510.401041]  ? page_fault+0x8/0x30
    [ 3510.401043]  entry_SYSCALL_64_after_hwframe+0x65/0xca
    [ 3510.401073] RIP: 0033:0x7f3a9bb842c0
    [ 3510.401079] Code: 73 01 c3 48 8b 0d d8 cb 2c 00 f7 d8 64 89 01 48 83 c8 ff c3 66 0f 1f 44 00 00 83 3d 89 24 2d 00 00 75 10 b8 01 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 31 c3 48 83 ec 08 e8 fe dd 01 00 48 89 04 24
    [ 3510.401080] RSP: 002b:00007ffc05f1fe18 EFLAGS: 00000246 ORIG_RAX: 0000000000000001
    [ 3510.401083] RAX: ffffffffffffffda RBX: 0000000000000002 RCX: 00007f3a9bb842c0
    [ 3510.401085] RDX: 0000000000000002 RSI: 0000000002327408 RDI: 0000000000000001
    [ 3510.401086] RBP: 0000000002327408 R08: 00007f3a9be53780 R09: 00007f3a9c8a4700
    [ 3510.401086] R10: 0000000000000001 R11: 0000000000000246 R12: 0000000000000002
    [ 3510.401087] R13: 0000000000000001 R14: 00007f3a9be52620 R15: 0000000000000001
    [ 3510.401090]
    [ 3510.401093] Allocated by task 76795:
    [ 3510.401098]  kasan_kmalloc+0xa6/0xd0
    [ 3510.401099]  __kmalloc+0xfb/0x200
    [ 3510.401104]  iavf_init_interrupt_scheme+0x26f/0x1310 [iavf]
    [ 3510.401108]  iavf_watchdog_task+0x1d58/0x4050 [iavf]
    [ 3510.401114]  process_one_work+0x56a/0x11f0
    [ 3510.401115]  worker_thread+0x8f/0xf40
    [ 3510.401117]  kthread+0x2a0/0x390
    [ 3510.401119]  ret_from_fork+0x1f/0x40
    [ 3510.401122]  0xffffffffffffffff
    [ 3510.401123]
    
    In timeout handling, we should keep the original num_active_queues
    and reset num_req_queues to 0.
    
    Fixes: 4e5e6b5d9d13 ("iavf: Fix return of set the new channel count")
    Signed-off-by: Ding Hui <dinghui@sangfor.com.cn>
    Cc: Donglin Peng <pengdonglin@sangfor.com.cn>
    Cc: Huang Cun <huangcun@sangfor.com.cn>
    Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
    Tested-by: Rafal Romanowski <rafal.romanowski@intel.com>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

iavf: Fix use-after-free in free_netdev [+ + +]
Author: Ding Hui <dinghui@sangfor.com.cn>
Date:   Tue May 9 19:11:47 2023 +0800

    iavf: Fix use-after-free in free_netdev
    
    [ Upstream commit 5f4fa1672d98fe99d2297b03add35346f1685d6b ]
    
    We do netif_napi_add() for all allocated q_vectors[], but potentially
    do netif_napi_del() for part of them, then kfree q_vectors and leave
    invalid pointers at dev->napi_list.
    
    Reproducer:
    
      [root@host ~]# cat repro.sh
      #!/bin/bash
    
      pf_dbsf="0000:41:00.0"
      vf0_dbsf="0000:41:02.0"
      g_pids=()
    
      function do_set_numvf()
      {
          echo 2 >/sys/bus/pci/devices/${pf_dbsf}/sriov_numvfs
          sleep $((RANDOM%3+1))
          echo 0 >/sys/bus/pci/devices/${pf_dbsf}/sriov_numvfs
          sleep $((RANDOM%3+1))
      }
    
      function do_set_channel()
      {
          local nic=$(ls -1 --indicator-style=none /sys/bus/pci/devices/${vf0_dbsf}/net/)
          [ -z "$nic" ] && { sleep $((RANDOM%3)) ; return 1; }
          ifconfig $nic 192.168.18.5 netmask 255.255.255.0
          ifconfig $nic up
          ethtool -L $nic combined 1
          ethtool -L $nic combined 4
          sleep $((RANDOM%3))
      }
    
      function on_exit()
      {
          local pid
          for pid in "${g_pids[@]}"; do
              kill -0 "$pid" &>/dev/null && kill "$pid" &>/dev/null
          done
          g_pids=()
      }
    
      trap "on_exit; exit" EXIT
    
      while :; do do_set_numvf ; done &
      g_pids+=($!)
      while :; do do_set_channel ; done &
      g_pids+=($!)
    
      wait
    
    Result:
    
    [ 4093.900222] ==================================================================
    [ 4093.900230] BUG: KASAN: use-after-free in free_netdev+0x308/0x390
    [ 4093.900232] Read of size 8 at addr ffff88b4dc145640 by task repro.sh/6699
    [ 4093.900233]
    [ 4093.900236] CPU: 10 PID: 6699 Comm: repro.sh Kdump: loaded Tainted: G           O     --------- -t - 4.18.0 #1
    [ 4093.900238] Hardware name: Powerleader PR2008AL/H12DSi-N6, BIOS 2.0 04/09/2021
    [ 4093.900239] Call Trace:
    [ 4093.900244]  dump_stack+0x71/0xab
    [ 4093.900249]  print_address_description+0x6b/0x290
    [ 4093.900251]  ? free_netdev+0x308/0x390
    [ 4093.900252]  kasan_report+0x14a/0x2b0
    [ 4093.900254]  free_netdev+0x308/0x390
    [ 4093.900261]  iavf_remove+0x825/0xd20 [iavf]
    [ 4093.900265]  pci_device_remove+0xa8/0x1f0
    [ 4093.900268]  device_release_driver_internal+0x1c6/0x460
    [ 4093.900271]  pci_stop_bus_device+0x101/0x150
    [ 4093.900273]  pci_stop_and_remove_bus_device+0xe/0x20
    [ 4093.900275]  pci_iov_remove_virtfn+0x187/0x420
    [ 4093.900277]  ? pci_iov_add_virtfn+0xe10/0xe10
    [ 4093.900278]  ? pci_get_subsys+0x90/0x90
    [ 4093.900280]  sriov_disable+0xed/0x3e0
    [ 4093.900282]  ? bus_find_device+0x12d/0x1a0
    [ 4093.900290]  i40e_free_vfs+0x754/0x1210 [i40e]
    [ 4093.900298]  ? i40e_reset_all_vfs+0x880/0x880 [i40e]
    [ 4093.900299]  ? pci_get_device+0x7c/0x90
    [ 4093.900300]  ? pci_get_subsys+0x90/0x90
    [ 4093.900306]  ? pci_vfs_assigned.part.7+0x144/0x210
    [ 4093.900309]  ? __mutex_lock_slowpath+0x10/0x10
    [ 4093.900315]  i40e_pci_sriov_configure+0x1fa/0x2e0 [i40e]
    [ 4093.900318]  sriov_numvfs_store+0x214/0x290
    [ 4093.900320]  ? sriov_totalvfs_show+0x30/0x30
    [ 4093.900321]  ? __mutex_lock_slowpath+0x10/0x10
    [ 4093.900323]  ? __check_object_size+0x15a/0x350
    [ 4093.900326]  kernfs_fop_write+0x280/0x3f0
    [ 4093.900329]  vfs_write+0x145/0x440
    [ 4093.900330]  ksys_write+0xab/0x160
    [ 4093.900332]  ? __ia32_sys_read+0xb0/0xb0
    [ 4093.900334]  ? fput_many+0x1a/0x120
    [ 4093.900335]  ? filp_close+0xf0/0x130
    [ 4093.900338]  do_syscall_64+0xa0/0x370
    [ 4093.900339]  ? page_fault+0x8/0x30
    [ 4093.900341]  entry_SYSCALL_64_after_hwframe+0x65/0xca
    [ 4093.900357] RIP: 0033:0x7f16ad4d22c0
    [ 4093.900359] Code: 73 01 c3 48 8b 0d d8 cb 2c 00 f7 d8 64 89 01 48 83 c8 ff c3 66 0f 1f 44 00 00 83 3d 89 24 2d 00 00 75 10 b8 01 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 31 c3 48 83 ec 08 e8 fe dd 01 00 48 89 04 24
    [ 4093.900360] RSP: 002b:00007ffd6491b7f8 EFLAGS: 00000246 ORIG_RAX: 0000000000000001
    [ 4093.900362] RAX: ffffffffffffffda RBX: 0000000000000002 RCX: 00007f16ad4d22c0
    [ 4093.900363] RDX: 0000000000000002 RSI: 0000000001a41408 RDI: 0000000000000001
    [ 4093.900364] RBP: 0000000001a41408 R08: 00007f16ad7a1780 R09: 00007f16ae1f2700
    [ 4093.900364] R10: 0000000000000001 R11: 0000000000000246 R12: 0000000000000002
    [ 4093.900365] R13: 0000000000000001 R14: 00007f16ad7a0620 R15: 0000000000000001
    [ 4093.900367]
    [ 4093.900368] Allocated by task 820:
    [ 4093.900371]  kasan_kmalloc+0xa6/0xd0
    [ 4093.900373]  __kmalloc+0xfb/0x200
    [ 4093.900376]  iavf_init_interrupt_scheme+0x63b/0x1320 [iavf]
    [ 4093.900380]  iavf_watchdog_task+0x3d51/0x52c0 [iavf]
    [ 4093.900382]  process_one_work+0x56a/0x11f0
    [ 4093.900383]  worker_thread+0x8f/0xf40
    [ 4093.900384]  kthread+0x2a0/0x390
    [ 4093.900385]  ret_from_fork+0x1f/0x40
    [ 4093.900387]  0xffffffffffffffff
    [ 4093.900387]
    [ 4093.900388] Freed by task 6699:
    [ 4093.900390]  __kasan_slab_free+0x137/0x190
    [ 4093.900391]  kfree+0x8b/0x1b0
    [ 4093.900394]  iavf_free_q_vectors+0x11d/0x1a0 [iavf]
    [ 4093.900397]  iavf_remove+0x35a/0xd20 [iavf]
    [ 4093.900399]  pci_device_remove+0xa8/0x1f0
    [ 4093.900400]  device_release_driver_internal+0x1c6/0x460
    [ 4093.900401]  pci_stop_bus_device+0x101/0x150
    [ 4093.900402]  pci_stop_and_remove_bus_device+0xe/0x20
    [ 4093.900403]  pci_iov_remove_virtfn+0x187/0x420
    [ 4093.900404]  sriov_disable+0xed/0x3e0
    [ 4093.900409]  i40e_free_vfs+0x754/0x1210 [i40e]
    [ 4093.900415]  i40e_pci_sriov_configure+0x1fa/0x2e0 [i40e]
    [ 4093.900416]  sriov_numvfs_store+0x214/0x290
    [ 4093.900417]  kernfs_fop_write+0x280/0x3f0
    [ 4093.900418]  vfs_write+0x145/0x440
    [ 4093.900419]  ksys_write+0xab/0x160
    [ 4093.900420]  do_syscall_64+0xa0/0x370
    [ 4093.900421]  entry_SYSCALL_64_after_hwframe+0x65/0xca
    [ 4093.900422]  0xffffffffffffffff
    [ 4093.900422]
    [ 4093.900424] The buggy address belongs to the object at ffff88b4dc144200
                    which belongs to the cache kmalloc-8k of size 8192
    [ 4093.900425] The buggy address is located 5184 bytes inside of
                    8192-byte region [ffff88b4dc144200, ffff88b4dc146200)
    [ 4093.900425] The buggy address belongs to the page:
    [ 4093.900427] page:ffffea00d3705000 refcount:1 mapcount:0 mapping:ffff88bf04415c80 index:0x0 compound_mapcount: 0
    [ 4093.900430] flags: 0x10000000008100(slab|head)
    [ 4093.900433] raw: 0010000000008100 dead000000000100 dead000000000200 ffff88bf04415c80
    [ 4093.900434] raw: 0000000000000000 0000000000030003 00000001ffffffff 0000000000000000
    [ 4093.900434] page dumped because: kasan: bad access detected
    [ 4093.900435]
    [ 4093.900435] Memory state around the buggy address:
    [ 4093.900436]  ffff88b4dc145500: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    [ 4093.900437]  ffff88b4dc145580: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    [ 4093.900438] >ffff88b4dc145600: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    [ 4093.900438]                                            ^
    [ 4093.900439]  ffff88b4dc145680: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    [ 4093.900440]  ffff88b4dc145700: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    [ 4093.900440] ==================================================================
    
    Although the patch #2 (of 2) can avoid the issue triggered by this
    repro.sh, there still are other potential risks that if num_active_queues
    is changed to less than allocated q_vectors[] by unexpected, the
    mismatched netif_napi_add/del() can also cause UAF.
    
    Since we actually call netif_napi_add() for all allocated q_vectors
    unconditionally in iavf_alloc_q_vectors(), so we should fix it by
    letting netif_napi_del() match to netif_napi_add().
    
    Fixes: 5eae00c57f5e ("i40evf: main driver core")
    Signed-off-by: Ding Hui <dinghui@sangfor.com.cn>
    Cc: Donglin Peng <pengdonglin@sangfor.com.cn>
    Cc: Huang Cun <huangcun@sangfor.com.cn>
    Reviewed-by: Simon Horman <simon.horman@corigine.com>
    Reviewed-by: Madhu Chittim <madhu.chittim@intel.com>
    Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
    Tested-by: Rafal Romanowski <rafal.romanowski@intel.com>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
IB/hfi1: Fix sdma.h tx->num_descs off-by-one errors [+ + +]
Author: Patrick Kelsey <pat.kelsey@cornelisnetworks.com>
Date:   Thu Feb 16 11:56:28 2023 -0500

    IB/hfi1: Fix sdma.h tx->num_descs off-by-one errors
    
    [ Upstream commit fd8958efe8779d3db19c9124fce593ce681ac709 ]
    
    Fix three sources of error involving struct sdma_txreq.num_descs.
    
    When _extend_sdma_tx_descs() extends the descriptor array, it uses the
    value of tx->num_descs to determine how many existing entries from the
    tx's original, internal descriptor array to copy to the newly allocated
    one.  As this value was incremented before the call, the copy loop will
    access one entry past the internal descriptor array, copying its contents
    into the corresponding slot in the new array.
    
    If the call to _extend_sdma_tx_descs() fails, _pad_smda_tx_descs() then
    invokes __sdma_tx_clean() which uses the value of tx->num_desc to drive a
    loop that unmaps all descriptor entries in use.  As this value was
    incremented before the call, the unmap loop will invoke sdma_unmap_desc()
    on a descriptor entry whose contents consist of whatever random data was
    copied into it during (1), leading to cascading further calls into the
    kernel and driver using arbitrary data.
    
    _sdma_close_tx() was using tx->num_descs instead of tx->num_descs - 1.
    
    Fix all of the above by:
    - Only increment .num_descs after .descp is extended.
    - Use .num_descs - 1 instead of .num_descs for last .descp entry.
    
    Fixes: f4d26d81ad7f ("staging/rdma/hfi1: Add coalescing support for SDMA TX descriptors")
    Link: https://lore.kernel.org/r/167656658879.2223096.10026561343022570690.stgit@awfm-02.cornelisnetworks.com
    Signed-off-by: Brendan Cunningham <bcunningham@cornelisnetworks.com>
    Signed-off-by: Patrick Kelsey <pat.kelsey@cornelisnetworks.com>
    Signed-off-by: Dennis Dalessandro <dennis.dalessandro@cornelisnetworks.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Stable-dep-of: c9358de193ec ("IB/hfi1: Fix wrong mmu_node used for user SDMA packet after invalidate")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

IB/hfi1: Fix wrong mmu_node used for user SDMA packet after invalidate [+ + +]
Author: Brendan Cunningham <bcunningham@cornelisnetworks.com>
Date:   Fri May 19 12:32:16 2023 -0400

    IB/hfi1: Fix wrong mmu_node used for user SDMA packet after invalidate
    
    [ Upstream commit c9358de193ecfb360c3ce75f27ce839ca0b0bc8c ]
    
    The hfi1 user SDMA pinned-page cache will leave a stale cache entry when
    the cache-entry's virtual address range is invalidated but that cache
    entry is in-use by an outstanding SDMA request.
    
    Subsequent user SDMA requests with buffers in or spanning the virtual
    address range of the stale cache entry will result in packets constructed
    from the wrong memory, the physical pages pointed to by the stale cache
    entry.
    
    To fix this, remove mmu_rb_node cache entries from the mmu_rb_handler
    cache independent of the cache entry's refcount. Add 'struct kref
    refcount' to struct mmu_rb_node and manage mmu_rb_node lifetime with
    kref_get() and kref_put().
    
    mmu_rb_node.refcount makes sdma_mmu_node.refcount redundant. Remove
    'atomic_t refcount' from struct sdma_mmu_node and change sdma_mmu_node
    code to use mmu_rb_node.refcount.
    
    Move the mmu_rb_handler destructor call after a
    wait-for-SDMA-request-completion call so mmu_rb_nodes that need
    mmu_rb_handler's workqueue to queue themselves up for destruction from an
    interrupt context may do so.
    
    Fixes: f48ad614c100 ("IB/hfi1: Move driver out of staging")
    Fixes: 00cbce5cbf88 ("IB/hfi1: Fix bugs with non-PAGE_SIZE-end multi-iovec user SDMA requests")
    Link: https://lore.kernel.org/r/168451393605.3700681.13493776139032178861.stgit@awfm-02.cornelisnetworks.com
    Reviewed-by: Dean Luick <dean.luick@cornelisnetworks.com>
    Signed-off-by: Brendan Cunningham <bcunningham@cornelisnetworks.com>
    Signed-off-by: Dennis Dalessandro <dennis.dalessandro@cornelisnetworks.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

IB/hfi1: Use bitmap_zalloc() when applicable [+ + +]
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Thu Nov 25 20:53:22 2021 +0100

    IB/hfi1: Use bitmap_zalloc() when applicable
    
    [ Upstream commit f86dbc9fc5d83384eae7eda0de17f823e8c81ca0 ]
    
    Use 'bitmap_zalloc()' to simplify code, improve the semantic and avoid
    some open-coded arithmetic in allocator arguments.
    
    Also change the corresponding 'kfree()' into 'bitmap_free()' to keep
    consistency.
    
    Link: https://lore.kernel.org/r/d46c6bc1869b8869244fa71943d2cad4104b3668.1637869925.git.christophe.jaillet@wanadoo.fr
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Stable-dep-of: c9358de193ec ("IB/hfi1: Fix wrong mmu_node used for user SDMA packet after invalidate")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
icmp6: Fix null-ptr-deref of ip6_null_entry->rt6i_idev in icmp6_dev(). [+ + +]
Author: Kuniyuki Iwashima <kuniyu@amazon.com>
Date:   Fri Jul 7 18:43:27 2023 -0700

    icmp6: Fix null-ptr-deref of ip6_null_entry->rt6i_idev in icmp6_dev().
    
    [ Upstream commit 2aaa8a15de73874847d62eb595c6683bface80fd ]
    
    With some IPv6 Ext Hdr (RPL, SRv6, etc.), we can send a packet that
    has the link-local address as src and dst IP and will be forwarded to
    an external IP in the IPv6 Ext Hdr.
    
    For example, the script below generates a packet whose src IP is the
    link-local address and dst is updated to 11::.
    
      # for f in $(find /proc/sys/net/ -name *seg6_enabled*); do echo 1 > $f; done
      # python3
      >>> from socket import *
      >>> from scapy.all import *
      >>>
      >>> SRC_ADDR = DST_ADDR = "fe80::5054:ff:fe12:3456"
      >>>
      >>> pkt = IPv6(src=SRC_ADDR, dst=DST_ADDR)
      >>> pkt /= IPv6ExtHdrSegmentRouting(type=4, addresses=["11::", "22::"], segleft=1)
      >>>
      >>> sk = socket(AF_INET6, SOCK_RAW, IPPROTO_RAW)
      >>> sk.sendto(bytes(pkt), (DST_ADDR, 0))
    
    For such a packet, we call ip6_route_input() to look up a route for the
    next destination in these three functions depending on the header type.
    
      * ipv6_rthdr_rcv()
      * ipv6_rpl_srh_rcv()
      * ipv6_srh_rcv()
    
    If no route is found, ip6_null_entry is set to skb, and the following
    dst_input(skb) calls ip6_pkt_drop().
    
    Finally, in icmp6_dev(), we dereference skb_rt6_info(skb)->rt6i_idev->dev
    as the input device is the loopback interface.  Then, we have to check if
    skb_rt6_info(skb)->rt6i_idev is NULL or not to avoid NULL pointer deref
    for ip6_null_entry.
    
    BUG: kernel NULL pointer dereference, address: 0000000000000000
     PF: supervisor read access in kernel mode
     PF: error_code(0x0000) - not-present page
    PGD 0 P4D 0
    Oops: 0000 [#1] PREEMPT SMP PTI
    CPU: 0 PID: 157 Comm: python3 Not tainted 6.4.0-11996-gb121d614371c #35
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.0-0-gd239552ce722-prebuilt.qemu.org 04/01/2014
    RIP: 0010:icmp6_send (net/ipv6/icmp.c:436 net/ipv6/icmp.c:503)
    Code: fe ff ff 48 c7 40 30 c0 86 5d 83 e8 c6 44 1c 00 e9 c8 fc ff ff 49 8b 46 58 48 83 e0 fe 0f 84 4a fb ff ff 48 8b 80 d0 00 00 00 <48> 8b 00 44 8b 88 e0 00 00 00 e9 34 fb ff ff 4d 85 ed 0f 85 69 01
    RSP: 0018:ffffc90000003c70 EFLAGS: 00000286
    RAX: 0000000000000000 RBX: 0000000000000001 RCX: 00000000000000e0
    RDX: 0000000000000021 RSI: 0000000000000000 RDI: ffff888006d72a18
    RBP: ffffc90000003d80 R08: 0000000000000000 R09: 0000000000000001
    R10: ffffc90000003d98 R11: 0000000000000040 R12: ffff888006d72a10
    R13: 0000000000000000 R14: ffff8880057fb800 R15: ffffffff835d86c0
    FS:  00007f9dc72ee740(0000) GS:ffff88807dc00000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 0000000000000000 CR3: 00000000057b2000 CR4: 00000000007506f0
    PKRU: 55555554
    Call Trace:
     <IRQ>
     ip6_pkt_drop (net/ipv6/route.c:4513)
     ipv6_rthdr_rcv (net/ipv6/exthdrs.c:640 net/ipv6/exthdrs.c:686)
     ip6_protocol_deliver_rcu (net/ipv6/ip6_input.c:437 (discriminator 5))
     ip6_input_finish (./include/linux/rcupdate.h:781 net/ipv6/ip6_input.c:483)
     __netif_receive_skb_one_core (net/core/dev.c:5455)
     process_backlog (./include/linux/rcupdate.h:781 net/core/dev.c:5895)
     __napi_poll (net/core/dev.c:6460)
     net_rx_action (net/core/dev.c:6529 net/core/dev.c:6660)
     __do_softirq (./arch/x86/include/asm/jump_label.h:27 ./include/linux/jump_label.h:207 ./include/trace/events/irq.h:142 kernel/softirq.c:554)
     do_softirq (kernel/softirq.c:454 kernel/softirq.c:441)
     </IRQ>
     <TASK>
     __local_bh_enable_ip (kernel/softirq.c:381)
     __dev_queue_xmit (net/core/dev.c:4231)
     ip6_finish_output2 (./include/net/neighbour.h:544 net/ipv6/ip6_output.c:135)
     rawv6_sendmsg (./include/net/dst.h:458 ./include/linux/netfilter.h:303 net/ipv6/raw.c:656 net/ipv6/raw.c:914)
     sock_sendmsg (net/socket.c:725 net/socket.c:748)
     __sys_sendto (net/socket.c:2134)
     __x64_sys_sendto (net/socket.c:2146 net/socket.c:2142 net/socket.c:2142)
     do_syscall_64 (arch/x86/entry/common.c:50 arch/x86/entry/common.c:80)
     entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:120)
    RIP: 0033:0x7f9dc751baea
    Code: d8 64 89 02 48 c7 c0 ff ff ff ff eb b8 0f 1f 00 f3 0f 1e fa 41 89 ca 64 8b 04 25 18 00 00 00 85 c0 75 15 b8 2c 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 7e c3 0f 1f 44 00 00 41 54 48 83 ec 30 44 89
    RSP: 002b:00007ffe98712c38 EFLAGS: 00000246 ORIG_RAX: 000000000000002c
    RAX: ffffffffffffffda RBX: 00007ffe98712cf8 RCX: 00007f9dc751baea
    RDX: 0000000000000060 RSI: 00007f9dc6460b90 RDI: 0000000000000003
    RBP: 00007f9dc56e8be0 R08: 00007ffe98712d70 R09: 000000000000001c
    R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
    R13: ffffffffc4653600 R14: 0000000000000001 R15: 00007f9dc6af5d1b
     </TASK>
    Modules linked in:
    CR2: 0000000000000000
     ---[ end trace 0000000000000000 ]---
    RIP: 0010:icmp6_send (net/ipv6/icmp.c:436 net/ipv6/icmp.c:503)
    Code: fe ff ff 48 c7 40 30 c0 86 5d 83 e8 c6 44 1c 00 e9 c8 fc ff ff 49 8b 46 58 48 83 e0 fe 0f 84 4a fb ff ff 48 8b 80 d0 00 00 00 <48> 8b 00 44 8b 88 e0 00 00 00 e9 34 fb ff ff 4d 85 ed 0f 85 69 01
    RSP: 0018:ffffc90000003c70 EFLAGS: 00000286
    RAX: 0000000000000000 RBX: 0000000000000001 RCX: 00000000000000e0
    RDX: 0000000000000021 RSI: 0000000000000000 RDI: ffff888006d72a18
    RBP: ffffc90000003d80 R08: 0000000000000000 R09: 0000000000000001
    R10: ffffc90000003d98 R11: 0000000000000040 R12: ffff888006d72a10
    R13: 0000000000000000 R14: ffff8880057fb800 R15: ffffffff835d86c0
    FS:  00007f9dc72ee740(0000) GS:ffff88807dc00000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 0000000000000000 CR3: 00000000057b2000 CR4: 00000000007506f0
    PKRU: 55555554
    Kernel panic - not syncing: Fatal exception in interrupt
    Kernel Offset: disabled
    
    Fixes: 4832c30d5458 ("net: ipv6: put host and anycast routes on device with address")
    Reported-by: Wang Yufen <wangyufen@huawei.com>
    Closes: https://lore.kernel.org/netdev/c41403a9-c2f6-3b7e-0c96-e1901e605cd0@huawei.com/
    Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Reviewed-by: David Ahern <dsahern@kernel.org>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
igb: Fix igb_down hung on surprise removal [+ + +]
Author: Ying Hsu <yinghsu@chromium.org>
Date:   Tue Jun 20 10:47:32 2023 -0700

    igb: Fix igb_down hung on surprise removal
    
    [ Upstream commit 004d25060c78fc31f66da0fa439c544dda1ac9d5 ]
    
    In a setup where a Thunderbolt hub connects to Ethernet and a display
    through USB Type-C, users may experience a hung task timeout when they
    remove the cable between the PC and the Thunderbolt hub.
    This is because the igb_down function is called multiple times when
    the Thunderbolt hub is unplugged. For example, the igb_io_error_detected
    triggers the first call, and the igb_remove triggers the second call.
    The second call to igb_down will block at napi_synchronize.
    Here's the call trace:
        __schedule+0x3b0/0xddb
        ? __mod_timer+0x164/0x5d3
        schedule+0x44/0xa8
        schedule_timeout+0xb2/0x2a4
        ? run_local_timers+0x4e/0x4e
        msleep+0x31/0x38
        igb_down+0x12c/0x22a [igb 6615058754948bfde0bf01429257eb59f13030d4]
        __igb_close+0x6f/0x9c [igb 6615058754948bfde0bf01429257eb59f13030d4]
        igb_close+0x23/0x2b [igb 6615058754948bfde0bf01429257eb59f13030d4]
        __dev_close_many+0x95/0xec
        dev_close_many+0x6e/0x103
        unregister_netdevice_many+0x105/0x5b1
        unregister_netdevice_queue+0xc2/0x10d
        unregister_netdev+0x1c/0x23
        igb_remove+0xa7/0x11c [igb 6615058754948bfde0bf01429257eb59f13030d4]
        pci_device_remove+0x3f/0x9c
        device_release_driver_internal+0xfe/0x1b4
        pci_stop_bus_device+0x5b/0x7f
        pci_stop_bus_device+0x30/0x7f
        pci_stop_bus_device+0x30/0x7f
        pci_stop_and_remove_bus_device+0x12/0x19
        pciehp_unconfigure_device+0x76/0xe9
        pciehp_disable_slot+0x6e/0x131
        pciehp_handle_presence_or_link_change+0x7a/0x3f7
        pciehp_ist+0xbe/0x194
        irq_thread_fn+0x22/0x4d
        ? irq_thread+0x1fd/0x1fd
        irq_thread+0x17b/0x1fd
        ? irq_forced_thread_fn+0x5f/0x5f
        kthread+0x142/0x153
        ? __irq_get_irqchip_state+0x46/0x46
        ? kthread_associate_blkcg+0x71/0x71
        ret_from_fork+0x1f/0x30
    
    In this case, igb_io_error_detected detaches the network interface
    and requests a PCIE slot reset, however, the PCIE reset callback is
    not being invoked and thus the Ethernet connection breaks down.
    As the PCIE error in this case is a non-fatal one, requesting a
    slot reset can be avoided.
    This patch fixes the task hung issue and preserves Ethernet
    connection by ignoring non-fatal PCIE errors.
    
    Signed-off-by: Ying Hsu <yinghsu@chromium.org>
    Tested-by: Pucha Himasekhar Reddy <himasekharx.reddy.pucha@intel.com> (A Contingent worker at Intel)
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Reviewed-by: Simon Horman <simon.horman@corigine.com>
    Link: https://lore.kernel.org/r/20230620174732.4145155-1-anthony.l.nguyen@intel.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
igc: Enable and fix RX hash usage by netstack [+ + +]
Author: Jesper Dangaard Brouer <brouer@redhat.com>
Date:   Tue Apr 18 15:30:42 2023 +0200

    igc: Enable and fix RX hash usage by netstack
    
    [ Upstream commit 84214ab4689f962b4bfc47fc9a5838d25ac4274d ]
    
    When function igc_rx_hash() was introduced in v4.20 via commit 0507ef8a0372
    ("igc: Add transmit and receive fastpath and interrupt handlers"), the
    hardware wasn't configured to provide RSS hash, thus it made sense to not
    enable net_device NETIF_F_RXHASH feature bit.
    
    The NIC hardware was configured to enable RSS hash info in v5.2 via commit
    2121c2712f82 ("igc: Add multiple receive queues control supporting"), but
    forgot to set the NETIF_F_RXHASH feature bit.
    
    The original implementation of igc_rx_hash() didn't extract the associated
    pkt_hash_type, but statically set PKT_HASH_TYPE_L3. The largest portions of
    this patch are about extracting the RSS Type from the hardware and mapping
    this to enum pkt_hash_types. This was based on Foxville i225 software user
    manual rev-1.3.1 and tested on Intel Ethernet Controller I225-LM (rev 03).
    
    For UDP it's worth noting that RSS (type) hashing have been disabled both for
    IPv4 and IPv6 (see IGC_MRQC_RSS_FIELD_IPV4_UDP + IGC_MRQC_RSS_FIELD_IPV6_UDP)
    because hardware RSS doesn't handle fragmented pkts well when enabled (can
    cause out-of-order). This results in PKT_HASH_TYPE_L3 for UDP packets, and
    hash value doesn't include UDP port numbers. Not being PKT_HASH_TYPE_L4, have
    the effect that netstack will do a software based hash calc calling into
    flow_dissect, but only when code calls skb_get_hash(), which doesn't
    necessary happen for local delivery.
    
    For QA verification testing I wrote a small bpftrace prog:
     [0] https://github.com/xdp-project/xdp-project/blob/master/areas/hints/monitor_skb_hash_on_dev.bt
    
    Fixes: 2121c2712f82 ("igc: Add multiple receive queues control supporting")
    Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: Song Yoong Siang <yoong.siang.song@intel.com>
    Link: https://lore.kernel.org/bpf/168182464270.616355.11391652654430626584.stgit@firesoul
    Signed-off-by: Sasha Levin <sashal@kernel.org>

igc: Fix inserting of empty frame for launchtime [+ + +]
Author: Florian Kauer <florian.kauer@linutronix.de>
Date:   Wed Jun 14 16:07:14 2023 +0200

    igc: Fix inserting of empty frame for launchtime
    
    [ Upstream commit 0bcc62858d6ba62cbade957d69745e6adeed5f3d ]
    
    The insertion of an empty frame was introduced with
    commit db0b124f02ba ("igc: Enhance Qbv scheduling by using first flag bit")
    in order to ensure that the current cycle has at least one packet if
    there is some packet to be scheduled for the next cycle.
    
    However, the current implementation does not properly check if
    a packet is already scheduled for the current cycle. Currently,
    an empty packet is always inserted if and only if
    txtime >= end_of_cycle && txtime > last_tx_cycle
    but since last_tx_cycle is always either the end of the current
    cycle (end_of_cycle) or the end of a previous cycle, the
    second part (txtime > last_tx_cycle) is always true unless
    txtime == last_tx_cycle.
    
    What actually needs to be checked here is if the last_tx_cycle
    was already written within the current cycle, so an empty frame
    should only be inserted if and only if
    txtime >= end_of_cycle && end_of_cycle > last_tx_cycle.
    
    This patch does not only avoid an unnecessary insertion, but it
    can actually be harmful to insert an empty packet if packets
    are already scheduled in the current cycle, because it can lead
    to a situation where the empty packet is actually processed
    as the first packet in the upcoming cycle shifting the packet
    with the first_flag even one cycle into the future, finally leading
    to a TX hang.
    
    The TX hang can be reproduced on a i225 with:
    
        sudo tc qdisc replace dev enp1s0 parent root handle 100 taprio \
                num_tc 1 \
                map 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \
                queues 1@0 \
                base-time 0 \
                sched-entry S 01 300000 \
                flags 0x1 \
                txtime-delay 500000 \
                clockid CLOCK_TAI
        sudo tc qdisc replace dev enp1s0 parent 100:1 etf \
                clockid CLOCK_TAI \
                delta 500000 \
                offload \
                skip_sock_check
    
    and traffic generator
    
        sudo trafgen -i traffic.cfg -o enp1s0 --cpp -n0 -q -t1400ns
    
    with traffic.cfg
    
        #define ETH_P_IP        0x0800
    
        {
          /* Ethernet Header */
          0x30, 0x1f, 0x9a, 0xd0, 0xf0, 0x0e,  # MAC Dest - adapt as needed
          0x24, 0x5e, 0xbe, 0x57, 0x2e, 0x36,  # MAC Src  - adapt as needed
          const16(ETH_P_IP),
    
          /* IPv4 Header */
          0b01000101, 0,   # IPv4 version, IHL, TOS
          const16(1028),   # IPv4 total length (UDP length + 20 bytes (IP header))
          const16(2),      # IPv4 ident
          0b01000000, 0,   # IPv4 flags, fragmentation off
          64,              # IPv4 TTL
          17,              # Protocol UDP
          csumip(14, 33),  # IPv4 checksum
    
          /* UDP Header */
          10,  0, 48, 1,   # IP Src - adapt as needed
          10,  0, 48, 10,  # IP Dest - adapt as needed
          const16(5555),   # UDP Src Port
          const16(6666),   # UDP Dest Port
          const16(1008),   # UDP length (UDP header 8 bytes + payload length)
          csumudp(14, 34), # UDP checksum
    
          /* Payload */
          fill('W', 1000),
        }
    
    and the observed message with that is for example
    
     igc 0000:01:00.0 enp1s0: Detected Tx Unit Hang
       Tx Queue             <0>
       TDH                  <32>
       TDT                  <3c>
       next_to_use          <3c>
       next_to_clean        <32>
     buffer_info[next_to_clean]
       time_stamp           <ffff26a8>
       next_to_watch        <00000000632a1828>
       jiffies              <ffff27f8>
       desc.status          <1048000>
    
    Fixes: db0b124f02ba ("igc: Enhance Qbv scheduling by using first flag bit")
    Signed-off-by: Florian Kauer <florian.kauer@linutronix.de>
    Reviewed-by: Kurt Kanzenbach <kurt@linutronix.de>
    Tested-by: Naama Meir <naamax.meir@linux.intel.com>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

igc: Fix launchtime before start of cycle [+ + +]
Author: Florian Kauer <florian.kauer@linutronix.de>
Date:   Wed Jun 14 16:07:13 2023 +0200

    igc: Fix launchtime before start of cycle
    
    [ Upstream commit c1bca9ac0bcb355be11354c2e68bc7bf31f5ac5a ]
    
    It is possible (verified on a running system) that frames are processed
    by igc_tx_launchtime with a txtime before the start of the cycle
    (baset_est).
    
    However, the result of txtime - baset_est is written into a u32,
    leading to a wrap around to a positive number. The following
    launchtime > 0 check will only branch to executing launchtime = 0
    if launchtime is already 0.
    
    Fix it by using a s32 before checking launchtime > 0.
    
    Fixes: db0b124f02ba ("igc: Enhance Qbv scheduling by using first flag bit")
    Signed-off-by: Florian Kauer <florian.kauer@linutronix.de>
    Reviewed-by: Kurt Kanzenbach <kurt@linutronix.de>
    Tested-by: Naama Meir <naamax.meir@linux.intel.com>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

igc: Fix race condition in PTP tx code [+ + +]
Author: Vinicius Costa Gomes <vinicius.gomes@intel.com>
Date:   Wed Jun 7 14:32:29 2023 -0700

    igc: Fix race condition in PTP tx code
    
    [ Upstream commit 9c50e2b150c8ee0eee5f8154e2ad168cdd748877 ]
    
    Currently, the igc driver supports timestamping only one tx packet at a
    time. During the transmission flow, the skb that requires hardware
    timestamping is saved in adapter->ptp_tx_skb. Once hardware has the
    timestamp, an interrupt is delivered, and adapter->ptp_tx_work is
    scheduled. In igc_ptp_tx_work(), we read the timestamp register, update
    adapter->ptp_tx_skb, and notify the network stack.
    
    While the thread executing the transmission flow (the user process
    running in kernel mode) and the thread executing ptp_tx_work don't
    access adapter->ptp_tx_skb concurrently, there are two other places
    where adapter->ptp_tx_skb is accessed: igc_ptp_tx_hang() and
    igc_ptp_suspend().
    
    igc_ptp_tx_hang() is executed by the adapter->watchdog_task worker
    thread which runs periodically so it is possible we have two threads
    accessing ptp_tx_skb at the same time. Consider the following scenario:
    right after __IGC_PTP_TX_IN_PROGRESS is set in igc_xmit_frame_ring(),
    igc_ptp_tx_hang() is executed. Since adapter->ptp_tx_start hasn't been
    written yet, this is considered a timeout and adapter->ptp_tx_skb is
    cleaned up.
    
    This patch fixes the issue described above by adding the ptp_tx_lock to
    protect access to ptp_tx_skb and ptp_tx_start fields from igc_adapter.
    Since igc_xmit_frame_ring() called in atomic context by the networking
    stack, ptp_tx_lock is defined as a spinlock, and the irq safe variants
    of lock/unlock are used.
    
    With the introduction of the ptp_tx_lock, the __IGC_PTP_TX_IN_PROGRESS
    flag doesn't provide much of a use anymore so this patch gets rid of it.
    
    Fixes: 2c344ae24501 ("igc: Add support for TX timestamping")
    Signed-off-by: Andre Guedes <andre.guedes@intel.com>
    Signed-off-by: Vinicius Costa Gomes <vinicius.gomes@intel.com>
    Reviewed-by: Kurt Kanzenbach <kurt@linutronix.de>
    Tested-by: Naama Meir <naamax.meir@linux.intel.com>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

igc: Remove delay during TX ring configuration [+ + +]
Author: Muhammad Husaini Zulkifli <muhammad.husaini.zulkifli@intel.com>
Date:   Wed May 17 08:18:12 2023 +0800

    igc: Remove delay during TX ring configuration
    
    [ Upstream commit cca28ceac7c7857bc2d313777017585aef00bcc4 ]
    
    Remove unnecessary delay during the TX ring configuration.
    This will cause delay, especially during link down and
    link up activity.
    
    Furthermore, old SKUs like as I225 will call the reset_adapter
    to reset the controller during TSN mode Gate Control List (GCL)
    setting. This will add more time to the configuration of the
    real-time use case.
    
    It doesn't mentioned about this delay in the Software User Manual.
    It might have been ported from legacy code I210 in the past.
    
    Fixes: 13b5b7fd6a4a ("igc: Add support for Tx/Rx rings")
    Signed-off-by: Muhammad Husaini Zulkifli <muhammad.husaini.zulkifli@intel.com>
    Acked-by: Sasha Neftin <sasha.neftin@intel.com>
    Tested-by: Naama Meir <naamax.meir@linux.intel.com>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

igc: set TP bit in 'supported' and 'advertising' fields of ethtool_link_ksettings [+ + +]
Author: Prasad Koya <prasad@arista.com>
Date:   Mon Jun 5 11:09:01 2023 -0700

    igc: set TP bit in 'supported' and 'advertising' fields of ethtool_link_ksettings
    
    [ Upstream commit 9ac3fc2f42e5ffa1e927dcbffb71b15fa81459e2 ]
    
    set TP bit in the 'supported' and 'advertising' fields. i225/226 parts
    only support twisted pair copper.
    
    Fixes: 8c5ad0dae93c ("igc: Add ethtool support")
    Signed-off-by: Prasad Koya <prasad@arista.com>
    Acked-by: Sasha Neftin <sasha.neftin@intel.com>
    Tested-by: Naama Meir <naamax.meir@linux.intel.com>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ima: Fix build warnings [+ + +]
Author: Roberto Sassu <roberto.sassu@huawei.com>
Date:   Tue Jun 6 09:41:13 2023 +0200

    ima: Fix build warnings
    
    [ Upstream commit 95526d13038c2bbddd567a4d8e39fac42484e182 ]
    
    Fix build warnings (function parameters description) for
    ima_collect_modsig(), ima_match_policy() and ima_parse_add_rule().
    
    Fixes: 15588227e086 ("ima: Collect modsig") # v5.4+
    Fixes: 2fe5d6def167 ("ima: integrity appraisal extension") # v5.14+
    Fixes: 4af4662fa4a9 ("integrity: IMA policy") # v3.2+
    Signed-off-by: Roberto Sassu <roberto.sassu@huawei.com>
    Signed-off-by: Mimi Zohar <zohar@linux.ibm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Input: adxl34x - do not hardcode interrupt trigger type [+ + +]
Author: Marek Vasut <marex@denx.de>
Date:   Wed May 10 17:27:55 2023 -0700

    Input: adxl34x - do not hardcode interrupt trigger type
    
    [ Upstream commit e96220bce5176ed2309f77f061dcc0430b82b25e ]
    
    Instead of hardcoding IRQ trigger type to IRQF_TRIGGER_HIGH, let's
    respect the settings specified in the firmware description.
    
    Fixes: e27c729219ad ("Input: add driver for ADXL345/346 Digital Accelerometers")
    Signed-off-by: Marek Vasut <marex@denx.de>
    Acked-by: Michael Hennerich <michael.hennerich@analog.com>
    Link: https://lore.kernel.org/r/20230509203555.549158-1-marex@denx.de
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Input: drv260x - sleep between polling GO bit [+ + +]
Author: Luca Weiss <luca@z3ntu.xyz>
Date:   Mon May 1 17:01:45 2023 -0700

    Input: drv260x - sleep between polling GO bit
    
    [ Upstream commit efef661dfa6bf8cbafe4cd6a97433fcef0118967 ]
    
    When doing the initial startup there's no need to poll without any
    delay and spam the I2C bus.
    
    Let's sleep 15ms between each attempt, which is the same time as used
    in the vendor driver.
    
    Fixes: 7132fe4f5687 ("Input: drv260x - add TI drv260x haptics driver")
    Signed-off-by: Luca Weiss <luca@z3ntu.xyz>
    Link: https://lore.kernel.org/r/20230430-drv260x-improvements-v1-2-1fb28b4cc698@z3ntu.xyz
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
integrity: Fix possible multiple allocation in integrity_inode_get() [+ + +]
Author: Tianjia Zhang <tianjia.zhang@linux.alibaba.com>
Date:   Thu Jun 1 14:42:44 2023 +0800

    integrity: Fix possible multiple allocation in integrity_inode_get()
    
    commit 9df6a4870dc371136e90330cfbbc51464ee66993 upstream.
    
    When integrity_inode_get() is querying and inserting the cache, there
    is a conditional race in the concurrent environment.
    
    The race condition is the result of not properly implementing
    "double-checked locking". In this case, it first checks to see if the
    iint cache record exists before taking the lock, but doesn't check
    again after taking the integrity_iint_lock.
    
    Fixes: bf2276d10ce5 ("ima: allocating iint improvements")
    Signed-off-by: Tianjia Zhang <tianjia.zhang@linux.alibaba.com>
    Cc: Dmitry Kasatkin <dmitry.kasatkin@gmail.com>
    Cc: <stable@vger.kernel.org> # v3.10+
    Signed-off-by: Mimi Zohar <zohar@linux.ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
io_uring: add reschedule point to handle_tw_list() [+ + +]
Author: Jens Axboe <axboe@kernel.dk>
Date:   Mon Jul 17 10:27:20 2023 -0600

    io_uring: add reschedule point to handle_tw_list()
    
    Commit f58680085478dd292435727210122960d38e8014 upstream.
    
    If CONFIG_PREEMPT_NONE is set and the task_work chains are long, we
    could be running into issues blocking others for too long. Add a
    reschedule check in handle_tw_list(), and flush the ctx if we need to
    reschedule.
    
    Cc: stable@vger.kernel.org # 5.10+
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

io_uring: ensure IOPOLL locks around deferred work [+ + +]
Author: Jens Axboe <axboe@kernel.dk>
Date:   Tue Jul 11 09:35:30 2023 -0600

    io_uring: ensure IOPOLL locks around deferred work
    
    No direct upstream commit exists for this issue. It was fixed in
    5.18 as part of a larger rework of the completion side.
    
    io_commit_cqring() writes the CQ ring tail to make it visible, but it
    also kicks off any deferred work we have. A ring setup with IOPOLL
    does not need any locking around the CQ ring updates, as we're always
    under the ctx uring_lock. But if we have deferred work that needs
    processing, then io_queue_deferred() assumes that the completion_lock
    is held, as it is for !IOPOLL.
    
    Add a lockdep assertion to check and document this fact, and have
    io_iopoll_complete() check if we have deferred work and run that
    separately with the appropriate lock grabbed.
    
    Cc: stable@vger.kernel.org # 5.10, 5.15
    Reported-by: dghost david <daviduniverse18@gmail.com>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

io_uring: Use io_schedule* in cqring wait [+ + +]
Author: Andres Freund <andres@anarazel.de>
Date:   Sun Jul 16 12:07:03 2023 -0600

    io_uring: Use io_schedule* in cqring wait
    
    Commit 8a796565cec3601071cbbd27d6304e202019d014 upstream.
    
    I observed poor performance of io_uring compared to synchronous IO. That
    turns out to be caused by deeper CPU idle states entered with io_uring,
    due to io_uring using plain schedule(), whereas synchronous IO uses
    io_schedule().
    
    The losses due to this are substantial. On my cascade lake workstation,
    t/io_uring from the fio repository e.g. yields regressions between 20%
    and 40% with the following command:
    ./t/io_uring -r 5 -X0 -d 1 -s 1 -c 1 -p 0 -S$use_sync -R 0 /mnt/t2/fio/write.0.0
    
    This is repeatable with different filesystems, using raw block devices
    and using different block devices.
    
    Use io_schedule_prepare() / io_schedule_finish() in
    io_cqring_wait_schedule() to address the difference.
    
    After that using io_uring is on par or surpassing synchronous IO (using
    registered files etc makes it reliably win, but arguably is a less fair
    comparison).
    
    There are other calls to schedule() in io_uring/, but none immediately
    jump out to be similarly situated, so I did not touch them. Similarly,
    it's possible that mutex_lock_io() should be used, but it's not clear if
    there are cases where that matters.
    
    Cc: stable@vger.kernel.org # 5.10+
    Cc: Pavel Begunkov <asml.silence@gmail.com>
    Cc: io-uring@vger.kernel.org
    Cc: linux-kernel@vger.kernel.org
    Signed-off-by: Andres Freund <andres@anarazel.de>
    Link: https://lore.kernel.org/r/20230707162007.194068-1-andres@anarazel.de
    [axboe: minor style fixup]
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

io_uring: wait interruptibly for request completions on exit [+ + +]
Author: Jens Axboe <axboe@kernel.dk>
Date:   Sun Jun 11 21:14:09 2023 -0600

    io_uring: wait interruptibly for request completions on exit
    
    commit 4826c59453b3b4677d6bf72814e7ababdea86949 upstream.
    
    WHen the ring exits, cleanup is done and the final cancelation and
    waiting on completions is done by io_ring_exit_work. That function is
    invoked by kworker, which doesn't take any signals. Because of that, it
    doesn't really matter if we wait for completions in TASK_INTERRUPTIBLE
    or TASK_UNINTERRUPTIBLE state. However, it does matter to the hung task
    detection checker!
    
    Normally we expect cancelations and completions to happen rather
    quickly. Some test cases, however, will exit the ring and park the
    owning task stopped (eg via SIGSTOP). If the owning task needs to run
    task_work to complete requests, then io_ring_exit_work won't make any
    progress until the task is runnable again. Hence io_ring_exit_work can
    trigger the hung task detection, which is particularly problematic if
    panic-on-hung-task is enabled.
    
    As the ring exit doesn't take signals to begin with, have it wait
    interruptibly rather than uninterruptibly. io_uring has a separate
    stuck-exit warning that triggers independently anyway, so we're not
    really missing anything by making this switch.
    
    Cc: stable@vger.kernel.org # 5.10+
    Link: https://lore.kernel.org/r/b0e4aaef-7088-56ce-244c-976edeac0e66@kernel.dk
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ionic: remove WARN_ON to prevent panic_on_warn [+ + +]
Author: Nitya Sunkad <nitya.sunkad@amd.com>
Date:   Thu Jul 6 11:20:06 2023 -0700

    ionic: remove WARN_ON to prevent panic_on_warn
    
    [ Upstream commit abfb2a58a5377ebab717d4362d6180f901b6e5c1 ]
    
    Remove unnecessary early code development check and the WARN_ON
    that it uses.  The irq alloc and free paths have long been
    cleaned up and this check shouldn't have stuck around so long.
    
    Fixes: 77ceb68e29cc ("ionic: Add notifyq support")
    Signed-off-by: Nitya Sunkad <nitya.sunkad@amd.com>
    Signed-off-by: Shannon Nelson <shannon.nelson@amd.com>
    Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ipv6/addrconf: fix a potential refcount underflow for idev [+ + +]
Author: Ziyang Xuan <william.xuanziyang@huawei.com>
Date:   Sat Jul 8 14:59:10 2023 +0800

    ipv6/addrconf: fix a potential refcount underflow for idev
    
    [ Upstream commit 06a0716949c22e2aefb648526580671197151acc ]
    
    Now in addrconf_mod_rs_timer(), reference idev depends on whether
    rs_timer is not pending. Then modify rs_timer timeout.
    
    There is a time gap in [1], during which if the pending rs_timer
    becomes not pending. It will miss to hold idev, but the rs_timer
    is activated. Thus rs_timer callback function addrconf_rs_timer()
    will be executed and put idev later without holding idev. A refcount
    underflow issue for idev can be caused by this.
    
            if (!timer_pending(&idev->rs_timer))
                    in6_dev_hold(idev);
                      <--------------[1]
            mod_timer(&idev->rs_timer, jiffies + when);
    
    To fix the issue, hold idev if mod_timer() return 0.
    
    Fixes: b7b1bfce0bb6 ("ipv6: split duplicate address detection and router solicitation timer")
    Suggested-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: Ziyang Xuan <william.xuanziyang@huawei.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ipvlan: Fix return value of ipvlan_queue_xmit() [+ + +]
Author: Cambda Zhu <cambda@linux.alibaba.com>
Date:   Mon Jun 26 17:33:47 2023 +0800

    ipvlan: Fix return value of ipvlan_queue_xmit()
    
    [ Upstream commit 8a9922e7be6d042fa00f894c376473b17a162b66 ]
    
    ipvlan_queue_xmit() should return NET_XMIT_XXX, but
    ipvlan_xmit_mode_l2/l3() returns rx_handler_result_t or NET_RX_XXX
    in some cases. ipvlan_rcv_frame() will only return RX_HANDLER_CONSUMED
    in ipvlan_xmit_mode_l2/l3() because 'local' is true. It's equal to
    NET_XMIT_SUCCESS. But dev_forward_skb() can return NET_RX_SUCCESS or
    NET_RX_DROP, and returning NET_RX_DROP(NET_XMIT_DROP) will increase
    both ipvlan and ipvlan->phy_dev drops counter.
    
    The skb to forward can be treated as xmitted successfully. This patch
    makes ipvlan_queue_xmit() return NET_XMIT_SUCCESS for forward skb.
    
    Fixes: 2ad7bf363841 ("ipvlan: Initial check-in of the IPVLAN driver.")
    Signed-off-by: Cambda Zhu <cambda@linux.alibaba.com>
    Link: https://lore.kernel.org/r/20230626093347.7492-1-cambda@linux.alibaba.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
irqchip/jcore-aic: Fix missing allocation of IRQ descriptors [+ + +]
Author: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
Date:   Wed May 10 18:33:42 2023 +0200

    irqchip/jcore-aic: Fix missing allocation of IRQ descriptors
    
    [ Upstream commit 4848229494a323eeaab62eee5574ef9f7de80374 ]
    
    The initialization function for the J-Core AIC aic_irq_of_init() is
    currently missing the call to irq_alloc_descs() which allocates and
    initializes all the IRQ descriptors. Add missing function call and
    return the error code from irq_alloc_descs() in case the allocation
    fails.
    
    Fixes: 981b58f66cfc ("irqchip/jcore-aic: Add J-Core AIC driver")
    Signed-off-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
    Tested-by: Rob Landley <rob@landley.net>
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Link: https://lore.kernel.org/r/20230510163343.43090-1-glaubitz@physik.fu-berlin.de
    Signed-off-by: Sasha Levin <sashal@kernel.org>

irqchip/jcore-aic: Kill use of irq_create_strict_mappings() [+ + +]
Author: Marc Zyngier <maz@kernel.org>
Date:   Tue Apr 6 10:35:51 2021 +0100

    irqchip/jcore-aic: Kill use of irq_create_strict_mappings()
    
    [ Upstream commit 5f8b938bd790cff6542c7fe3c1495c71f89fef1b ]
    
    irq_create_strict_mappings() is a poor way to allow the use of
    a linear IRQ domain as a legacy one. Let's be upfront about it.
    
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Link: https://lore.kernel.org/r/20210406093557.1073423-4-maz@kernel.org
    Stable-dep-of: 4848229494a3 ("irqchip/jcore-aic: Fix missing allocation of IRQ descriptors")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
jffs2: reduce stack usage in jffs2_build_xattr_subsystem() [+ + +]
Author: Fabian Frederick <fabf@skynet.be>
Date:   Sat May 6 06:56:12 2023 +0200

    jffs2: reduce stack usage in jffs2_build_xattr_subsystem()
    
    commit 1168f095417643f663caa341211e117db552989f upstream.
    
    Use kcalloc() for allocation/flush of 128 pointers table to
    reduce stack usage.
    
    Function now returns -ENOMEM or 0 on success.
    
    stackusage
    Before:
    ./fs/jffs2/xattr.c:775  jffs2_build_xattr_subsystem     1208
    dynamic,bounded
    
    After:
    ./fs/jffs2/xattr.c:775  jffs2_build_xattr_subsystem     192
    dynamic,bounded
    
    Also update definition when CONFIG_JFFS2_FS_XATTR is not enabled
    
    Tested with an MTD mount point and some user set/getfattr.
    
    Many current target on OpenWRT also suffer from a compilation warning
    (that become an error with CONFIG_WERROR) with the following output:
    
    fs/jffs2/xattr.c: In function 'jffs2_build_xattr_subsystem':
    fs/jffs2/xattr.c:887:1: error: the frame size of 1088 bytes is larger than 1024 bytes [-Werror=frame-larger-than=]
      887 | }
          | ^
    
    Using dynamic allocation fix this compilation warning.
    
    Fixes: c9f700f840bd ("[JFFS2][XATTR] using 'delete marker' for xdatum/xref deletion")
    Reported-by: Tim Gardner <tim.gardner@canonical.com>
    Reported-by: kernel test robot <lkp@intel.com>
    Reported-by: Ron Economos <re@w6rz.net>
    Reported-by: Nathan Chancellor <nathan@kernel.org>
    Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>
    Signed-off-by: Fabian Frederick <fabf@skynet.be>
    Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
    Cc: stable@vger.kernel.org
    Message-Id: <20230506045612.16616-1-ansuelsmth@gmail.com>
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
jfs: jfs_dmap: Validate db_l2nbperpage while mounting [+ + +]
Author: Siddh Raman Pant <code@siddh.me>
Date:   Tue Jun 20 22:17:00 2023 +0530

    jfs: jfs_dmap: Validate db_l2nbperpage while mounting
    
    commit 11509910c599cbd04585ec35a6d5e1a0053d84c1 upstream.
    
    In jfs_dmap.c at line 381, BLKTODMAP is used to get a logical block
    number inside dbFree(). db_l2nbperpage, which is the log2 number of
    blocks per page, is passed as an argument to BLKTODMAP which uses it
    for shifting.
    
    Syzbot reported a shift out-of-bounds crash because db_l2nbperpage is
    too big. This happens because the large value is set without any
    validation in dbMount() at line 181.
    
    Thus, make sure that db_l2nbperpage is correct while mounting.
    
    Max number of blocks per page = Page size / Min block size
    => log2(Max num_block per page) = log2(Page size / Min block size)
                                    = log2(Page size) - log2(Min block size)
    
    => Max db_l2nbperpage = L2PSIZE - L2MINBLOCKSIZE
    
    Reported-and-tested-by: syzbot+d2cd27dcf8e04b232eb2@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?id=2a70a453331db32ed491f5cbb07e81bf2d225715
    Cc: stable@vger.kernel.org
    Suggested-by: Dave Kleikamp <dave.kleikamp@oracle.com>
    Signed-off-by: Siddh Raman Pant <code@siddh.me>
    Signed-off-by: Dave Kleikamp <dave.kleikamp@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
kcsan: Don't expect 64 bits atomic builtins from 32 bits architectures [+ + +]
Author: Christophe Leroy <christophe.leroy@csgroup.eu>
Date:   Fri May 12 17:31:17 2023 +0200

    kcsan: Don't expect 64 bits atomic builtins from 32 bits architectures
    
    [ Upstream commit 353e7300a1db928e427462f2745f9a2cd1625b3d ]
    
    Activating KCSAN on a 32 bits architecture leads to the following
    link-time failure:
    
        LD      .tmp_vmlinux.kallsyms1
      powerpc64-linux-ld: kernel/kcsan/core.o: in function `__tsan_atomic64_load':
      kernel/kcsan/core.c:1273: undefined reference to `__atomic_load_8'
      powerpc64-linux-ld: kernel/kcsan/core.o: in function `__tsan_atomic64_store':
      kernel/kcsan/core.c:1273: undefined reference to `__atomic_store_8'
      powerpc64-linux-ld: kernel/kcsan/core.o: in function `__tsan_atomic64_exchange':
      kernel/kcsan/core.c:1273: undefined reference to `__atomic_exchange_8'
      powerpc64-linux-ld: kernel/kcsan/core.o: in function `__tsan_atomic64_fetch_add':
      kernel/kcsan/core.c:1273: undefined reference to `__atomic_fetch_add_8'
      powerpc64-linux-ld: kernel/kcsan/core.o: in function `__tsan_atomic64_fetch_sub':
      kernel/kcsan/core.c:1273: undefined reference to `__atomic_fetch_sub_8'
      powerpc64-linux-ld: kernel/kcsan/core.o: in function `__tsan_atomic64_fetch_and':
      kernel/kcsan/core.c:1273: undefined reference to `__atomic_fetch_and_8'
      powerpc64-linux-ld: kernel/kcsan/core.o: in function `__tsan_atomic64_fetch_or':
      kernel/kcsan/core.c:1273: undefined reference to `__atomic_fetch_or_8'
      powerpc64-linux-ld: kernel/kcsan/core.o: in function `__tsan_atomic64_fetch_xor':
      kernel/kcsan/core.c:1273: undefined reference to `__atomic_fetch_xor_8'
      powerpc64-linux-ld: kernel/kcsan/core.o: in function `__tsan_atomic64_fetch_nand':
      kernel/kcsan/core.c:1273: undefined reference to `__atomic_fetch_nand_8'
      powerpc64-linux-ld: kernel/kcsan/core.o: in function `__tsan_atomic64_compare_exchange_strong':
      kernel/kcsan/core.c:1273: undefined reference to `__atomic_compare_exchange_8'
      powerpc64-linux-ld: kernel/kcsan/core.o: in function `__tsan_atomic64_compare_exchange_weak':
      kernel/kcsan/core.c:1273: undefined reference to `__atomic_compare_exchange_8'
      powerpc64-linux-ld: kernel/kcsan/core.o: in function `__tsan_atomic64_compare_exchange_val':
      kernel/kcsan/core.c:1273: undefined reference to `__atomic_compare_exchange_8'
    
    32 bits architectures don't have 64 bits atomic builtins. Only
    include DEFINE_TSAN_ATOMIC_OPS(64) on 64 bits architectures.
    
    Fixes: 0f8ad5f2e934 ("kcsan: Add support for atomic builtins")
    Suggested-by: Marco Elver <elver@google.com>
    Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
    Reviewed-by: Marco Elver <elver@google.com>
    Acked-by: Marco Elver <elver@google.com>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://msgid.link/d9c6afc28d0855240171a4e0ad9ffcdb9d07fceb.1683892665.git.christophe.leroy@csgroup.eu
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
kernfs: fix missing kernfs_idr_lock to remove an ID from the IDR [+ + +]
Author: Muchun Song <muchun.song@linux.dev>
Date:   Tue May 23 10:40:17 2023 +0800

    kernfs: fix missing kernfs_idr_lock to remove an ID from the IDR
    
    [ Upstream commit 30480b988f88c279752f3202a26b6fee5f586aef ]
    
    The root->ino_idr is supposed to be protected by kernfs_idr_lock, fix
    it.
    
    Fixes: 488dee96bb62 ("kernfs: allow creating kernfs objects with arbitrary uid/gid")
    Signed-off-by: Muchun Song <songmuchun@bytedance.com>
    Acked-by: Tejun Heo <tj@kernel.org>
    Link: https://lore.kernel.org/r/20230523024017.24851-1-songmuchun@bytedance.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
kexec: fix a memory leak in crash_shrink_memory() [+ + +]
Author: Zhen Lei <thunder.leizhen@huawei.com>
Date:   Sat May 27 20:34:34 2023 +0800

    kexec: fix a memory leak in crash_shrink_memory()
    
    [ Upstream commit 1cba6c4309f03de570202c46f03df3f73a0d4c82 ]
    
    Patch series "kexec: enable kexec_crash_size to support two crash kernel
    regions".
    
    When crashkernel=X fails to reserve region under 4G, it will fall back to
    reserve region above 4G and a region of the default size will also be
    reserved under 4G.  Unfortunately, /sys/kernel/kexec_crash_size only
    supports one crash kernel region now, the user cannot sense the low memory
    reserved by reading /sys/kernel/kexec_crash_size.  Also, low memory cannot
    be freed by writing this file.
    
    For example:
    resource_size(crashk_res) = 512M
    resource_size(crashk_low_res) = 256M
    
    The result of 'cat /sys/kernel/kexec_crash_size' is 512M, but it should be
    768M.  When we execute 'echo 0 > /sys/kernel/kexec_crash_size', the size
    of crashk_res becomes 0 and resource_size(crashk_low_res) is still 256 MB,
    which is incorrect.
    
    Since crashk_res manages the memory with high address and crashk_low_res
    manages the memory with low address, crashk_low_res is shrunken only when
    all crashk_res is shrunken.  And because when there is only one crash
    kernel region, crashk_res is always used.  Therefore, if all crashk_res is
    shrunken and crashk_low_res still exists, swap them.
    
    This patch (of 6):
    
    If the value of parameter 'new_size' is in the semi-open and semi-closed
    interval (crashk_res.end - KEXEC_CRASH_MEM_ALIGN + 1, crashk_res.end], the
    calculation result of ram_res is:
    
            ram_res->start = crashk_res.end + 1
            ram_res->end   = crashk_res.end
    
    The operation of insert_resource() fails, and ram_res is not added to
    iomem_resource.  As a result, the memory of the control block ram_res is
    leaked.
    
    In fact, on all architectures, the start address and size of crashk_res
    are already aligned by KEXEC_CRASH_MEM_ALIGN.  Therefore, we do not need
    to round up crashk_res.start again.  Instead, we should round up
    'new_size' in advance.
    
    Link: https://lkml.kernel.org/r/20230527123439.772-1-thunder.leizhen@huawei.com
    Link: https://lkml.kernel.org/r/20230527123439.772-2-thunder.leizhen@huawei.com
    Fixes: 6480e5a09237 ("kdump: add missing RAM resource in crash_shrink_memory()")
    Fixes: 06a7f711246b ("kexec: premit reduction of the reserved memory size")
    Signed-off-by: Zhen Lei <thunder.leizhen@huawei.com>
    Acked-by: Baoquan He <bhe@redhat.com>
    Cc: Cong Wang <amwang@redhat.com>
    Cc: Eric W. Biederman <ebiederm@xmission.com>
    Cc: Michael Holzheu <holzheu@linux.vnet.ibm.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
keys: Fix linking a duplicate key to a keyring's assoc_array [+ + +]
Author: Petr Pavlu <petr.pavlu@suse.com>
Date:   Thu Mar 23 14:04:12 2023 +0100

    keys: Fix linking a duplicate key to a keyring's assoc_array
    
    commit d55901522f96082a43b9842d34867363c0cdbac5 upstream.
    
    When making a DNS query inside the kernel using dns_query(), the request
    code can in rare cases end up creating a duplicate index key in the
    assoc_array of the destination keyring. It is eventually found by
    a BUG_ON() check in the assoc_array implementation and results in
    a crash.
    
    Example report:
    [2158499.700025] kernel BUG at ../lib/assoc_array.c:652!
    [2158499.700039] invalid opcode: 0000 [#1] SMP PTI
    [2158499.700065] CPU: 3 PID: 31985 Comm: kworker/3:1 Kdump: loaded Not tainted 5.3.18-150300.59.90-default #1 SLE15-SP3
    [2158499.700096] Hardware name: VMware, Inc. VMware Virtual Platform/440BX Desktop Reference Platform, BIOS 6.00 11/12/2020
    [2158499.700351] Workqueue: cifsiod cifs_resolve_server [cifs]
    [2158499.700380] RIP: 0010:assoc_array_insert+0x85f/0xa40
    [2158499.700401] Code: ff 74 2b 48 8b 3b 49 8b 45 18 4c 89 e6 48 83 e7 fe e8 95 ec 74 00 3b 45 88 7d db 85 c0 79 d4 0f 0b 0f 0b 0f 0b e8 41 f2 be ff <0f> 0b 0f 0b 81 7d 88 ff ff ff 7f 4c 89 eb 4c 8b ad 58 ff ff ff 0f
    [2158499.700448] RSP: 0018:ffffc0bd6187faf0 EFLAGS: 00010282
    [2158499.700470] RAX: ffff9f1ea7da2fe8 RBX: ffff9f1ea7da2fc1 RCX: 0000000000000005
    [2158499.700492] RDX: 0000000000000000 RSI: 0000000000000005 RDI: 0000000000000000
    [2158499.700515] RBP: ffffc0bd6187fbb0 R08: ffff9f185faf1100 R09: 0000000000000000
    [2158499.700538] R10: ffff9f1ea7da2cc0 R11: 000000005ed8cec8 R12: ffffc0bd6187fc28
    [2158499.700561] R13: ffff9f15feb8d000 R14: ffff9f1ea7da2fc0 R15: ffff9f168dc0d740
    [2158499.700585] FS:  0000000000000000(0000) GS:ffff9f185fac0000(0000) knlGS:0000000000000000
    [2158499.700610] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [2158499.700630] CR2: 00007fdd94fca238 CR3: 0000000809d8c006 CR4: 00000000003706e0
    [2158499.700702] Call Trace:
    [2158499.700741]  ? key_alloc+0x447/0x4b0
    [2158499.700768]  ? __key_link_begin+0x43/0xa0
    [2158499.700790]  __key_link_begin+0x43/0xa0
    [2158499.700814]  request_key_and_link+0x2c7/0x730
    [2158499.700847]  ? dns_resolver_read+0x20/0x20 [dns_resolver]
    [2158499.700873]  ? key_default_cmp+0x20/0x20
    [2158499.700898]  request_key_tag+0x43/0xa0
    [2158499.700926]  dns_query+0x114/0x2ca [dns_resolver]
    [2158499.701127]  dns_resolve_server_name_to_ip+0x194/0x310 [cifs]
    [2158499.701164]  ? scnprintf+0x49/0x90
    [2158499.701190]  ? __switch_to_asm+0x40/0x70
    [2158499.701211]  ? __switch_to_asm+0x34/0x70
    [2158499.701405]  reconn_set_ipaddr_from_hostname+0x81/0x2a0 [cifs]
    [2158499.701603]  cifs_resolve_server+0x4b/0xd0 [cifs]
    [2158499.701632]  process_one_work+0x1f8/0x3e0
    [2158499.701658]  worker_thread+0x2d/0x3f0
    [2158499.701682]  ? process_one_work+0x3e0/0x3e0
    [2158499.701703]  kthread+0x10d/0x130
    [2158499.701723]  ? kthread_park+0xb0/0xb0
    [2158499.701746]  ret_from_fork+0x1f/0x40
    
    The situation occurs as follows:
    * Some kernel facility invokes dns_query() to resolve a hostname, for
      example, "abcdef". The function registers its global DNS resolver
      cache as current->cred.thread_keyring and passes the query to
      request_key_net() -> request_key_tag() -> request_key_and_link().
    * Function request_key_and_link() creates a keyring_search_context
      object. Its match_data.cmp method gets set via a call to
      type->match_preparse() (resolves to dns_resolver_match_preparse()) to
      dns_resolver_cmp().
    * Function request_key_and_link() continues and invokes
      search_process_keyrings_rcu() which returns that a given key was not
      found. The control is then passed to request_key_and_link() ->
      construct_alloc_key().
    * Concurrently to that, a second task similarly makes a DNS query for
      "abcdef." and its result gets inserted into the DNS resolver cache.
    * Back on the first task, function construct_alloc_key() first runs
      __key_link_begin() to determine an assoc_array_edit operation to
      insert a new key. Index keys in the array are compared exactly as-is,
      using keyring_compare_object(). The operation finds that "abcdef" is
      not yet present in the destination keyring.
    * Function construct_alloc_key() continues and checks if a given key is
      already present on some keyring by again calling
      search_process_keyrings_rcu(). This search is done using
      dns_resolver_cmp() and "abcdef" gets matched with now present key
      "abcdef.".
    * The found key is linked on the destination keyring by calling
      __key_link() and using the previously calculated assoc_array_edit
      operation. This inserts the "abcdef." key in the array but creates
      a duplicity because the same index key is already present.
    
    Fix the problem by postponing __key_link_begin() in
    construct_alloc_key() until an actual key which should be linked into
    the destination keyring is determined.
    
    [jarkko@kernel.org: added a fixes tag and cc to stable]
    Cc: stable@vger.kernel.org # v5.3+
    Fixes: df593ee23e05 ("keys: Hoist locking out of __key_link_begin()")
    Signed-off-by: Petr Pavlu <petr.pavlu@suse.com>
    Reviewed-by: Joey Lee <jlee@suse.com>
    Reviewed-by: Jarkko Sakkinen <jarkko@kernel.org>
    Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
KVM: s390: fix KVM_S390_GET_CMMA_BITS for GFNs in memslot holes [+ + +]
Author: Nico Boehr <nrb@linux.ibm.com>
Date:   Fri Mar 24 15:54:23 2023 +0100

    KVM: s390: fix KVM_S390_GET_CMMA_BITS for GFNs in memslot holes
    
    [ Upstream commit 285cff4c0454340a4dc53f46e67f2cb1c293bd74 ]
    
    The KVM_S390_GET_CMMA_BITS ioctl may return incorrect values when userspace
    specifies a start_gfn outside of memslots.
    
    This can occur when a VM has multiple memslots with a hole in between:
    
    +-----+----------+--------+--------+
    | ... | Slot N-1 | <hole> | Slot N |
    +-----+----------+--------+--------+
          ^          ^        ^        ^
          |          |        |        |
    GFN   A          A+B      |        |
                              A+B+C    |
                                       A+B+C+D
    
    When userspace specifies a GFN in [A+B, A+B+C), it would expect to get the
    CMMA values of the first dirty page in Slot N. However, userspace may get a
    start_gfn of A+B+C+D with a count of 0, hence completely skipping over any
    dirty pages in slot N.
    
    The error is in kvm_s390_next_dirty_cmma(), which assumes
    gfn_to_memslot_approx() will return the memslot _below_ the specified GFN
    when the specified GFN lies outside a memslot. In reality it may return
    either the memslot below or above the specified GFN.
    
    When a memslot above the specified GFN is returned this happens:
    
    - ofs is calculated, but since the memslot's base_gfn is larger than the
      specified cur_gfn, ofs will underflow to a huge number.
    - ofs is passed to find_next_bit(). Since ofs will exceed the memslot's
      number of pages, the number of pages in the memslot is returned,
      completely skipping over all bits in the memslot userspace would be
      interested in.
    
    Fix this by resetting ofs to zero when a memslot _above_ cur_gfn is
    returned (cur_gfn < ms->base_gfn).
    
    Signed-off-by: Nico Boehr <nrb@linux.ibm.com>
    Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
    Fixes: afdad61615cc ("KVM: s390: Fix storage attributes migration with memory slots")
    Message-Id: <20230324145424.293889-2-nrb@linux.ibm.com>
    Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
    Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

KVM: s390: vsie: fix the length of APCB bitmap [+ + +]
Author: Pierre Morel <pmorel@linux.ibm.com>
Date:   Wed May 10 17:42:58 2023 +0200

    KVM: s390: vsie: fix the length of APCB bitmap
    
    [ Upstream commit 246be7d2720ea9a795b576067ecc5e5c7a1e7848 ]
    
    bit_and() uses the count of bits as the woking length.
    Fix the previous implementation and effectively use
    the right bitmap size.
    
    Fixes: 19fd83a64718 ("KVM: s390: vsie: allow CRYCB FORMAT-1")
    Fixes: 56019f9aca22 ("KVM: s390: vsie: Allow CRYCB FORMAT-2")
    
    Signed-off-by: Pierre Morel <pmorel@linux.ibm.com>
    Reviewed-by: Janosch Frank <frankja@linux.ibm.com>
    Link: https://lore.kernel.org/kvm/20230511094719.9691-1-pmorel@linux.ibm.com/
    Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
leds: trigger: netdev: Recheck NETDEV_LED_MODE_LINKUP on dev rename [+ + +]
Author: Christian Marangi <ansuelsmth@gmail.com>
Date:   Wed Apr 19 23:07:39 2023 +0200

    leds: trigger: netdev: Recheck NETDEV_LED_MODE_LINKUP on dev rename
    
    commit cee4bd16c3195a701be683f7da9e88c6e11acb73 upstream.
    
    Dev can be renamed also while up for supported device. We currently
    wrongly clear the NETDEV_LED_MODE_LINKUP flag on NETDEV_CHANGENAME
    event.
    
    Fix this by rechecking if the carrier is ok on NETDEV_CHANGENAME and
    correctly set the NETDEV_LED_MODE_LINKUP bit.
    
    Fixes: 5f820ed52371 ("leds: trigger: netdev: fix handling on interface rename")
    Cc: stable@vger.kernel.org # v5.5+
    Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Signed-off-by: Lee Jones <lee@kernel.org>
    Link: https://lore.kernel.org/r/20230419210743.3594-2-ansuelsmth@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
lib/ts_bm: reset initial match offset for every block of text [+ + +]
Author: Jeremy Sowden <jeremy@azazel.net>
Date:   Mon Jun 19 20:06:57 2023 +0100

    lib/ts_bm: reset initial match offset for every block of text
    
    [ Upstream commit 6f67fbf8192da80c4db01a1800c7fceaca9cf1f9 ]
    
    The `shift` variable which indicates the offset in the string at which
    to start matching the pattern is initialized to `bm->patlen - 1`, but it
    is not reset when a new block is retrieved.  This means the implemen-
    tation may start looking at later and later positions in each successive
    block and miss occurrences of the pattern at the beginning.  E.g.,
    consider a HTTP packet held in a non-linear skb, where the HTTP request
    line occurs in the second block:
    
      [... 52 bytes of packet headers ...]
      GET /bmtest HTTP/1.1\r\nHost: www.example.com\r\n\r\n
    
    and the pattern is "GET /bmtest".
    
    Once the first block comprising the packet headers has been examined,
    `shift` will be pointing to somewhere near the end of the block, and so
    when the second block is examined the request line at the beginning will
    be missed.
    
    Reinitialize the variable for each new block.
    
    Fixes: 8082e4ed0a61 ("[LIB]: Boyer-Moore extension for textsearch infrastructure strike #2")
    Link: https://bugzilla.netfilter.org/show_bug.cgi?id=1390
    Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
libbpf: fix offsetof() and container_of() to work with CO-RE [+ + +]
Author: Andrii Nakryiko <andrii@kernel.org>
Date:   Mon May 8 23:55:02 2023 -0700

    libbpf: fix offsetof() and container_of() to work with CO-RE
    
    [ Upstream commit bdeeed3498c7871c17465bb4f11d1bc67f9098af ]
    
    It seems like __builtin_offset() doesn't preserve CO-RE field
    relocations properly. So if offsetof() macro is defined through
    __builtin_offset(), CO-RE-enabled BPF code using container_of() will be
    subtly and silently broken.
    
    To avoid this problem, redefine offsetof() and container_of() in the
    form that works with CO-RE relocations more reliably.
    
    Fixes: 5fbc220862fc ("tools/libpf: Add offsetof/container_of macro in bpf_helpers.h")
    Reported-by: Lennart Poettering <lennart@poettering.net>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Acked-by: Yonghong Song <yhs@fb.com>
    Link: https://lore.kernel.org/r/20230509065502.2306180-1-andrii@kernel.org
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Linux: Linux 5.10.188 [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Thu Jul 27 08:44:44 2023 +0200

    Linux 5.10.188
    
    Link: https://lore.kernel.org/r/20230725104553.588743331@linuxfoundation.org
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Tested-by: Shuah Khan <skhan@linuxfoundation.org>
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Link: https://lore.kernel.org/r/20230726045328.327600022@linuxfoundation.org
    Tested-by: Linux Kernel Functional Testing <lkft@linaro.org>
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Tested-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
llc: Don't drop packet from non-root netns. [+ + +]
Author: Kuniyuki Iwashima <kuniyu@amazon.com>
Date:   Tue Jul 18 10:41:51 2023 -0700

    llc: Don't drop packet from non-root netns.
    
    [ Upstream commit 6631463b6e6673916d2481f692938f393148aa82 ]
    
    Now these upper layer protocol handlers can be called from llc_rcv()
    as sap->rcv_func(), which is registered by llc_sap_open().
    
      * function which is passed to register_8022_client()
        -> no in-kernel user calls register_8022_client().
    
      * snap_rcv()
        `- proto->rcvfunc() : registered by register_snap_client()
           -> aarp_rcv() and atalk_rcv() drop packets from non-root netns
    
      * stp_pdu_rcv()
        `- garp_protos[]->rcv() : registered by stp_proto_register()
           -> garp_pdu_rcv() and br_stp_rcv() are netns-aware
    
    So, we can safely remove the netns restriction in llc_rcv().
    
    Fixes: e730c15519d0 ("[NET]: Make packet reception network namespace safe")
    Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
mailbox: ti-msgmgr: Fill non-message tx data fields with 0x0 [+ + +]
Author: Nishanth Menon <nm@ti.com>
Date:   Tue Jun 20 20:00:22 2023 -0500

    mailbox: ti-msgmgr: Fill non-message tx data fields with 0x0
    
    [ Upstream commit 1b712f18c461bd75f018033a15cf381e712806b5 ]
    
    Sec proxy/message manager data buffer is 60 bytes with the last of the
    registers indicating transmission completion. This however poses a bit
    of a challenge.
    
    The backing memory for sec_proxy / message manager is regular memory,
    and all sec proxy does is to trigger a burst of all 60 bytes of data
    over to the target thread backing ring accelerator. It doesn't do a
    memory scrub when it moves data out in the burst. When we transmit
    multiple messages, remnants of previous message is also transmitted
    which results in some random data being set in TISCI fields of
    messages that have been expanded forward.
    
    The entire concept of backward compatibility hinges on the fact that
    the unused message fields remain 0x0 allowing for 0x0 value to be
    specially considered when backward compatibility of message extension
    is done.
    
    So, instead of just writing the completion register, we continue
    to fill the message buffer up with 0x0 (note: for partial message
    involving completion, we already do this).
    
    This allows us to scale and introduce ABI changes back also work with
    other boot stages that may have left data in the internal memory.
    
    While at this, be consistent and explicit with the data_reg pointer
    increment.
    
    Fixes: aace66b170ce ("mailbox: Introduce TI message manager driver")
    Signed-off-by: Nishanth Menon <nm@ti.com>
    Signed-off-by: Jassi Brar <jaswinder.singh@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
md/raid0: add discard support for the 'original' layout [+ + +]
Author: Jason Baron <jbaron@akamai.com>
Date:   Fri Jun 23 14:05:23 2023 -0400

    md/raid0: add discard support for the 'original' layout
    
    commit e836007089ba8fdf24e636ef2b007651fb4582e6 upstream.
    
    We've found that using raid0 with the 'original' layout and discard
    enabled with different disk sizes (such that at least two zones are
    created) can result in data corruption. This is due to the fact that
    the discard handling in 'raid0_handle_discard()' assumes the 'alternate'
    layout. We've seen this corruption using ext4 but other filesystems are
    likely susceptible as well.
    
    More specifically, while multiple zones are necessary to create the
    corruption, the corruption may not occur with multiple zones if they
    layout in such a way the layout matches what the 'alternate' layout
    would have produced. Thus, not all raid0 devices with the 'original'
    layout, different size disks and discard enabled will encounter this
    corruption.
    
    The 3.14 kernel inadvertently changed the raid0 disk layout for different
    size disks. Thus, running a pre-3.14 kernel and post-3.14 kernel on the
    same raid0 array could corrupt data. This lead to the creation of the
    'original' layout (to match the pre-3.14 layout) and the 'alternate' layout
    (to match the post 3.14 layout) in the 5.4 kernel time frame and an option
    to tell the kernel which layout to use (since it couldn't be autodetected).
    However, when the 'original' layout was added back to 5.4 discard support
    for the 'original' layout was not added leading this issue.
    
    I've been able to reliably reproduce the corruption with the following
    test case:
    
    1. create raid0 array with different size disks using original layout
    2. mkfs
    3. mount -o discard
    4. create lots of files
    5. remove 1/2 the files
    6. fstrim -a (or just the mount point for the raid0 array)
    7. umount
    8. fsck -fn /dev/md0 (spews all sorts of corruptions)
    
    Let's fix this by adding proper discard support to the 'original' layout.
    The fix 'maps' the 'original' layout disks to the order in which they are
    read/written such that we can compare the disks in the same way that the
    current 'alternate' layout does. A 'disk_shift' field is added to
    'struct strip_zone'. This could be computed on the fly in
    raid0_handle_discard() but by adding this field, we save some computation
    in the discard path.
    
    Note we could also potentially fix this by re-ordering the disks in the
    zones that follow the first one, and then always read/writing them using
    the 'alternate' layout. However, that is seen as a more substantial change,
    and we are attempting the least invasive fix at this time to remedy the
    corruption.
    
    I've verified the change using the reproducer mentioned above. Typically,
    the corruption is seen after less than 3 iterations, while the patch has
    run 500+ iterations.
    
    Cc: NeilBrown <neilb@suse.de>
    Cc: Song Liu <song@kernel.org>
    Fixes: c84a1372df92 ("md/raid0: avoid RAID0 data corruption due to layout confusion.")
    Cc: stable@vger.kernel.org
    Signed-off-by: Jason Baron <jbaron@akamai.com>
    Signed-off-by: Song Liu <song@kernel.org>
    Link: https://lore.kernel.org/r/20230623180523.1901230-1-jbaron@akamai.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
md/raid10: check slab-out-of-bounds in md_bitmap_get_counter [+ + +]
Author: Li Nan <linan122@huawei.com>
Date:   Mon May 15 21:48:05 2023 +0800

    md/raid10: check slab-out-of-bounds in md_bitmap_get_counter
    
    [ Upstream commit 301867b1c16805aebbc306aafa6ecdc68b73c7e5 ]
    
    If we write a large number to md/bitmap_set_bits, md_bitmap_checkpage()
    will return -EINVAL because 'page >= bitmap->pages', but the return value
    was not checked immediately in md_bitmap_get_counter() in order to set
    *blocks value and slab-out-of-bounds occurs.
    
    Move check of 'page >= bitmap->pages' to md_bitmap_get_counter() and
    return directly if true.
    
    Fixes: ef4256733506 ("md/bitmap: optimise scanning of empty bitmaps.")
    Signed-off-by: Li Nan <linan122@huawei.com>
    Reviewed-by: Yu Kuai <yukuai3@huawei.com>
    Signed-off-by: Song Liu <song@kernel.org>
    Link: https://lore.kernel.org/r/20230515134808.3936750-2-linan666@huaweicloud.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

md/raid10: fix io loss while replacement replace rdev [+ + +]
Author: Li Nan <linan122@huawei.com>
Date:   Fri Jun 2 17:18:39 2023 +0800

    md/raid10: fix io loss while replacement replace rdev
    
    [ Upstream commit 2ae6aaf76912bae53c74b191569d2ab484f24bf3 ]
    
    When removing a disk with replacement, the replacement will be used to
    replace rdev. During this process, there is a brief window in which both
    rdev and replacement are read as NULL in raid10_write_request(). This
    will result in io not being submitted but it should be.
    
      //remove                              //write
      raid10_remove_disk                    raid10_write_request
       mirror->rdev = NULL
                                             read rdev -> NULL
       mirror->rdev = mirror->replacement
       mirror->replacement = NULL
                                             read replacement -> NULL
    
    Fix it by reading replacement first and rdev later, meanwhile, use smp_mb()
    to prevent memory reordering.
    
    Fixes: 475b0321a4df ("md/raid10: writes should get directed to replacement as well as original.")
    Signed-off-by: Li Nan <linan122@huawei.com>
    Reviewed-by: Yu Kuai <yukuai3@huawei.com>
    Signed-off-by: Song Liu <song@kernel.org>
    Link: https://lore.kernel.org/r/20230602091839.743798-3-linan666@huaweicloud.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

md/raid10: fix null-ptr-deref of mreplace in raid10_sync_request [+ + +]
Author: Li Nan <linan122@huawei.com>
Date:   Sat May 27 15:22:15 2023 +0800

    md/raid10: fix null-ptr-deref of mreplace in raid10_sync_request
    
    [ Upstream commit 34817a2441747b48e444cb0e05d84e14bc9443da ]
    
    There are two check of 'mreplace' in raid10_sync_request(). In the first
    check, 'need_replace' will be set and 'mreplace' will be used later if
    no-Faulty 'mreplace' exists, In the second check, 'mreplace' will be
    set to NULL if it is Faulty, but 'need_replace' will not be changed
    accordingly. null-ptr-deref occurs if Faulty is set between two check.
    
    Fix it by merging two checks into one. And replace 'need_replace' with
    'mreplace' because their values are always the same.
    
    Fixes: ee37d7314a32 ("md/raid10: Fix raid10 replace hang when new added disk faulty")
    Signed-off-by: Li Nan <linan122@huawei.com>
    Reviewed-by: Yu Kuai <yukuai3@huawei.com>
    Signed-off-by: Song Liu <song@kernel.org>
    Link: https://lore.kernel.org/r/20230527072218.2365857-2-linan666@huaweicloud.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

md/raid10: fix overflow of md/safe_mode_delay [+ + +]
Author: Li Nan <linan122@huawei.com>
Date:   Mon May 22 15:25:33 2023 +0800

    md/raid10: fix overflow of md/safe_mode_delay
    
    [ Upstream commit 6beb489b2eed25978523f379a605073f99240c50 ]
    
    There is no input check when echo md/safe_mode_delay in safe_delay_store().
    And msec might also overflow when HZ < 1000 in safe_delay_show(), Fix it by
    checking overflow in safe_delay_store() and use unsigned long conversion in
    safe_delay_show().
    
    Fixes: 72e02075a33f ("md: factor out parsing of fixed-point numbers")
    Signed-off-by: Li Nan <linan122@huawei.com>
    Signed-off-by: Song Liu <song@kernel.org>
    Link: https://lore.kernel.org/r/20230522072535.1523740-2-linan666@huaweicloud.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

md/raid10: fix wrong setting of max_corr_read_errors [+ + +]
Author: Li Nan <linan122@huawei.com>
Date:   Mon May 22 15:25:34 2023 +0800

    md/raid10: fix wrong setting of max_corr_read_errors
    
    [ Upstream commit f8b20a405428803bd9881881d8242c9d72c6b2b2 ]
    
    There is no input check when echo md/max_read_errors and overflow might
    occur. Add check of input number.
    
    Fixes: 1e50915fe0bb ("raid: improve MD/raid10 handling of correctable read errors.")
    Signed-off-by: Li Nan <linan122@huawei.com>
    Reviewed-by: Yu Kuai <yukuai3@huawei.com>
    Signed-off-by: Song Liu <song@kernel.org>
    Link: https://lore.kernel.org/r/20230522072535.1523740-3-linan666@huaweicloud.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

md/raid10: prevent soft lockup while flush writes [+ + +]
Author: Yu Kuai <yukuai3@huawei.com>
Date:   Mon May 29 21:11:00 2023 +0800

    md/raid10: prevent soft lockup while flush writes
    
    [ Upstream commit 010444623e7f4da6b4a4dd603a7da7469981e293 ]
    
    Currently, there is no limit for raid1/raid10 plugged bio. While flushing
    writes, raid1 has cond_resched() while raid10 doesn't, and too many
    writes can cause soft lockup.
    
    Follow up soft lockup can be triggered easily with writeback test for
    raid10 with ramdisks:
    
    watchdog: BUG: soft lockup - CPU#10 stuck for 27s! [md0_raid10:1293]
    Call Trace:
     <TASK>
     call_rcu+0x16/0x20
     put_object+0x41/0x80
     __delete_object+0x50/0x90
     delete_object_full+0x2b/0x40
     kmemleak_free+0x46/0xa0
     slab_free_freelist_hook.constprop.0+0xed/0x1a0
     kmem_cache_free+0xfd/0x300
     mempool_free_slab+0x1f/0x30
     mempool_free+0x3a/0x100
     bio_free+0x59/0x80
     bio_put+0xcf/0x2c0
     free_r10bio+0xbf/0xf0
     raid_end_bio_io+0x78/0xb0
     one_write_done+0x8a/0xa0
     raid10_end_write_request+0x1b4/0x430
     bio_endio+0x175/0x320
     brd_submit_bio+0x3b9/0x9b7 [brd]
     __submit_bio+0x69/0xe0
     submit_bio_noacct_nocheck+0x1e6/0x5a0
     submit_bio_noacct+0x38c/0x7e0
     flush_pending_writes+0xf0/0x240
     raid10d+0xac/0x1ed0
    
    Fix the problem by adding cond_resched() to raid10 like what raid1 did.
    
    Note that unlimited plugged bio still need to be optimized, for example,
    in the case of lots of dirty pages writeback, this will take lots of
    memory and io will spend a long time in plug, hence io latency is bad.
    
    Signed-off-by: Yu Kuai <yukuai3@huawei.com>
    Signed-off-by: Song Liu <song@kernel.org>
    Link: https://lore.kernel.org/r/20230529131106.2123367-2-yukuai1@huaweicloud.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
md: fix data corruption for raid456 when reshape restart while grow up [+ + +]
Author: Yu Kuai <yukuai3@huawei.com>
Date:   Fri May 12 09:56:07 2023 +0800

    md: fix data corruption for raid456 when reshape restart while grow up
    
    [ Upstream commit 873f50ece41aad5c4f788a340960c53774b5526e ]
    
    Currently, if reshape is interrupted, echo "reshape" to sync_action will
    restart reshape from scratch, for example:
    
    echo frozen > sync_action
    echo reshape > sync_action
    
    This will corrupt data before reshape_position if the array is growing,
    fix the problem by continue reshape from reshape_position.
    
    Reported-by: Peter Neuwirth <reddunur@online.de>
    Link: https://lore.kernel.org/linux-raid/e2f96772-bfbc-f43b-6da1-f520e5164536@online.de/
    Signed-off-by: Yu Kuai <yukuai3@huawei.com>
    Signed-off-by: Song Liu <song@kernel.org>
    Link: https://lore.kernel.org/r/20230512015610.821290-3-yukuai1@huaweicloud.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
media: atomisp: fix "variable dereferenced before check 'asd'" [+ + +]
Author: Tsuchiya Yuto <kitakar@gmail.com>
Date:   Wed Dec 1 15:19:04 2021 +0100

    media: atomisp: fix "variable dereferenced before check 'asd'"
    
    commit ac56760a8bbb4e654b2fd54e5de79dd5d72f937d upstream.
    
    There are two occurrences where the variable 'asd' is dereferenced
    before check. Fix this issue by using the variable after the check.
    
    Link: https://lore.kernel.org/linux-media/20211122074122.GA6581@kili/
    
    Link: https://lore.kernel.org/linux-media/20211201141904.47231-1-kitakar@gmail.com
    Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
    Signed-off-by: Tsuchiya Yuto <kitakar@gmail.com>
    Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
    Igned-off-by: Anastasia Belova <abelova@astralinux.ru>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
media: atomisp: gmin_platform: fix out_len in gmin_get_config_dsm_var() [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Fri May 26 12:53:23 2023 +0100

    media: atomisp: gmin_platform: fix out_len in gmin_get_config_dsm_var()
    
    [ Upstream commit 1657f2934daf89e8d9fa4b2697008909eb22c73e ]
    
    Ideally, strlen(cur->string.pointer) and strlen(out) would be the same.
    But this code is using strscpy() to avoid a potential buffer overflow.
    So in the same way we should take the strlen() of the smaller string to
    avoid a buffer overflow in the caller, gmin_get_var_int().
    
    Link: https://lore.kernel.org/r/26124bcd-8132-4483-9d67-225c87d424e8@kili.mountain
    
    Fixes: 387041cda44e ("media: atomisp: improve sensor detection code to use _DSM table")
    Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: cec: i2c: ch7322: also select REGMAP [+ + +]
Author: Randy Dunlap <rdunlap@infradead.org>
Date:   Thu Jun 8 04:54:35 2023 +0200

    media: cec: i2c: ch7322: also select REGMAP
    
    [ Upstream commit 29f96ac23648b2259f42d40703c47dd18fd172ca ]
    
    Selecting only REGMAP_I2C can leave REGMAP unset, causing build errors,
    so also select REGMAP to prevent the build errors.
    
    ../drivers/media/cec/i2c/ch7322.c:158:21: error: variable 'ch7322_regmap' has initializer but incomplete type
      158 | static const struct regmap_config ch7322_regmap = {
    ../drivers/media/cec/i2c/ch7322.c:159:10: error: 'const struct regmap_config' has no member named 'reg_bits'
      159 |         .reg_bits = 8,
    ../drivers/media/cec/i2c/ch7322.c:159:21: warning: excess elements in struct initializer
      159 |         .reg_bits = 8,
    ../drivers/media/cec/i2c/ch7322.c:160:10: error: 'const struct regmap_config' has no member named 'val_bits'
      160 |         .val_bits = 8,
    ../drivers/media/cec/i2c/ch7322.c:160:21: warning: excess elements in struct initializer
      160 |         .val_bits = 8,
    ../drivers/media/cec/i2c/ch7322.c:161:10: error: 'const struct regmap_config' has no member named 'max_register'
      161 |         .max_register = 0x7f,
    ../drivers/media/cec/i2c/ch7322.c:161:25: warning: excess elements in struct initializer
      161 |         .max_register = 0x7f,
    ../drivers/media/cec/i2c/ch7322.c:162:10: error: 'const struct regmap_config' has no member named 'disable_locking'
      162 |         .disable_locking = true,
    ../drivers/media/cec/i2c/ch7322.c:162:28: warning: excess elements in struct initializer
      162 |         .disable_locking = true,
    ../drivers/media/cec/i2c/ch7322.c: In function 'ch7322_probe':
    ../drivers/media/cec/i2c/ch7322.c:468:26: error: implicit declaration of function 'devm_regmap_init_i2c' [-Werror=implicit-function-declaration]
      468 |         ch7322->regmap = devm_regmap_init_i2c(client, &ch7322_regmap);
    ../drivers/media/cec/i2c/ch7322.c:468:24: warning: assignment to 'struct regmap *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
      468 |         ch7322->regmap = devm_regmap_init_i2c(client, &ch7322_regmap);
    ../drivers/media/cec/i2c/ch7322.c: At top level:
    ../drivers/media/cec/i2c/ch7322.c:158:35: error: storage size of 'ch7322_regmap' isn't known
      158 | static const struct regmap_config ch7322_regmap = {
    
    Link: https://lore.kernel.org/linux-media/20230608025435.29249-1-rdunlap@infradead.org
    Fixes: 21b9a47e0ec7 ("media: cec: i2c: ch7322: Add ch7322 CEC controller driver")
    Signed-off-by: Randy Dunlap <rdunlap@infradead.org>
    Cc: Jeff Chase <jnchase@google.com>
    Cc: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Cc: Joe Tessler <jrt@google.com>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: Mark Brown <broonie@kernel.org>
    Cc: Masahiro Yamada <masahiroy@kernel.org>
    Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: usb: Check az6007_read() return value [+ + +]
Author: Daniil Dulov <d.dulov@aladdin.ru>
Date:   Tue Mar 14 10:04:49 2023 -0700

    media: usb: Check az6007_read() return value
    
    [ Upstream commit fdaca63186f59fc664b346c45b76576624b48e57 ]
    
    If az6007_read() returns error, there is no sence to continue.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: 3af2f4f15a61 ("[media] az6007: Change the az6007 read/write routine parameter")
    Signed-off-by: Daniil Dulov <d.dulov@aladdin.ru>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: usb: siano: Fix warning due to null work_func_t function pointer [+ + +]
Author: Duoming Zhou <duoming@zju.edu.cn>
Date:   Tue May 23 07:59:32 2023 +0800

    media: usb: siano: Fix warning due to null work_func_t function pointer
    
    [ Upstream commit 6f489a966fbeb0da63d45c2c66a8957eab604bf6 ]
    
    The previous commit ebad8e731c1c ("media: usb: siano: Fix use after
    free bugs caused by do_submit_urb") adds cancel_work_sync() in
    smsusb_stop_streaming(). But smsusb_stop_streaming() may be called,
    even if the work_struct surb->wq has not been initialized. As a result,
    the warning will occur. One of the processes that could lead to warning
    is shown below:
    
    smsusb_probe()
      smsusb_init_device()
        if (!dev->in_ep || !dev->out_ep || align < 0) {
             smsusb_term_device(intf);
               smsusb_stop_streaming()
                 cancel_work_sync(&dev->surbs[i].wq);
                   __cancel_work_timer()
                     __flush_work()
                       if (WARN_ON(!work->func)) // work->func is null
    
    The log reported by syzbot is shown below:
    
    WARNING: CPU: 0 PID: 897 at kernel/workqueue.c:3066 __flush_work+0x798/0xa80 kernel/workqueue.c:3063
    Modules linked in:
    CPU: 0 PID: 897 Comm: kworker/0:2 Not tainted 6.2.0-rc1-syzkaller #0
    RIP: 0010:__flush_work+0x798/0xa80 kernel/workqueue.c:3066
    ...
    RSP: 0018:ffffc9000464ebf8 EFLAGS: 00010246
    RAX: 1ffff11002dbb420 RBX: 0000000000000021 RCX: 1ffffffff204fa4e
    RDX: dffffc0000000000 RSI: 0000000000000001 RDI: ffff888016dda0e8
    RBP: ffffc9000464ed98 R08: 0000000000000001 R09: ffffffff90253b2f
    R10: 0000000000000001 R11: 0000000000000000 R12: ffff888016dda0e8
    R13: ffff888016dda0e8 R14: ffff888016dda100 R15: 0000000000000001
    FS:  0000000000000000(0000) GS:ffff8880b9a00000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00007ffd4331efe8 CR3: 000000000b48e000 CR4: 00000000003506f0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    Call Trace:
     <TASK>
     __cancel_work_timer+0x315/0x460 kernel/workqueue.c:3160
     smsusb_stop_streaming drivers/media/usb/siano/smsusb.c:182 [inline]
     smsusb_term_device+0xda/0x2d0 drivers/media/usb/siano/smsusb.c:344
     smsusb_init_device+0x400/0x9ce drivers/media/usb/siano/smsusb.c:419
     smsusb_probe+0xbbd/0xc55 drivers/media/usb/siano/smsusb.c:567
    ...
    
    This patch adds check before cancel_work_sync(). If surb->wq has not
    been initialized, the cancel_work_sync() will not be executed.
    
    Reported-by: syzbot+27b0b464864741b18b99@syzkaller.appspotmail.com
    Fixes: ebad8e731c1c ("media: usb: siano: Fix use after free bugs caused by do_submit_urb")
    Signed-off-by: Duoming Zhou <duoming@zju.edu.cn>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: venus: helpers: Fix ALIGN() of non power of two [+ + +]
Author: Rikard Falkeborn <rikard.falkeborn@gmail.com>
Date:   Sat Sep 12 20:03:01 2020 +0100

    media: venus: helpers: Fix ALIGN() of non power of two
    
    [ Upstream commit 927e78ac8bc58155316cf6f46026e1912bbbbcfc ]
    
    ALIGN() expects its second argument to be a power of 2, otherwise
    incorrect results are produced for some inputs. The output can be
    both larger or smaller than what is expected.
    
    For example, ALIGN(304, 192) equals 320 instead of 384, and
    ALIGN(65, 192) equals 256 instead of 192.
    
    However, nestling two ALIGN() as is done in this case seem to only
    produce results equal to or bigger than the expected result if ALIGN()
    had handled non powers of two, and that in turn results in framesizes
    that are either the correct size or too large.
    
    Fortunately, since 192 * 4 / 3 equals 256, it turns out that one ALIGN()
    is sufficient.
    
    Fixes: ab1eda449c6e ("media: venus: vdec: handle 10bit bitstreams")
    Signed-off-by: Rikard Falkeborn <rikard.falkeborn@gmail.com>
    Signed-off-by: Stanimir Varbanov <stanimir.k.varbanov@gmail.com>
    Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: videodev2.h: Fix struct v4l2_input tuner index comment [+ + +]
Author: Marek Vasut <marex@denx.de>
Date:   Thu May 18 15:36:49 2023 +0200

    media: videodev2.h: Fix struct v4l2_input tuner index comment
    
    [ Upstream commit 26ae58f65e64fa7ba61d64bae752e59e08380c6a ]
    
    VIDIOC_ENUMINPUT documentation describes the tuner field of
    struct v4l2_input as index:
    
    Documentation/userspace-api/media/v4l/vidioc-enuminput.rst
    "
    * - __u32
      - ``tuner``
      - Capture devices can have zero or more tuners (RF demodulators).
        When the ``type`` is set to ``V4L2_INPUT_TYPE_TUNER`` this is an
        RF connector and this field identifies the tuner. It corresponds
        to struct :c:type:`v4l2_tuner` field ``index``. For
        details on tuners see :ref:`tuner`.
    "
    
    Drivers I could find also use the 'tuner' field as an index, e.g.:
    drivers/media/pci/bt8xx/bttv-driver.c bttv_enum_input()
    drivers/media/usb/go7007/go7007-v4l2.c vidioc_enum_input()
    
    However, the UAPI comment claims this field is 'enum v4l2_tuner_type':
    include/uapi/linux/videodev2.h
    
    This field being 'enum v4l2_tuner_type' is unlikely as it seems to be
    never used that way in drivers, and documentation confirms it. It seem
    this comment got in accidentally in the commit which this patch fixes.
    Fix the UAPI comment to stop confusion.
    
    This was pointed out by Dmitry while reviewing VIDIOC_ENUMINPUT
    support for strace.
    
    Fixes: 6016af82eafc ("[media] v4l2: use __u32 rather than enums in ioctl() structs")
    Signed-off-by: Marek Vasut <marex@denx.de>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
memory: brcmstb_dpfe: fix testing array offset after use [+ + +]
Author: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Date:   Sat May 13 13:29:31 2023 +0200

    memory: brcmstb_dpfe: fix testing array offset after use
    
    [ Upstream commit 1d9e93fad549bc38f593147479ee063f2872c170 ]
    
    Code should first check for valid value of array offset, then use it as
    the index.  Fixes smatch warning:
    
      drivers/memory/brcmstb_dpfe.c:443 __send_command() error: testing array offset 'cmd' after use.
    
    Fixes: 2f330caff577 ("memory: brcmstb: Add driver for DPFE")
    Acked-by: Markus Mayer <mmayer@broadcom.com>
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Link: https://lore.kernel.org/r/20230513112931.176066-1-krzysztof.kozlowski@linaro.org
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
memstick r592: make memstick_debug_get_tpc_name() static [+ + +]
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Tue May 16 22:27:04 2023 +0200

    memstick r592: make memstick_debug_get_tpc_name() static
    
    [ Upstream commit 434587df9f7fd68575f99a889cc5f2efc2eaee5e ]
    
    There are no other files referencing this function, apparently
    it was left global to avoid an 'unused function' warning when
    the only caller is left out. With a 'W=1' build, it causes
    a 'missing prototype' warning though:
    
    drivers/memstick/host/r592.c:47:13: error: no previous prototype for 'memstick_debug_get_tpc_name' [-Werror=missing-prototypes]
    
    Annotate the function as 'static __maybe_unused' to avoid both
    problems.
    
    Fixes: 926341250102 ("memstick: add driver for Ricoh R5C592 card reader")
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Link: https://lore.kernel.org/r/20230516202714.560929-1-arnd@kernel.org
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
meson saradc: fix clock divider mask length [+ + +]
Author: George Stark <gnstark@sberdevices.ru>
Date:   Tue Jun 6 19:53:57 2023 +0300

    meson saradc: fix clock divider mask length
    
    commit c57fa0037024c92c2ca34243e79e857da5d2c0a9 upstream.
    
    According to the datasheets of supported meson SoCs length of ADC_CLK_DIV
    field is 6-bit. Although all supported SoCs have the register
    with that field documented later SoCs use external clock rather than
    ADC internal clock so this patch affects only meson8 family (S8* SoCs).
    
    Fixes: 3adbf3427330 ("iio: adc: add a driver for the SAR ADC found in Amlogic Meson SoCs")
    Signed-off-by: George Stark <GNStark@sberdevices.ru>
    Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
    Reviewed-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
    Link: https://lore.kernel.org/r/20230606165357.42417-1-gnstark@sberdevices.ru
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mfd: intel-lpss: Add missing check for platform_get_resource [+ + +]
Author: Jiasheng Jiang <jiasheng@iscas.ac.cn>
Date:   Fri Jun 9 09:48:18 2023 +0800

    mfd: intel-lpss: Add missing check for platform_get_resource
    
    [ Upstream commit d918e0d5824495a75d00b879118b098fcab36fdb ]
    
    Add the missing check for platform_get_resource and return error
    if it fails.
    
    Fixes: 4b45efe85263 ("mfd: Add support for Intel Sunrisepoint LPSS devices")
    Signed-off-by: Jiasheng Jiang <jiasheng@iscas.ac.cn>
    Signed-off-by: Lee Jones <lee@kernel.org>
    Link: https://lore.kernel.org/r/20230609014818.28475-1-jiasheng@iscas.ac.cn
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mfd: rt5033: Drop rt5033-battery sub-device [+ + +]
Author: Stephan Gerhold <stephan@gerhold.net>
Date:   Mon May 15 22:57:10 2023 +0200

    mfd: rt5033: Drop rt5033-battery sub-device
    
    [ Upstream commit 43db1344e0f8c1eb687a1d6cd5b0de3009ab66cb ]
    
    The fuel gauge in the RT5033 PMIC (rt5033-battery) has its own I2C bus
    and interrupt lines. Therefore, it is not part of the MFD device
    and needs to be specified separately in the device tree.
    
    Fixes: 0b271258544b ("mfd: rt5033: Add Richtek RT5033 driver core.")
    Signed-off-by: Stephan Gerhold <stephan@gerhold.net>
    Signed-off-by: Jakob Hauser <jahau@rocketmail.com>
    Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Lee Jones <lee@kernel.org>
    Link: https://lore.kernel.org/r/6a8a19bc67b5be3732882e8131ad2ffcb546ac03.1684182964.git.jahau@rocketmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mfd: stmfx: Fix error path in stmfx_chip_init [+ + +]
Author: Amelie Delaunay <amelie.delaunay@foss.st.com>
Date:   Fri Jun 9 11:28:03 2023 +0200

    mfd: stmfx: Fix error path in stmfx_chip_init
    
    [ Upstream commit f592cf624531286f8b52e40dcfc157a5a7fb115c ]
    
    In error path, disable vdd regulator if it exists, but don't overload ret.
    Because if regulator_disable() is successful, stmfx_chip_init will exit
    successfully while chip init failed.
    
    Fixes: 06252ade9156 ("mfd: Add ST Multi-Function eXpander (STMFX) core driver")
    Signed-off-by: Amelie Delaunay <amelie.delaunay@foss.st.com>
    Link: https://lore.kernel.org/r/20230609092804.793100-1-amelie.delaunay@foss.st.com
    Signed-off-by: Lee Jones <lee@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mfd: stmfx: Nullify stmfx->vdd in case of error [+ + +]
Author: Amelie Delaunay <amelie.delaunay@foss.st.com>
Date:   Fri Jun 9 11:28:04 2023 +0200

    mfd: stmfx: Nullify stmfx->vdd in case of error
    
    [ Upstream commit 7c81582c0bccb4757186176f0ee12834597066ad ]
    
    Nullify stmfx->vdd in case devm_regulator_get_optional() returns an error.
    And simplify code by returning an error only if return code is not -ENODEV,
    which means there is no vdd regulator and it is not an issue.
    
    Fixes: d75846ed08e6 ("mfd: stmfx: Fix dev_err_probe() call in stmfx_chip_init()")
    Signed-off-by: Amelie Delaunay <amelie.delaunay@foss.st.com>
    Link: https://lore.kernel.org/r/20230609092804.793100-2-amelie.delaunay@foss.st.com
    Signed-off-by: Lee Jones <lee@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mfd: stmpe: Only disable the regulators if they are enabled [+ + +]
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Sat Jun 17 12:43:16 2023 +0200

    mfd: stmpe: Only disable the regulators if they are enabled
    
    [ Upstream commit 104d32bd81f620bb9f67fbf7d1159c414e89f05f ]
    
    In stmpe_probe(), if some regulator_enable() calls fail, probing continues
    and there is only a dev_warn().
    
    So, if stmpe_probe() is called the regulator may not be enabled. It is
    cleaner to test it before calling regulator_disable() in the remove
    function.
    
    Fixes: 9c9e321455fb ("mfd: stmpe: add optional regulators")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
    Link: https://lore.kernel.org/r/8de3aaf297931d655b9ad6aed548f4de8b85425a.1686998575.git.christophe.jaillet@wanadoo.fr
    Signed-off-by: Lee Jones <lee@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
MIPS: Loongson: Fix cpu_probe_loongson() again [+ + +]
Author: Huacai Chen <chenhuacai@kernel.org>
Date:   Mon Jun 26 15:50:14 2023 +0800

    MIPS: Loongson: Fix cpu_probe_loongson() again
    
    commit 65fee014dc41a774bcd94896f3fb380bc39d8dda upstream.
    
    Commit 7db5e9e9e5e6c10d7d ("MIPS: loongson64: fix FTLB configuration")
    move decode_configs() from the beginning of cpu_probe_loongson() to the
    end in order to fix FTLB configuration. However, it breaks the CPUCFG
    decoding because decode_configs() use "c->options = xxxx" rather than
    "c->options |= xxxx", all information get from CPUCFG by decode_cpucfg()
    is lost.
    
    This causes error when creating a KVM guest on Loongson-3A4000:
    Exception Code: 4 not handled @ PC: 0000000087ad5981, inst: 0xcb7a1898 BadVaddr: 0x0 Status: 0x0
    
    Fix this by moving the c->cputype setting to the beginning and moving
    decode_configs() after that.
    
    Fixes: 7db5e9e9e5e6c10d7d ("MIPS: loongson64: fix FTLB configuration")
    Cc: stable@vger.kernel.org
    Cc: Huang Pei <huangpei@loongson.cn>
    Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
    Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
misc: fastrpc: Create fastrpc scalar with correct buffer count [+ + +]
Author: Ekansh Gupta <quic_ekangupt@quicinc.com>
Date:   Wed Jun 14 17:24:45 2023 +0530

    misc: fastrpc: Create fastrpc scalar with correct buffer count
    
    commit 0b4e32df3e09406b835d8230b9331273f2805058 upstream.
    
    A process can spawn a PD on DSP with some attributes that can be
    associated with the PD during spawn and run. The invocation
    corresponding to the create request with attributes has total
    4 buffers at the DSP side implementation. If this number is not
    correct, the invocation is expected to fail on DSP. Added change
    to use correct number of buffer count for creating fastrpc scalar.
    
    Fixes: d73f71c7c6ee ("misc: fastrpc: Add support for create remote init process")
    Cc: stable <stable@kernel.org>
    Tested-by: Ekansh Gupta <quic_ekangupt@quicinc.com>
    Signed-off-by: Ekansh Gupta <quic_ekangupt@quicinc.com>
    Message-ID: <1686743685-21715-1-git-send-email-quic_ekangupt@quicinc.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

misc: pci_endpoint_test: Free IRQs before removing the device [+ + +]
Author: Damien Le Moal <dlemoal@kernel.org>
Date:   Sat Apr 15 11:35:39 2023 +0900

    misc: pci_endpoint_test: Free IRQs before removing the device
    
    commit f61b7634a3249d12b9daa36ffbdb9965b6f24c6c upstream.
    
    In pci_endpoint_test_remove(), freeing the IRQs after removing the device
    creates a small race window for IRQs to be received with the test device
    memory already released, causing the IRQ handler to access invalid memory,
    resulting in an oops.
    
    Free the device IRQs before removing the device to avoid this issue.
    
    Link: https://lore.kernel.org/r/20230415023542.77601-15-dlemoal@kernel.org
    Fixes: e03327122e2c ("pci_endpoint_test: Add 2 ioctl commands")
    Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
    Signed-off-by: Lorenzo Pieralisi <lpieralisi@kernel.org>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: Manivannan Sadhasivam <mani@kernel.org>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

misc: pci_endpoint_test: Re-init completion for every test [+ + +]
Author: Damien Le Moal <dlemoal@kernel.org>
Date:   Sat Apr 15 11:35:40 2023 +0900

    misc: pci_endpoint_test: Re-init completion for every test
    
    commit fb620ae73b70c2f57b9d3e911fc24c024ba2324f upstream.
    
    The irq_raised completion used to detect the end of a test case is
    initialized when the test device is probed, but never reinitialized again
    before a test case. As a result, the irq_raised completion synchronization
    is effective only for the first ioctl test case executed. Any subsequent
    call to wait_for_completion() by another ioctl() call will immediately
    return, potentially too early, leading to false positive failures.
    
    Fix this by reinitializing the irq_raised completion before starting a new
    ioctl() test command.
    
    Link: https://lore.kernel.org/r/20230415023542.77601-16-dlemoal@kernel.org
    Fixes: 2c156ac71c6b ("misc: Add host side PCI driver for PCI test function device")
    Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
    Signed-off-by: Lorenzo Pieralisi <lpieralisi@kernel.org>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: Manivannan Sadhasivam <mani@kernel.org>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm: rename p4d_page_vaddr to p4d_pgtable and make it return pud_t * [+ + +]
Author: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
Date:   Wed Jul 7 18:09:56 2021 -0700

    mm: rename p4d_page_vaddr to p4d_pgtable and make it return pud_t *
    
    [ Upstream commit dc4875f0e791de554bdc45aa1dbd6e45e107e50f ]
    
    No functional change in this patch.
    
    [aneesh.kumar@linux.ibm.com: m68k build error reported by kernel robot]
      Link: https://lkml.kernel.org/r/87tulxnb2v.fsf@linux.ibm.com
    
    Link: https://lkml.kernel.org/r/20210615110859.320299-2-aneesh.kumar@linux.ibm.com
    Link: https://lore.kernel.org/linuxppc-dev/CAHk-=wi+J+iodze9FtjM3Zi4j4OeS+qqbKxME9QN4roxPEXH9Q@mail.gmail.com/
    Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
    Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: Joel Fernandes <joel@joelfernandes.org>
    Cc: Kalesh Singh <kaleshsingh@google.com>
    Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: Nicholas Piggin <npiggin@gmail.com>
    Cc: Stephen Rothwell <sfr@canb.auug.org.au>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Stable-dep-of: 0da90af431ab ("powerpc/book3s64/mm: Fix DirectMap stats in /proc/meminfo")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mm: rename pud_page_vaddr to pud_pgtable and make it return pmd_t * [+ + +]
Author: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
Date:   Wed Jul 7 18:09:53 2021 -0700

    mm: rename pud_page_vaddr to pud_pgtable and make it return pmd_t *
    
    [ Upstream commit 9cf6fa2458443118b84090aa1bf7a3630b5940e8 ]
    
    No functional change in this patch.
    
    [aneesh.kumar@linux.ibm.com: fix]
      Link: https://lkml.kernel.org/r/87wnqtnb60.fsf@linux.ibm.com
    [sfr@canb.auug.org.au: another fix]
      Link: https://lkml.kernel.org/r/20210619134410.89559-1-aneesh.kumar@linux.ibm.com
    
    Link: https://lkml.kernel.org/r/20210615110859.320299-1-aneesh.kumar@linux.ibm.com
    Link: https://lore.kernel.org/linuxppc-dev/CAHk-=wi+J+iodze9FtjM3Zi4j4OeS+qqbKxME9QN4roxPEXH9Q@mail.gmail.com/
    Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
    Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au>
    Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: Joel Fernandes <joel@joelfernandes.org>
    Cc: Kalesh Singh <kaleshsingh@google.com>
    Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: Nicholas Piggin <npiggin@gmail.com>
    Cc: Stephen Rothwell <sfr@canb.auug.org.au>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Stable-dep-of: 0da90af431ab ("powerpc/book3s64/mm: Fix DirectMap stats in /proc/meminfo")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
mmc: core: disable TRIM on Kingston EMMC04G-M627 [+ + +]
Author: Robert Marko <robimarko@gmail.com>
Date:   Mon Jun 19 21:35:58 2023 +0200

    mmc: core: disable TRIM on Kingston EMMC04G-M627
    
    commit f1738a1f816233e6dfc2407f24a31d596643fd90 upstream.
    
    It seems that Kingston EMMC04G-M627 despite advertising TRIM support does
    not work when the core is trying to use REQ_OP_WRITE_ZEROES.
    
    We are seeing I/O errors in OpenWrt under 6.1 on Zyxel NBG7815 that we did
    not previously have and tracked it down to REQ_OP_WRITE_ZEROES.
    
    Trying to use fstrim seems to also throw errors like:
    [93010.835112] I/O error, dev loop0, sector 16902 op 0x3:(DISCARD) flags 0x800 phys_seg 1 prio class 2
    
    Disabling TRIM makes the error go away, so lets add a quirk for this eMMC
    to disable TRIM.
    
    Signed-off-by: Robert Marko <robimarko@gmail.com>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20230619193621.437358-1-robimarko@gmail.com
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mmc: core: disable TRIM on Micron MTFC4GACAJCN-1M [+ + +]
Author: Robert Marko <robimarko@gmail.com>
Date:   Tue May 30 23:32:59 2023 +0200

    mmc: core: disable TRIM on Micron MTFC4GACAJCN-1M
    
    commit dbfbddcddcebc9ce8a08757708d4e4a99d238e44 upstream.
    
    It seems that Micron MTFC4GACAJCN-1M despite advertising TRIM support does
    not work when the core is trying to use REQ_OP_WRITE_ZEROES.
    
    We are seeing the following errors in OpenWrt under 6.1 on Qnap Qhora 301W
    that we did not previously have and tracked it down to REQ_OP_WRITE_ZEROES:
    [   18.085950] I/O error, dev loop0, sector 596 op 0x9:(WRITE_ZEROES) flags 0x800 phys_seg 0 prio class 2
    
    Disabling TRIM makes the error go away, so lets add a quirk for this eMMC
    to disable TRIM.
    
    Signed-off-by: Robert Marko <robimarko@gmail.com>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20230530213259.1776512-1-robimarko@gmail.com
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mmc: mmci: Set PROBE_PREFER_ASYNCHRONOUS [+ + +]
Author: Ulf Hansson <ulf.hansson@linaro.org>
Date:   Mon Jun 12 16:37:30 2023 +0200

    mmc: mmci: Set PROBE_PREFER_ASYNCHRONOUS
    
    commit 3108eb2e8aa7e955a9dd3a4c1bf19a7898961822 upstream.
    
    All mmc host drivers should have the asynchronous probe option enabled, but
    it seems like we failed to set it for mmci, so let's do that now.
    
    Fixes: 21b2cec61c04 ("mmc: Set PROBE_PREFER_ASYNCHRONOUS for drivers that existed in v4.4")
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Tested-by: Linus Walleij <linus.walleij@linaro.org>
    Tested-by: Yann Gautier <yann.gautier@foss.st.com>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20230612143730.210390-1-ulf.hansson@linaro.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mmc: sdhci: fix DMA configure compatibility issue when 64bit DMA mode is used. [+ + +]
Author: Chevron Li <chevron.li@bayhubtech.com>
Date:   Tue May 23 19:11:14 2023 +0800

    mmc: sdhci: fix DMA configure compatibility issue when 64bit DMA mode is used.
    
    commit 20dbd07ef0a8bc29eb03d6a95258ac8934cbe52d upstream.
    
    Bayhub SD host has hardware limitation:
    1.The upper 32bit address is inhibited to be written at SD Host Register
      [03E][13]=0 (32bits addressing) mode, is admitted to be written only at
      SD Host Register [03E][13]=1 (64bits addressing) mode.
    2.Because of above item#1, need to configure SD Host Register [03E][13] to
      1(64bits addressing mode) before set 64bit ADMA system address's higher
      32bits SD Host Register [05F~05C] if 64 bits addressing mode is used.
    
    The hardware limitation is reasonable for below reasons:
    1.Normal flow should set DMA working mode first, then do
      DMA-transfer-related configuration, such as system address.
    2.The hardware limitation may avoid the software to configure wrong higher
      32bit address at 32bits addressing mode although it is redundant.
    
    The change that set 32bits/64bits addressing mode before set ADMA address,
      has no side-effect to other host IPs for below reason:
    The setting order is reasonable and standard: DMA Mode setting first and
      then DMA address setting. It meets all DMA setting sequence.
    
    Signed-off-by: Chevron Li <chevron.li@bayhubtech.com>
    Acked-by: Adrian Hunter <adrian.hunter@intel.com>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20230523111114.18124-1-chevron_li@126.com
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
modpost: fix off by one in is_executable_section() [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Thu Jun 8 11:23:40 2023 +0300

    modpost: fix off by one in is_executable_section()
    
    [ Upstream commit 3a3f1e573a105328a2cca45a7cfbebabbf5e3192 ]
    
    The > comparison should be >= to prevent an out of bounds array
    access.
    
    Fixes: 52dc0595d540 ("modpost: handle relocations mismatch in __ex_table.")
    Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
    Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

modpost: fix section mismatch message for R_ARM_ABS32 [+ + +]
Author: Masahiro Yamada <masahiroy@kernel.org>
Date:   Thu Jun 1 21:09:55 2023 +0900

    modpost: fix section mismatch message for R_ARM_ABS32
    
    [ Upstream commit b7c63520f6703a25eebb4f8138fed764fcae1c6f ]
    
    addend_arm_rel() processes R_ARM_ABS32 in a wrong way.
    
    Here, test code.
    
      [test code 1]
    
        #include <linux/init.h>
    
        int __initdata foo;
        int get_foo(void) { return foo; }
    
    If you compile it with ARM versatile_defconfig, modpost will show the
    symbol name, (unknown).
    
      WARNING: modpost: vmlinux.o: section mismatch in reference: get_foo (section: .text) -> (unknown) (section: .init.data)
    
    (You need to use GNU linker instead of LLD to reproduce it.)
    
    If you compile it for other architectures, modpost will show the correct
    symbol name.
    
      WARNING: modpost: vmlinux.o: section mismatch in reference: get_foo (section: .text) -> foo (section: .init.data)
    
    For R_ARM_ABS32, addend_arm_rel() sets r->r_addend to a wrong value.
    
    I just mimicked the code in arch/arm/kernel/module.c.
    
    However, there is more difficulty for ARM.
    
    Here, test code.
    
      [test code 2]
    
        #include <linux/init.h>
    
        int __initdata foo;
        int get_foo(void) { return foo; }
    
        int __initdata bar;
        int get_bar(void) { return bar; }
    
    With this commit applied, modpost will show the following messages
    for ARM versatile_defconfig:
    
      WARNING: modpost: vmlinux.o: section mismatch in reference: get_foo (section: .text) -> foo (section: .init.data)
      WARNING: modpost: vmlinux.o: section mismatch in reference: get_bar (section: .text) -> foo (section: .init.data)
    
    The reference from 'get_bar' to 'foo' seems wrong.
    
    I have no solution for this because it is true in assembly level.
    
    In the following output, relocation at 0x1c is no longer associated
    with 'bar'. The two relocation entries point to the same symbol, and
    the offset to 'bar' is encoded in the instruction 'r0, [r3, #4]'.
    
      Disassembly of section .text:
    
      00000000 <get_foo>:
         0: e59f3004          ldr     r3, [pc, #4]   @ c <get_foo+0xc>
         4: e5930000          ldr     r0, [r3]
         8: e12fff1e          bx      lr
         c: 00000000          .word   0x00000000
    
      00000010 <get_bar>:
        10: e59f3004          ldr     r3, [pc, #4]   @ 1c <get_bar+0xc>
        14: e5930004          ldr     r0, [r3, #4]
        18: e12fff1e          bx      lr
        1c: 00000000          .word   0x00000000
    
      Relocation section '.rel.text' at offset 0x244 contains 2 entries:
       Offset     Info    Type            Sym.Value  Sym. Name
      0000000c  00000c02 R_ARM_ABS32       00000000   .init.data
      0000001c  00000c02 R_ARM_ABS32       00000000   .init.data
    
    When find_elf_symbol() gets into a situation where relsym->st_name is
    zero, there is no guarantee to get the symbol name as written in C.
    
    I am keeping the current logic because it is useful in many architectures,
    but the symbol name is not always correct depending on the optimization.
    I left some comments in find_tosym().
    
    Fixes: 56a974fa2d59 ("kbuild: make better section mismatch reports on arm")
    Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

modpost: fix section mismatch message for R_ARM_{PC24,CALL,JUMP24} [+ + +]
Author: Masahiro Yamada <masahiroy@kernel.org>
Date:   Thu Jun 1 21:09:56 2023 +0900

    modpost: fix section mismatch message for R_ARM_{PC24,CALL,JUMP24}
    
    [ Upstream commit 56a24b8ce6a7f9c4a21b2276a8644f6f3d8fc14d ]
    
    addend_arm_rel() processes R_ARM_PC24, R_ARM_CALL, R_ARM_JUMP24 in a
    wrong way.
    
    Here, test code.
    
    [test code for R_ARM_JUMP24]
    
      .section .init.text,"ax"
      bar:
              bx      lr
    
      .section .text,"ax"
      .globl foo
      foo:
              b       bar
    
    [test code for R_ARM_CALL]
    
      .section .init.text,"ax"
      bar:
              bx      lr
    
      .section .text,"ax"
      .globl foo
      foo:
              push    {lr}
              bl      bar
              pop     {pc}
    
    If you compile it with ARM multi_v7_defconfig, modpost will show the
    symbol name, (unknown).
    
      WARNING: modpost: vmlinux.o: section mismatch in reference: foo (section: .text) -> (unknown) (section: .init.text)
    
    (You need to use GNU linker instead of LLD to reproduce it.)
    
    Fix the code to make modpost show the correct symbol name.
    
    I imported (with adjustment) sign_extend32() from include/linux/bitops.h.
    
    The '+8' is the compensation for pc-relative instruction. It is
    documented in "ELF for the Arm Architecture" [1].
    
      "If the relocation is pc-relative then compensation for the PC bias
      (the PC value is 8 bytes ahead of the executing instruction in Arm
      state and 4 bytes in Thumb state) must be encoded in the relocation
      by the object producer."
    
    [1]: https://github.com/ARM-software/abi-aa/blob/main/aaelf32/aaelf32.rst
    
    Fixes: 56a974fa2d59 ("kbuild: make better section mismatch reports on arm")
    Fixes: 6e2e340b59d2 ("ARM: 7324/1: modpost: Fix section warnings for ARM for many compilers")
    Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
mtd: rawnand: meson: fix unaligned DMA buffers handling [+ + +]
Author: Arseniy Krasnov <AVKrasnov@sberdevices.ru>
Date:   Thu Jun 15 11:08:15 2023 +0300

    mtd: rawnand: meson: fix unaligned DMA buffers handling
    
    commit 98480a181a08ceeede417e5b28f6d0429d8ae156 upstream.
    
    Meson NAND controller requires 8 bytes alignment for DMA addresses,
    otherwise it "aligns" passed address by itself thus accessing invalid
    location in the provided buffer. This patch makes unaligned buffers to
    be reallocated to become valid.
    
    Fixes: 8fae856c5350 ("mtd: rawnand: meson: add support for Amlogic NAND flash controller")
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Arseniy Krasnov <AVKrasnov@sberdevices.ru>
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Link: https://lore.kernel.org/linux-mtd/20230615080815.3291006-1-AVKrasnov@sberdevices.ru
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
nbd: Add the maximum limit of allocated index in nbd_dev_add [+ + +]
Author: Zhong Jinghua <zhongjinghua@huawei.com>
Date:   Mon Jun 5 20:21:59 2023 +0800

    nbd: Add the maximum limit of allocated index in nbd_dev_add
    
    [ Upstream commit f12bc113ce904777fd6ca003b473b427782b3dde ]
    
    If the index allocated by idr_alloc greater than MINORMASK >> part_shift,
    the device number will overflow, resulting in failure to create a block
    device.
    
    Fix it by imiting the size of the max allocation.
    
    Signed-off-by: Zhong Jinghua <zhongjinghua@huawei.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Link: https://lore.kernel.org/r/20230605122159.2134384-1-zhongjinghua@huaweicloud.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/mlx5e: Check for NOT_READY flag state after locking [+ + +]
Author: Vlad Buslov <vladbu@nvidia.com>
Date:   Thu Jun 8 09:32:10 2023 +0200

    net/mlx5e: Check for NOT_READY flag state after locking
    
    [ Upstream commit 65e64640e97c0f223e77f9ea69b5a46186b93470 ]
    
    Currently the check for NOT_READY flag is performed before obtaining the
    necessary lock. This opens a possibility for race condition when the flow
    is concurrently removed from unready_flows list by the workqueue task,
    which causes a double-removal from the list and a crash[0]. Fix the issue
    by moving the flag check inside the section protected by
    uplink_priv->unready_flows_lock mutex.
    
    [0]:
    [44376.389654] general protection fault, probably for non-canonical address 0xdead000000000108: 0000 [#1] SMP
    [44376.391665] CPU: 7 PID: 59123 Comm: tc Not tainted 6.4.0-rc4+ #1
    [44376.392984] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org 04/01/2014
    [44376.395342] RIP: 0010:mlx5e_tc_del_fdb_flow+0xb3/0x340 [mlx5_core]
    [44376.396857] Code: 00 48 8b b8 68 ce 02 00 e8 8a 4d 02 00 4c 8d a8 a8 01 00 00 4c 89 ef e8 8b 79 88 e1 48 8b 83 98 06 00 00 48 8b 93 90 06 00 00 <48> 89 42 08 48 89 10 48 b8 00 01 00 00 00 00 ad de 48 89 83 90 06
    [44376.399167] RSP: 0018:ffff88812cc97570 EFLAGS: 00010246
    [44376.399680] RAX: dead000000000122 RBX: ffff8881088e3800 RCX: ffff8881881bac00
    [44376.400337] RDX: dead000000000100 RSI: ffff88812cc97500 RDI: ffff8881242f71b0
    [44376.401001] RBP: ffff88811cbb0940 R08: 0000000000000400 R09: 0000000000000001
    [44376.401663] R10: 0000000000000001 R11: 0000000000000000 R12: ffff88812c944000
    [44376.402342] R13: ffff8881242f71a8 R14: ffff8881222b4000 R15: 0000000000000000
    [44376.402999] FS:  00007f0451104800(0000) GS:ffff88852cb80000(0000) knlGS:0000000000000000
    [44376.403787] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [44376.404343] CR2: 0000000000489108 CR3: 0000000123a79003 CR4: 0000000000370ea0
    [44376.405004] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    [44376.405665] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    [44376.406339] Call Trace:
    [44376.406651]  <TASK>
    [44376.406939]  ? die_addr+0x33/0x90
    [44376.407311]  ? exc_general_protection+0x192/0x390
    [44376.407795]  ? asm_exc_general_protection+0x22/0x30
    [44376.408292]  ? mlx5e_tc_del_fdb_flow+0xb3/0x340 [mlx5_core]
    [44376.408876]  __mlx5e_tc_del_fdb_peer_flow+0xbc/0xe0 [mlx5_core]
    [44376.409482]  mlx5e_tc_del_flow+0x42/0x210 [mlx5_core]
    [44376.410055]  mlx5e_flow_put+0x25/0x50 [mlx5_core]
    [44376.410529]  mlx5e_delete_flower+0x24b/0x350 [mlx5_core]
    [44376.411043]  tc_setup_cb_reoffload+0x22/0x80
    [44376.411462]  fl_reoffload+0x261/0x2f0 [cls_flower]
    [44376.411907]  ? mlx5e_rep_indr_setup_ft_cb+0x160/0x160 [mlx5_core]
    [44376.412481]  ? mlx5e_rep_indr_setup_ft_cb+0x160/0x160 [mlx5_core]
    [44376.413044]  tcf_block_playback_offloads+0x76/0x170
    [44376.413497]  tcf_block_unbind+0x7b/0xd0
    [44376.413881]  tcf_block_setup+0x17d/0x1c0
    [44376.414269]  tcf_block_offload_cmd.isra.0+0xf1/0x130
    [44376.414725]  tcf_block_offload_unbind+0x43/0x70
    [44376.415153]  __tcf_block_put+0x82/0x150
    [44376.415532]  ingress_destroy+0x22/0x30 [sch_ingress]
    [44376.415986]  qdisc_destroy+0x3b/0xd0
    [44376.416343]  qdisc_graft+0x4d0/0x620
    [44376.416706]  tc_get_qdisc+0x1c9/0x3b0
    [44376.417074]  rtnetlink_rcv_msg+0x29c/0x390
    [44376.419978]  ? rep_movs_alternative+0x3a/0xa0
    [44376.420399]  ? rtnl_calcit.isra.0+0x120/0x120
    [44376.420813]  netlink_rcv_skb+0x54/0x100
    [44376.421192]  netlink_unicast+0x1f6/0x2c0
    [44376.421573]  netlink_sendmsg+0x232/0x4a0
    [44376.421980]  sock_sendmsg+0x38/0x60
    [44376.422328]  ____sys_sendmsg+0x1d0/0x1e0
    [44376.422709]  ? copy_msghdr_from_user+0x6d/0xa0
    [44376.423127]  ___sys_sendmsg+0x80/0xc0
    [44376.423495]  ? ___sys_recvmsg+0x8b/0xc0
    [44376.423869]  __sys_sendmsg+0x51/0x90
    [44376.424226]  do_syscall_64+0x3d/0x90
    [44376.424587]  entry_SYSCALL_64_after_hwframe+0x46/0xb0
    [44376.425046] RIP: 0033:0x7f045134f887
    [44376.425403] Code: 0a 00 f7 d8 64 89 02 48 c7 c0 ff ff ff ff eb b9 0f 1f 00 f3 0f 1e fa 64 8b 04 25 18 00 00 00 85 c0 75 10 b8 2e 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 51 c3 48 83 ec 28 89 54 24 1c 48 89 74 24 10
    [44376.426914] RSP: 002b:00007ffd63a82b98 EFLAGS: 00000246 ORIG_RAX: 000000000000002e
    [44376.427592] RAX: ffffffffffffffda RBX: 000000006481955f RCX: 00007f045134f887
    [44376.428195] RDX: 0000000000000000 RSI: 00007ffd63a82c00 RDI: 0000000000000003
    [44376.428796] RBP: 0000000000000000 R08: 0000000000000001 R09: 0000000000000000
    [44376.429404] R10: 00007f0451208708 R11: 0000000000000246 R12: 0000000000000001
    [44376.430039] R13: 0000000000409980 R14: 000000000047e538 R15: 0000000000485400
    [44376.430644]  </TASK>
    [44376.430907] Modules linked in: mlx5_ib mlx5_core act_mirred act_tunnel_key cls_flower vxlan dummy sch_ingress openvswitch nsh rpcrdma rdma_ucm ib_iser libiscsi scsi_transport_iscsi ib_umad rdma_cm ib_ipoib iw_cm ib_cm ib_uverbs ib_core xt_conntrack xt_MASQUERADE nf_conntrack_netlink nfnetlink xt_addrtype iptable_nat nf_nat br_netfilter rpcsec_g
    ss_krb5 auth_rpcgss oid_registry overlay zram zsmalloc fuse [last unloaded: mlx5_core]
    [44376.433936] ---[ end trace 0000000000000000 ]---
    [44376.434373] RIP: 0010:mlx5e_tc_del_fdb_flow+0xb3/0x340 [mlx5_core]
    [44376.434951] Code: 00 48 8b b8 68 ce 02 00 e8 8a 4d 02 00 4c 8d a8 a8 01 00 00 4c 89 ef e8 8b 79 88 e1 48 8b 83 98 06 00 00 48 8b 93 90 06 00 00 <48> 89 42 08 48 89 10 48 b8 00 01 00 00 00 00 ad de 48 89 83 90 06
    [44376.436452] RSP: 0018:ffff88812cc97570 EFLAGS: 00010246
    [44376.436924] RAX: dead000000000122 RBX: ffff8881088e3800 RCX: ffff8881881bac00
    [44376.437530] RDX: dead000000000100 RSI: ffff88812cc97500 RDI: ffff8881242f71b0
    [44376.438179] RBP: ffff88811cbb0940 R08: 0000000000000400 R09: 0000000000000001
    [44376.438786] R10: 0000000000000001 R11: 0000000000000000 R12: ffff88812c944000
    [44376.439393] R13: ffff8881242f71a8 R14: ffff8881222b4000 R15: 0000000000000000
    [44376.439998] FS:  00007f0451104800(0000) GS:ffff88852cb80000(0000) knlGS:0000000000000000
    [44376.440714] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [44376.441225] CR2: 0000000000489108 CR3: 0000000123a79003 CR4: 0000000000370ea0
    [44376.441843] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    [44376.442471] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    
    Fixes: ad86755b18d5 ("net/mlx5e: Protect unready flows with dedicated lock")
    Signed-off-by: Vlad Buslov <vladbu@nvidia.com>
    Reviewed-by: Roi Dayan <roid@nvidia.com>
    Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/mlx5e: fix double free in mlx5e_destroy_flow_table [+ + +]
Author: Zhengchao Shao <shaozhengchao@huawei.com>
Date:   Wed Jun 28 08:59:34 2023 +0800

    net/mlx5e: fix double free in mlx5e_destroy_flow_table
    
    [ Upstream commit 884abe45a9014d0de2e6edb0630dfd64f23f1d1b ]
    
    In function accel_fs_tcp_create_groups(), when the ft->g memory is
    successfully allocated but the 'in' memory fails to be allocated, the
    memory pointed to by ft->g is released once. And in function
    accel_fs_tcp_create_table, mlx5e_destroy_flow_table is called to release
    the memory pointed to by ft->g again. This will cause double free problem.
    
    Fixes: c062d52ac24c ("net/mlx5e: Receive flow steering framework for accelerated TCP flows")
    Signed-off-by: Zhengchao Shao <shaozhengchao@huawei.com>
    Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/sched: act_pedit: Add size check for TCA_PEDIT_PARMS_EX [+ + +]
Author: Lin Ma <linma@zju.edu.cn>
Date:   Mon Jul 3 19:08:42 2023 +0800

    net/sched: act_pedit: Add size check for TCA_PEDIT_PARMS_EX
    
    [ Upstream commit 30c45b5361d39b4b793780ffac5538090b9e2eb1 ]
    
    The attribute TCA_PEDIT_PARMS_EX is not be included in pedit_policy and
    one malicious user could fake a TCA_PEDIT_PARMS_EX whose length is
    smaller than the intended sizeof(struct tc_pedit). Hence, the
    dereference in tcf_pedit_init() could access dirty heap data.
    
    static int tcf_pedit_init(...)
    {
      // ...
      pattr = tb[TCA_PEDIT_PARMS]; // TCA_PEDIT_PARMS is included
      if (!pattr)
        pattr = tb[TCA_PEDIT_PARMS_EX]; // but this is not
    
      // ...
      parm = nla_data(pattr);
    
      index = parm->index; // parm is able to be smaller than 4 bytes
                           // and this dereference gets dirty skb_buff
                           // data created in netlink_sendmsg
    }
    
    This commit adds TCA_PEDIT_PARMS_EX length in pedit_policy which avoid
    the above case, just like the TCA_PEDIT_PARMS.
    
    Fixes: 71d0ed7079df ("net/act_pedit: Support using offset relative to the conventional network headers")
    Signed-off-by: Lin Ma <linma@zju.edu.cn>
    Reviewed-by: Pedro Tammela <pctammela@mojatatu.com>
    Link: https://lore.kernel.org/r/20230703110842.590282-1-linma@zju.edu.cn
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/sched: cls_fw: Fix improper refcount update leads to use-after-free [+ + +]
Author: M A Ramdhan <ramdhan@starlabs.sg>
Date:   Wed Jul 5 12:15:30 2023 -0400

    net/sched: cls_fw: Fix improper refcount update leads to use-after-free
    
    [ Upstream commit 0323bce598eea038714f941ce2b22541c46d488f ]
    
    In the event of a failure in tcf_change_indev(), fw_set_parms() will
    immediately return an error after incrementing or decrementing
    reference counter in tcf_bind_filter().  If attacker can control
    reference counter to zero and make reference freed, leading to
    use after free.
    
    In order to prevent this, move the point of possible failure above the
    point where the TC_FW_CLASSID is handled.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Reported-by: M A Ramdhan <ramdhan@starlabs.sg>
    Signed-off-by: M A Ramdhan <ramdhan@starlabs.sg>
    Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>
    Reviewed-by: Pedro Tammela <pctammela@mojatatu.com>
    Message-ID: <20230705161530.52003-1-ramdhan@starlabs.sg>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/sched: flower: Ensure both minimum and maximum ports are specified [+ + +]
Author: Ido Schimmel <idosch@nvidia.com>
Date:   Tue Jul 11 10:08:09 2023 +0300

    net/sched: flower: Ensure both minimum and maximum ports are specified
    
    [ Upstream commit d3f87278bcb80bd7f9519669d928b43320363d4f ]
    
    The kernel does not currently validate that both the minimum and maximum
    ports of a port range are specified. This can lead user space to think
    that a filter matching on a port range was successfully added, when in
    fact it was not. For example, with a patched (buggy) iproute2 that only
    sends the minimum port, the following commands do not return an error:
    
     # tc filter add dev swp1 ingress pref 1 proto ip flower ip_proto udp src_port 100-200 action pass
    
     # tc filter add dev swp1 ingress pref 1 proto ip flower ip_proto udp dst_port 100-200 action pass
    
     # tc filter show dev swp1 ingress
     filter protocol ip pref 1 flower chain 0
     filter protocol ip pref 1 flower chain 0 handle 0x1
       eth_type ipv4
       ip_proto udp
       not_in_hw
             action order 1: gact action pass
              random type none pass val 0
              index 1 ref 1 bind 1
    
     filter protocol ip pref 1 flower chain 0 handle 0x2
       eth_type ipv4
       ip_proto udp
       not_in_hw
             action order 1: gact action pass
              random type none pass val 0
              index 2 ref 1 bind 1
    
    Fix by returning an error unless both ports are specified:
    
     # tc filter add dev swp1 ingress pref 1 proto ip flower ip_proto udp src_port 100-200 action pass
     Error: Both min and max source ports must be specified.
     We have an error talking to the kernel
    
     # tc filter add dev swp1 ingress pref 1 proto ip flower ip_proto udp dst_port 100-200 action pass
     Error: Both min and max destination ports must be specified.
     We have an error talking to the kernel
    
    Fixes: 5c72299fba9d ("net: sched: cls_flower: Classify packets using port ranges")
    Signed-off-by: Ido Schimmel <idosch@nvidia.com>
    Reviewed-by: Petr Machata <petrm@nvidia.com>
    Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/sched: make psched_mtu() RTNL-less safe [+ + +]
Author: Pedro Tammela <pctammela@mojatatu.com>
Date:   Mon Jul 10 23:16:34 2023 -0300

    net/sched: make psched_mtu() RTNL-less safe
    
    [ Upstream commit 150e33e62c1fa4af5aaab02776b6c3812711d478 ]
    
    Eric Dumazet says[1]:
    -------
    Speaking of psched_mtu(), I see that net/sched/sch_pie.c is using it
    without holding RTNL, so dev->mtu can be changed underneath.
    KCSAN could issue a warning.
    -------
    
    Annotate dev->mtu with READ_ONCE() so KCSAN don't issue a warning.
    
    [1] https://lore.kernel.org/all/CANn89iJoJO5VtaJ-2=_d2aOQhb0Xw8iBT_Cxqp2HyuS-zj6azw@mail.gmail.com/
    
    v1 -> v2: Fix commit message
    
    Fixes: d4b36210c2e6 ("net: pkt_sched: PIE AQM scheme")
    Suggested-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: Pedro Tammela <pctammela@mojatatu.com>
    Reviewed-by: Simon Horman <simon.horman@corigine.com>
    Link: https://lore.kernel.org/r/20230711021634.561598-1-pctammela@mojatatu.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/sched: sch_qfq: account for stab overhead in qfq_enqueue [+ + +]
Author: Pedro Tammela <pctammela@mojatatu.com>
Date:   Tue Jul 11 18:01:02 2023 -0300

    net/sched: sch_qfq: account for stab overhead in qfq_enqueue
    
    [ Upstream commit 3e337087c3b5805fe0b8a46ba622a962880b5d64 ]
    
    Lion says:
    -------
    In the QFQ scheduler a similar issue to CVE-2023-31436
    persists.
    
    Consider the following code in net/sched/sch_qfq.c:
    
    static int qfq_enqueue(struct sk_buff *skb, struct Qdisc *sch,
                    struct sk_buff **to_free)
    {
         unsigned int len = qdisc_pkt_len(skb), gso_segs;
    
        // ...
    
         if (unlikely(cl->agg->lmax < len)) {
             pr_debug("qfq: increasing maxpkt from %u to %u for class %u",
                  cl->agg->lmax, len, cl->common.classid);
             err = qfq_change_agg(sch, cl, cl->agg->class_weight, len);
             if (err) {
                 cl->qstats.drops++;
                 return qdisc_drop(skb, sch, to_free);
             }
    
        // ...
    
         }
    
    Similarly to CVE-2023-31436, "lmax" is increased without any bounds
    checks according to the packet length "len". Usually this would not
    impose a problem because packet sizes are naturally limited.
    
    This is however not the actual packet length, rather the
    "qdisc_pkt_len(skb)" which might apply size transformations according to
    "struct qdisc_size_table" as created by "qdisc_get_stab()" in
    net/sched/sch_api.c if the TCA_STAB option was set when modifying the qdisc.
    
    A user may choose virtually any size using such a table.
    
    As a result the same issue as in CVE-2023-31436 can occur, allowing heap
    out-of-bounds read / writes in the kmalloc-8192 cache.
    -------
    
    We can create the issue with the following commands:
    
    tc qdisc add dev $DEV root handle 1: stab mtu 2048 tsize 512 mpu 0 \
    overhead 999999999 linklayer ethernet qfq
    tc class add dev $DEV parent 1: classid 1:1 htb rate 6mbit burst 15k
    tc filter add dev $DEV parent 1: matchall classid 1:1
    ping -I $DEV 1.1.1.2
    
    This is caused by incorrectly assuming that qdisc_pkt_len() returns a
    length within the QFQ_MIN_LMAX < len < QFQ_MAX_LMAX.
    
    Fixes: 462dbc9101ac ("pkt_sched: QFQ Plus: fair-queueing service at DRR cost")
    Reported-by: Lion <nnamrec@gmail.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: Jamal Hadi Salim <jhs@mojatatu.com>
    Signed-off-by: Pedro Tammela <pctammela@mojatatu.com>
    Reviewed-by: Simon Horman <simon.horman@corigine.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/sched: sch_qfq: refactor parsing of netlink parameters [+ + +]
Author: Pedro Tammela <pctammela@mojatatu.com>
Date:   Sat Apr 22 12:56:11 2023 -0300

    net/sched: sch_qfq: refactor parsing of netlink parameters
    
    [ Upstream commit 25369891fcef373540f8b4e0b3bccf77a04490d5 ]
    
    Two parameters can be transformed into netlink policies and
    validated while parsing the netlink message.
    
    Reviewed-by: Simon Horman <simon.horman@corigine.com>
    Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>
    Signed-off-by: Pedro Tammela <pctammela@mojatatu.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: 3e337087c3b5 ("net/sched: sch_qfq: account for stab overhead in qfq_enqueue")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/sched: sch_qfq: reintroduce lmax bound check for MTU [+ + +]
Author: Pedro Tammela <pctammela@mojatatu.com>
Date:   Tue Jul 11 18:01:00 2023 -0300

    net/sched: sch_qfq: reintroduce lmax bound check for MTU
    
    commit 158810b261d02fc7dd92ca9c392d8f8a211a2401 upstream.
    
    25369891fcef deletes a check for the case where no 'lmax' is
    specified which 3037933448f6 previously fixed as 'lmax'
    could be set to the device's MTU without any bound checking
    for QFQ_LMAX_MIN and QFQ_LMAX_MAX. Therefore, reintroduce the check.
    
    Fixes: 25369891fcef ("net/sched: sch_qfq: refactor parsing of netlink parameters")
    Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: Pedro Tammela <pctammela@mojatatu.com>
    Reviewed-by: Simon Horman <simon.horman@corigine.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
net: axienet: Move reset before 64-bit DMA detection [+ + +]
Author: Maxim Kochetkov <fido_max@inbox.ru>
Date:   Thu Jun 22 22:22:45 2023 +0300

    net: axienet: Move reset before 64-bit DMA detection
    
    [ Upstream commit f1bc9fc4a06de0108e0dca2a9a7e99ba1fc632f9 ]
    
    64-bit DMA detection will fail if axienet was started before (by boot
    loader, boot ROM, etc). In this state axienet will not start properly.
    XAXIDMA_TX_CDESC_OFFSET + 4 register (MM2S_CURDESC_MSB) is used to detect
    64-bit DMA capability here. But datasheet says: When DMACR.RS is 1
    (axienet is in enabled state), CURDESC_PTR becomes Read Only (RO) and
    is used to fetch the first descriptor. So iowrite32()/ioread32() trick
    to this register to detect 64-bit DMA will not work.
    So move axienet reset before 64-bit DMA detection.
    
    Fixes: f735c40ed93c ("net: axienet: Autodetect 64-bit DMA capability")
    Signed-off-by: Maxim Kochetkov <fido_max@inbox.ru>
    Reviewed-by: Robert Hancock <robert.hancock@calian.com>
    Reviewed-by: Radhey Shyam Pandey <radhey.shyam.pandey@amd.com>
    Link: https://lore.kernel.org/r/20230622192245.116864-1-fido_max@inbox.ru
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: bcmgenet: Ensure MDIO unregistration has clocks enabled [+ + +]
Author: Florian Fainelli <florian.fainelli@broadcom.com>
Date:   Thu Jun 22 03:31:07 2023 -0700

    net: bcmgenet: Ensure MDIO unregistration has clocks enabled
    
    commit 1b5ea7ffb7a3bdfffb4b7f40ce0d20a3372ee405 upstream.
    
    With support for Ethernet PHY LEDs having been added, while
    unregistering a MDIO bus and its child device liks PHYs there may be
    "late" accesses to the MDIO bus. One typical use case is setting the PHY
    LEDs brightness to OFF for instance.
    
    We need to ensure that the MDIO bus controller remains entirely
    functional since it runs off the main GENET adapter clock.
    
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/all/20230617155500.4005881-1-andrew@lunn.ch/
    Fixes: 9a4e79697009 ("net: bcmgenet: utilize generic Broadcom UniMAC MDIO controller driver")
    Signed-off-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Link: https://lore.kernel.org/r/20230622103107.1760280-1-florian.fainelli@broadcom.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: bgmac: postpone turning IRQs off to avoid SoC hangs [+ + +]
Author: Rafał Miłecki <rafal@milecki.pl>
Date:   Fri Jul 7 08:53:25 2023 +0200

    net: bgmac: postpone turning IRQs off to avoid SoC hangs
    
    [ Upstream commit e7731194fdf085f46d58b1adccfddbd0dfee4873 ]
    
    Turning IRQs off is done by accessing Ethernet controller registers.
    That can't be done until device's clock is enabled. It results in a SoC
    hang otherwise.
    
    This bug remained unnoticed for years as most bootloaders keep all
    Ethernet interfaces turned on. It seems to only affect a niche SoC
    family BCM47189. It has two Ethernet controllers but CFE bootloader uses
    only the first one.
    
    Fixes: 34322615cbaa ("net: bgmac: Mask interrupts during probe")
    Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
    Reviewed-by: Michal Kubiak <michal.kubiak@intel.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: bridge: keep ports without IFF_UNICAST_FLT in BR_PROMISC mode [+ + +]
Author: Vladimir Oltean <vladimir.oltean@nxp.com>
Date:   Fri Jun 30 19:41:18 2023 +0300

    net: bridge: keep ports without IFF_UNICAST_FLT in BR_PROMISC mode
    
    [ Upstream commit 6ca3c005d0604e8d2b439366e3923ea58db99641 ]
    
    According to the synchronization rules for .ndo_get_stats() as seen in
    Documentation/networking/netdevices.rst, acquiring a plain spin_lock()
    should not be illegal, but the bridge driver implementation makes it so.
    
    After running these commands, I am being faced with the following
    lockdep splat:
    
    $ ip link add link swp0 name macsec0 type macsec encrypt on && ip link set swp0 up
    $ ip link add dev br0 type bridge vlan_filtering 1 && ip link set br0 up
    $ ip link set macsec0 master br0 && ip link set macsec0 up
    
      ========================================================
      WARNING: possible irq lock inversion dependency detected
      6.4.0-04295-g31b577b4bd4a #603 Not tainted
      --------------------------------------------------------
      swapper/1/0 just changed the state of lock:
      ffff6bd348724cd8 (&br->lock){+.-.}-{3:3}, at: br_forward_delay_timer_expired+0x34/0x198
      but this lock took another, SOFTIRQ-unsafe lock in the past:
       (&ocelot->stats_lock){+.+.}-{3:3}
    
      and interrupts could create inverse lock ordering between them.
    
      other info that might help us debug this:
      Chain exists of:
        &br->lock --> &br->hash_lock --> &ocelot->stats_lock
    
       Possible interrupt unsafe locking scenario:
    
             CPU0                    CPU1
             ----                    ----
        lock(&ocelot->stats_lock);
                                     local_irq_disable();
                                     lock(&br->lock);
                                     lock(&br->hash_lock);
        <Interrupt>
          lock(&br->lock);
    
       *** DEADLOCK ***
    
    (details about the 3 locks skipped)
    
    swp0 is instantiated by drivers/net/dsa/ocelot/felix.c, and this
    only matters to the extent that its .ndo_get_stats64() method calls
    spin_lock(&ocelot->stats_lock).
    
    Documentation/locking/lockdep-design.rst says:
    
    | A lock is irq-safe means it was ever used in an irq context, while a lock
    | is irq-unsafe means it was ever acquired with irq enabled.
    
    (...)
    
    | Furthermore, the following usage based lock dependencies are not allowed
    | between any two lock-classes::
    |
    |    <hardirq-safe>   ->  <hardirq-unsafe>
    |    <softirq-safe>   ->  <softirq-unsafe>
    
    Lockdep marks br->hash_lock as softirq-safe, because it is sometimes
    taken in softirq context (for example br_fdb_update() which runs in
    NET_RX softirq), and when it's not in softirq context it blocks softirqs
    by using spin_lock_bh().
    
    Lockdep marks ocelot->stats_lock as softirq-unsafe, because it never
    blocks softirqs from running, and it is never taken from softirq
    context. So it can always be interrupted by softirqs.
    
    There is a call path through which a function that holds br->hash_lock:
    fdb_add_hw_addr() will call a function that acquires ocelot->stats_lock:
    ocelot_port_get_stats64(). This can be seen below:
    
    ocelot_port_get_stats64+0x3c/0x1e0
    felix_get_stats64+0x20/0x38
    dsa_slave_get_stats64+0x3c/0x60
    dev_get_stats+0x74/0x2c8
    rtnl_fill_stats+0x4c/0x150
    rtnl_fill_ifinfo+0x5cc/0x7b8
    rtmsg_ifinfo_build_skb+0xe4/0x150
    rtmsg_ifinfo+0x5c/0xb0
    __dev_notify_flags+0x58/0x200
    __dev_set_promiscuity+0xa0/0x1f8
    dev_set_promiscuity+0x30/0x70
    macsec_dev_change_rx_flags+0x68/0x88
    __dev_set_promiscuity+0x1a8/0x1f8
    __dev_set_rx_mode+0x74/0xa8
    dev_uc_add+0x74/0xa0
    fdb_add_hw_addr+0x68/0xd8
    fdb_add_local+0xc4/0x110
    br_fdb_add_local+0x54/0x88
    br_add_if+0x338/0x4a0
    br_add_slave+0x20/0x38
    do_setlink+0x3a4/0xcb8
    rtnl_newlink+0x758/0x9d0
    rtnetlink_rcv_msg+0x2f0/0x550
    netlink_rcv_skb+0x128/0x148
    rtnetlink_rcv+0x24/0x38
    
    the plain English explanation for it is:
    
    The macsec0 bridge port is created without p->flags & BR_PROMISC,
    because it is what br_manage_promisc() decides for a VLAN filtering
    bridge with a single auto port.
    
    As part of the br_add_if() procedure, br_fdb_add_local() is called for
    the MAC address of the device, and this results in a call to
    dev_uc_add() for macsec0 while the softirq-safe br->hash_lock is taken.
    
    Because macsec0 does not have IFF_UNICAST_FLT, dev_uc_add() ends up
    calling __dev_set_promiscuity() for macsec0, which is propagated by its
    implementation, macsec_dev_change_rx_flags(), to the lower device: swp0.
    This triggers the call path:
    
    dev_set_promiscuity(swp0)
    -> rtmsg_ifinfo()
       -> dev_get_stats()
          -> ocelot_port_get_stats64()
    
    with a calling context that lockdep doesn't like (br->hash_lock held).
    
    Normally we don't see this, because even though many drivers that can be
    bridge ports don't support IFF_UNICAST_FLT, we need a driver that
    
    (a) doesn't support IFF_UNICAST_FLT, *and*
    (b) it forwards the IFF_PROMISC flag to another driver, and
    (c) *that* driver implements ndo_get_stats64() using a softirq-unsafe
        spinlock.
    
    Condition (b) is necessary because the first __dev_set_rx_mode() calls
    __dev_set_promiscuity() with "bool notify=false", and thus, the
    rtmsg_ifinfo() code path won't be entered.
    
    The same criteria also hold true for DSA switches which don't report
    IFF_UNICAST_FLT. When the DSA master uses a spin_lock() in its
    ndo_get_stats64() method, the same lockdep splat can be seen.
    
    I think the deadlock possibility is real, even though I didn't reproduce
    it, and I'm thinking of the following situation to support that claim:
    
    fdb_add_hw_addr() runs on a CPU A, in a context with softirqs locally
    disabled and br->hash_lock held, and may end up attempting to acquire
    ocelot->stats_lock.
    
    In parallel, ocelot->stats_lock is currently held by a thread B (say,
    ocelot_check_stats_work()), which is interrupted while holding it by a
    softirq which attempts to lock br->hash_lock.
    
    Thread B cannot make progress because br->hash_lock is held by A. Whereas
    thread A cannot make progress because ocelot->stats_lock is held by B.
    
    When taking the issue at face value, the bridge can avoid that problem
    by simply making the ports promiscuous from a code path with a saner
    calling context (br->hash_lock not held). A bridge port without
    IFF_UNICAST_FLT is going to become promiscuous as soon as we call
    dev_uc_add() on it (which we do unconditionally), so why not be
    preemptive and make it promiscuous right from the beginning, so as to
    not be taken by surprise.
    
    With this, we've broken the links between code that holds br->hash_lock
    or br->lock and code that calls into the ndo_change_rx_flags() or
    ndo_get_stats64() ops of the bridge port.
    
    Fixes: 2796d0c648c9 ("bridge: Automatically manage port promiscuous mode.")
    Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
    Reviewed-by: Ido Schimmel <idosch@nvidia.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: create netdev->dev_addr assignment helpers [+ + +]
Author: Jakub Kicinski <kuba@kernel.org>
Date:   Thu Sep 2 11:10:37 2021 -0700

    net: create netdev->dev_addr assignment helpers
    
    [ Upstream commit 48eab831ae8b9f7002a533fa4235eed63ea1f1a3 ]
    
    Recent work on converting address list to a tree made it obvious
    we need an abstraction around writing netdev->dev_addr. Without
    such abstraction updating the main device address is invisible
    to the core.
    
    Introduce a number of helpers which for now just wrap memcpy()
    but in the future can make necessary changes to the address
    tree.
    
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: 391af06a02e7 ("wifi: wl3501_cs: Fix an error handling path in wl3501_probe()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: dsa: tag_sja1105: fix MAC DA patching from meta frames [+ + +]
Author: Vladimir Oltean <vladimir.oltean@nxp.com>
Date:   Tue Jul 4 01:05:44 2023 +0300

    net: dsa: tag_sja1105: fix MAC DA patching from meta frames
    
    [ Upstream commit 1dcf6efd5f0c1f4496b3ef7ec5a7db104a53b38c ]
    
    The SJA1105 manual says that at offset 4 into the meta frame payload we
    have "MAC destination byte 2" and at offset 5 we have "MAC destination
    byte 1". These are counted from the LSB, so byte 1 is h_dest[ETH_HLEN-2]
    aka h_dest[4] and byte 2 is h_dest[ETH_HLEN-3] aka h_dest[3].
    
    The sja1105_meta_unpack() function decodes these the other way around,
    so a frame with MAC DA 01:80:c2:11:22:33 is received by the network
    stack as having 01:80:c2:22:11:33.
    
    Fixes: e53e18a6fe4d ("net: dsa: sja1105: Receive and decode meta frames")
    Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
    Reviewed-by: Simon Horman <simon.horman@corigine.com>
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: dsa: vsc73xx: fix MTU configuration [+ + +]
Author: Pawel Dembicki <paweldembicki@gmail.com>
Date:   Wed Jun 28 21:43:27 2023 +0200

    net: dsa: vsc73xx: fix MTU configuration
    
    [ Upstream commit 3cf62c8177adb0db9e15c8b898c44f997acf3ebf ]
    
    Switch in MAXLEN register stores the maximum size of a data frame.
    The MTU size is 18 bytes smaller than the frame size.
    
    The current settings are causing problems with packet forwarding.
    This patch fixes the MTU settings to proper values.
    
    Fixes: fb77ffc6ec86 ("net: dsa: vsc73xx: make the MTU configurable")
    Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Pawel Dembicki <paweldembicki@gmail.com>
    Reviewed-by: Vladimir Oltean <olteanv@gmail.com>
    Link: https://lore.kernel.org/r/20230628194327.1765644-1-paweldembicki@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: ena: fix shift-out-of-bounds in exponential backoff [+ + +]
Author: Krister Johansen <kjlx@templeofstupid.com>
Date:   Mon Jul 10 18:36:21 2023 -0700

    net: ena: fix shift-out-of-bounds in exponential backoff
    
    commit 1e9cb763e9bacf0c932aa948f50dcfca6f519a26 upstream.
    
    The ENA adapters on our instances occasionally reset.  Once recently
    logged a UBSAN failure to console in the process:
    
      UBSAN: shift-out-of-bounds in build/linux/drivers/net/ethernet/amazon/ena/ena_com.c:540:13
      shift exponent 32 is too large for 32-bit type 'unsigned int'
      CPU: 28 PID: 70012 Comm: kworker/u72:2 Kdump: loaded not tainted 5.15.117
      Hardware name: Amazon EC2 c5d.9xlarge/, BIOS 1.0 10/16/2017
      Workqueue: ena ena_fw_reset_device [ena]
      Call Trace:
      <TASK>
      dump_stack_lvl+0x4a/0x63
      dump_stack+0x10/0x16
      ubsan_epilogue+0x9/0x36
      __ubsan_handle_shift_out_of_bounds.cold+0x61/0x10e
      ? __const_udelay+0x43/0x50
      ena_delay_exponential_backoff_us.cold+0x16/0x1e [ena]
      wait_for_reset_state+0x54/0xa0 [ena]
      ena_com_dev_reset+0xc8/0x110 [ena]
      ena_down+0x3fe/0x480 [ena]
      ena_destroy_device+0xeb/0xf0 [ena]
      ena_fw_reset_device+0x30/0x50 [ena]
      process_one_work+0x22b/0x3d0
      worker_thread+0x4d/0x3f0
      ? process_one_work+0x3d0/0x3d0
      kthread+0x12a/0x150
      ? set_kthread_struct+0x50/0x50
      ret_from_fork+0x22/0x30
      </TASK>
    
    Apparently, the reset delays are getting so large they can trigger a
    UBSAN panic.
    
    Looking at the code, the current timeout is capped at 5000us.  Using a
    base value of 100us, the current code will overflow after (1<<29).  Even
    at values before 32, this function wraps around, perhaps
    unintentionally.
    
    Cap the value of the exponent used for this backoff at (1<<16) which is
    larger than currently necessary, but large enough to support bigger
    values in the future.
    
    Cc: stable@vger.kernel.org
    Fixes: 4bb7f4cf60e3 ("net: ena: reduce driver load time")
    Signed-off-by: Krister Johansen <kjlx@templeofstupid.com>
    Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
    Reviewed-by: Shay Agroskin <shayagr@amazon.com>
    Link: https://lore.kernel.org/r/20230711013621.GE1926@templeofstupid.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: ethernet: ti: cpsw_ale: Fix cpsw_ale_get_field()/cpsw_ale_set_field() [+ + +]
Author: Tanmay Patil <t-patil@ti.com>
Date:   Wed Jul 12 16:36:57 2023 +0530

    net: ethernet: ti: cpsw_ale: Fix cpsw_ale_get_field()/cpsw_ale_set_field()
    
    [ Upstream commit b685f1a58956fa36cc01123f253351b25bfacfda ]
    
    CPSW ALE has 75 bit ALE entries which are stored within three 32 bit words.
    The cpsw_ale_get_field() and cpsw_ale_set_field() functions assume that the
    field will be strictly contained within one word. However, this is not
    guaranteed to be the case and it is possible for ALE field entries to span
    across up to two words at the most.
    
    Fix the methods to handle getting/setting fields spanning up to two words.
    
    Fixes: db82173f23c5 ("netdev: driver: ethernet: add cpsw address lookup engine support")
    Signed-off-by: Tanmay Patil <t-patil@ti.com>
    [s-vadapalli@ti.com: rephrased commit message and added Fixes tag]
    Signed-off-by: Siddharth Vadapalli <s-vadapalli@ti.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: Introduce net.ipv4.tcp_migrate_req. [+ + +]
Author: Kuniyuki Iwashima <kuniyu@amazon.co.jp>
Date:   Sat Jun 12 21:32:14 2021 +0900

    net: Introduce net.ipv4.tcp_migrate_req.
    
    [ Upstream commit f9ac779f881c2ec3d1cdcd7fa9d4f9442bf60e80 ]
    
    This commit adds a new sysctl option: net.ipv4.tcp_migrate_req. If this
    option is enabled or eBPF program is attached, we will be able to migrate
    child sockets from a listener to another in the same reuseport group after
    close() or shutdown() syscalls.
    
    Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.co.jp>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Reviewed-by: Benjamin Herrenschmidt <benh@amazon.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Acked-by: Martin KaFai Lau <kafai@fb.com>
    Link: https://lore.kernel.org/bpf/20210612123224.12525-2-kuniyu@amazon.co.jp
    Stable-dep-of: 3a037f0f3c4b ("tcp: annotate data-races around icsk->icsk_syn_retries")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: ipv4: Use kfree_sensitive instead of kfree [+ + +]
Author: Wang Ming <machel@vivo.com>
Date:   Mon Jul 17 17:59:19 2023 +0800

    net: ipv4: Use kfree_sensitive instead of kfree
    
    [ Upstream commit daa751444fd9d4184270b1479d8af49aaf1a1ee6 ]
    
    key might contain private part of the key, so better use
    kfree_sensitive to free it.
    
    Fixes: 38320c70d282 ("[IPSEC]: Use crypto_aead and authenc in ESP")
    Signed-off-by: Wang Ming <machel@vivo.com>
    Reviewed-by: Tariq Toukan <tariqt@nvidia.com>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: lan743x: Don't sleep in atomic context [+ + +]
Author: Moritz Fischer <moritzf@google.com>
Date:   Tue Jun 27 03:50:00 2023 +0000

    net: lan743x: Don't sleep in atomic context
    
    commit 7a8227b2e76be506b2ac64d2beac950ca04892a5 upstream.
    
    dev_set_rx_mode() grabs a spin_lock, and the lan743x implementation
    proceeds subsequently to go to sleep using readx_poll_timeout().
    
    Introduce a helper wrapping the readx_poll_timeout_atomic() function
    and use it to replace the calls to readx_polL_timeout().
    
    Fixes: 23f0703c125b ("lan743x: Add main source files for new lan743x driver")
    Cc: stable@vger.kernel.org
    Cc: Bryan Whitehead <bryan.whitehead@microchip.com>
    Cc: UNGLinuxDriver@microchip.com
    Signed-off-by: Moritz Fischer <moritzf@google.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Link: https://lore.kernel.org/r/20230627035000.1295254-1-moritzf@google.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: mvneta: fix txq_map in case of txq_number==1 [+ + +]
Author: Klaus Kudielka <klaus.kudielka@gmail.com>
Date:   Wed Jul 5 07:37:12 2023 +0200

    net: mvneta: fix txq_map in case of txq_number==1
    
    [ Upstream commit 21327f81db6337c8843ce755b01523c7d3df715b ]
    
    If we boot with mvneta.txq_number=1, the txq_map is set incorrectly:
    MVNETA_CPU_TXQ_ACCESS(1) refers to TX queue 1, but only TX queue 0 is
    initialized. Fix this.
    
    Fixes: 50bf8cb6fc9c ("net: mvneta: Configure XPS support")
    Signed-off-by: Klaus Kudielka <klaus.kudielka@gmail.com>
    Reviewed-by: Michal Kubiak <michal.kubiak@intel.com>
    Link: https://lore.kernel.org/r/20230705053712.3914-1-klaus.kudielka@gmail.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: nfc: Fix use-after-free caused by nfc_llcp_find_local [+ + +]
Author: Lin Ma <linma@zju.edu.cn>
Date:   Sun Jun 25 17:10:07 2023 +0800

    net: nfc: Fix use-after-free caused by nfc_llcp_find_local
    
    [ Upstream commit 6709d4b7bc2e079241fdef15d1160581c5261c10 ]
    
    This commit fixes several use-after-free that caused by function
    nfc_llcp_find_local(). For example, one UAF can happen when below buggy
    time window occurs.
    
    // nfc_genl_llc_get_params   | // nfc_unregister_device
                                 |
    dev = nfc_get_device(idx);   | device_lock(...)
    if (!dev)                    | dev->shutting_down = true;
        return -ENODEV;          | device_unlock(...);
                                 |
    device_lock(...);            |   // nfc_llcp_unregister_device
                                 |   nfc_llcp_find_local()
    nfc_llcp_find_local(...);    |
                                 |   local_cleanup()
    if (!local) {                |
        rc = -ENODEV;            |     // nfc_llcp_local_put
        goto exit;               |     kref_put(.., local_release)
    }                            |
                                 |       // local_release
                                 |       list_del(&local->list)
      // nfc_genl_send_params    |       kfree()
      local->dev->idx !!!UAF!!!  |
                                 |
    
    and the crash trace for the one of the discussed UAF like:
    
    BUG: KASAN: slab-use-after-free in nfc_genl_llc_get_params+0x72f/0x780  net/nfc/netlink.c:1045
    Read of size 8 at addr ffff888105b0e410 by task 20114
    
    Call Trace:
     <TASK>
     __dump_stack  lib/dump_stack.c:88 [inline]
     dump_stack_lvl+0x72/0xa0  lib/dump_stack.c:106
     print_address_description  mm/kasan/report.c:319 [inline]
     print_report+0xcc/0x620  mm/kasan/report.c:430
     kasan_report+0xb2/0xe0  mm/kasan/report.c:536
     nfc_genl_send_params  net/nfc/netlink.c:999 [inline]
     nfc_genl_llc_get_params+0x72f/0x780  net/nfc/netlink.c:1045
     genl_family_rcv_msg_doit.isra.0+0x1ee/0x2e0  net/netlink/genetlink.c:968
     genl_family_rcv_msg  net/netlink/genetlink.c:1048 [inline]
     genl_rcv_msg+0x503/0x7d0  net/netlink/genetlink.c:1065
     netlink_rcv_skb+0x161/0x430  net/netlink/af_netlink.c:2548
     genl_rcv+0x28/0x40  net/netlink/genetlink.c:1076
     netlink_unicast_kernel  net/netlink/af_netlink.c:1339 [inline]
     netlink_unicast+0x644/0x900  net/netlink/af_netlink.c:1365
     netlink_sendmsg+0x934/0xe70  net/netlink/af_netlink.c:1913
     sock_sendmsg_nosec  net/socket.c:724 [inline]
     sock_sendmsg+0x1b6/0x200  net/socket.c:747
     ____sys_sendmsg+0x6e9/0x890  net/socket.c:2501
     ___sys_sendmsg+0x110/0x1b0  net/socket.c:2555
     __sys_sendmsg+0xf7/0x1d0  net/socket.c:2584
     do_syscall_x64  arch/x86/entry/common.c:50 [inline]
     do_syscall_64+0x3f/0x90  arch/x86/entry/common.c:80
     entry_SYSCALL_64_after_hwframe+0x72/0xdc
    RIP: 0033:0x7f34640a2389
    RSP: 002b:00007f3463415168 EFLAGS: 00000246 ORIG_RAX: 000000000000002e
    RAX: ffffffffffffffda RBX: 00007f34641c1f80 RCX: 00007f34640a2389
    RDX: 0000000000000000 RSI: 0000000020000240 RDI: 0000000000000006
    RBP: 00007f34640ed493 R08: 0000000000000000 R09: 0000000000000000
    R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
    R13: 00007ffe38449ecf R14: 00007f3463415300 R15: 0000000000022000
     </TASK>
    
    Allocated by task 20116:
     kasan_save_stack+0x22/0x50  mm/kasan/common.c:45
     kasan_set_track+0x25/0x30  mm/kasan/common.c:52
     ____kasan_kmalloc  mm/kasan/common.c:374 [inline]
     __kasan_kmalloc+0x7f/0x90  mm/kasan/common.c:383
     kmalloc  include/linux/slab.h:580 [inline]
     kzalloc  include/linux/slab.h:720 [inline]
     nfc_llcp_register_device+0x49/0xa40  net/nfc/llcp_core.c:1567
     nfc_register_device+0x61/0x260  net/nfc/core.c:1124
     nci_register_device+0x776/0xb20  net/nfc/nci/core.c:1257
     virtual_ncidev_open+0x147/0x230  drivers/nfc/virtual_ncidev.c:148
     misc_open+0x379/0x4a0  drivers/char/misc.c:165
     chrdev_open+0x26c/0x780  fs/char_dev.c:414
     do_dentry_open+0x6c4/0x12a0  fs/open.c:920
     do_open  fs/namei.c:3560 [inline]
     path_openat+0x24fe/0x37e0  fs/namei.c:3715
     do_filp_open+0x1ba/0x410  fs/namei.c:3742
     do_sys_openat2+0x171/0x4c0  fs/open.c:1356
     do_sys_open  fs/open.c:1372 [inline]
     __do_sys_openat  fs/open.c:1388 [inline]
     __se_sys_openat  fs/open.c:1383 [inline]
     __x64_sys_openat+0x143/0x200  fs/open.c:1383
     do_syscall_x64  arch/x86/entry/common.c:50 [inline]
     do_syscall_64+0x3f/0x90  arch/x86/entry/common.c:80
     entry_SYSCALL_64_after_hwframe+0x72/0xdc
    
    Freed by task 20115:
     kasan_save_stack+0x22/0x50  mm/kasan/common.c:45
     kasan_set_track+0x25/0x30  mm/kasan/common.c:52
     kasan_save_free_info+0x2e/0x50  mm/kasan/generic.c:521
     ____kasan_slab_free  mm/kasan/common.c:236 [inline]
     ____kasan_slab_free  mm/kasan/common.c:200 [inline]
     __kasan_slab_free+0x10a/0x190  mm/kasan/common.c:244
     kasan_slab_free  include/linux/kasan.h:162 [inline]
     slab_free_hook  mm/slub.c:1781 [inline]
     slab_free_freelist_hook  mm/slub.c:1807 [inline]
     slab_free  mm/slub.c:3787 [inline]
     __kmem_cache_free+0x7a/0x190  mm/slub.c:3800
     local_release  net/nfc/llcp_core.c:174 [inline]
     kref_put  include/linux/kref.h:65 [inline]
     nfc_llcp_local_put  net/nfc/llcp_core.c:182 [inline]
     nfc_llcp_local_put  net/nfc/llcp_core.c:177 [inline]
     nfc_llcp_unregister_device+0x206/0x290  net/nfc/llcp_core.c:1620
     nfc_unregister_device+0x160/0x1d0  net/nfc/core.c:1179
     virtual_ncidev_close+0x52/0xa0  drivers/nfc/virtual_ncidev.c:163
     __fput+0x252/0xa20  fs/file_table.c:321
     task_work_run+0x174/0x270  kernel/task_work.c:179
     resume_user_mode_work  include/linux/resume_user_mode.h:49 [inline]
     exit_to_user_mode_loop  kernel/entry/common.c:171 [inline]
     exit_to_user_mode_prepare+0x108/0x110  kernel/entry/common.c:204
     __syscall_exit_to_user_mode_work  kernel/entry/common.c:286 [inline]
     syscall_exit_to_user_mode+0x21/0x50  kernel/entry/common.c:297
     do_syscall_64+0x4c/0x90  arch/x86/entry/common.c:86
     entry_SYSCALL_64_after_hwframe+0x72/0xdc
    
    Last potentially related work creation:
     kasan_save_stack+0x22/0x50  mm/kasan/common.c:45
     __kasan_record_aux_stack+0x95/0xb0  mm/kasan/generic.c:491
     kvfree_call_rcu+0x29/0xa80  kernel/rcu/tree.c:3328
     drop_sysctl_table+0x3be/0x4e0  fs/proc/proc_sysctl.c:1735
     unregister_sysctl_table.part.0+0x9c/0x190  fs/proc/proc_sysctl.c:1773
     unregister_sysctl_table+0x24/0x30  fs/proc/proc_sysctl.c:1753
     neigh_sysctl_unregister+0x5f/0x80  net/core/neighbour.c:3895
     addrconf_notify+0x140/0x17b0  net/ipv6/addrconf.c:3684
     notifier_call_chain+0xbe/0x210  kernel/notifier.c:87
     call_netdevice_notifiers_info+0xb5/0x150  net/core/dev.c:1937
     call_netdevice_notifiers_extack  net/core/dev.c:1975 [inline]
     call_netdevice_notifiers  net/core/dev.c:1989 [inline]
     dev_change_name+0x3c3/0x870  net/core/dev.c:1211
     dev_ifsioc+0x800/0xf70  net/core/dev_ioctl.c:376
     dev_ioctl+0x3d9/0xf80  net/core/dev_ioctl.c:542
     sock_do_ioctl+0x160/0x260  net/socket.c:1213
     sock_ioctl+0x3f9/0x670  net/socket.c:1316
     vfs_ioctl  fs/ioctl.c:51 [inline]
     __do_sys_ioctl  fs/ioctl.c:870 [inline]
     __se_sys_ioctl  fs/ioctl.c:856 [inline]
     __x64_sys_ioctl+0x19e/0x210  fs/ioctl.c:856
     do_syscall_x64  arch/x86/entry/common.c:50 [inline]
     do_syscall_64+0x3f/0x90  arch/x86/entry/common.c:80
     entry_SYSCALL_64_after_hwframe+0x72/0xdc
    
    The buggy address belongs to the object at ffff888105b0e400
     which belongs to the cache kmalloc-1k of size 1024
    The buggy address is located 16 bytes inside of
     freed 1024-byte region [ffff888105b0e400, ffff888105b0e800)
    
    The buggy address belongs to the physical page:
    head:ffffea000416c200 order:3 entire_mapcount:0 nr_pages_mapped:0 pincount:0
    flags: 0x200000000010200(slab|head|node=0|zone=2)
    raw: 0200000000010200 ffff8881000430c0 ffffea00044c7010 ffffea0004510e10
    raw: 0000000000000000 00000000000a000a 00000001ffffffff 0000000000000000
    page dumped because: kasan: bad access detected
    
    Memory state around the buggy address:
     ffff888105b0e300: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
     ffff888105b0e380: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
    >ffff888105b0e400: fa fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
                             ^
     ffff888105b0e480: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
     ffff888105b0e500: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    
    In summary, this patch solves those use-after-free by
    
    1. Re-implement the nfc_llcp_find_local(). The current version does not
    grab the reference when getting the local from the linked list.  For
    example, the llcp_sock_bind() gets the reference like below:
    
    // llcp_sock_bind()
    
        local = nfc_llcp_find_local(dev); // A
        ..... \
               | raceable
        ..... /
        llcp_sock->local = nfc_llcp_local_get(local); // B
    
    There is an apparent race window that one can  drop the reference
    and free the local object fetched in (A) before (B) gets the reference.
    
    2. Some callers of the nfc_llcp_find_local() do not grab the reference
    at all. For example, the nfc_genl_llc_{{get/set}_params/sdreq} functions.
    We add the nfc_llcp_local_put() for them. Moreover, we add the necessary
    error handling function to put the reference.
    
    3. Add the nfc_llcp_remove_local() helper. The local object is removed
    from the linked list in local_release() when all reference is gone. This
    patch removes it when nfc_llcp_unregister_device() is called.
    
    Therefore, every caller of nfc_llcp_find_local() will get a reference
    even when the nfc_llcp_unregister_device() is called. This promises no
    use-after-free for the local object is ever possible.
    
    Fixes: 52feb444a903 ("NFC: Extend netlink interface for LTO, RW, and MIUX parameters support")
    Fixes: c7aa12252f51 ("NFC: Take a reference on the LLCP local pointer when creating a socket")
    Signed-off-by: Lin Ma <linma@zju.edu.cn>
    Reviewed-by: Simon Horman <simon.horman@corigine.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: phy: prevent stale pointer dereference in phy_init() [+ + +]
Author: Vladimir Oltean <vladimir.oltean@nxp.com>
Date:   Thu Jul 20 03:02:31 2023 +0300

    net: phy: prevent stale pointer dereference in phy_init()
    
    [ Upstream commit 1c613beaf877c0c0d755853dc62687e2013e55c4 ]
    
    mdio_bus_init() and phy_driver_register() both have error paths, and if
    those are ever hit, ethtool will have a stale pointer to the
    phy_ethtool_phy_ops stub structure, which references memory from a
    module that failed to load (phylib).
    
    It is probably hard to force an error in this code path even manually,
    but the error teardown path of phy_init() should be the same as
    phy_exit(), which is now simply not the case.
    
    Fixes: 55d8f053ce1b ("net: phy: Register ethtool PHY operations")
    Link: https://lore.kernel.org/netdev/ZLaiJ4G6TaJYGJyU@shell.armlinux.org.uk/
    Suggested-by: Russell King (Oracle) <linux@armlinux.org.uk>
    Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
    Link: https://lore.kernel.org/r/20230720000231.1939689-1-vladimir.oltean@nxp.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: prevent skb corruption on frag list segmentation [+ + +]
Author: Paolo Abeni <pabeni@redhat.com>
Date:   Fri Jul 7 10:11:10 2023 +0200

    net: prevent skb corruption on frag list segmentation
    
    [ Upstream commit c329b261afe71197d9da83c1f18eb45a7e97e089 ]
    
    Ian reported several skb corruptions triggered by rx-gro-list,
    collecting different oops alike:
    
    [   62.624003] BUG: kernel NULL pointer dereference, address: 00000000000000c0
    [   62.631083] #PF: supervisor read access in kernel mode
    [   62.636312] #PF: error_code(0x0000) - not-present page
    [   62.641541] PGD 0 P4D 0
    [   62.644174] Oops: 0000 [#1] PREEMPT SMP NOPTI
    [   62.648629] CPU: 1 PID: 913 Comm: napi/eno2-79 Not tainted 6.4.0 #364
    [   62.655162] Hardware name: Supermicro Super Server/A2SDi-12C-HLN4F, BIOS 1.7a 10/13/2022
    [   62.663344] RIP: 0010:__udp_gso_segment (./include/linux/skbuff.h:2858
    ./include/linux/udp.h:23 net/ipv4/udp_offload.c:228 net/ipv4/udp_offload.c:261
    net/ipv4/udp_offload.c:277)
    [   62.687193] RSP: 0018:ffffbd3a83b4f868 EFLAGS: 00010246
    [   62.692515] RAX: 00000000000000ce RBX: 0000000000000000 RCX: 0000000000000000
    [   62.699743] RDX: ffffa124def8a000 RSI: 0000000000000079 RDI: ffffa125952a14d4
    [   62.706970] RBP: ffffa124def8a000 R08: 0000000000000022 R09: 00002000001558c9
    [   62.714199] R10: 0000000000000000 R11: 00000000be554639 R12: 00000000000000e2
    [   62.721426] R13: ffffa125952a1400 R14: ffffa125952a1400 R15: 00002000001558c9
    [   62.728654] FS:  0000000000000000(0000) GS:ffffa127efa40000(0000)
    knlGS:0000000000000000
    [   62.736852] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [   62.742702] CR2: 00000000000000c0 CR3: 00000001034b0000 CR4: 00000000003526e0
    [   62.749948] Call Trace:
    [   62.752498]  <TASK>
    [   62.779267] inet_gso_segment (net/ipv4/af_inet.c:1398)
    [   62.787605] skb_mac_gso_segment (net/core/gro.c:141)
    [   62.791906] __skb_gso_segment (net/core/dev.c:3403 (discriminator 2))
    [   62.800492] validate_xmit_skb (./include/linux/netdevice.h:4862
    net/core/dev.c:3659)
    [   62.804695] validate_xmit_skb_list (net/core/dev.c:3710)
    [   62.809158] sch_direct_xmit (net/sched/sch_generic.c:330)
    [   62.813198] __dev_queue_xmit (net/core/dev.c:3805 net/core/dev.c:4210)
    net/netfilter/core.c:626)
    [   62.821093] br_dev_queue_push_xmit (net/bridge/br_forward.c:55)
    [   62.825652] maybe_deliver (net/bridge/br_forward.c:193)
    [   62.829420] br_flood (net/bridge/br_forward.c:233)
    [   62.832758] br_handle_frame_finish (net/bridge/br_input.c:215)
    [   62.837403] br_handle_frame (net/bridge/br_input.c:298
    net/bridge/br_input.c:416)
    [   62.851417] __netif_receive_skb_core.constprop.0 (net/core/dev.c:5387)
    [   62.866114] __netif_receive_skb_list_core (net/core/dev.c:5570)
    [   62.871367] netif_receive_skb_list_internal (net/core/dev.c:5638
    net/core/dev.c:5727)
    [   62.876795] napi_complete_done (./include/linux/list.h:37
    ./include/net/gro.h:434 ./include/net/gro.h:429 net/core/dev.c:6067)
    [   62.881004] ixgbe_poll (drivers/net/ethernet/intel/ixgbe/ixgbe_main.c:3191)
    [   62.893534] __napi_poll (net/core/dev.c:6498)
    [   62.897133] napi_threaded_poll (./include/linux/netpoll.h:89
    net/core/dev.c:6640)
    [   62.905276] kthread (kernel/kthread.c:379)
    [   62.913435] ret_from_fork (arch/x86/entry/entry_64.S:314)
    [   62.917119]  </TASK>
    
    In the critical scenario, rx-gro-list GRO-ed packets are fed, via a
    bridge, both to the local input path and to an egress device (tun).
    
    The segmentation of such packets unsafely writes to the cloned skbs
    with shared heads.
    
    This change addresses the issue by uncloning as needed the
    to-be-segmented skbs.
    
    Reported-by: Ian Kumlien <ian.kumlien@gmail.com>
    Tested-by: Ian Kumlien <ian.kumlien@gmail.com>
    Fixes: 3a1296a38d0c ("net: Support GRO/GSO fraglist chaining.")
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: stmmac: fix double serdes powerdown [+ + +]
Author: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Date:   Wed Jun 21 15:55:37 2023 +0200

    net: stmmac: fix double serdes powerdown
    
    [ Upstream commit c4fc88ad2a765224a648db8ab35f125e120fe41b ]
    
    Commit 49725ffc15fc ("net: stmmac: power up/down serdes in
    stmmac_open/release") correctly added a call to the serdes_powerdown()
    callback to stmmac_release() but did not remove the one from
    stmmac_remove() which leads to a doubled call to serdes_powerdown().
    
    This can lead to all kinds of problems: in the case of the qcom ethqos
    driver, it caused an unbalanced regulator disable splat.
    
    Fixes: 49725ffc15fc ("net: stmmac: power up/down serdes in stmmac_open/release")
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
    Reviewed-by: Jiri Pirko <jiri@nvidia.com>
    Acked-by: Junxiao Chang <junxiao.chang@intel.com>
    Reviewed-by: Andrew Halaney <ahalaney@redhat.com>
    Tested-by: Andrew Halaney <ahalaney@redhat.com>
    Link: https://lore.kernel.org/r/20230621135537.376649-1-brgl@bgdev.pl
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Linux: net:ipv6: check return value of pskb_trim() [+ + +]
Author: Yuanjun Gong <ruc_gongyuanjun@163.com>
Date:   Mon Jul 17 22:45:19 2023 +0800

    net:ipv6: check return value of pskb_trim()
    
    [ Upstream commit 4258faa130be4ea43e5e2d839467da421b8ff274 ]
    
    goto tx_err if an unexpected result is returned by pskb_tirm()
    in ip6erspan_tunnel_xmit().
    
    Fixes: 5a963eb61b7c ("ip6_gre: Add ERSPAN native tunnel support")
    Signed-off-by: Yuanjun Gong <ruc_gongyuanjun@163.com>
    Reviewed-by: David Ahern <dsahern@kernel.org>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
netdevsim: fix uninitialized data in nsim_dev_trap_fa_cookie_write() [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Tue Jul 11 11:52:26 2023 +0300

    netdevsim: fix uninitialized data in nsim_dev_trap_fa_cookie_write()
    
    [ Upstream commit f72207a5c0dbaaf6921cf9a6c0d2fd0bc249ea78 ]
    
    The simple_write_to_buffer() function is designed to handle partial
    writes.  It returns negatives on error, otherwise it returns the number
    of bytes that were able to be copied.  This code doesn't check the
    return properly.  We only know that the first byte is written, the rest
    of the buffer might be uninitialized.
    
    There is no need to use the simple_write_to_buffer() function.
    Partial writes are prohibited by the "if (*ppos != 0)" check at the
    start of the function.  Just use memdup_user() and copy the whole
    buffer.
    
    Fixes: d3cbb907ae57 ("netdevsim: add ACL trap reporting cookie as a metadata")
    Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
    Reviewed-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
    Reviewed-by: Ido Schimmel <idosch@nvidia.com>
    Link: https://lore.kernel.org/r/7c1f950b-3a7d-4252-82a6-876e53078ef7@moroto.mountain
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
netfilter: conntrack: Avoid nf_ct_helper_hash uses after free [+ + +]
Author: Florent Revest <revest@chromium.org>
Date:   Mon Jul 3 16:52:16 2023 +0200

    netfilter: conntrack: Avoid nf_ct_helper_hash uses after free
    
    commit 6eef7a2b933885a17679eb8ed0796ddf0ee5309b upstream.
    
    If nf_conntrack_init_start() fails (for example due to a
    register_nf_conntrack_bpf() failure), the nf_conntrack_helper_fini()
    clean-up path frees the nf_ct_helper_hash map.
    
    When built with NF_CONNTRACK=y, further netfilter modules (e.g:
    netfilter_conntrack_ftp) can still be loaded and call
    nf_conntrack_helpers_register(), independently of whether nf_conntrack
    initialized correctly. This accesses the nf_ct_helper_hash dangling
    pointer and causes a uaf, possibly leading to random memory corruption.
    
    This patch guards nf_conntrack_helper_register() from accessing a freed
    or uninitialized nf_ct_helper_hash pointer and fixes possible
    uses-after-free when loading a conntrack module.
    
    Cc: stable@vger.kernel.org
    Fixes: 12f7a505331e ("netfilter: add user-space connection tracking helper infrastructure")
    Signed-off-by: Florent Revest <revest@chromium.org>
    Reviewed-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: conntrack: dccp: copy entire header to stack buffer, not just basic one [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Wed Jun 21 17:56:53 2023 +0200

    netfilter: conntrack: dccp: copy entire header to stack buffer, not just basic one
    
    [ Upstream commit ff0a3a7d52ff7282dbd183e7fc29a1fe386b0c30 ]
    
    Eric Dumazet says:
      nf_conntrack_dccp_packet() has an unique:
    
      dh = skb_header_pointer(skb, dataoff, sizeof(_dh), &_dh);
    
      And nothing more is 'pulled' from the packet, depending on the content.
      dh->dccph_doff, and/or dh->dccph_x ...)
      So dccp_ack_seq() is happily reading stuff past the _dh buffer.
    
    BUG: KASAN: stack-out-of-bounds in nf_conntrack_dccp_packet+0x1134/0x11c0
    Read of size 4 at addr ffff000128f66e0c by task syz-executor.2/29371
    [..]
    
    Fix this by increasing the stack buffer to also include room for
    the extra sequence numbers and all the known dccp packet type headers,
    then pull again after the initial validation of the basic header.
    
    While at it, mark packets invalid that lack 48bit sequence bit but
    where RFC says the type MUST use them.
    
    Compile tested only.
    
    v2: first skb_header_pointer() now needs to adjust the size to
        only pull the generic header. (Eric)
    
    Heads-up: I intend to remove dccp conntrack support later this year.
    
    Fixes: 2bc780499aa3 ("[NETFILTER]: nf_conntrack: add DCCP protocol support")
    Reported-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nf_conntrack_sip: fix the ct_sip_parse_numerical_param() return value. [+ + +]
Author: Ilia.Gavrilov <Ilia.Gavrilov@infotecs.ru>
Date:   Fri Jun 23 11:23:46 2023 +0000

    netfilter: nf_conntrack_sip: fix the ct_sip_parse_numerical_param() return value.
    
    [ Upstream commit f188d30087480eab421cd8ca552fb15f55d57f4d ]
    
    ct_sip_parse_numerical_param() returns only 0 or 1 now.
    But process_register_request() and process_register_response() imply
    checking for a negative value if parsing of a numerical header parameter
    failed.
    The invocation in nf_nat_sip() looks correct:
            if (ct_sip_parse_numerical_param(...) > 0 &&
                ...) { ... }
    
    Make the return value of the function ct_sip_parse_numerical_param()
    a tristate to fix all the cases
    a) return 1 if value is found; *val is set
    b) return 0 if value is not found; *val is unchanged
    c) return -1 on error; *val is undefined
    
    Found by InfoTeCS on behalf of Linux Verification Center
    (linuxtesting.org) with SVACE.
    
    Fixes: 0f32a40fc91a ("[NETFILTER]: nf_conntrack_sip: create signalling expectations")
    Signed-off-by: Ilia.Gavrilov <Ilia.Gavrilov@infotecs.ru>
    Reviewed-by: Simon Horman <simon.horman@corigine.com>
    Reviewed-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nf_tables: add NFT_TRANS_PREPARE_ERROR to deal with bound set/chain [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Jul 13 10:48:53 2023 +0200

    netfilter: nf_tables: add NFT_TRANS_PREPARE_ERROR to deal with bound set/chain
    
    [ Upstream commit 26b5a5712eb85e253724e56a54c17f8519bd8e4e ]
    
    Add a new state to deal with rule expressions deactivation from the
    newrule error path, otherwise the anonymous set remains in the list in
    inactive state for the next generation. Mark the set/chain transaction
    as unbound so the abort path releases this object, set it as inactive in
    the next generation so it is not reachable anymore from this transaction
    and reference counter is dropped.
    
    Fixes: 1240eb93f061 ("netfilter: nf_tables: incorrect error path handling with NFT_MSG_NEWRULE")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: add rescheduling points during loop detection walks [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Thu Jul 13 10:48:50 2023 +0200

    netfilter: nf_tables: add rescheduling points during loop detection walks
    
    [ Upstream commit 81ea010667417ef3f218dfd99b69769fe66c2b67 ]
    
    Add explicit rescheduling points during ruleset walk.
    
    Switching to a faster algorithm is possible but this is a much
    smaller change, suitable for nf tree.
    
    Link: https://bugzilla.netfilter.org/show_bug.cgi?id=1460
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Acked-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: can't schedule in nft_chain_validate [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Tue Jul 18 01:30:33 2023 +0200

    netfilter: nf_tables: can't schedule in nft_chain_validate
    
    [ Upstream commit 314c82841602a111c04a7210c21dc77e0d560242 ]
    
    Can be called via nft set element list iteration, which may acquire
    rcu and/or bh read lock (depends on set type).
    
    BUG: sleeping function called from invalid context at net/netfilter/nf_tables_api.c:3353
    in_atomic(): 0, irqs_disabled(): 0, non_block: 0, pid: 1232, name: nft
    preempt_count: 0, expected: 0
    RCU nest depth: 1, expected: 0
    2 locks held by nft/1232:
     #0: ffff8881180e3ea8 (&nft_net->commit_mutex){+.+.}-{3:3}, at: nf_tables_valid_genid
     #1: ffffffff83f5f540 (rcu_read_lock){....}-{1:2}, at: rcu_lock_acquire
    Call Trace:
     nft_chain_validate
     nft_lookup_validate_setelem
     nft_pipapo_walk
     nft_lookup_validate
     nft_chain_validate
     nft_immediate_validate
     nft_chain_validate
     nf_tables_validate
     nf_tables_abort
    
    No choice but to move it to nf_tables_validate().
    
    Fixes: 81ea01066741 ("netfilter: nf_tables: add rescheduling points during loop detection walks")
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nf_tables: do not ignore genmask when looking up chain by id [+ + +]
Author: Thadeu Lima de Souza Cascardo <cascardo@canonical.com>
Date:   Wed Jul 5 09:12:55 2023 -0300

    netfilter: nf_tables: do not ignore genmask when looking up chain by id
    
    commit 515ad530795c118f012539ed76d02bacfd426d89 upstream.
    
    When adding a rule to a chain referring to its ID, if that chain had been
    deleted on the same batch, the rule might end up referring to a deleted
    chain.
    
    This will lead to a WARNING like following:
    
    [   33.098431] ------------[ cut here ]------------
    [   33.098678] WARNING: CPU: 5 PID: 69 at net/netfilter/nf_tables_api.c:2037 nf_tables_chain_destroy+0x23d/0x260
    [   33.099217] Modules linked in:
    [   33.099388] CPU: 5 PID: 69 Comm: kworker/5:1 Not tainted 6.4.0+ #409
    [   33.099726] Workqueue: events nf_tables_trans_destroy_work
    [   33.100018] RIP: 0010:nf_tables_chain_destroy+0x23d/0x260
    [   33.100306] Code: 8b 7c 24 68 e8 64 9c ed fe 4c 89 e7 e8 5c 9c ed fe 48 83 c4 08 5b 41 5c 41 5d 41 5e 41 5f 5d 31 c0 89 c6 89 c7 c3 cc cc cc cc <0f> 0b 48 83 c4 08 5b 41 5c 41 5d 41 5e 41 5f 5d 31 c0 89 c6 89 c7
    [   33.101271] RSP: 0018:ffffc900004ffc48 EFLAGS: 00010202
    [   33.101546] RAX: 0000000000000001 RBX: ffff888006fc0a28 RCX: 0000000000000000
    [   33.101920] RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000
    [   33.102649] RBP: ffffc900004ffc78 R08: 0000000000000000 R09: 0000000000000000
    [   33.103018] R10: 0000000000000000 R11: 0000000000000000 R12: ffff8880135ef500
    [   33.103385] R13: 0000000000000000 R14: dead000000000122 R15: ffff888006fc0a10
    [   33.103762] FS:  0000000000000000(0000) GS:ffff888024c80000(0000) knlGS:0000000000000000
    [   33.104184] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [   33.104493] CR2: 00007fe863b56a50 CR3: 00000000124b0001 CR4: 0000000000770ee0
    [   33.104872] PKRU: 55555554
    [   33.104999] Call Trace:
    [   33.105113]  <TASK>
    [   33.105214]  ? show_regs+0x72/0x90
    [   33.105371]  ? __warn+0xa5/0x210
    [   33.105520]  ? nf_tables_chain_destroy+0x23d/0x260
    [   33.105732]  ? report_bug+0x1f2/0x200
    [   33.105902]  ? handle_bug+0x46/0x90
    [   33.106546]  ? exc_invalid_op+0x19/0x50
    [   33.106762]  ? asm_exc_invalid_op+0x1b/0x20
    [   33.106995]  ? nf_tables_chain_destroy+0x23d/0x260
    [   33.107249]  ? nf_tables_chain_destroy+0x30/0x260
    [   33.107506]  nf_tables_trans_destroy_work+0x669/0x680
    [   33.107782]  ? mark_held_locks+0x28/0xa0
    [   33.107996]  ? __pfx_nf_tables_trans_destroy_work+0x10/0x10
    [   33.108294]  ? _raw_spin_unlock_irq+0x28/0x70
    [   33.108538]  process_one_work+0x68c/0xb70
    [   33.108755]  ? lock_acquire+0x17f/0x420
    [   33.108977]  ? __pfx_process_one_work+0x10/0x10
    [   33.109218]  ? do_raw_spin_lock+0x128/0x1d0
    [   33.109435]  ? _raw_spin_lock_irq+0x71/0x80
    [   33.109634]  worker_thread+0x2bd/0x700
    [   33.109817]  ? __pfx_worker_thread+0x10/0x10
    [   33.110254]  kthread+0x18b/0x1d0
    [   33.110410]  ? __pfx_kthread+0x10/0x10
    [   33.110581]  ret_from_fork+0x29/0x50
    [   33.110757]  </TASK>
    [   33.110866] irq event stamp: 1651
    [   33.111017] hardirqs last  enabled at (1659): [<ffffffffa206a209>] __up_console_sem+0x79/0xa0
    [   33.111379] hardirqs last disabled at (1666): [<ffffffffa206a1ee>] __up_console_sem+0x5e/0xa0
    [   33.111740] softirqs last  enabled at (1616): [<ffffffffa1f5d40e>] __irq_exit_rcu+0x9e/0xe0
    [   33.112094] softirqs last disabled at (1367): [<ffffffffa1f5d40e>] __irq_exit_rcu+0x9e/0xe0
    [   33.112453] ---[ end trace 0000000000000000 ]---
    
    This is due to the nft_chain_lookup_byid ignoring the genmask. After this
    change, adding the new rule will fail as it will not find the chain.
    
    Fixes: 837830a4b439 ("netfilter: nf_tables: add NFTA_RULE_CHAIN_ID attribute")
    Cc: stable@vger.kernel.org
    Reported-by: Mingi Cho of Theori working with ZDI
    Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@canonical.com>
    Reviewed-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: drop map element references from preparation phase [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Jul 13 10:48:57 2023 +0200

    netfilter: nf_tables: drop map element references from preparation phase
    
    [ Upstream commit 628bd3e49cba1c066228e23d71a852c23e26da73 ]
    
    set .destroy callback releases the references to other objects in maps.
    This is very late and it results in spurious EBUSY errors. Drop refcount
    from the preparation phase instead, update set backend not to drop
    reference counter from set .destroy path.
    
    Exceptions: NFT_TRANS_PREPARE_ERROR does not require to drop the
    reference counter because the transaction abort path releases the map
    references for each element since the set is unbound. The abort path
    also deals with releasing reference counter for new elements added to
    unbound sets.
    
    Fixes: 591054469b3e ("netfilter: nf_tables: revisit chain/object refcounting from elements")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: fix chain binding transaction logic [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Jul 13 10:48:52 2023 +0200

    netfilter: nf_tables: fix chain binding transaction logic
    
    [ Upstream commit 4bedf9eee016286c835e3d8fa981ddece5338795 ]
    
    Add bound flag to rule and chain transactions as in 6a0a8d10a366
    ("netfilter: nf_tables: use-after-free in failing rule with bound set")
    to skip them in case that the chain is already bound from the abort
    path.
    
    This patch fixes an imbalance in the chain use refcnt that triggers a
    WARN_ON on the table and chain destroy path.
    
    This patch also disallows nested chain bindings, which is not
    supported from userspace.
    
    The logic to deal with chain binding in nft_data_hold() and
    nft_data_release() is not correct. The NFT_TRANS_PREPARE state needs a
    special handling in case a chain is bound but next expressions in the
    same rule fail to initialize as described by 1240eb93f061 ("netfilter:
    nf_tables: incorrect error path handling with NFT_MSG_NEWRULE").
    
    The chain is left bound if rule construction fails, so the objects
    stored in this chain (and the chain itself) are released by the
    transaction records from the abort path, follow up patch ("netfilter:
    nf_tables: add NFT_TRANS_PREPARE_ERROR to deal with bound set/chain")
    completes this error handling.
    
    When deleting an existing rule, chain bound flag is set off so the
    rule expression .destroy path releases the objects.
    
    Fixes: d0e2c7de92c7 ("netfilter: nf_tables: add NFT_CHAIN_BINDING")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: fix scheduling-while-atomic splat [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Thu Jul 13 10:48:59 2023 +0200

    netfilter: nf_tables: fix scheduling-while-atomic splat
    
    [ Upstream commit 2024439bd5ceb145eeeb428b2a59e9b905153ac3 ]
    
    nf_tables_check_loops() can be called from rhashtable list
    walk so cond_resched() cannot be used here.
    
    Fixes: 81ea01066741 ("netfilter: nf_tables: add rescheduling points during loop detection walks")
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: fix spurious set element insertion failure [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Thu Jul 20 00:29:58 2023 +0200

    netfilter: nf_tables: fix spurious set element insertion failure
    
    [ Upstream commit ddbd8be68941985f166f5107109a90ce13147c44 ]
    
    On some platforms there is a padding hole in the nft_verdict
    structure, between the verdict code and the chain pointer.
    
    On element insertion, if the new element clashes with an existing one and
    NLM_F_EXCL flag isn't set, we want to ignore the -EEXIST error as long as
    the data associated with duplicated element is the same as the existing
    one.  The data equality check uses memcmp.
    
    For normal data (NFT_DATA_VALUE) this works fine, but for NFT_DATA_VERDICT
    padding area leads to spurious failure even if the verdict data is the
    same.
    
    This then makes the insertion fail with 'already exists' error, even
    though the new "key : data" matches an existing entry and userspace
    told the kernel that it doesn't want to receive an error indication.
    
    Fixes: c016c7e45ddf ("netfilter: nf_tables: honor NLM_F_EXCL flag in set element insertion")
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nf_tables: incorrect error path handling with NFT_MSG_NEWRULE [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Jul 13 10:48:51 2023 +0200

    netfilter: nf_tables: incorrect error path handling with NFT_MSG_NEWRULE
    
    [ Upstream commit 1240eb93f0616b21c675416516ff3d74798fdc97 ]
    
    In case of error when adding a new rule that refers to an anonymous set,
    deactivate expressions via NFT_TRANS_PREPARE state, not NFT_TRANS_RELEASE.
    Thus, the lookup expression marks anonymous sets as inactive in the next
    generation to ensure it is not reachable in this transaction anymore and
    decrement the set refcount as introduced by c1592a89942e ("netfilter:
    nf_tables: deactivate anonymous set from preparation phase"). The abort
    step takes care of undoing the anonymous set.
    
    This is also consistent with rule deletion, where NFT_TRANS_PREPARE is
    used. Note that this error path is exercised in the preparation step of
    the commit protocol. This patch replaces nf_tables_rule_release() by the
    deactivate and destroy calls, this time with NFT_TRANS_PREPARE.
    
    Due to this incorrect error handling, it is possible to access a
    dangling pointer to the anonymous set that remains in the transaction
    list.
    
    [1009.379054] BUG: KASAN: use-after-free in nft_set_lookup_global+0x147/0x1a0 [nf_tables]
    [1009.379106] Read of size 8 at addr ffff88816c4c8020 by task nft-rule-add/137110
    [1009.379116] CPU: 7 PID: 137110 Comm: nft-rule-add Not tainted 6.4.0-rc4+ #256
    [1009.379128] Call Trace:
    [1009.379132]  <TASK>
    [1009.379135]  dump_stack_lvl+0x33/0x50
    [1009.379146]  ? nft_set_lookup_global+0x147/0x1a0 [nf_tables]
    [1009.379191]  print_address_description.constprop.0+0x27/0x300
    [1009.379201]  kasan_report+0x107/0x120
    [1009.379210]  ? nft_set_lookup_global+0x147/0x1a0 [nf_tables]
    [1009.379255]  nft_set_lookup_global+0x147/0x1a0 [nf_tables]
    [1009.379302]  nft_lookup_init+0xa5/0x270 [nf_tables]
    [1009.379350]  nf_tables_newrule+0x698/0xe50 [nf_tables]
    [1009.379397]  ? nf_tables_rule_release+0xe0/0xe0 [nf_tables]
    [1009.379441]  ? kasan_unpoison+0x23/0x50
    [1009.379450]  nfnetlink_rcv_batch+0x97c/0xd90 [nfnetlink]
    [1009.379470]  ? nfnetlink_rcv_msg+0x480/0x480 [nfnetlink]
    [1009.379485]  ? __alloc_skb+0xb8/0x1e0
    [1009.379493]  ? __alloc_skb+0xb8/0x1e0
    [1009.379502]  ? entry_SYSCALL_64_after_hwframe+0x46/0xb0
    [1009.379509]  ? unwind_get_return_address+0x2a/0x40
    [1009.379517]  ? write_profile+0xc0/0xc0
    [1009.379524]  ? avc_lookup+0x8f/0xc0
    [1009.379532]  ? __rcu_read_unlock+0x43/0x60
    
    Fixes: 958bee14d071 ("netfilter: nf_tables: use new transaction infrastructure to handle sets")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: prevent OOB access in nft_byteorder_eval [+ + +]
Author: Thadeu Lima de Souza Cascardo <cascardo@canonical.com>
Date:   Wed Jul 5 18:05:35 2023 -0300

    netfilter: nf_tables: prevent OOB access in nft_byteorder_eval
    
    commit caf3ef7468f7534771b5c44cd8dbd6f7f87c2cbd upstream.
    
    When evaluating byteorder expressions with size 2, a union with 32-bit and
    16-bit members is used. Since the 16-bit members are aligned to 32-bit,
    the array accesses will be out-of-bounds.
    
    It may lead to a stack-out-of-bounds access like the one below:
    
    [   23.095215] ==================================================================
    [   23.095625] BUG: KASAN: stack-out-of-bounds in nft_byteorder_eval+0x13c/0x320
    [   23.096020] Read of size 2 at addr ffffc90000007948 by task ping/115
    [   23.096358]
    [   23.096456] CPU: 0 PID: 115 Comm: ping Not tainted 6.4.0+ #413
    [   23.096770] Call Trace:
    [   23.096910]  <IRQ>
    [   23.097030]  dump_stack_lvl+0x60/0xc0
    [   23.097218]  print_report+0xcf/0x630
    [   23.097388]  ? nft_byteorder_eval+0x13c/0x320
    [   23.097577]  ? kasan_addr_to_slab+0xd/0xc0
    [   23.097760]  ? nft_byteorder_eval+0x13c/0x320
    [   23.097949]  kasan_report+0xc9/0x110
    [   23.098106]  ? nft_byteorder_eval+0x13c/0x320
    [   23.098298]  __asan_load2+0x83/0xd0
    [   23.098453]  nft_byteorder_eval+0x13c/0x320
    [   23.098659]  nft_do_chain+0x1c8/0xc50
    [   23.098852]  ? __pfx_nft_do_chain+0x10/0x10
    [   23.099078]  ? __kasan_check_read+0x11/0x20
    [   23.099295]  ? __pfx___lock_acquire+0x10/0x10
    [   23.099535]  ? __pfx___lock_acquire+0x10/0x10
    [   23.099745]  ? __kasan_check_read+0x11/0x20
    [   23.099929]  nft_do_chain_ipv4+0xfe/0x140
    [   23.100105]  ? __pfx_nft_do_chain_ipv4+0x10/0x10
    [   23.100327]  ? lock_release+0x204/0x400
    [   23.100515]  ? nf_hook.constprop.0+0x340/0x550
    [   23.100779]  nf_hook_slow+0x6c/0x100
    [   23.100977]  ? __pfx_nft_do_chain_ipv4+0x10/0x10
    [   23.101223]  nf_hook.constprop.0+0x334/0x550
    [   23.101443]  ? __pfx_ip_local_deliver_finish+0x10/0x10
    [   23.101677]  ? __pfx_nf_hook.constprop.0+0x10/0x10
    [   23.101882]  ? __pfx_ip_rcv_finish+0x10/0x10
    [   23.102071]  ? __pfx_ip_local_deliver_finish+0x10/0x10
    [   23.102291]  ? rcu_read_lock_held+0x4b/0x70
    [   23.102481]  ip_local_deliver+0xbb/0x110
    [   23.102665]  ? __pfx_ip_rcv+0x10/0x10
    [   23.102839]  ip_rcv+0x199/0x2a0
    [   23.102980]  ? __pfx_ip_rcv+0x10/0x10
    [   23.103140]  __netif_receive_skb_one_core+0x13e/0x150
    [   23.103362]  ? __pfx___netif_receive_skb_one_core+0x10/0x10
    [   23.103647]  ? mark_held_locks+0x48/0xa0
    [   23.103819]  ? process_backlog+0x36c/0x380
    [   23.103999]  __netif_receive_skb+0x23/0xc0
    [   23.104179]  process_backlog+0x91/0x380
    [   23.104350]  __napi_poll.constprop.0+0x66/0x360
    [   23.104589]  ? net_rx_action+0x1cb/0x610
    [   23.104811]  net_rx_action+0x33e/0x610
    [   23.105024]  ? _raw_spin_unlock+0x23/0x50
    [   23.105257]  ? __pfx_net_rx_action+0x10/0x10
    [   23.105485]  ? mark_held_locks+0x48/0xa0
    [   23.105741]  __do_softirq+0xfa/0x5ab
    [   23.105956]  ? __dev_queue_xmit+0x765/0x1c00
    [   23.106193]  do_softirq.part.0+0x49/0xc0
    [   23.106423]  </IRQ>
    [   23.106547]  <TASK>
    [   23.106670]  __local_bh_enable_ip+0xf5/0x120
    [   23.106903]  __dev_queue_xmit+0x789/0x1c00
    [   23.107131]  ? __pfx___dev_queue_xmit+0x10/0x10
    [   23.107381]  ? find_held_lock+0x8e/0xb0
    [   23.107585]  ? lock_release+0x204/0x400
    [   23.107798]  ? neigh_resolve_output+0x185/0x350
    [   23.108049]  ? mark_held_locks+0x48/0xa0
    [   23.108265]  ? neigh_resolve_output+0x185/0x350
    [   23.108514]  neigh_resolve_output+0x246/0x350
    [   23.108753]  ? neigh_resolve_output+0x246/0x350
    [   23.109003]  ip_finish_output2+0x3c3/0x10b0
    [   23.109250]  ? __pfx_ip_finish_output2+0x10/0x10
    [   23.109510]  ? __pfx_nf_hook+0x10/0x10
    [   23.109732]  __ip_finish_output+0x217/0x390
    [   23.109978]  ip_finish_output+0x2f/0x130
    [   23.110207]  ip_output+0xc9/0x170
    [   23.110404]  ip_push_pending_frames+0x1a0/0x240
    [   23.110652]  raw_sendmsg+0x102e/0x19e0
    [   23.110871]  ? __pfx_raw_sendmsg+0x10/0x10
    [   23.111093]  ? lock_release+0x204/0x400
    [   23.111304]  ? __mod_lruvec_page_state+0x148/0x330
    [   23.111567]  ? find_held_lock+0x8e/0xb0
    [   23.111777]  ? find_held_lock+0x8e/0xb0
    [   23.111993]  ? __rcu_read_unlock+0x7c/0x2f0
    [   23.112225]  ? aa_sk_perm+0x18a/0x550
    [   23.112431]  ? filemap_map_pages+0x4f1/0x900
    [   23.112665]  ? __pfx_aa_sk_perm+0x10/0x10
    [   23.112880]  ? find_held_lock+0x8e/0xb0
    [   23.113098]  inet_sendmsg+0xa0/0xb0
    [   23.113297]  ? inet_sendmsg+0xa0/0xb0
    [   23.113500]  ? __pfx_inet_sendmsg+0x10/0x10
    [   23.113727]  sock_sendmsg+0xf4/0x100
    [   23.113924]  ? move_addr_to_kernel.part.0+0x4f/0xa0
    [   23.114190]  __sys_sendto+0x1d4/0x290
    [   23.114391]  ? __pfx___sys_sendto+0x10/0x10
    [   23.114621]  ? __pfx_mark_lock.part.0+0x10/0x10
    [   23.114869]  ? lock_release+0x204/0x400
    [   23.115076]  ? find_held_lock+0x8e/0xb0
    [   23.115287]  ? rcu_is_watching+0x23/0x60
    [   23.115503]  ? __rseq_handle_notify_resume+0x6e2/0x860
    [   23.115778]  ? __kasan_check_write+0x14/0x30
    [   23.116008]  ? blkcg_maybe_throttle_current+0x8d/0x770
    [   23.116285]  ? mark_held_locks+0x28/0xa0
    [   23.116503]  ? do_syscall_64+0x37/0x90
    [   23.116713]  __x64_sys_sendto+0x7f/0xb0
    [   23.116924]  do_syscall_64+0x59/0x90
    [   23.117123]  ? irqentry_exit_to_user_mode+0x25/0x30
    [   23.117387]  ? irqentry_exit+0x77/0xb0
    [   23.117593]  ? exc_page_fault+0x92/0x140
    [   23.117806]  entry_SYSCALL_64_after_hwframe+0x6e/0xd8
    [   23.118081] RIP: 0033:0x7f744aee2bba
    [   23.118282] Code: d8 64 89 02 48 c7 c0 ff ff ff ff eb b8 0f 1f 00 f3 0f 1e fa 41 89 ca 64 8b 04 25 18 00 00 00 85 c0 75 15 b8 2c 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 7e c3 0f 1f 44 00 00 41 54 48 83 ec 30 44 89
    [   23.119237] RSP: 002b:00007ffd04a7c9f8 EFLAGS: 00000246 ORIG_RAX: 000000000000002c
    [   23.119644] RAX: ffffffffffffffda RBX: 00007ffd04a7e0a0 RCX: 00007f744aee2bba
    [   23.120023] RDX: 0000000000000040 RSI: 000056488e9e6300 RDI: 0000000000000003
    [   23.120413] RBP: 000056488e9e6300 R08: 00007ffd04a80320 R09: 0000000000000010
    [   23.120809] R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000040
    [   23.121219] R13: 00007ffd04a7dc38 R14: 00007ffd04a7ca00 R15: 00007ffd04a7e0a0
    [   23.121617]  </TASK>
    [   23.121749]
    [   23.121845] The buggy address belongs to the virtual mapping at
    [   23.121845]  [ffffc90000000000, ffffc90000009000) created by:
    [   23.121845]  irq_init_percpu_irqstack+0x1cf/0x270
    [   23.122707]
    [   23.122803] The buggy address belongs to the physical page:
    [   23.123104] page:0000000072ac19f0 refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x24a09
    [   23.123609] flags: 0xfffffc0001000(reserved|node=0|zone=1|lastcpupid=0x1fffff)
    [   23.123998] page_type: 0xffffffff()
    [   23.124194] raw: 000fffffc0001000 ffffea0000928248 ffffea0000928248 0000000000000000
    [   23.124610] raw: 0000000000000000 0000000000000000 00000001ffffffff 0000000000000000
    [   23.125023] page dumped because: kasan: bad access detected
    [   23.125326]
    [   23.125421] Memory state around the buggy address:
    [   23.125682]  ffffc90000007800: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    [   23.126072]  ffffc90000007880: 00 00 00 00 00 f1 f1 f1 f1 f1 f1 00 00 f2 f2 00
    [   23.126455] >ffffc90000007900: 00 00 00 00 00 00 00 00 00 f2 f2 f2 f2 00 00 00
    [   23.126840]                                               ^
    [   23.127138]  ffffc90000007980: 00 00 00 00 00 00 00 00 00 00 00 00 00 f3 f3 f3
    [   23.127522]  ffffc90000007a00: f3 00 00 00 00 00 00 00 00 00 00 00 f1 f1 f1 f1
    [   23.127906] ==================================================================
    [   23.128324] Disabling lock debugging due to kernel taint
    
    Using simple s16 pointers for the 16-bit accesses fixes the problem. For
    the 32-bit accesses, src and dst can be used directly.
    
    Fixes: 96518518cc41 ("netfilter: add nftables")
    Cc: stable@vger.kernel.org
    Reported-by: Tanguy DUBROCA (@SidewayRE) from @Synacktiv working with ZDI
    Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@canonical.com>
    Reviewed-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: reject unbound anonymous set before commit phase [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Jul 13 10:48:54 2023 +0200

    netfilter: nf_tables: reject unbound anonymous set before commit phase
    
    [ Upstream commit 938154b93be8cd611ddfd7bafc1849f3c4355201 ]
    
    Add a new list to track set transaction and to check for unbound
    anonymous sets before entering the commit phase.
    
    Bail out at the end of the transaction handling if an anonymous set
    remains unbound.
    
    Fixes: 96518518cc41 ("netfilter: add nftables")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: reject unbound chain set before commit phase [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Jul 13 10:48:55 2023 +0200

    netfilter: nf_tables: reject unbound chain set before commit phase
    
    [ Upstream commit 62e1e94b246e685d89c3163aaef4b160e42ceb02 ]
    
    Use binding list to track set transaction and to check for unbound
    chains before entering the commit phase.
    
    Bail out if chain binding remain unused before entering the commit
    step.
    
    Fixes: d0e2c7de92c7 ("netfilter: nf_tables: add NFT_CHAIN_BINDING")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: skip bound chain in netns release path [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Wed Jul 19 20:19:43 2023 +0200

    netfilter: nf_tables: skip bound chain in netns release path
    
    [ Upstream commit 751d460ccff3137212f47d876221534bf0490996 ]
    
    Skip bound chain from netns release path, the rule that owns this chain
    releases these objects.
    
    Fixes: d0e2c7de92c7 ("netfilter: nf_tables: add NFT_CHAIN_BINDING")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nf_tables: skip bound chain on rule flush [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Jul 20 09:17:21 2023 +0200

    netfilter: nf_tables: skip bound chain on rule flush
    
    [ Upstream commit 6eaf41e87a223ae6f8e7a28d6e78384ad7e407f8 ]
    
    Skip bound chain when flushing table rules, the rule that owns this
    chain releases these objects.
    
    Otherwise, the following warning is triggered:
    
      WARNING: CPU: 2 PID: 1217 at net/netfilter/nf_tables_api.c:2013 nf_tables_chain_destroy+0x1f7/0x210 [nf_tables]
      CPU: 2 PID: 1217 Comm: chain-flush Not tainted 6.1.39 #1
      RIP: 0010:nf_tables_chain_destroy+0x1f7/0x210 [nf_tables]
    
    Fixes: d0e2c7de92c7 ("netfilter: nf_tables: add NFT_CHAIN_BINDING")
    Reported-by: Kevin Rich <kevinrich1337@gmail.com>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nf_tables: unbind non-anonymous set if rule construction fails [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Jul 13 10:48:58 2023 +0200

    netfilter: nf_tables: unbind non-anonymous set if rule construction fails
    
    [ Upstream commit 3e70489721b6c870252c9082c496703677240f53 ]
    
    Otherwise a dangling reference to a rule object that is gone remains
    in the set binding list.
    
    Fixes: 26b5a5712eb8 ("netfilter: nf_tables: add NFT_TRANS_PREPARE_ERROR to deal with bound set/chain")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: use net_generic infra for transaction data [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Thu Jul 13 10:48:49 2023 +0200

    netfilter: nf_tables: use net_generic infra for transaction data
    
    [ Upstream commit 0854db2aaef3fcdd3498a9d299c60adea2aa3dc6 ]
    
    This moves all nf_tables pernet data from struct net to a net_generic
    extension, with the exception of the gencursor.
    
    The latter is used in the data path and also outside of the nf_tables
    core. All others are only used from the configuration plane.
    
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nft_set_pipapo: fix improper element removal [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Wed Jul 19 21:08:21 2023 +0200

    netfilter: nft_set_pipapo: fix improper element removal
    
    [ Upstream commit 87b5a5c209405cb6b57424cdfa226a6dbd349232 ]
    
    end key should be equal to start unless NFT_SET_EXT_KEY_END is present.
    
    Its possible to add elements that only have a start key
    ("{ 1.0.0.0 . 2.0.0.0 }") without an internval end.
    
    Insertion treats this via:
    
    if (nft_set_ext_exists(ext, NFT_SET_EXT_KEY_END))
       end = (const u8 *)nft_set_ext_key_end(ext)->data;
    else
       end = start;
    
    but removal side always uses nft_set_ext_key_end().
    This is wrong and leads to garbage remaining in the set after removal
    next lookup/insert attempt will give:
    
    BUG: KASAN: slab-use-after-free in pipapo_get+0x8eb/0xb90
    Read of size 1 at addr ffff888100d50586 by task nft-pipapo_uaf_/1399
    Call Trace:
     kasan_report+0x105/0x140
     pipapo_get+0x8eb/0xb90
     nft_pipapo_insert+0x1dc/0x1710
     nf_tables_newsetelem+0x31f5/0x4e00
     ..
    
    Fixes: 3c4287f62044 ("nf_tables: Add set type for arbitrary concatenation of ranges")
    Reported-by: lonial con <kongln9170@gmail.com>
    Reviewed-by: Stefano Brivio <sbrivio@redhat.com>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nftables: rename set element data activation/deactivation functions [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Jul 13 10:48:56 2023 +0200

    netfilter: nftables: rename set element data activation/deactivation functions
    
    [ Upstream commit f8bb7889af58d8e74d2d61c76b1418230f1610fa ]
    
    Rename:
    
    - nft_set_elem_activate() to nft_set_elem_data_activate().
    - nft_set_elem_deactivate() to nft_set_elem_data_deactivate().
    
    To prepare for updates in the set element infrastructure to add support
    for the special catch-all element.
    
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
netlink: Add __sock_i_ino() for __netlink_diag_dump(). [+ + +]
Author: Kuniyuki Iwashima <kuniyu@amazon.com>
Date:   Mon Jun 26 09:43:13 2023 -0700

    netlink: Add __sock_i_ino() for __netlink_diag_dump().
    
    [ Upstream commit 25a9c8a4431c364f97f75558cb346d2ad3f53fbb ]
    
    syzbot reported a warning in __local_bh_enable_ip(). [0]
    
    Commit 8d61f926d420 ("netlink: fix potential deadlock in
    netlink_set_err()") converted read_lock(&nl_table_lock) to
    read_lock_irqsave() in __netlink_diag_dump() to prevent a deadlock.
    
    However, __netlink_diag_dump() calls sock_i_ino() that uses
    read_lock_bh() and read_unlock_bh().  If CONFIG_TRACE_IRQFLAGS=y,
    read_unlock_bh() finally enables IRQ even though it should stay
    disabled until the following read_unlock_irqrestore().
    
    Using read_lock() in sock_i_ino() would trigger a lockdep splat
    in another place that was fixed in commit f064af1e500a ("net: fix
    a lockdep splat"), so let's add __sock_i_ino() that would be safe
    to use under BH disabled.
    
    [0]:
    WARNING: CPU: 0 PID: 5012 at kernel/softirq.c:376 __local_bh_enable_ip+0xbe/0x130 kernel/softirq.c:376
    Modules linked in:
    CPU: 0 PID: 5012 Comm: syz-executor487 Not tainted 6.4.0-rc7-syzkaller-00202-g6f68fc395f49 #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 05/27/2023
    RIP: 0010:__local_bh_enable_ip+0xbe/0x130 kernel/softirq.c:376
    Code: 45 bf 01 00 00 00 e8 91 5b 0a 00 e8 3c 15 3d 00 fb 65 8b 05 ec e9 b5 7e 85 c0 74 58 5b 5d c3 65 8b 05 b2 b6 b4 7e 85 c0 75 a2 <0f> 0b eb 9e e8 89 15 3d 00 eb 9f 48 89 ef e8 6f 49 18 00 eb a8 0f
    RSP: 0018:ffffc90003a1f3d0 EFLAGS: 00010046
    RAX: 0000000000000000 RBX: 0000000000000201 RCX: 1ffffffff1cf5996
    RDX: 0000000000000000 RSI: 0000000000000201 RDI: ffffffff8805c6f3
    RBP: ffffffff8805c6f3 R08: 0000000000000001 R09: ffff8880152b03a3
    R10: ffffed1002a56074 R11: 0000000000000005 R12: 00000000000073e4
    R13: dffffc0000000000 R14: 0000000000000002 R15: 0000000000000000
    FS:  0000555556726300(0000) GS:ffff8880b9800000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 000000000045ad50 CR3: 000000007c646000 CR4: 00000000003506f0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    Call Trace:
     <TASK>
     sock_i_ino+0x83/0xa0 net/core/sock.c:2559
     __netlink_diag_dump+0x45c/0x790 net/netlink/diag.c:171
     netlink_diag_dump+0xd6/0x230 net/netlink/diag.c:207
     netlink_dump+0x570/0xc50 net/netlink/af_netlink.c:2269
     __netlink_dump_start+0x64b/0x910 net/netlink/af_netlink.c:2374
     netlink_dump_start include/linux/netlink.h:329 [inline]
     netlink_diag_handler_dump+0x1ae/0x250 net/netlink/diag.c:238
     __sock_diag_cmd net/core/sock_diag.c:238 [inline]
     sock_diag_rcv_msg+0x31e/0x440 net/core/sock_diag.c:269
     netlink_rcv_skb+0x165/0x440 net/netlink/af_netlink.c:2547
     sock_diag_rcv+0x2a/0x40 net/core/sock_diag.c:280
     netlink_unicast_kernel net/netlink/af_netlink.c:1339 [inline]
     netlink_unicast+0x547/0x7f0 net/netlink/af_netlink.c:1365
     netlink_sendmsg+0x925/0xe30 net/netlink/af_netlink.c:1914
     sock_sendmsg_nosec net/socket.c:724 [inline]
     sock_sendmsg+0xde/0x190 net/socket.c:747
     ____sys_sendmsg+0x71c/0x900 net/socket.c:2503
     ___sys_sendmsg+0x110/0x1b0 net/socket.c:2557
     __sys_sendmsg+0xf7/0x1c0 net/socket.c:2586
     do_syscall_x64 arch/x86/entry/common.c:50 [inline]
     do_syscall_64+0x39/0xb0 arch/x86/entry/common.c:80
     entry_SYSCALL_64_after_hwframe+0x63/0xcd
    RIP: 0033:0x7f5303aaabb9
    Code: 28 c3 e8 2a 14 00 00 66 2e 0f 1f 84 00 00 00 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 c0 ff ff ff f7 d8 64 89 01 48
    RSP: 002b:00007ffc7506e548 EFLAGS: 00000246 ORIG_RAX: 000000000000002e
    RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f5303aaabb9
    RDX: 0000000000000000 RSI: 0000000020000180 RDI: 0000000000000003
    RBP: 00007f5303a6ed60 R08: 0000000000000000 R09: 0000000000000000
    R10: 0000000000000000 R11: 0000000000000246 R12: 00007f5303a6edf0
    R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
     </TASK>
    
    Fixes: 8d61f926d420 ("netlink: fix potential deadlock in netlink_set_err()")
    Reported-by: syzbot+5da61cf6a9bc1902d422@syzkaller.appspotmail.com
    Link: https://syzkaller.appspot.com/bug?extid=5da61cf6a9bc1902d422
    Suggested-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://lore.kernel.org/r/20230626164313.52528-1-kuniyu@amazon.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netlink: do not hard code device address lenth in fdb dumps [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Jun 21 17:47:20 2023 +0000

    netlink: do not hard code device address lenth in fdb dumps
    
    [ Upstream commit aa5406950726e336c5c9585b09799a734b6e77bf ]
    
    syzbot reports that some netdev devices do not have a six bytes
    address [1]
    
    Replace ETH_ALEN by dev->addr_len.
    
    [1] (Case of a device where dev->addr_len = 4)
    
    BUG: KMSAN: kernel-infoleak in instrument_copy_to_user include/linux/instrumented.h:114 [inline]
    BUG: KMSAN: kernel-infoleak in copyout+0xb8/0x100 lib/iov_iter.c:169
    instrument_copy_to_user include/linux/instrumented.h:114 [inline]
    copyout+0xb8/0x100 lib/iov_iter.c:169
    _copy_to_iter+0x6d8/0x1d00 lib/iov_iter.c:536
    copy_to_iter include/linux/uio.h:206 [inline]
    simple_copy_to_iter+0x68/0xa0 net/core/datagram.c:513
    __skb_datagram_iter+0x123/0xdc0 net/core/datagram.c:419
    skb_copy_datagram_iter+0x5c/0x200 net/core/datagram.c:527
    skb_copy_datagram_msg include/linux/skbuff.h:3960 [inline]
    netlink_recvmsg+0x4ae/0x15a0 net/netlink/af_netlink.c:1970
    sock_recvmsg_nosec net/socket.c:1019 [inline]
    sock_recvmsg net/socket.c:1040 [inline]
    ____sys_recvmsg+0x283/0x7f0 net/socket.c:2722
    ___sys_recvmsg+0x223/0x840 net/socket.c:2764
    do_recvmmsg+0x4f9/0xfd0 net/socket.c:2858
    __sys_recvmmsg net/socket.c:2937 [inline]
    __do_sys_recvmmsg net/socket.c:2960 [inline]
    __se_sys_recvmmsg net/socket.c:2953 [inline]
    __x64_sys_recvmmsg+0x397/0x490 net/socket.c:2953
    do_syscall_x64 arch/x86/entry/common.c:50 [inline]
    do_syscall_64+0x41/0xc0 arch/x86/entry/common.c:80
    entry_SYSCALL_64_after_hwframe+0x63/0xcd
    
    Uninit was stored to memory at:
    __nla_put lib/nlattr.c:1009 [inline]
    nla_put+0x1c6/0x230 lib/nlattr.c:1067
    nlmsg_populate_fdb_fill+0x2b8/0x600 net/core/rtnetlink.c:4071
    nlmsg_populate_fdb net/core/rtnetlink.c:4418 [inline]
    ndo_dflt_fdb_dump+0x616/0x840 net/core/rtnetlink.c:4456
    rtnl_fdb_dump+0x14ff/0x1fc0 net/core/rtnetlink.c:4629
    netlink_dump+0x9d1/0x1310 net/netlink/af_netlink.c:2268
    netlink_recvmsg+0xc5c/0x15a0 net/netlink/af_netlink.c:1995
    sock_recvmsg_nosec+0x7a/0x120 net/socket.c:1019
    ____sys_recvmsg+0x664/0x7f0 net/socket.c:2720
    ___sys_recvmsg+0x223/0x840 net/socket.c:2764
    do_recvmmsg+0x4f9/0xfd0 net/socket.c:2858
    __sys_recvmmsg net/socket.c:2937 [inline]
    __do_sys_recvmmsg net/socket.c:2960 [inline]
    __se_sys_recvmmsg net/socket.c:2953 [inline]
    __x64_sys_recvmmsg+0x397/0x490 net/socket.c:2953
    do_syscall_x64 arch/x86/entry/common.c:50 [inline]
    do_syscall_64+0x41/0xc0 arch/x86/entry/common.c:80
    entry_SYSCALL_64_after_hwframe+0x63/0xcd
    
    Uninit was created at:
    slab_post_alloc_hook+0x12d/0xb60 mm/slab.h:716
    slab_alloc_node mm/slub.c:3451 [inline]
    __kmem_cache_alloc_node+0x4ff/0x8b0 mm/slub.c:3490
    kmalloc_trace+0x51/0x200 mm/slab_common.c:1057
    kmalloc include/linux/slab.h:559 [inline]
    __hw_addr_create net/core/dev_addr_lists.c:60 [inline]
    __hw_addr_add_ex+0x2e5/0x9e0 net/core/dev_addr_lists.c:118
    __dev_mc_add net/core/dev_addr_lists.c:867 [inline]
    dev_mc_add+0x9a/0x130 net/core/dev_addr_lists.c:885
    igmp6_group_added+0x267/0xbc0 net/ipv6/mcast.c:680
    ipv6_mc_up+0x296/0x3b0 net/ipv6/mcast.c:2754
    ipv6_mc_remap+0x1e/0x30 net/ipv6/mcast.c:2708
    addrconf_type_change net/ipv6/addrconf.c:3731 [inline]
    addrconf_notify+0x4d3/0x1d90 net/ipv6/addrconf.c:3699
    notifier_call_chain kernel/notifier.c:93 [inline]
    raw_notifier_call_chain+0xe4/0x430 kernel/notifier.c:461
    call_netdevice_notifiers_info net/core/dev.c:1935 [inline]
    call_netdevice_notifiers_extack net/core/dev.c:1973 [inline]
    call_netdevice_notifiers+0x1ee/0x2d0 net/core/dev.c:1987
    bond_enslave+0xccd/0x53f0 drivers/net/bonding/bond_main.c:1906
    do_set_master net/core/rtnetlink.c:2626 [inline]
    rtnl_newlink_create net/core/rtnetlink.c:3460 [inline]
    __rtnl_newlink net/core/rtnetlink.c:3660 [inline]
    rtnl_newlink+0x378c/0x40e0 net/core/rtnetlink.c:3673
    rtnetlink_rcv_msg+0x16a6/0x1840 net/core/rtnetlink.c:6395
    netlink_rcv_skb+0x371/0x650 net/netlink/af_netlink.c:2546
    rtnetlink_rcv+0x34/0x40 net/core/rtnetlink.c:6413
    netlink_unicast_kernel net/netlink/af_netlink.c:1339 [inline]
    netlink_unicast+0xf28/0x1230 net/netlink/af_netlink.c:1365
    netlink_sendmsg+0x122f/0x13d0 net/netlink/af_netlink.c:1913
    sock_sendmsg_nosec net/socket.c:724 [inline]
    sock_sendmsg net/socket.c:747 [inline]
    ____sys_sendmsg+0x999/0xd50 net/socket.c:2503
    ___sys_sendmsg+0x28d/0x3c0 net/socket.c:2557
    __sys_sendmsg net/socket.c:2586 [inline]
    __do_sys_sendmsg net/socket.c:2595 [inline]
    __se_sys_sendmsg net/socket.c:2593 [inline]
    __x64_sys_sendmsg+0x304/0x490 net/socket.c:2593
    do_syscall_x64 arch/x86/entry/common.c:50 [inline]
    do_syscall_64+0x41/0xc0 arch/x86/entry/common.c:80
    entry_SYSCALL_64_after_hwframe+0x63/0xcd
    
    Bytes 2856-2857 of 3500 are uninitialized
    Memory access of size 3500 starts at ffff888018d99104
    Data copied to user address 0000000020000480
    
    Fixes: d83b06036048 ("net: add fdb generic dump routine")
    Reported-by: syzbot <syzkaller@googlegroups.com>
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Jiri Pirko <jiri@nvidia.com>
    Link: https://lore.kernel.org/r/20230621174720.1845040-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netlink: fix potential deadlock in netlink_set_err() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Jun 21 15:43:37 2023 +0000

    netlink: fix potential deadlock in netlink_set_err()
    
    [ Upstream commit 8d61f926d42045961e6b65191c09e3678d86a9cf ]
    
    syzbot reported a possible deadlock in netlink_set_err() [1]
    
    A similar issue was fixed in commit 1d482e666b8e ("netlink: disable IRQs
    for netlink_lock_table()") in netlink_lock_table()
    
    This patch adds IRQ safety to netlink_set_err() and __netlink_diag_dump()
    which were not covered by cited commit.
    
    [1]
    
    WARNING: possible irq lock inversion dependency detected
    6.4.0-rc6-syzkaller-00240-g4e9f0ec38852 #0 Not tainted
    
    syz-executor.2/23011 just changed the state of lock:
    ffffffff8e1a7a58 (nl_table_lock){.+.?}-{2:2}, at: netlink_set_err+0x2e/0x3a0 net/netlink/af_netlink.c:1612
    but this lock was taken by another, SOFTIRQ-safe lock in the past:
     (&local->queue_stop_reason_lock){..-.}-{2:2}
    
    and interrupts could create inverse lock ordering between them.
    
    other info that might help us debug this:
     Possible interrupt unsafe locking scenario:
    
           CPU0                    CPU1
           ----                    ----
      lock(nl_table_lock);
                                   local_irq_disable();
                                   lock(&local->queue_stop_reason_lock);
                                   lock(nl_table_lock);
      <Interrupt>
        lock(&local->queue_stop_reason_lock);
    
     *** DEADLOCK ***
    
    Fixes: 1d482e666b8e ("netlink: disable IRQs for netlink_lock_table()")
    Reported-by: syzbot+a7d200a347f912723e5c@syzkaller.appspotmail.com
    Link: https://syzkaller.appspot.com/bug?extid=a7d200a347f912723e5c
    Link: https://lore.kernel.org/netdev/000000000000e38d1605fea5747e@google.com/T/#u
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Cc: Johannes Berg <johannes.berg@intel.com>
    Link: https://lore.kernel.org/r/20230621154337.1668594-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nfc: constify several pointers to u8, char and sk_buff [+ + +]
Author: Krzysztof Kozlowski <krzk@kernel.org>
Date:   Fri Jul 30 16:41:59 2021 +0200

    nfc: constify several pointers to u8, char and sk_buff
    
    [ Upstream commit 3df40eb3a2ea58bf404a38f15a7a2768e4762cb0 ]
    
    Several functions receive pointers to u8, char or sk_buff but do not
    modify the contents so make them const.  This allows doing the same for
    local variables and in total makes the code a little bit safer.
    
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: 0d9b41daa590 ("nfc: llcp: fix possible use of uninitialized variable in nfc_llcp_send_connect()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

nfc: llcp: fix possible use of uninitialized variable in nfc_llcp_send_connect() [+ + +]
Author: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Date:   Sat May 13 13:52:04 2023 +0200

    nfc: llcp: fix possible use of uninitialized variable in nfc_llcp_send_connect()
    
    [ Upstream commit 0d9b41daa5907756a31772d8af8ac5ff25cf17c1 ]
    
    If sock->service_name is NULL, the local variable
    service_name_tlv_length will not be assigned by nfc_llcp_build_tlv(),
    later leading to using value frmo the stack.  Smatch warning:
    
      net/nfc/llcp_commands.c:442 nfc_llcp_send_connect() error: uninitialized symbol 'service_name_tlv_length'.
    
    Fixes: de9e5aeb4f40 ("NFC: llcp: Fix usage of llcp_add_tlv()")
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

nfc: llcp: simplify llcp_sock_connect() error paths [+ + +]
Author: Krzysztof Kozlowski <krzk@kernel.org>
Date:   Wed Mar 2 20:25:19 2022 +0100

    nfc: llcp: simplify llcp_sock_connect() error paths
    
    [ Upstream commit ec10fd154d934cc4195da3cbd017a12817b41d51 ]
    
    The llcp_sock_connect() error paths were using a mixed way of central
    exit (goto) and cleanup
    
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: 6709d4b7bc2e ("net: nfc: Fix use-after-free caused by nfc_llcp_find_local")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
NFSD: add encoding of op_recall flag for write delegation [+ + +]
Author: Dai Ngo <dai.ngo@oracle.com>
Date:   Tue Jun 6 16:41:02 2023 -0700

    NFSD: add encoding of op_recall flag for write delegation
    
    commit 58f5d894006d82ed7335e1c37182fbc5f08c2f51 upstream.
    
    Modified nfsd4_encode_open to encode the op_recall flag properly
    for OPEN result with write delegation granted.
    
    Signed-off-by: Dai Ngo <dai.ngo@oracle.com>
    Reviewed-by: Jeff Layton <jlayton@kernel.org>
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
NFSv4.1: freeze the session table upon receiving NFS4ERR_BADSESSION [+ + +]
Author: Olga Kornievskaia <kolga@netapp.com>
Date:   Sun Jun 18 17:32:25 2023 -0400

    NFSv4.1: freeze the session table upon receiving NFS4ERR_BADSESSION
    
    [ Upstream commit c907e72f58ed979a24a9fdcadfbc447c51d5e509 ]
    
    When the client received NFS4ERR_BADSESSION, it schedules recovery
    and start the state manager thread which in turn freezes the
    session table and does not allow for any new requests to use the
    no-longer valid session. However, it is possible that before
    the state manager thread runs, a new operation would use the
    released slot that received BADSESSION and was therefore not
    updated its sequence number. Such re-use of the slot can lead
    the application errors.
    
    Fixes: 5c441544f045 ("NFSv4.x: Handle bad/dead sessions correctly in nfs41_sequence_process()")
    Signed-off-by: Olga Kornievskaia <kolga@netapp.com>
    Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
NTB: amd: Fix error handling in amd_ntb_pci_driver_init() [+ + +]
Author: Yuan Can <yuancan@huawei.com>
Date:   Sat Nov 5 09:43:09 2022 +0000

    NTB: amd: Fix error handling in amd_ntb_pci_driver_init()
    
    [ Upstream commit 98af0a33c1101c29b3ce4f0cf4715fd927c717f9 ]
    
    A problem about ntb_hw_amd create debugfs failed is triggered with the
    following log given:
    
     [  618.431232] AMD(R) PCI-E Non-Transparent Bridge Driver 1.0
     [  618.433284] debugfs: Directory 'ntb_hw_amd' with parent '/' already present!
    
    The reason is that amd_ntb_pci_driver_init() returns pci_register_driver()
    directly without checking its return value, if pci_register_driver()
    failed, it returns without destroy the newly created debugfs, resulting
    the debugfs of ntb_hw_amd can never be created later.
    
     amd_ntb_pci_driver_init()
       debugfs_create_dir() # create debugfs directory
       pci_register_driver()
         driver_register()
           bus_add_driver()
             priv = kzalloc(...) # OOM happened
       # return without destroy debugfs directory
    
    Fix by removing debugfs when pci_register_driver() returns error.
    
    Fixes: a1b3695820aa ("NTB: Add support for AMD PCI-Express Non-Transparent Bridge")
    Signed-off-by: Yuan Can <yuancan@huawei.com>
    Signed-off-by: Jon Mason <jdmason@kudzu.us>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ntb: idt: Fix error handling in idt_pci_driver_init() [+ + +]
Author: Yuan Can <yuancan@huawei.com>
Date:   Sat Nov 5 09:43:01 2022 +0000

    ntb: idt: Fix error handling in idt_pci_driver_init()
    
    [ Upstream commit c012968259b451dc4db407f2310fe131eaefd800 ]
    
    A problem about ntb_hw_idt create debugfs failed is triggered with the
    following log given:
    
     [ 1236.637636] IDT PCI-E Non-Transparent Bridge Driver 2.0
     [ 1236.639292] debugfs: Directory 'ntb_hw_idt' with parent '/' already present!
    
    The reason is that idt_pci_driver_init() returns pci_register_driver()
    directly without checking its return value, if pci_register_driver()
    failed, it returns without destroy the newly created debugfs, resulting
    the debugfs of ntb_hw_idt can never be created later.
    
     idt_pci_driver_init()
       debugfs_create_dir() # create debugfs directory
       pci_register_driver()
         driver_register()
           bus_add_driver()
             priv = kzalloc(...) # OOM happened
       # return without destroy debugfs directory
    
    Fix by removing debugfs when pci_register_driver() returns error.
    
    Fixes: bf2a952d31d2 ("NTB: Add IDT 89HPESxNTx PCIe-switches support")
    Signed-off-by: Yuan Can <yuancan@huawei.com>
    Signed-off-by: Jon Mason <jdmason@kudzu.us>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ntb: intel: Fix error handling in intel_ntb_pci_driver_init() [+ + +]
Author: Yuan Can <yuancan@huawei.com>
Date:   Sat Nov 5 09:43:22 2022 +0000

    ntb: intel: Fix error handling in intel_ntb_pci_driver_init()
    
    [ Upstream commit 4c3c796aca02883ad35bb117468938cc4022ca41 ]
    
    A problem about ntb_hw_intel create debugfs failed is triggered with the
    following log given:
    
     [  273.112733] Intel(R) PCI-E Non-Transparent Bridge Driver 2.0
     [  273.115342] debugfs: Directory 'ntb_hw_intel' with parent '/' already present!
    
    The reason is that intel_ntb_pci_driver_init() returns
    pci_register_driver() directly without checking its return value, if
    pci_register_driver() failed, it returns without destroy the newly created
    debugfs, resulting the debugfs of ntb_hw_intel can never be created later.
    
     intel_ntb_pci_driver_init()
       debugfs_create_dir() # create debugfs directory
       pci_register_driver()
         driver_register()
           bus_add_driver()
             priv = kzalloc(...) # OOM happened
       # return without destroy debugfs directory
    
    Fix by removing debugfs when pci_register_driver() returns error.
    
    Fixes: e26a5843f7f5 ("NTB: Split ntb_hw_intel and ntb_transport drivers")
    Signed-off-by: Yuan Can <yuancan@huawei.com>
    Acked-by: Dave Jiang <dave.jiang@intel.com>
    Signed-off-by: Jon Mason <jdmason@kudzu.us>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
NTB: ntb_tool: Add check for devm_kcalloc [+ + +]
Author: Jiasheng Jiang <jiasheng@iscas.ac.cn>
Date:   Tue Nov 22 11:32:44 2022 +0800

    NTB: ntb_tool: Add check for devm_kcalloc
    
    [ Upstream commit 2790143f09938776a3b4f69685b380bae8fd06c7 ]
    
    As the devm_kcalloc may return NULL pointer,
    it should be better to add check for the return
    value, as same as the others.
    
    Fixes: 7f46c8b3a552 ("NTB: ntb_tool: Add full multi-port NTB API support")
    Signed-off-by: Jiasheng Jiang <jiasheng@iscas.ac.cn>
    Reviewed-by: Serge Semin <fancer.lancer@gmail.com>
    Reviewed-by: Dave Jiang <dave.jiang@intel.com>
    Signed-off-by: Jon Mason <jdmason@kudzu.us>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

NTB: ntb_transport: fix possible memory leak while device_register() fails [+ + +]
Author: Yang Yingliang <yangyingliang@huawei.com>
Date:   Thu Nov 10 23:19:17 2022 +0800

    NTB: ntb_transport: fix possible memory leak while device_register() fails
    
    [ Upstream commit 8623ccbfc55d962e19a3537652803676ad7acb90 ]
    
    If device_register() returns error, the name allocated by
    dev_set_name() need be freed. As comment of device_register()
    says, it should use put_device() to give up the reference in
    the error path. So fix this by calling put_device(), then the
    name can be freed in kobject_cleanup(), and client_dev is freed
    in ntb_transport_client_release().
    
    Fixes: fce8a7bb5b4b ("PCI-Express Non-Transparent Bridge Support")
    Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
    Reviewed-by: Dave Jiang <dave.jiang@intel.com>
    Signed-off-by: Jon Mason <jdmason@kudzu.us>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nubus: Partially revert proc_create_single_data() conversion [+ + +]
Author: Finn Thain <fthain@linux-m68k.org>
Date:   Tue Mar 14 19:51:59 2023 +1100

    nubus: Partially revert proc_create_single_data() conversion
    
    commit 0e96647cff9224db564a1cee6efccb13dbe11ee2 upstream.
    
    The conversion to proc_create_single_data() introduced a regression
    whereby reading a file in /proc/bus/nubus results in a seg fault:
    
        # grep -r . /proc/bus/nubus/e/
        Data read fault at 0x00000020 in Super Data (pc=0x1074c2)
        BAD KERNEL BUSERR
        Oops: 00000000
        Modules linked in:
        PC: [<001074c2>] PDE_DATA+0xc/0x16
        SR: 2010  SP: 38284958  a2: 01152370
        d0: 00000001    d1: 01013000    d2: 01002790    d3: 00000000
        d4: 00000001    d5: 0008ce2e    a0: 00000000    a1: 00222a40
        Process grep (pid: 45, task=142f8727)
        Frame format=B ssw=074d isc=2008 isb=4e5e daddr=00000020 dobuf=01199e70
        baddr=001074c8 dibuf=ffffffff ver=f
        Stack from 01199e48:
                01199e70 00222a58 01002790 00000000 011a3000 01199eb0 015000c0 00000000
                00000000 01199ec0 01199ec0 000d551a 011a3000 00000001 00000000 00018000
                d003f000 00000003 00000001 0002800d 01052840 01199fa8 c01f8000 00000000
                00000029 0b532b80 00000000 00000000 00000029 0b532b80 01199ee4 00103640
                011198c0 d003f000 00018000 01199fa8 00000000 011198c0 00000000 01199f4c
                000b3344 011198c0 d003f000 00018000 01199fa8 00000000 00018000 011198c0
        Call Trace: [<00222a58>] nubus_proc_rsrc_show+0x18/0xa0
         [<000d551a>] seq_read+0xc4/0x510
         [<00018000>] fp_fcos+0x2/0x82
         [<0002800d>] __sys_setreuid+0x115/0x1c6
         [<00103640>] proc_reg_read+0x5c/0xb0
         [<00018000>] fp_fcos+0x2/0x82
         [<000b3344>] __vfs_read+0x2c/0x13c
         [<00018000>] fp_fcos+0x2/0x82
         [<00018000>] fp_fcos+0x2/0x82
         [<000b8aa2>] sys_statx+0x60/0x7e
         [<000b34b6>] vfs_read+0x62/0x12a
         [<00018000>] fp_fcos+0x2/0x82
         [<00018000>] fp_fcos+0x2/0x82
         [<000b39c2>] ksys_read+0x48/0xbe
         [<00018000>] fp_fcos+0x2/0x82
         [<000b3a4e>] sys_read+0x16/0x1a
         [<00018000>] fp_fcos+0x2/0x82
         [<00002b84>] syscall+0x8/0xc
         [<00018000>] fp_fcos+0x2/0x82
         [<0000c016>] not_ext+0xa/0x18
        Code: 4e5e 4e75 4e56 0000 206e 0008 2068 ffe8 <2068> 0020 2008 4e5e 4e75 4e56 0000 2f0b 206e 0008 2068 0004 2668 0020 206b ffe8
        Disabling lock debugging due to kernel taint
    
        Segmentation fault
    
    The proc_create_single_data() conversion does not work because
    single_open(file, nubus_proc_rsrc_show, PDE_DATA(inode)) is not
    equivalent to the original code.
    
    Fixes: 3f3942aca6da ("proc: introduce proc_create_single{,_data}")
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: stable@vger.kernel.org # 5.6+
    Signed-off-by: Finn Thain <fthain@linux-m68k.org>
    Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org>
    Link: https://lore.kernel.org/r/d4e2a586e793cc8d9442595684ab8a077c0fe726.1678783919.git.fthain@linux-m68k.org
    Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
nvme-pci: fix DMA direction of unmapping integrity data [+ + +]
Author: Ming Lei <ming.lei@redhat.com>
Date:   Thu Jul 13 17:26:20 2023 +0800

    nvme-pci: fix DMA direction of unmapping integrity data
    
    [ Upstream commit b8f6446b6853768cb99e7c201bddce69ca60c15e ]
    
    DMA direction should be taken in dma_unmap_page() for unmapping integrity
    data.
    
    Fix this DMA direction, and reported in Guangwu's test.
    
    Reported-by: Guangwu Zhang <guazhang@redhat.com>
    Fixes: 4aedb705437f ("nvme-pci: split metadata handling from nvme_map_data / nvme_unmap_data")
    Signed-off-by: Ming Lei <ming.lei@redhat.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Keith Busch <kbusch@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
octeontx2-af: Fix mapping for NIX block from CGX connection [+ + +]
Author: Hariprasad Kelam <hkelam@marvell.com>
Date:   Fri Jun 30 11:58:43 2023 +0530

    octeontx2-af: Fix mapping for NIX block from CGX connection
    
    [ Upstream commit 2e7bc57b976bb016c6569a54d95c1b8d88f9450a ]
    
    Firmware configures NIX block mapping for all MAC blocks.
    The current implementation reads the configuration and
    creates the mapping between RVU PF  and NIX blocks. But
    this configuration is only valid for silicons that support
    multiple blocks. For all other silicons, all MAC blocks
    map to NIX0.
    
    This patch corrects the mapping by adding a check for the same.
    
    Fixes: c5a73b632b90 ("octeontx2-af: Map NIX block from CGX connection")
    Signed-off-by: Hariprasad Kelam <hkelam@marvell.com>
    Signed-off-by: Sunil Goutham <sgoutham@marvell.com>
    Reviewed-by: Simon Horman <simon.horman@corigine.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
octeontx2-pf: Dont allocate BPIDs for LBK interfaces [+ + +]
Author: Geetha sowjanya <gakula@marvell.com>
Date:   Sun Jul 16 15:07:41 2023 +0530

    octeontx2-pf: Dont allocate BPIDs for LBK interfaces
    
    [ Upstream commit 8fcd7c7b3a38ab5e452f542fda8f7940e77e479a ]
    
    Current driver enables backpressure for LBK interfaces.
    But these interfaces do not support this feature.
    Hence, this patch fixes the issue by skipping the
    backpressure configuration for these interfaces.
    
    Fixes: 75f36270990c ("octeontx2-pf: Support to enable/disable pause frames via ethtool").
    Signed-off-by: Geetha sowjanya <gakula@marvell.com>
    Signed-off-by: Sunil Goutham <sgoutham@marvell.com>
    Link: https://lore.kernel.org/r/20230716093741.28063-1-gakula@marvell.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ovl: update of dentry revalidate flags after copy up [+ + +]
Author: Amir Goldstein <amir73il@gmail.com>
Date:   Mon Apr 3 11:29:59 2023 +0300

    ovl: update of dentry revalidate flags after copy up
    
    [ Upstream commit b07d5cc93e1b28df47a72c519d09d0a836043613 ]
    
    After copy up, we may need to update d_flags if upper dentry is on a
    remote fs and lower dentries are not.
    
    Add helpers to allow incremental update of the revalidate flags.
    
    Fixes: bccece1ead36 ("ovl: allow remote upper")
    Reviewed-by: Gao Xiang <hsiangkao@linux.alibaba.com>
    Signed-off-by: Amir Goldstein <amir73il@gmail.com>
    Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
PCI/ASPM: Disable ASPM on MFD function removal to avoid use-after-free [+ + +]
Author: Ding Hui <dinghui@sangfor.com.cn>
Date:   Sun May 7 11:40:57 2023 +0800

    PCI/ASPM: Disable ASPM on MFD function removal to avoid use-after-free
    
    [ Upstream commit 456d8aa37d0f56fc9e985e812496e861dcd6f2f2 ]
    
    Struct pcie_link_state->downstream is a pointer to the pci_dev of function
    0.  Previously we retained that pointer when removing function 0, and
    subsequent ASPM policy changes dereferenced it, resulting in a
    use-after-free warning from KASAN, e.g.:
    
      # echo 1 > /sys/bus/pci/devices/0000:03:00.0/remove
      # echo powersave > /sys/module/pcie_aspm/parameters/policy
    
      BUG: KASAN: slab-use-after-free in pcie_config_aspm_link+0x42d/0x500
      Call Trace:
       kasan_report+0xae/0xe0
       pcie_config_aspm_link+0x42d/0x500
       pcie_aspm_set_policy+0x8e/0x1a0
       param_attr_store+0x162/0x2c0
       module_attr_store+0x3e/0x80
    
    PCIe spec r6.0, sec 7.5.3.7, recommends that software program the same ASPM
    Control value in all functions of multi-function devices.
    
    Disable ASPM and free the pcie_link_state when any child function is
    removed so we can discard the dangling pcie_link_state->downstream pointer
    and maintain the same ASPM Control configuration for all functions.
    
    [bhelgaas: commit log and comment]
    Debugged-by: Zongquan Qin <qinzongquan@sangfor.com.cn>
    Suggested-by: Bjorn Helgaas <bhelgaas@google.com>
    Fixes: b5a0a9b59c81 ("PCI/ASPM: Read and set up L1 substate capabilities")
    Link: https://lore.kernel.org/r/20230507034057.20970-1-dinghui@sangfor.com.cn
    Signed-off-by: Ding Hui <dinghui@sangfor.com.cn>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
PCI/PM: Avoid putting EloPOS E2/S2/H2 PCIe Ports in D3cold [+ + +]
Author: Ondrej Zary <linux@zary.sk>
Date:   Wed Jun 14 09:42:53 2023 +0200

    PCI/PM: Avoid putting EloPOS E2/S2/H2 PCIe Ports in D3cold
    
    commit 9e30fd26f43b89cb6b4e850a86caa2e50dedb454 upstream.
    
    The quirk for Elo i2 introduced in commit 92597f97a40b ("PCI/PM: Avoid
    putting Elo i2 PCIe Ports in D3cold") is also needed by EloPOS E2/S2/H2
    which uses the same Continental Z2 board.
    
    Change the quirk to match the board instead of system.
    
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=215715
    Link: https://lore.kernel.org/r/20230614074253.22318-1-linux@zary.sk
    Signed-off-by: Ondrej Zary <linux@zary.sk>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
PCI: Add function 1 DMA alias quirk for Marvell 88SE9235 [+ + +]
Author: Robin Murphy <robin.murphy@arm.com>
Date:   Wed Jun 7 18:18:47 2023 +0100

    PCI: Add function 1 DMA alias quirk for Marvell 88SE9235
    
    commit 88d341716b83abd355558523186ca488918627ee upstream.
    
    Marvell's own product brief implies the 92xx series are a closely related
    family, and sure enough it turns out that 9235 seems to need the same quirk
    as the other three, although possibly only when certain ports are used.
    
    Link: https://lore.kernel.org/linux-iommu/2a699a99-545c-1324-e052-7d2f41fed1ae@yahoo.co.uk/
    Link: https://lore.kernel.org/r/731507e05d70239aec96fcbfab6e65d8ce00edd2.1686157165.git.robin.murphy@arm.com
    Reported-by: Jason Adriaanse <jason_a69@yahoo.co.uk>
    Signed-off-by: Robin Murphy <robin.murphy@arm.com>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

PCI: Add pci_clear_master() stub for non-CONFIG_PCI [+ + +]
Author: Sui Jingfeng <suijingfeng@loongson.cn>
Date:   Wed May 31 18:27:44 2023 +0800

    PCI: Add pci_clear_master() stub for non-CONFIG_PCI
    
    [ Upstream commit 2aa5ac633259843f656eb6ecff4cf01e8e810c5e ]
    
    Add a pci_clear_master() stub when CONFIG_PCI is not set so drivers that
    support both PCI and platform devices don't need #ifdefs or extra Kconfig
    symbols for the PCI parts.
    
    [bhelgaas: commit log]
    Fixes: 6a479079c072 ("PCI: Add pci_clear_master() as opposite of pci_set_master()")
    Link: https://lore.kernel.org/r/20230531102744.2354313-1-suijingfeng@loongson.cn
    Signed-off-by: Sui Jingfeng <suijingfeng@loongson.cn>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

PCI: cadence: Fix Gen2 Link Retraining process [+ + +]
Author: Siddharth Vadapalli <s-vadapalli@ti.com>
Date:   Wed Mar 15 12:38:00 2023 +0530

    PCI: cadence: Fix Gen2 Link Retraining process
    
    [ Upstream commit 0e12f830236928b6fadf40d917a7527f0a048d2f ]
    
    The Link Retraining process is initiated to account for the Gen2 defect in
    the Cadence PCIe controller in J721E SoC. The errata corresponding to this
    is i2085, documented at:
    https://www.ti.com/lit/er/sprz455c/sprz455c.pdf
    
    The existing workaround implemented for the errata waits for the Data Link
    initialization to complete and assumes that the link retraining process
    at the Physical Layer has completed. However, it is possible that the
    Physical Layer training might be ongoing as indicated by the
    PCI_EXP_LNKSTA_LT bit in the PCI_EXP_LNKSTA register.
    
    Fix the existing workaround, to ensure that the Physical Layer training
    has also completed, in addition to the Data Link initialization.
    
    Link: https://lore.kernel.org/r/20230315070800.1615527-1-s-vadapalli@ti.com
    Fixes: 4740b969aaf5 ("PCI: cadence: Retrain Link to work around Gen2 training defect")
    Signed-off-by: Siddharth Vadapalli <s-vadapalli@ti.com>
    Signed-off-by: Lorenzo Pieralisi <lpieralisi@kernel.org>
    Reviewed-by: Vignesh Raghavendra <vigneshr@ti.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

PCI: ftpci100: Release the clock resources [+ + +]
Author: Junyan Ye <yejunyan@hust.edu.cn>
Date:   Mon May 8 12:36:41 2023 +0800

    PCI: ftpci100: Release the clock resources
    
    [ Upstream commit c60738de85f40b0b9f5cb23c21f9246e5a47908c ]
    
    Smatch reported:
    1. drivers/pci/controller/pci-ftpci100.c:526 faraday_pci_probe() warn:
    'clk' from clk_prepare_enable() not released on lines: 442,451,462,478,512,517.
    2. drivers/pci/controller/pci-ftpci100.c:526 faraday_pci_probe() warn:
    'p->bus_clk' from clk_prepare_enable() not released on lines: 451,462,478,512,517.
    
    The clock resource is obtained by devm_clk_get(), and then
    clk_prepare_enable() makes the clock resource ready for use. After that,
    clk_disable_unprepare() should be called to release the clock resource
    when it is no longer needed. However, while doing some error handling
    in faraday_pci_probe(), clk_disable_unprepare() is not called to release
    clk and p->bus_clk before returning. These return lines are exactly 442,
    451, 462, 478, 512, 517.
    
    Fix this warning by replacing devm_clk_get() with devm_clk_get_enabled(),
    which is equivalent to devm_clk_get() + clk_prepare_enable(). And with
    devm_clk_get_enabled(), the clock will automatically be disabled,
    unprepared and freed when the device is unbound from the bus.
    
    Link: https://lore.kernel.org/r/20230508043641.23807-1-yejunyan@hust.edu.cn
    Fixes: b3c433efb8a3 ("PCI: faraday: Fix wrong pointer passed to PTR_ERR()")
    Fixes: 2eeb02b28579 ("PCI: faraday: Add clock handling")
    Fixes: 783a862563f7 ("PCI: faraday: Use pci_parse_request_of_pci_ranges()")
    Fixes: d3c68e0a7e34 ("PCI: faraday: Add Faraday Technology FTPCI100 PCI Host Bridge driver")
    Fixes: f1e8bd21e39e ("PCI: faraday: Convert IRQ masking to raw PCI config accessors")
    Signed-off-by: Junyan Ye <yejunyan@hust.edu.cn>
    Signed-off-by: Lorenzo Pieralisi <lpieralisi@kernel.org>
    Reviewed-by: Dongliang Mu <dzm91@hust.edu.cn>
    Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

PCI: pciehp: Cancel bringup sequence if card is not present [+ + +]
Author: Rongguang Wei <weirongguang@kylinos.cn>
Date:   Fri May 12 10:15:18 2023 +0800

    PCI: pciehp: Cancel bringup sequence if card is not present
    
    [ Upstream commit e8afd0d9fccc27c8ad263db5cf5952cfcf72d6fe ]
    
    If a PCIe hotplug slot has an Attention Button, the normal hot-add flow is:
    
      - Slot is empty and slot power is off
      - User inserts card in slot and presses Attention Button
      - OS blinks Power Indicator for 5 seconds
      - After 5 seconds, OS turns on Power Indicator, turns on slot power, and
        enumerates the device
    
    Previously, if a user pressed the Attention Button on an *empty* slot,
    pciehp logged the following messages and blinked the Power Indicator
    until a second button press:
    
      [0.000] pciehp: Button press: will power on in 5 sec
      [0.001] # Power Indicator starts blinking
      [5.001] # 5 second timeout; slot is empty, so we should cancel the
                request to power on and turn off Power Indicator
    
      [7.000] # Power Indicator still blinking
      [8.000] # possible card insertion
      [9.000] pciehp: Button press: canceling request to power on
    
    The first button press incorrectly left the slot in BLINKINGON_STATE, so
    the second was interpreted as a "cancel power on" event regardless of
    whether a card was present.
    
    If the slot is empty, turn off the Power Indicator and return from
    BLINKINGON_STATE to OFF_STATE after 5 seconds, effectively canceling the
    request to power on.  Putting the slot in OFF_STATE also means the second
    button press will correctly request a slot power on if the slot is
    occupied.
    
    [bhelgaas: commit log]
    Link: https://lore.kernel.org/r/20230512021518.336460-1-clementwei90@163.com
    Fixes: d331710ea78f ("PCI: pciehp: Become resilient to missed events")
    Suggested-by: Lukas Wunner <lukas@wunner.de>
    Signed-off-by: Rongguang Wei <weirongguang@kylinos.cn>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: Lukas Wunner <lukas@wunner.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

PCI: qcom: Disable write access to read only registers for IP v2.3.3 [+ + +]
Author: Manivannan Sadhasivam <mani@kernel.org>
Date:   Mon Jun 19 20:34:00 2023 +0530

    PCI: qcom: Disable write access to read only registers for IP v2.3.3
    
    commit a33d700e8eea76c62120cb3dbf5e01328f18319a upstream.
    
    In the post init sequence of v2.9.0, write access to read only registers
    are not disabled after updating the registers. Fix it by disabling the
    access after register update.
    
    Link: https://lore.kernel.org/r/20230619150408.8468-2-manivannan.sadhasivam@linaro.org
    Fixes: 5d76117f070d ("PCI: qcom: Add support for IPQ8074 PCIe controller")
    Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
    Signed-off-by: Lorenzo Pieralisi <lpieralisi@kernel.org>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

PCI: rockchip: Add poll and timeout to wait for PHY PLLs to be locked [+ + +]
Author: Rick Wertenbroek <rick.wertenbroek@gmail.com>
Date:   Tue Apr 18 09:46:51 2023 +0200

    PCI: rockchip: Add poll and timeout to wait for PHY PLLs to be locked
    
    commit 9dd3c7c4c8c3f7f010d9cdb7c3f42506d93c9527 upstream.
    
    The RK3399 PCIe controller should wait until the PHY PLLs are locked.
    Add poll and timeout to wait for PHY PLLs to be locked. If they cannot
    be locked generate error message and jump to error handler. Accessing
    registers in the PHY clock domain when PLLs are not locked causes hang
    The PHY PLLs status is checked through a side channel register.
    This is documented in the TRM section 17.5.8.1 "PCIe Initialization
    Sequence".
    
    Link: https://lore.kernel.org/r/20230418074700.1083505-5-rick.wertenbroek@gmail.com
    Fixes: cf590b078391 ("PCI: rockchip: Add EP driver for Rockchip PCIe controller")
    Tested-by: Damien Le Moal <dlemoal@kernel.org>
    Signed-off-by: Rick Wertenbroek <rick.wertenbroek@gmail.com>
    Signed-off-by: Lorenzo Pieralisi <lpieralisi@kernel.org>
    Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

PCI: rockchip: Assert PCI Configuration Enable bit after probe [+ + +]
Author: Rick Wertenbroek <rick.wertenbroek@gmail.com>
Date:   Tue Apr 18 09:46:50 2023 +0200

    PCI: rockchip: Assert PCI Configuration Enable bit after probe
    
    commit f397fd4ac1fa3afcabd8cee030f953ccaed2a364 upstream.
    
    Assert PCI Configuration Enable bit after probe. When this bit is left to
    0 in the endpoint mode, the RK3399 PCIe endpoint core will generate
    configuration request retry status (CRS) messages back to the root complex.
    Assert this bit after probe to allow the RK3399 PCIe endpoint core to reply
    to configuration requests from the root complex.
    This is documented in section 17.5.8.1.2 of the RK3399 TRM.
    
    Link: https://lore.kernel.org/r/20230418074700.1083505-4-rick.wertenbroek@gmail.com
    Fixes: cf590b078391 ("PCI: rockchip: Add EP driver for Rockchip PCIe controller")
    Tested-by: Damien Le Moal <dlemoal@kernel.org>
    Signed-off-by: Rick Wertenbroek <rick.wertenbroek@gmail.com>
    Signed-off-by: Lorenzo Pieralisi <lpieralisi@kernel.org>
    Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

PCI: rockchip: Fix legacy IRQ generation for RK3399 PCIe endpoint core [+ + +]
Author: Rick Wertenbroek <rick.wertenbroek@gmail.com>
Date:   Tue Apr 18 09:46:54 2023 +0200

    PCI: rockchip: Fix legacy IRQ generation for RK3399 PCIe endpoint core
    
    commit 166e89d99dd85a856343cca51eee781b793801f2 upstream.
    
    Fix legacy IRQ generation for RK3399 PCIe endpoint core according to
    the technical reference manual (TRM). Assert and deassert legacy
    interrupt (INTx) through the legacy interrupt control register
    ("PCIE_CLIENT_LEGACY_INT_CTRL") instead of manually generating a PCIe
    message. The generation of the legacy interrupt was tested and validated
    with the PCIe endpoint test driver.
    
    Link: https://lore.kernel.org/r/20230418074700.1083505-8-rick.wertenbroek@gmail.com
    Fixes: cf590b078391 ("PCI: rockchip: Add EP driver for Rockchip PCIe controller")
    Tested-by: Damien Le Moal <dlemoal@kernel.org>
    Signed-off-by: Rick Wertenbroek <rick.wertenbroek@gmail.com>
    Signed-off-by: Lorenzo Pieralisi <lpieralisi@kernel.org>
    Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

PCI: rockchip: Set address alignment for endpoint mode [+ + +]
Author: Damien Le Moal <dlemoal@kernel.org>
Date:   Tue Apr 18 09:46:58 2023 +0200

    PCI: rockchip: Set address alignment for endpoint mode
    
    commit 7e6689b34a815bd379dfdbe9855d36f395ef056c upstream.
    
    The address translation unit of the rockchip EP controller does not use
    the lower 8 bits of a PCIe-space address to map local memory. Thus we
    must set the align feature field to 256 to let the user know about this
    constraint.
    
    Link: https://lore.kernel.org/r/20230418074700.1083505-12-rick.wertenbroek@gmail.com
    Fixes: cf590b078391 ("PCI: rockchip: Add EP driver for Rockchip PCIe controller")
    Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
    Signed-off-by: Rick Wertenbroek <rick.wertenbroek@gmail.com>
    Signed-off-by: Lorenzo Pieralisi <lpieralisi@kernel.org>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

PCI: rockchip: Use u32 variable to access 32-bit registers [+ + +]
Author: Rick Wertenbroek <rick.wertenbroek@gmail.com>
Date:   Tue Apr 18 09:46:56 2023 +0200

    PCI: rockchip: Use u32 variable to access 32-bit registers
    
    commit 8962b2cb39119cbda4fc69a1f83957824f102f81 upstream.
    
    Previously u16 variables were used to access 32-bit registers, this
    resulted in not all of the data being read from the registers. Also
    the left shift of more than 16-bits would result in moving data out
    of the variable. Use u32 variables to access 32-bit registers
    
    Link: https://lore.kernel.org/r/20230418074700.1083505-10-rick.wertenbroek@gmail.com
    Fixes: cf590b078391 ("PCI: rockchip: Add EP driver for Rockchip PCIe controller")
    Tested-by: Damien Le Moal <dlemoal@kernel.org>
    Signed-off-by: Rick Wertenbroek <rick.wertenbroek@gmail.com>
    Signed-off-by: Lorenzo Pieralisi <lpieralisi@kernel.org>
    Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

PCI: rockchip: Write PCI Device ID to correct register [+ + +]
Author: Rick Wertenbroek <rick.wertenbroek@gmail.com>
Date:   Tue Apr 18 09:46:49 2023 +0200

    PCI: rockchip: Write PCI Device ID to correct register
    
    commit 1f1c42ece18de365c976a060f3c8eb481b038e3a upstream.
    
    Write PCI Device ID (DID) to the correct register. The Device ID was not
    updated through the correct register. Device ID was written to a read-only
    register and therefore did not work. The Device ID is now set through the
    correct register. This is documented in the RK3399 TRM section 17.6.6.1.1
    
    Link: https://lore.kernel.org/r/20230418074700.1083505-3-rick.wertenbroek@gmail.com
    Fixes: cf590b078391 ("PCI: rockchip: Add EP driver for Rockchip PCIe controller")
    Tested-by: Damien Le Moal <dlemoal@kernel.org>
    Signed-off-by: Rick Wertenbroek <rick.wertenbroek@gmail.com>
    Signed-off-by: Lorenzo Pieralisi <lpieralisi@kernel.org>
    Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
perf bench: Add missing setlocale() call to allow usage of %'d style formatting [+ + +]
Author: Arnaldo Carvalho de Melo <acme@redhat.com>
Date:   Fri Jun 2 15:38:25 2023 -0300

    perf bench: Add missing setlocale() call to allow usage of %'d style formatting
    
    [ Upstream commit 16203e9cd01896b4244100a8e3fb9f6e612ab2b1 ]
    
    Without this we were not getting the thousands separator for big
    numbers.
    
    Noticed while developing 'perf bench uprobe', but the use of %' predates
    that, for instance 'perf bench syscall' uses it.
    
    Before:
    
      # perf bench uprobe all
      # Running uprobe/baseline benchmark...
      # Executed 1000 usleep(1000) calls
           Total time: 1054082243ns
    
       1054082.243000 nsecs/op
    
      #
    
    After:
    
      # perf bench uprobe all
      # Running uprobe/baseline benchmark...
      # Executed 1,000 usleep(1000) calls
           Total time: 1,053,715,144ns
    
       1,053,715.144000 nsecs/op
    
      #
    
    Fixes: c2a08203052f8975 ("perf bench: Add basic syscall benchmark")
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Andre Fredette <anfredet@redhat.com>
    Cc: Clark Williams <williams@redhat.com>
    Cc: Dave Tucker <datucker@redhat.com>
    Cc: Davidlohr Bueso <dave@stgolabs.net>
    Cc: Derek Barbosa <debarbos@redhat.com>
    Cc: Ian Rogers <irogers@google.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Tiezhu Yang <yangtiezhu@loongson.cn>
    Link: https://lore.kernel.org/lkml/ZH3lcepZ4tBYr1jv@kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

perf bench: Use unbuffered output when pipe/tee'ing to a file [+ + +]
Author: Sohaib Mohamed <sohaib.amhmd@gmail.com>
Date:   Fri Nov 19 08:14:08 2021 +0200

    perf bench: Use unbuffered output when pipe/tee'ing to a file
    
    [ Upstream commit f0a29c9647ff8bbb424641f79bc1894e83dec218 ]
    
    The output of 'perf bench' gets buffered when I pipe it to a file or to
    tee, in such a way that I can see it only at the end.
    
    E.g.
    
      $ perf bench internals synthesize -t
      < output comes out fine after each test run >
    
      $ perf bench internals synthesize -t | tee file.txt
      < output comes out only at the end of all tests >
    
    This patch resolves this issue for 'bench' and 'test' subcommands.
    
    See, also:
    
      $ perf bench mem all | tee file.txt
      $ perf bench sched all | tee file.txt
      $ perf bench internals all -t | tee file.txt
      $ perf bench internals all | tee file.txt
    
    Committer testing:
    
    It really gets staggered, i.e. outputs in bursts, when the buffer fills
    up and has to be drained to make up space for more output.
    
    Suggested-by: Riccardo Mancini <rickyman7@gmail.com>
    Signed-off-by: Sohaib Mohamed <sohaib.amhmd@gmail.com>
    Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Acked-by: Jiri Olsa <jolsa@redhat.com>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Fabian Hemmer <copy@copy.sh>
    Cc: Ian Rogers <irogers@google.com>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Link: http://lore.kernel.org/lkml/20211119061409.78004-1-sohaib.amhmd@gmail.com
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Stable-dep-of: 16203e9cd018 ("perf bench: Add missing setlocale() call to allow usage of %'d style formatting")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
perf dwarf-aux: Fix off-by-one in die_get_varname() [+ + +]
Author: Namhyung Kim <namhyung@kernel.org>
Date:   Mon Jun 12 16:41:01 2023 -0700

    perf dwarf-aux: Fix off-by-one in die_get_varname()
    
    [ Upstream commit 3abfcfd847717d232e36963f31a361747c388fe7 ]
    
    The die_get_varname() returns "(unknown_type)" string if it failed to
    find a type for the variable.  But it had a space before the opening
    parenthesis and it made the closing parenthesis cut off due to the
    off-by-one in the string length (14).
    
    Signed-off-by: Namhyung Kim <namhyung@kernel.org>
    Fixes: 88fd633cdfa19060 ("perf probe: No need to use formatting strbuf method")
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Ian Rogers <irogers@google.com>
    Cc: Ingo Molnar <mingo@kernel.org>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Link: https://lore.kernel.org/r/20230612234102.3909116-1-namhyung@kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
perf probe: Add test for regression introduced by switch to die_get_decl_file() [+ + +]
Author: Georg Müller <georgmueller@gmx.net>
Date:   Wed Jun 28 10:45:50 2023 +0200

    perf probe: Add test for regression introduced by switch to die_get_decl_file()
    
    commit 56cbeacf143530576905623ac72ae0964f3293a6 upstream.
    
    This patch adds a test to validate that 'perf probe' works for binaries
    where DWARF info is split into multiple CUs
    
    Signed-off-by: Georg Müller <georgmueller@gmx.net>
    Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Ian Rogers <irogers@google.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: regressions@lists.linux.dev
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20230628084551.1860532-5-georgmueller@gmx.net
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
perf script: Fix allocation of evsel->priv related to per-event dump files [+ + +]
Author: Arnaldo Carvalho de Melo <acme@redhat.com>
Date:   Tue Jun 6 16:11:10 2023 -0300

    perf script: Fix allocation of evsel->priv related to per-event dump files
    
    [ Upstream commit 36d3e4138e1b6cc9ab179f3f397b5548f8b1eaae ]
    
    When printing output we may want to generate per event files, where the
    --per-event-dump option should be used, creating perf.data.EVENT.dump
    files instead of printing to stdout.
    
    The callback thar processes event thus expects that evsel->priv->fp
    should point to either the per-event FILE descriptor or to stdout.
    
    The a3af66f51bd0bca7 ("perf script: Fix crash because of missing
    evsel->priv") changeset fixed a case where evsel->priv wasn't setup,
    thus set to NULL, causing a segfault when trying to access
    evsel->priv->fp.
    
    But it did it for the non --per-event-dump case by allocating a 'struct
    perf_evsel_script' just to set its ->fp to stdout.
    
    Since evsel->priv is only freed when --per-event-dump is used, we ended
    up with a memory leak, detected using ASAN.
    
    Fix it by using the same method as perf_script__setup_per_event_dump(),
    and reuse that static 'struct perf_evsel_script'.
    
    Also check if evsel_script__new() failed.
    
    Fixes: a3af66f51bd0bca7 ("perf script: Fix crash because of missing evsel->priv")
    Reported-by: Ian Rogers <irogers@google.com>
    Tested-by: Ian Rogers <irogers@google.com>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Ravi Bangoria <ravi.bangoria@linux.ibm.com>
    Link: https://lore.kernel.org/lkml/ZH+F0wGAWV14zvMP@kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

perf script: Fixup 'struct evsel_script' method prefix [+ + +]
Author: Arnaldo Carvalho de Melo <acme@redhat.com>
Date:   Tue Mar 9 08:59:21 2021 -0300

    perf script: Fixup 'struct evsel_script' method prefix
    
    [ Upstream commit 297e69bfa4c7aa27259dd456af1377e868337043 ]
    
    They all operate on 'struct evsel_script' instances, so should be
    prefixed with evsel_script__, not with perf_evsel_script__.
    
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Stable-dep-of: 36d3e4138e1b ("perf script: Fix allocation of evsel->priv related to per-event dump files")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
perf/arm-cmn: Fix DTC reset [+ + +]
Author: Robin Murphy <robin.murphy@arm.com>
Date:   Wed May 24 17:44:32 2023 +0100

    perf/arm-cmn: Fix DTC reset
    
    [ Upstream commit 71746c995cac92fcf6a65661b51211cf2009d7f0 ]
    
    It turns out that my naive DTC reset logic fails to work as intended,
    since, after checking with the hardware designers, the PMU actually
    needs to be fully enabled in order to correctly clear any pending
    overflows. Therefore, invert the sequence to start with turning on both
    enables so that we can reliably get the DTCs into a known state, then
    moving to our normal counters-stopped state from there. Since all the
    DTM counters have already been unpaired during the initial discovery
    pass, we just need to additionally reset the cycle counters to ensure
    that no other unexpected overflows occur during this period.
    
    Fixes: 0ba64770a2f2 ("perf: Add Arm CMN-600 PMU driver")
    Reported-by: Geoff Blake <blakgeof@amazon.com>
    Signed-off-by: Robin Murphy <robin.murphy@arm.com>
    Link: https://lore.kernel.org/r/0ea4559261ea394f827c9aee5168c77a60aaee03.1684946389.git.robin.murphy@arm.com
    Signed-off-by: Will Deacon <will@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
perf/ibs: Fix interface via core pmu events [+ + +]
Author: Ravi Bangoria <ravi.bangoria@amd.com>
Date:   Thu May 4 16:30:01 2023 +0530

    perf/ibs: Fix interface via core pmu events
    
    [ Upstream commit 2fad201fe38ff9a692acedb1990ece2c52a29f95 ]
    
    Although, IBS pmus can be invoked via their own interface, indirect
    IBS invocation via core pmu events is also supported with fixed set
    of events: cpu-cycles:p, r076:p (same as cpu-cycles:p) and r0C1:p
    (micro-ops) for user convenience.
    
    This indirect IBS invocation is broken since commit 66d258c5b048
    ("perf/core: Optimize perf_init_event()"), which added RAW pmu under
    'pmu_idr' list and thus if event_init() fails with RAW pmu, it started
    returning error instead of trying other pmus.
    
    Forward precise events from core pmu to IBS by overwriting 'type' and
    'config' in the kernel copy of perf_event_attr. Overwriting will cause
    perf_init_event() to retry with updated 'type' and 'config', which will
    automatically forward event to IBS pmu.
    
    Without patch:
      $ sudo ./perf record -C 0 -e r076:p -- sleep 1
      Error:
      The r076:p event is not supported.
    
    With patch:
      $ sudo ./perf record -C 0 -e r076:p -- sleep 1
      [ perf record: Woken up 1 times to write data ]
      [ perf record: Captured and wrote 0.341 MB perf.data (37 samples) ]
    
    Fixes: 66d258c5b048 ("perf/core: Optimize perf_init_event()")
    Reported-by: Stephane Eranian <eranian@google.com>
    Signed-off-by: Ravi Bangoria <ravi.bangoria@amd.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Link: https://lkml.kernel.org/r/20230504110003.2548-3-ravi.bangoria@amd.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
phy: tegra: xusb: check return value of devm_kzalloc() [+ + +]
Author: Claudiu Beznea <claudiu.beznea@microchip.com>
Date:   Wed May 31 10:39:50 2023 +0300

    phy: tegra: xusb: check return value of devm_kzalloc()
    
    [ Upstream commit 44faada0f38fc333d392af04c343b0e23f8f5d81 ]
    
    devm_kzalloc() returns a pointer to dynamically allocated memory.
    Pointer could be NULL in case allocation fails. Check pointer validity.
    Identified with coccinelle (kmerr.cocci script).
    
    Fixes: f67213cee2b3 ("phy: tegra: xusb: Add usb-role-switch support")
    Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
    Acked-by: Thierry Reding <treding@nvidia.com>
    Link: https://lore.kernel.org/r/20230531073950.145339-1-claudiu.beznea@microchip.com
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

phy: tegra: xusb: Clear the driver reference in usb-phy dev [+ + +]
Author: EJ Hsu <ejh@nvidia.com>
Date:   Fri Jun 9 14:29:32 2023 +0800

    phy: tegra: xusb: Clear the driver reference in usb-phy dev
    
    commit c0c2fcb1325d0d4f3b322b5ee49385f8eca2560d upstream.
    
    For the dual-role port, it will assign the phy dev to usb-phy dev and
    use the port dev driver as the dev driver of usb-phy.
    
    When we try to destroy the port dev, it will destroy its dev driver
    as well. But we did not remove the reference from usb-phy dev. This
    might cause the use-after-free issue in KASAN.
    
    Fixes: e8f7d2f409a1 ("phy: tegra: xusb: Add usb-phy support")
    Cc: stable@vger.kernel.org
    
    Signed-off-by: EJ Hsu <ejh@nvidia.com>
    Signed-off-by: Haotien Hsu <haotienh@nvidia.com>
    Acked-by: Thierry Reding <treding@nvidia.com>
    Acked-by: Jon Hunter <jonathanh@nvidia.com>
    Link: https://lore.kernel.org/r/20230609062932.3276509-1-haotienh@nvidia.com
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
pinctrl: amd: Detect internal GPIO0 debounce handling [+ + +]
Author: Mario Limonciello <mario.limonciello@amd.com>
Date:   Fri Apr 21 07:06:21 2023 -0500

    pinctrl: amd: Detect internal GPIO0 debounce handling
    
    commit 968ab9261627fa305307e3935ca1a32fcddd36cb upstream.
    
    commit 4e5a04be88fe ("pinctrl: amd: disable and mask interrupts on probe")
    had a mistake in loop iteration 63 that it would clear offset 0xFC instead
    of 0x100.  Offset 0xFC is actually `WAKE_INT_MASTER_REG`.  This was
    clearing bits 13 and 15 from the register which significantly changed the
    expected handling for some platforms for GPIO0.
    
    commit b26cd9325be4 ("pinctrl: amd: Disable and mask interrupts on resume")
    actually fixed this bug, but lead to regressions on Lenovo Z13 and some
    other systems.  This is because there was no handling in the driver for bit
    15 debounce behavior.
    
    Quoting a public BKDG:
    ```
    EnWinBlueBtn. Read-write. Reset: 0. 0=GPIO0 detect debounced power button;
    Power button override is 4 seconds. 1=GPIO0 detect debounced power button
    in S3/S5/S0i3, and detect "pressed less than 2 seconds" and "pressed 2~10
    seconds" in S0; Power button override is 10 seconds
    ```
    
    Cross referencing the same master register in Windows it's obvious that
    Windows doesn't use debounce values in this configuration.  So align the
    Linux driver to do this as well.  This fixes wake on lid when
    WAKE_INT_MASTER_REG is properly programmed.
    
    Cc: stable@vger.kernel.org
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=217315
    Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
    Link: https://lore.kernel.org/r/20230421120625.3366-2-mario.limonciello@amd.com
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

pinctrl: amd: Fix mistake in handling clearing pins at startup [+ + +]
Author: Mario Limonciello <mario.limonciello@amd.com>
Date:   Fri Apr 21 07:06:22 2023 -0500

    pinctrl: amd: Fix mistake in handling clearing pins at startup
    
    commit a855724dc08b8cb0c13ab1e065a4922f1e5a7552 upstream.
    
    commit 4e5a04be88fe ("pinctrl: amd: disable and mask interrupts on probe")
    had a mistake in loop iteration 63 that it would clear offset 0xFC instead
    of 0x100.  Offset 0xFC is actually `WAKE_INT_MASTER_REG`.  This was
    clearing bits 13 and 15 from the register which significantly changed the
    expected handling for some platforms for GPIO0.
    
    Cc: stable@vger.kernel.org
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=217315
    Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
    Link: https://lore.kernel.org/r/20230421120625.3366-3-mario.limonciello@amd.com
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

pinctrl: amd: Only use special debounce behavior for GPIO 0 [+ + +]
Author: Mario Limonciello <mario.limonciello@amd.com>
Date:   Wed Jul 5 08:30:02 2023 -0500

    pinctrl: amd: Only use special debounce behavior for GPIO 0
    
    commit 0d5ace1a07f7e846d0f6d972af60d05515599d0b upstream.
    
    It's uncommon to use debounce on any other pin, but technically
    we should only set debounce to 0 when working off GPIO0.
    
    Cc: stable@vger.kernel.org
    Tested-by: Jan Visser <starquake@linuxeverywhere.org>
    Fixes: 968ab9261627 ("pinctrl: amd: Detect internal GPIO0 debounce handling")
    Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
    Link: https://lore.kernel.org/r/20230705133005.577-2-mario.limonciello@amd.com
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

pinctrl: amd: Use amd_pinconf_set() for all config options [+ + +]
Author: Mario Limonciello <mario.limonciello@amd.com>
Date:   Wed Jul 5 08:30:03 2023 -0500

    pinctrl: amd: Use amd_pinconf_set() for all config options
    
    [ Upstream commit 635a750d958e158e17af0f524bedc484b27fbb93 ]
    
    On ASUS TUF A16 it is reported that the ITE5570 ACPI device connected to
    GPIO 7 is causing an interrupt storm.  This issue doesn't happen on
    Windows.
    
    Comparing the GPIO register configuration between Windows and Linux
    bit 20 has been configured as a pull up on Windows, but not on Linux.
    Checking GPIO declaration from the firmware it is clear it *should* have
    been a pull up on Linux as well.
    
    ```
    GpioInt (Level, ActiveLow, Exclusive, PullUp, 0x0000,
             "\\_SB.GPIO", 0x00, ResourceConsumer, ,)
    {   // Pin list
    0x0007
    }
    ```
    
    On Linux amd_gpio_set_config() is currently only used for programming
    the debounce. Actually the GPIO core calls it with all the arguments
    that are supported by a GPIO, pinctrl-amd just responds `-ENOTSUPP`.
    
    To solve this issue expand amd_gpio_set_config() to support the other
    arguments amd_pinconf_set() supports, namely `PIN_CONFIG_BIAS_PULL_DOWN`,
    `PIN_CONFIG_BIAS_PULL_UP`, and `PIN_CONFIG_DRIVE_STRENGTH`.
    
    Reported-by: Nik P <npliashechnikov@gmail.com>
    Reported-by: Nathan Schulte <nmschulte@gmail.com>
    Reported-by: Friedrich Vock <friedrich.vock@gmx.de>
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=217336
    Reported-by: dridri85@gmail.com
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=217493
    Link: https://lore.kernel.org/linux-input/20230530154058.17594-1-friedrich.vock@gmx.de/
    Tested-by: Jan Visser <starquake@linuxeverywhere.org>
    Fixes: 2956b5d94a76 ("pinctrl / gpio: Introduce .set_config() callback for GPIO chips")
    Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
    Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Link: https://lore.kernel.org/r/20230705133005.577-3-mario.limonciello@amd.com
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

pinctrl: at91-pio4: check return value of devm_kasprintf() [+ + +]
Author: Claudiu Beznea <claudiu.beznea@microchip.com>
Date:   Thu Jun 15 13:53:33 2023 +0300

    pinctrl: at91-pio4: check return value of devm_kasprintf()
    
    [ Upstream commit f6fd5d4ff8ca0b24cee1af4130bcb1fa96b61aa0 ]
    
    devm_kasprintf() returns a pointer to dynamically allocated memory.
    Pointer could be NULL in case allocation fails. Check pointer validity.
    Identified with coccinelle (kmerr.cocci script).
    
    Fixes: 776180848b57 ("pinctrl: introduce driver for Atmel PIO4 controller")
    Depends-on: 1c4e5c470a56 ("pinctrl: at91: use devm_kasprintf() to avoid potential leaks")
    Depends-on: 5a8f9cf269e8 ("pinctrl: at91-pio4: use proper format specifier for unsigned int")
    Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
    Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Link: https://lore.kernel.org/r/20230615105333.585304-4-claudiu.beznea@microchip.com
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

pinctrl: bcm2835: Handle gpiochip_add_pin_range() errors [+ + +]
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Sun Apr 16 23:43:41 2023 +0200

    pinctrl: bcm2835: Handle gpiochip_add_pin_range() errors
    
    [ Upstream commit cdf7e616120065007687fe1df0412154f259daec ]
    
    gpiochip_add_pin_range() can fail, so better return its error code than
    a hard coded '0'.
    
    Fixes: d2b67744fd99 ("pinctrl: bcm2835: implement hook for missing gpio-ranges")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Link: https://lore.kernel.org/r/98c3b5890bb72415145c9fe4e1d974711edae376.1681681402.git.christophe.jaillet@wanadoo.fr
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

pinctrl: cherryview: Return correct value if pin in push-pull mode [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Mon Jun 5 17:37:34 2023 +0300

    pinctrl: cherryview: Return correct value if pin in push-pull mode
    
    [ Upstream commit 5835196a17be5cfdcad0b617f90cf4abe16951a4 ]
    
    Currently the getter returns ENOTSUPP on pin configured in
    the push-pull mode. Fix this by adding the missed switch case.
    
    Fixes: ccdf81d08dbe ("pinctrl: cherryview: add option to set open-drain pin config")
    Fixes: 6e08d6bbebeb ("pinctrl: Add Intel Cherryview/Braswell pin controller support")
    Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
platform/x86: wmi: Break possible infinite loop when parsing GUID [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Wed Jun 21 18:11:54 2023 +0300

    platform/x86: wmi: Break possible infinite loop when parsing GUID
    
    [ Upstream commit 028e6e204ace1f080cfeacd72c50397eb8ae8883 ]
    
    The while-loop may break on one of the two conditions, either ID string
    is empty or GUID matches. The second one, may never be reached if the
    parsed string is not correct GUID. In such a case the loop will never
    advance to check the next ID.
    
    Break possible infinite loop by factoring out guid_parse_and_compare()
    helper which may be moved to the generic header for everyone later on
    and preventing from similar mistake in the future.
    
    Interestingly that firstly it appeared when WMI was turned into a bus
    driver, but later when duplicated GUIDs were checked, the while-loop
    has been replaced by for-loop and hence no mistake made again.
    
    Fixes: a48e23385fcf ("platform/x86: wmi: add context pointer field to struct wmi_device_id")
    Fixes: 844af950da94 ("platform/x86: wmi: Turn WMI into a bus driver")
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Link: https://lore.kernel.org/r/20230621151155.78279-1-andriy.shevchenko@linux.intel.com
    Tested-by: Armin Wolf <W_Armin@gmx.de>
    Reviewed-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

platform/x86: wmi: move variables [+ + +]
Author: Barnabás Pőcze <pobrn@protonmail.com>
Date:   Sat Sep 4 17:56:10 2021 +0000

    platform/x86: wmi: move variables
    
    [ Upstream commit f5431bf1e6781e876bdc8ae10fb1e7da6f1aa9b5 ]
    
    Move some variables in order to keep them
    in the narrowest possible scope.
    
    Signed-off-by: Barnabás Pőcze <pobrn@protonmail.com>
    Link: https://lore.kernel.org/r/20210904175450.156801-22-pobrn@protonmail.com
    Reviewed-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Stable-dep-of: 028e6e204ace ("platform/x86: wmi: Break possible infinite loop when parsing GUID")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

platform/x86: wmi: remove unnecessary argument [+ + +]
Author: Barnabás Pőcze <pobrn@protonmail.com>
Date:   Sat Sep 4 17:55:16 2021 +0000

    platform/x86: wmi: remove unnecessary argument
    
    [ Upstream commit 84eacf7e6413d5e2d2f4f9dddf9216c18a3631cf ]
    
    The GUID block is available for `wmi_create_device()`
    through `wblock->gblock`. Use that consistently in
    the function instead of using a mix of `gblock` and
    `wblock->gblock`.
    
    Signed-off-by: Barnabás Pőcze <pobrn@protonmail.com>
    Link: https://lore.kernel.org/r/20210904175450.156801-8-pobrn@protonmail.com
    Reviewed-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Stable-dep-of: 028e6e204ace ("platform/x86: wmi: Break possible infinite loop when parsing GUID")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

platform/x86: wmi: use guid_t and guid_equal() [+ + +]
Author: Barnabás Pőcze <pobrn@protonmail.com>
Date:   Sat Sep 4 17:55:39 2021 +0000

    platform/x86: wmi: use guid_t and guid_equal()
    
    [ Upstream commit 67f472fdacf4a691b1c3c20c27800b23ce31e2de ]
    
    Instead of hard-coding a 16 long byte array,
    use the available `guid_t` type and related methods.
    
    Signed-off-by: Barnabás Pőcze <pobrn@protonmail.com>
    Link: https://lore.kernel.org/r/20210904175450.156801-15-pobrn@protonmail.com
    Reviewed-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Stable-dep-of: 028e6e204ace ("platform/x86: wmi: Break possible infinite loop when parsing GUID")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
PM: domains: fix integer overflow issues in genpd_parse_state() [+ + +]
Author: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
Date:   Tue Apr 18 06:07:43 2023 -0700

    PM: domains: fix integer overflow issues in genpd_parse_state()
    
    [ Upstream commit e5d1c8722083f0332dcd3c85fa1273d85fb6bed8 ]
    
    Currently, while calculating residency and latency values, right
    operands may overflow if resulting values are big enough.
    
    To prevent this, albeit unlikely case, play it safe and convert
    right operands to left ones' type s64.
    
    Found by Linux Verification Center (linuxtesting.org) with static
    analysis tool SVACE.
    
    Fixes: 30f604283e05 ("PM / Domains: Allow domain power states to be read from DT")
    Signed-off-by: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
    Acked-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
posix-timers: Ensure timer ID search-loop limit is valid [+ + +]
Author: Thomas Gleixner <tglx@linutronix.de>
Date:   Thu Jun 1 20:58:47 2023 +0200

    posix-timers: Ensure timer ID search-loop limit is valid
    
    [ Upstream commit 8ce8849dd1e78dadcee0ec9acbd259d239b7069f ]
    
    posix_timer_add() tries to allocate a posix timer ID by starting from the
    cached ID which was stored by the last successful allocation.
    
    This is done in a loop searching the ID space for a free slot one by
    one. The loop has to terminate when the search wrapped around to the
    starting point.
    
    But that's racy vs. establishing the starting point. That is read out
    lockless, which leads to the following problem:
    
    CPU0                               CPU1
    posix_timer_add()
      start = sig->posix_timer_id;
      lock(hash_lock);
      ...                              posix_timer_add()
      if (++sig->posix_timer_id < 0)
                                         start = sig->posix_timer_id;
         sig->posix_timer_id = 0;
    
    So CPU1 can observe a negative start value, i.e. -1, and the loop break
    never happens because the condition can never be true:
    
      if (sig->posix_timer_id == start)
         break;
    
    While this is unlikely to ever turn into an endless loop as the ID space is
    huge (INT_MAX), the racy read of the start value caught the attention of
    KCSAN and Dmitry unearthed that incorrectness.
    
    Rewrite it so that all id operations are under the hash lock.
    
    Reported-by: syzbot+5c54bd3eb218bb595aa9@syzkaller.appspotmail.com
    Reported-by: Dmitry Vyukov <dvyukov@google.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
    Link: https://lore.kernel.org/r/87bkhzdn6g.ffs@tglx
    Signed-off-by: Sasha Levin <sashal@kernel.org>

posix-timers: Prevent RT livelock in itimer_delete() [+ + +]
Author: Thomas Gleixner <tglx@linutronix.de>
Date:   Thu Jun 1 22:16:34 2023 +0200

    posix-timers: Prevent RT livelock in itimer_delete()
    
    [ Upstream commit 9d9e522010eb5685d8b53e8a24320653d9d4cbbf ]
    
    itimer_delete() has a retry loop when the timer is concurrently expired. On
    non-RT kernels this just spin-waits until the timer callback has completed,
    except for posix CPU timers which have HAVE_POSIX_CPU_TIMERS_TASK_WORK
    enabled.
    
    In that case and on RT kernels the existing task could live lock when
    preempting the task which does the timer delivery.
    
    Replace spin_unlock() with an invocation of timer_wait_running() to handle
    it the same way as the other retry loops in the posix timer code.
    
    Fixes: ec8f954a40da ("posix-timers: Use a callback for cancel synchronization on PREEMPT_RT")
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
    Link: https://lore.kernel.org/r/87v8g7c50d.ffs@tglx
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
powercap: RAPL: Fix CONFIG_IOSF_MBI dependency [+ + +]
Author: Zhang Rui <rui.zhang@intel.com>
Date:   Tue Jun 6 22:00:00 2023 +0800

    powercap: RAPL: Fix CONFIG_IOSF_MBI dependency
    
    [ Upstream commit 4658fe81b3f8afe8adf37734ec5fe595d90415c6 ]
    
    After commit 3382388d7148 ("intel_rapl: abstract RAPL common code"),
    accessing to IOSF_MBI interface is done in the RAPL common code.
    
    Thus it is the CONFIG_INTEL_RAPL_CORE that has dependency of
    CONFIG_IOSF_MBI, while CONFIG_INTEL_RAPL_MSR does not.
    
    This problem was not exposed previously because all the previous RAPL
    common code users, aka, the RAPL MSR and MMIO I/F drivers, have
    CONFIG_IOSF_MBI selected.
    
    Fix the CONFIG_IOSF_MBI dependency in RAPL code. This also fixes a build
    time failure when the RAPL TPMI I/F driver is introduced without
    selecting CONFIG_IOSF_MBI.
    
    x86_64-linux-ld: vmlinux.o: in function `set_floor_freq_atom':
    intel_rapl_common.c:(.text+0x2dac9b8): undefined reference to `iosf_mbi_write'
    x86_64-linux-ld: intel_rapl_common.c:(.text+0x2daca66): undefined reference to `iosf_mbi_read'
    
    Reference to iosf_mbi.h is also removed from the RAPL MSR I/F driver.
    
    Fixes: 3382388d7148 ("intel_rapl: abstract RAPL common code")
    Reported-by: Arnd Bergmann <arnd@arndb.de>
    Link: https://lore.kernel.org/all/20230601213246.3271412-1-arnd@kernel.org
    Signed-off-by: Zhang Rui <rui.zhang@intel.com>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
powerpc/book3s64/mm: Fix DirectMap stats in /proc/meminfo [+ + +]
Author: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
Date:   Fri Jun 16 16:38:13 2023 +0530

    powerpc/book3s64/mm: Fix DirectMap stats in /proc/meminfo
    
    [ Upstream commit 0da90af431abc3f497a38ec9ef6e43b0d0dabe80 ]
    
    On memory unplug reduce DirectMap page count correctly.
    root@ubuntu-guest:# grep Direct /proc/meminfo
    DirectMap4k:           0 kB
    DirectMap64k:           0 kB
    DirectMap2M:    115343360 kB
    DirectMap1G:           0 kB
    
    Before fix:
    root@ubuntu-guest:# ndctl disable-namespace all
    disabled 1 namespace
    root@ubuntu-guest:# grep Direct /proc/meminfo
    DirectMap4k:           0 kB
    DirectMap64k:           0 kB
    DirectMap2M:    115343360 kB
    DirectMap1G:           0 kB
    
    After fix:
    root@ubuntu-guest:# ndctl disable-namespace all
    disabled 1 namespace
    root@ubuntu-guest:# grep Direct /proc/meminfo
    DirectMap4k:           0 kB
    DirectMap64k:           0 kB
    DirectMap2M:    104857600 kB
    DirectMap1G:           0 kB
    
    Fixes: a2dc009afa9a ("powerpc/mm/book3s/radix: Add mapping statistics")
    Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
    Tested-by: Sachin Sant <sachinp@linux.ibm.com <mailto:sachinp@linux.ibm.com>>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://msgid.link/20230616110826.344417-4-aneesh.kumar@linux.ibm.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
powerpc/mm/dax: Fix the condition when checking if altmap vmemap can cross-boundary [+ + +]
Author: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
Date:   Fri Jun 16 16:38:15 2023 +0530

    powerpc/mm/dax: Fix the condition when checking if altmap vmemap can cross-boundary
    
    [ Upstream commit c8eebc4a99f15280654f23e914e746c40a516e50 ]
    
    Without this fix, the last subsection vmemmap can end up in memory even if
    the namespace is created with -M mem and has sufficient space in the altmap
    area.
    
    Fixes: cf387d9644d8 ("libnvdimm/altmap: Track namespace boundaries in altmap")
    Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
    Tested-by: Sachin Sant <sachinp@linux.ibm.com <mailto:sachinp@linux.ibm.com>>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://msgid.link/20230616110826.344417-6-aneesh.kumar@linux.ibm.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
powerpc/powernv/sriov: perform null check on iov before dereferencing iov [+ + +]
Author: Colin Ian King <colin.i.king@gmail.com>
Date:   Thu Jun 8 10:58:49 2023 +0100

    powerpc/powernv/sriov: perform null check on iov before dereferencing iov
    
    [ Upstream commit f4f913c980bc6abe0ccfe88fe3909c125afe4a2d ]
    
    Currently pointer iov is being dereferenced before the null check of iov
    which can lead to null pointer dereference errors. Fix this by moving the
    iov null check before the dereferencing.
    
    Detected using cppcheck static analysis:
    linux/arch/powerpc/platforms/powernv/pci-sriov.c:597:12: warning: Either
    the condition '!iov' is redundant or there is possible null pointer
    dereference: iov. [nullPointerRedundantCheck]
     num_vfs = iov->num_vfs;
               ^
    
    Fixes: 052da31d45fc ("powerpc/powernv/sriov: De-indent setup and teardown")
    Signed-off-by: Colin Ian King <colin.i.king@gmail.com>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://msgid.link/20230608095849.1147969-1-colin.i.king@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
powerpc: allow PPC_EARLY_DEBUG_CPM only when SERIAL_CPM=y [+ + +]
Author: Randy Dunlap <rdunlap@infradead.org>
Date:   Fri Jun 30 22:47:12 2023 -0700

    powerpc: allow PPC_EARLY_DEBUG_CPM only when SERIAL_CPM=y
    
    [ Upstream commit 39f49684036d24af800ff194c33c7b2653c591d7 ]
    
    In a randconfig with CONFIG_SERIAL_CPM=m and
    CONFIG_PPC_EARLY_DEBUG_CPM=y, there is a build error:
    ERROR: modpost: "udbg_putc" [drivers/tty/serial/cpm_uart/cpm_uart.ko] undefined!
    
    Prevent the build error by allowing PPC_EARLY_DEBUG_CPM only when
    SERIAL_CPM=y.
    
    Fixes: c374e00e17f1 ("[POWERPC] Add early debug console for CPM serial ports.")
    Signed-off-by: Randy Dunlap <rdunlap@infradead.org>
    Reviewed-by: Pali Rohár <pali@kernel.org>
    Reviewed-by: Christophe Leroy <christophe.leroy@csgroup.eu>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://msgid.link/20230701054714.30512-1-rdunlap@infradead.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

powerpc: Fail build if using recordmcount with binutils v2.37 [+ + +]
Author: Naveen N Rao <naveen@kernel.org>
Date:   Tue May 30 11:44:36 2023 +0530

    powerpc: Fail build if using recordmcount with binutils v2.37
    
    commit 25ea739ea1d4d3de41acc4f4eb2d1a97eee0eb75 upstream.
    
    binutils v2.37 drops unused section symbols, which prevents recordmcount
    from capturing mcount locations in sections that have no non-weak
    symbols. This results in a build failure with a message such as:
            Cannot find symbol for section 12: .text.perf_callchain_kernel.
            kernel/events/callchain.o: failed
    
    The change to binutils was reverted for v2.38, so this behavior is
    specific to binutils v2.37:
    https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=c09c8b42021180eee9495bd50d8b35e683d3901b
    
    Objtool is able to cope with such sections, so this issue is specific to
    recordmcount.
    
    Fail the build and print a warning if binutils v2.37 is detected and if
    we are using recordmcount.
    
    Cc: stable@vger.kernel.org
    Suggested-by: Joel Stanley <joel@jms.id.au>
    Signed-off-by: Naveen N Rao <naveen@kernel.org>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://msgid.link/20230530061436.56925-1-naveen@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
pptp: Fix fib lookup calls. [+ + +]
Author: Guillaume Nault <gnault@redhat.com>
Date:   Mon Jul 3 19:14:46 2023 +0200

    pptp: Fix fib lookup calls.
    
    [ Upstream commit 84bef5b6037c15180ef88ac4216dc621d16df1a6 ]
    
    PPTP uses pppox sockets (struct pppox_sock). These sockets don't embed
    an inet_sock structure, so it's invalid to call inet_sk() on them.
    
    Therefore, the ip_route_output_ports() call in pptp_connect() has two
    problems:
    
      * The tos variable is set with RT_CONN_FLAGS(sk), which calls
        inet_sk() on the pppox socket.
    
      * ip_route_output_ports() tries to retrieve routing flags using
        inet_sk_flowi_flags(), which is also going to call inet_sk() on the
        pppox socket.
    
    While PPTP doesn't use inet sockets, it's actually really layered on
    top of IP and therefore needs a proper way to do fib lookups. So let's
    define pptp_route_output() to get a struct rtable from a pptp socket.
    Let's also replace the ip_route_output_ports() call of pptp_xmit() for
    consistency.
    
    In practice, this means that:
    
      * pptp_connect() sets ->flowi4_tos and ->flowi4_flags to zero instead
        of using bits of unrelated struct pppox_sock fields.
    
      * pptp_xmit() now respects ->sk_mark and ->sk_uid.
    
      * pptp_xmit() now calls the security_sk_classify_flow() security
        hook, thus allowing to set ->flowic_secid.
    
      * pptp_xmit() now passes the pppox socket to xfrm_lookup_route().
    
    Found by code inspection.
    
    Fixes: 00959ade36ac ("PPTP: PPP over IPv4 (Point-to-Point Tunneling Protocol)")
    Signed-off-by: Guillaume Nault <gnault@redhat.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
pstore/ram: Add check for kstrdup [+ + +]
Author: Jiasheng Jiang <jiasheng@iscas.ac.cn>
Date:   Wed Jun 14 17:37:33 2023 +0800

    pstore/ram: Add check for kstrdup
    
    [ Upstream commit d97038d5ec2062733c1e016caf9baaf68cf64ea1 ]
    
    Add check for the return value of kstrdup() and return the error
    if it fails in order to avoid NULL pointer dereference.
    
    Fixes: e163fdb3f7f8 ("pstore/ram: Regularize prz label allocation lifetime")
    Signed-off-by: Jiasheng Jiang <jiasheng@iscas.ac.cn>
    Signed-off-by: Kees Cook <keescook@chromium.org>
    Link: https://lore.kernel.org/r/20230614093733.36048-1-jiasheng@iscas.ac.cn
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
pwm: imx-tpm: force 'real_period' to be zero in suspend [+ + +]
Author: Fancy Fang <chen.fang@nxp.com>
Date:   Fri May 5 14:58:39 2023 +0800

    pwm: imx-tpm: force 'real_period' to be zero in suspend
    
    [ Upstream commit 661dfb7f46298e53f6c3deaa772fa527aae86193 ]
    
    During suspend, all the tpm registers will lose values.
    So the 'real_period' value of struct 'imx_tpm_pwm_chip'
    should be forced to be zero to force the period update
    code can be executed after system resume back.
    
    Signed-off-by: Fancy Fang <chen.fang@nxp.com>
    Signed-off-by: Clark Wang <xiaoning.wang@nxp.com>
    Acked-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
    Fixes: 738a1cfec2ed ("pwm: Add i.MX TPM PWM driver support")
    Signed-off-by: Thierry Reding <thierry.reding@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

pwm: sysfs: Do not apply state to already disabled PWMs [+ + +]
Author: Marek Vasut <marex@denx.de>
Date:   Fri May 12 18:47:36 2023 +0200

    pwm: sysfs: Do not apply state to already disabled PWMs
    
    [ Upstream commit 38ba83598633373f47951384cfc389181c8d1bed ]
    
    If the PWM is exported but not enabled, do not call pwm_class_apply_state().
    First of all, in this case, period may still be unconfigured and this would
    make pwm_class_apply_state() return -EINVAL, and then suspend would fail.
    Second, it makes little sense to apply state onto PWM that is not enabled
    before suspend.
    
    Failing case:
    "
    $ echo 1 > /sys/class/pwm/pwmchip4/export
    $ echo mem > /sys/power/state
    ...
    pwm pwmchip4: PM: dpm_run_callback(): pwm_class_suspend+0x1/0xa8 returns -22
    pwm pwmchip4: PM: failed to suspend: error -22
    PM: Some devices failed to suspend, or early wake event detected
    "
    
    Working case:
    "
    $ echo 1 > /sys/class/pwm/pwmchip4/export
    $ echo 100 > /sys/class/pwm/pwmchip4/pwm1/period
    $ echo 10 > /sys/class/pwm/pwmchip4/pwm1/duty_cycle
    $ echo mem > /sys/power/state
    ...
    "
    
    Do not call pwm_class_apply_state() in case the PWM is disabled
    to fix this issue.
    
    Fixes: 7fd4edc57bbae ("pwm: sysfs: Add suspend/resume support")
    Signed-off-by: Marek Vasut <marex@denx.de>
    Fixes: ef2bf4997f7d ("pwm: Improve args checking in pwm_apply_state()")
    Reviewed-by: Brian Norris <briannorris@chromium.org>
    Reviewed-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
    Signed-off-by: Thierry Reding <thierry.reding@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
radeon: avoid double free in ci_dpm_init() [+ + +]
Author: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
Date:   Thu Apr 13 08:12:28 2023 -0700

    radeon: avoid double free in ci_dpm_init()
    
    [ Upstream commit 20c3dffdccbd494e0dd631d1660aeecbff6775f2 ]
    
    Several calls to ci_dpm_fini() will attempt to free resources that
    either have been freed before or haven't been allocated yet. This
    may lead to undefined or dangerous behaviour.
    
    For instance, if r600_parse_extended_power_table() fails, it might
    call r600_free_extended_power_table() as will ci_dpm_fini() later
    during error handling.
    
    Fix this by only freeing pointers to objects previously allocated.
    
    Found by Linux Verification Center (linuxtesting.org) with static
    analysis tool SVACE.
    
    Fixes: cc8dbbb4f62a ("drm/radeon: add dpm support for CI dGPUs (v2)")
    Co-developed-by: Natalia Petrova <n.petrova@fintech.ru>
    Signed-off-by: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
rcu-tasks: Mark ->trc_reader_nesting data races [+ + +]
Author: Paul E. McKenney <paulmck@kernel.org>
Date:   Sat Jul 15 00:47:09 2023 +0000

    rcu-tasks: Mark ->trc_reader_nesting data races
    
    [ Upstream commit bdb0cca0d11060fce8a8a44588ac1470c25d62bc ]
    
    There are several ->trc_reader_nesting data races that are too
    low-probability for KCSAN to notice, but which will happen sooner or
    later.  This commit therefore marks these accesses, and comments one
    that cannot race.
    
    Cc: <stable@vger.kernel.org> # 5.10.x
    Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
    Signed-off-by: Joel Fernandes (Google) <joel@joelfernandes.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

rcu-tasks: Mark ->trc_reader_special.b.need_qs data races [+ + +]
Author: Paul E. McKenney <paulmck@kernel.org>
Date:   Sat Jul 15 00:47:10 2023 +0000

    rcu-tasks: Mark ->trc_reader_special.b.need_qs data races
    
    [ Upstream commit f8ab3fad80dddf3f2cecb53983063c4431058ca1 ]
    
    There are several ->trc_reader_special.b.need_qs data races that are
    too low-probability for KCSAN to notice, but which will happen sooner
    or later.  This commit therefore marks these accesses.
    
    Cc: <stable@vger.kernel.org> # 5.10.x
    Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
    Signed-off-by: Joel Fernandes (Google) <joel@joelfernandes.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

rcu-tasks: Simplify trc_read_check_handler() atomic operations [+ + +]
Author: Paul E. McKenney <paulmck@kernel.org>
Date:   Sat Jul 15 00:47:11 2023 +0000

    rcu-tasks: Simplify trc_read_check_handler() atomic operations
    
    [ Upstream commit 96017bf9039763a2e02dcc6adaa18592cd73a39d ]
    
    Currently, trc_wait_for_one_reader() atomically increments
    the trc_n_readers_need_end counter before sending the IPI
    invoking trc_read_check_handler().  All failure paths out of
    trc_read_check_handler() and also from the smp_call_function_single()
    within trc_wait_for_one_reader() must carefully atomically decrement
    this counter.  This is more complex than it needs to be.
    
    This commit therefore simplifies things and saves a few lines of
    code by dispensing with the atomic decrements in favor of having
    trc_read_check_handler() do the atomic increment only in the success case.
    In theory, this represents no change in functionality.
    
    Cc: <stable@vger.kernel.org> # 5.10.x
    Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
    Signed-off-by: Joel Fernandes (Google) <joel@joelfernandes.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
rcu/rcuscale: Move rcu_scale_*() after kfree_scale_cleanup() [+ + +]
Author: Qiuxu Zhuo <qiuxu.zhuo@intel.com>
Date:   Wed Mar 22 19:42:40 2023 +0800

    rcu/rcuscale: Move rcu_scale_*() after kfree_scale_cleanup()
    
    [ Upstream commit bf5ddd736509a7d9077c0b6793e6f0852214dbea ]
    
    This code-movement-only commit moves the rcu_scale_cleanup() and
    rcu_scale_shutdown() functions to follow kfree_scale_cleanup().
    This is code movement is in preparation for a bug-fix patch that invokes
    kfree_scale_cleanup() from rcu_scale_cleanup().
    
    Signed-off-by: Qiuxu Zhuo <qiuxu.zhuo@intel.com>
    Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
    Reviewed-by: Joel Fernandes (Google) <joel@joelfernandes.org>
    Stable-dep-of: 23fc8df26dea ("rcu/rcuscale: Stop kfree_scale_thread thread(s) after unloading rcuscale")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

rcu/rcuscale: Stop kfree_scale_thread thread(s) after unloading rcuscale [+ + +]
Author: Qiuxu Zhuo <qiuxu.zhuo@intel.com>
Date:   Wed Mar 22 19:42:41 2023 +0800

    rcu/rcuscale: Stop kfree_scale_thread thread(s) after unloading rcuscale
    
    [ Upstream commit 23fc8df26dead16687ae6eb47b0561a4a832e2f6 ]
    
    Running the 'kfree_rcu_test' test case [1] results in a splat [2].
    The root cause is the kfree_scale_thread thread(s) continue running
    after unloading the rcuscale module.  This commit fixes that isue by
    invoking kfree_scale_cleanup() from rcu_scale_cleanup() when removing
    the rcuscale module.
    
    [1] modprobe rcuscale kfree_rcu_test=1
        // After some time
        rmmod rcuscale
        rmmod torture
    
    [2] BUG: unable to handle page fault for address: ffffffffc0601a87
        #PF: supervisor instruction fetch in kernel mode
        #PF: error_code(0x0010) - not-present page
        PGD 11de4f067 P4D 11de4f067 PUD 11de51067 PMD 112f4d067 PTE 0
        Oops: 0010 [#1] PREEMPT SMP NOPTI
        CPU: 1 PID: 1798 Comm: kfree_scale_thr Not tainted 6.3.0-rc1-rcu+ #1
        Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 0.0.0 02/06/2015
        RIP: 0010:0xffffffffc0601a87
        Code: Unable to access opcode bytes at 0xffffffffc0601a5d.
        RSP: 0018:ffffb25bc2e57e18 EFLAGS: 00010297
        RAX: 0000000000000000 RBX: ffffffffc061f0b6 RCX: 0000000000000000
        RDX: 0000000000000000 RSI: ffffffff962fd0de RDI: ffffffff962fd0de
        RBP: ffffb25bc2e57ea8 R08: 0000000000000000 R09: 0000000000000000
        R10: 0000000000000001 R11: 0000000000000001 R12: 0000000000000000
        R13: 0000000000000000 R14: 000000000000000a R15: 00000000001c1dbe
        FS:  0000000000000000(0000) GS:ffff921fa2200000(0000) knlGS:0000000000000000
        CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
        CR2: ffffffffc0601a5d CR3: 000000011de4c006 CR4: 0000000000370ee0
        DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
        DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
        Call Trace:
         <TASK>
         ? kvfree_call_rcu+0xf0/0x3a0
         ? kthread+0xf3/0x120
         ? kthread_complete_and_exit+0x20/0x20
         ? ret_from_fork+0x1f/0x30
         </TASK>
        Modules linked in: rfkill sunrpc ... [last unloaded: torture]
        CR2: ffffffffc0601a87
        ---[ end trace 0000000000000000 ]---
    
    Fixes: e6e78b004fa7 ("rcuperf: Add kfree_rcu() performance Tests")
    Reviewed-by: Davidlohr Bueso <dave@stgolabs.net>
    Reviewed-by: Joel Fernandes (Google) <joel@joelfernandes.org>
    Signed-off-by: Qiuxu Zhuo <qiuxu.zhuo@intel.com>
    Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
rcuscale: Always log error message [+ + +]
Author: Li Zhijian <zhijianx.li@intel.com>
Date:   Fri Oct 29 17:40:28 2021 +0800

    rcuscale: Always log error message
    
    [ Upstream commit 86e7ed1bd57d020e35d430542bf5d689c3200568 ]
    
    Unconditionally log messages corresponding to errors.
    
    Acked-by: Davidlohr Bueso <dbueso@suse.de>
    Signed-off-by: Li Zhijian <zhijianx.li@intel.com>
    Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
    Stable-dep-of: 23fc8df26dea ("rcu/rcuscale: Stop kfree_scale_thread thread(s) after unloading rcuscale")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

rcuscale: Console output claims too few grace periods [+ + +]
Author: Jiangong.Han <jiangong.han@windriver.com>
Date:   Tue Jun 22 18:37:08 2021 +0800

    rcuscale: Console output claims too few grace periods
    
    [ Upstream commit 811192c5f24bfd7246ce9ce06f668d8c408bf39b ]
    
    The rcuscale console output claims N grace periods, numbered from zero
    to N, which means that there were really N+1 grace periods.  The root
    cause of this bug is that rcu_scale_writer() stores the number of the
    last grace period (numbered from zero) into writer_n_durations[me]
    instead of the number of grace periods.  This commit therefore assigns
    the actual number of grace periods to writer_n_durations[me], and also
    makes the corresponding adjustment to the loop outputting per-grace-period
    measurements.
    
    Sample of old console output:
        rcu-scale: writer 0 gps: 133
        ......
        rcu-scale:    0 writer-duration:     0 44003961
        rcu-scale:    0 writer-duration:     1 32003582
        ......
        rcu-scale:    0 writer-duration:   132 28004391
        rcu-scale:    0 writer-duration:   133 27996410
    
    Sample of new console output:
        rcu-scale: writer 0 gps: 134
        ......
        rcu-scale:    0 writer-duration:     0 44003961
        rcu-scale:    0 writer-duration:     1 32003582
        ......
        rcu-scale:    0 writer-duration:   132 28004391
        rcu-scale:    0 writer-duration:   133 27996410
    
    Signed-off-by: Jiangong.Han <jiangong.han@windriver.com>
    Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
    Stable-dep-of: 23fc8df26dea ("rcu/rcuscale: Stop kfree_scale_thread thread(s) after unloading rcuscale")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

rcuscale: Move shutdown from wait_event() to wait_event_idle() [+ + +]
Author: Paul E. McKenney <paulmck@kernel.org>
Date:   Tue Jan 31 12:08:54 2023 -0800

    rcuscale: Move shutdown from wait_event() to wait_event_idle()
    
    [ Upstream commit ef1ef3d47677dc191b88650a9f7f91413452cc1b ]
    
    The rcu_scale_shutdown() and kfree_scale_shutdown() kthreads/functions
    use wait_event() to wait for the rcuscale test to complete.  However,
    each updater thread in such a test waits for at least 100 grace periods.
    If each grace period takes more than 1.2 seconds, which is long, but
    not insanely so, this can trigger the hung-task timeout.
    
    This commit therefore replaces those wait_event() calls with calls to
    wait_event_idle(), which do not trigger the hung-task timeout.
    
    Reported-by: kernel test robot <yujie.liu@intel.com>
    Reported-by: Liam Howlett <liam.howlett@oracle.com>
    Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
    Tested-by: Yujie Liu <yujie.liu@intel.com>
    Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
    Stable-dep-of: 23fc8df26dea ("rcu/rcuscale: Stop kfree_scale_thread thread(s) after unloading rcuscale")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/bnxt_re: Avoid calling wake_up threads from spin_lock context [+ + +]
Author: Kashyap Desai <kashyap.desai@broadcom.com>
Date:   Fri Jun 9 04:01:39 2023 -0700

    RDMA/bnxt_re: Avoid calling wake_up threads from spin_lock context
    
    [ Upstream commit 3099bcdc19b701f732f638ee45679858c08559bb ]
    
    bnxt_qplib_service_creq can be called from interrupt or tasklet or
    process context. So the function take irq variant  of spin_lock.
    But when wake_up is invoked with the lock held, it is putting the
    calling context to sleep.
    
    [exception RIP: __wake_up_common+190]
    RIP: ffffffffb7539d7e  RSP: ffffa73300207ad8  RFLAGS: 00000083
    RAX: 0000000000000001  RBX: ffff91fa295f69b8  RCX: dead000000000200
    RDX: ffffa733344af940  RSI: ffffa73336527940  RDI: ffffa73336527940
    RBP: 000000000000001c   R8: 0000000000000002   R9: 00000000000299c0
    R10: 0000017230de82c5  R11: 0000000000000002  R12: ffffa73300207b28
    R13: 0000000000000000  R14: ffffa733341bf928  R15: 0000000000000000
    ORIG_RAX: ffffffffffffffff  CS: 0010  SS: 0018
    
    Call the wakeup after releasing the lock.
    
    Fixes: 1ac5a4047975 ("RDMA/bnxt_re: Add bnxt_re RoCE driver")
    Signed-off-by: Kashyap Desai <kashyap.desai@broadcom.com>
    Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
    Link: https://lore.kernel.org/r/1686308514-11996-3-git-send-email-selvin.xavier@broadcom.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/bnxt_re: Disable/kill tasklet only if it is enabled [+ + +]
Author: Selvin Xavier <selvin.xavier@broadcom.com>
Date:   Thu May 18 23:48:11 2023 -0700

    RDMA/bnxt_re: Disable/kill tasklet only if it is enabled
    
    [ Upstream commit ab112ee7899d6171da5acd77a7ed7ae103f488de ]
    
    When the ulp hook to start the IRQ fails because the rings are not
    available, tasklets are not enabled. In this case when the driver is
    unloaded, driver calls CREQ tasklet_kill. This causes an indefinite hang
    as the tasklet is not enabled.
    
    Driver shouldn't call tasklet_kill if it is not enabled. So using the
    creq->requested and nq->requested flags to identify if both tasklets/irqs
    are registered. Checking this flag while scheduling the tasklet from
    ISR. Also, added a cleanup for disabling tasklet, in case request_irq
    fails during start_irq.
    
    Check for return value for bnxt_qplib_rcfw_start_irq and in case the
    bnxt_qplib_rcfw_start_irq fails, return bnxt_re_start_irq without
    attempting to start NQ IRQs.
    
    Fixes: 1ac5a4047975 ("RDMA/bnxt_re: Add bnxt_re RoCE driver")
    Link: https://lore.kernel.org/r/1684478897-12247-2-git-send-email-selvin.xavier@broadcom.com
    Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
    Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/bnxt_re: Fix to remove an unnecessary log [+ + +]
Author: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Date:   Thu May 18 23:48:15 2023 -0700

    RDMA/bnxt_re: Fix to remove an unnecessary log
    
    [ Upstream commit 43774bc156614346fe5dacabc8e8c229167f2536 ]
    
    During destroy_qp, driver sets the qp handle in the existing CQEs
    belonging to the QP being destroyed to NULL. As a result, a poll_cq after
    destroy_qp can report unnecessary messages.  Remove this noise from system
    logs.
    
    Fixes: 1ac5a4047975 ("RDMA/bnxt_re: Add bnxt_re RoCE driver")
    Link: https://lore.kernel.org/r/1684478897-12247-6-git-send-email-selvin.xavier@broadcom.com
    Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
    Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/bnxt_re: Fix to remove unnecessary return labels [+ + +]
Author: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Date:   Thu May 18 23:48:12 2023 -0700

    RDMA/bnxt_re: Fix to remove unnecessary return labels
    
    [ Upstream commit 9b3ee47796f529e5bc31a355d6cb756d68a7079a ]
    
    If there is no cleanup needed then just return directly.  This cleans up
    the code and improve readability.
    
    Fixes: 1ac5a4047975 ("RDMA/bnxt_re: Add bnxt_re RoCE driver")
    Link: https://lore.kernel.org/r/1684478897-12247-3-git-send-email-selvin.xavier@broadcom.com
    Reviewed-by: Kashyap Desai <kashyap.desai@broadcom.com>
    Reviewed-by: Saravanan Vajravel <saravanan.vajravel@broadcom.com>
    Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
    Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/bnxt_re: Remove a redundant check inside bnxt_re_update_gid [+ + +]
Author: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Date:   Thu May 18 23:48:14 2023 -0700

    RDMA/bnxt_re: Remove a redundant check inside bnxt_re_update_gid
    
    [ Upstream commit b989f90cef0af48aa5679b6a75476371705ec53c ]
    
    The NULL check inside bnxt_re_update_gid() always return false.  If
    sgid_tbl->tbl is not allocated, then dev_init would have failed.
    
    Fixes: 5fac5b1b297f ("RDMA/bnxt_re: Add vlan tag for untagged RoCE traffic when PFC is configured")
    Link: https://lore.kernel.org/r/1684478897-12247-5-git-send-email-selvin.xavier@broadcom.com
    Reviewed-by: Saravanan Vajravel <saravanan.vajravel@broadcom.com>
    Reviewed-by: Damodharam Ammepalli <damodharam.ammepalli@broadcom.com>
    Reviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
    Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
    Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/bnxt_re: Use unique names while registering interrupts [+ + +]
Author: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Date:   Thu May 18 23:48:13 2023 -0700

    RDMA/bnxt_re: Use unique names while registering interrupts
    
    [ Upstream commit ff2e4bfd162cf66a112a81509e419805add44d64 ]
    
    bnxt_re currently uses the names "bnxt_qplib_creq" and "bnxt_qplib_nq-0"
    while registering IRQs. There is no way to distinguish the IRQs of
    different device ports when there are multiple IB devices registered.
    This could make the scenarios worse where one want to pin IRQs of a device
    port to certain CPUs.
    
    Fixed the code to use unique names which has PCI BDF information while
    registering interrupts like: "bnxt_re-nq-0@pci:0000:65:00.0" and
    "bnxt_re-creq@pci:0000:65:00.1".
    
    Fixes: 1ac5a4047975 ("RDMA/bnxt_re: Add bnxt_re RoCE driver")
    Link: https://lore.kernel.org/r/1684478897-12247-4-git-send-email-selvin.xavier@broadcom.com
    Reviewed-by: Bhargava Chenna Marreddy <bhargava.marreddy@broadcom.com>
    Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
    Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/bnxt_re: wraparound mbox producer index [+ + +]
Author: Kashyap Desai <kashyap.desai@broadcom.com>
Date:   Fri Jun 9 04:01:38 2023 -0700

    RDMA/bnxt_re: wraparound mbox producer index
    
    [ Upstream commit 0af91306e17ef3d18e5f100aa58aa787869118af ]
    
    Driver is not handling the wraparound of the mbox producer index correctly.
    Currently the wraparound happens once u32 max is reached.
    
    Bit 31 of the producer index register is special and should be set
    only once for the first command. Because the producer index overflow
    setting bit31 after a long time, FW goes to initialization sequence
    and this causes FW hang.
    
    Fix is to wraparound the mbox producer index once it reaches u16 max.
    
    Fixes: cee0c7bba486 ("RDMA/bnxt_re: Refactor command queue management code")
    Fixes: 1ac5a4047975 ("RDMA/bnxt_re: Add bnxt_re RoCE driver")
    Signed-off-by: Kashyap Desai <kashyap.desai@broadcom.com>
    Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
    Link: https://lore.kernel.org/r/1686308514-11996-2-git-send-email-selvin.xavier@broadcom.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/cma: Ensure rdma_addr_cancel() happens before issuing more requests [+ + +]
Author: Jason Gunthorpe <jgg@ziepe.ca>
Date:   Thu Sep 16 15:34:46 2021 -0300

    RDMA/cma: Ensure rdma_addr_cancel() happens before issuing more requests
    
    commit 305d568b72f17f674155a2a8275f865f207b3808 upstream.
    
    The FSM can run in a circle allowing rdma_resolve_ip() to be called twice
    on the same id_priv. While this cannot happen without going through the
    work, it violates the invariant that the same address resolution
    background request cannot be active twice.
    
           CPU 1                                  CPU 2
    
    rdma_resolve_addr():
      RDMA_CM_IDLE -> RDMA_CM_ADDR_QUERY
      rdma_resolve_ip(addr_handler)  #1
    
                             process_one_req(): for #1
                              addr_handler():
                                RDMA_CM_ADDR_QUERY -> RDMA_CM_ADDR_BOUND
                                mutex_unlock(&id_priv->handler_mutex);
                                [.. handler still running ..]
    
    rdma_resolve_addr():
      RDMA_CM_ADDR_BOUND -> RDMA_CM_ADDR_QUERY
      rdma_resolve_ip(addr_handler)
        !! two requests are now on the req_list
    
    rdma_destroy_id():
     destroy_id_handler_unlock():
      _destroy_id():
       cma_cancel_operation():
        rdma_addr_cancel()
    
                              // process_one_req() self removes it
                              spin_lock_bh(&lock);
                               cancel_delayed_work(&req->work);
                               if (!list_empty(&req->list)) == true
    
          ! rdma_addr_cancel() returns after process_on_req #1 is done
    
       kfree(id_priv)
    
                             process_one_req(): for #2
                              addr_handler():
                                mutex_lock(&id_priv->handler_mutex);
                                !! Use after free on id_priv
    
    rdma_addr_cancel() expects there to be one req on the list and only
    cancels the first one. The self-removal behavior of the work only happens
    after the handler has returned. This yields a situations where the
    req_list can have two reqs for the same "handle" but rdma_addr_cancel()
    only cancels the first one.
    
    The second req remains active beyond rdma_destroy_id() and will
    use-after-free id_priv once it inevitably triggers.
    
    Fix this by remembering if the id_priv has called rdma_resolve_ip() and
    always cancel before calling it again. This ensures the req_list never
    gets more than one item in it and doesn't cost anything in the normal flow
    that never uses this strange error path.
    
    Link: https://lore.kernel.org/r/0-v1-3bc675b8006d+22-syz_cancel_uaf_jgg@nvidia.com
    Cc: stable@vger.kernel.org
    Fixes: e51060f08a61 ("IB: IP address based RDMA connection manager")
    Reported-by: syzbot+dc3dfba010d7671e05f5@syzkaller.appspotmail.com
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Anton Gusev <aagusev@ispras.ru>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
RDMA/hns: Clean the hardware related code for HEM [+ + +]
Author: Xi Wang <wangxi11@huawei.com>
Date:   Fri May 21 17:29:55 2021 +0800

    RDMA/hns: Clean the hardware related code for HEM
    
    [ Upstream commit 68e11a6086b10e1a88d2b2c8432299f595db748d ]
    
    Move the HIP06 related code to the hw v1 source file for HEM.
    
    Link: https://lore.kernel.org/r/1621589395-2435-6-git-send-email-liweihang@huawei.com
    Signed-off-by: Xi Wang <wangxi11@huawei.com>
    Signed-off-by: Weihang Li <liweihang@huawei.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Stable-dep-of: cf5b608fb0e3 ("RDMA/hns: Fix hns_roce_table_get return value")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/hns: Fix coding style issues [+ + +]
Author: Lang Cheng <chenglang@huawei.com>
Date:   Fri Dec 11 09:37:33 2020 +0800

    RDMA/hns: Fix coding style issues
    
    [ Upstream commit dc93a0d987fcfe93b132871e72d4ea5aff36dd5c ]
    
    Just format the code without modifying anything, including fixing some
    redundant and missing blanks and spaces and changing the variable
    definition order.
    
    Link: https://lore.kernel.org/r/1607650657-35992-8-git-send-email-liweihang@huawei.com
    Signed-off-by: Lang Cheng <chenglang@huawei.com>
    Signed-off-by: Weihang Li <liweihang@huawei.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Stable-dep-of: cf5b608fb0e3 ("RDMA/hns: Fix hns_roce_table_get return value")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/hns: Fix hns_roce_table_get return value [+ + +]
Author: Chengchang Tang <tangchengchang@huawei.com>
Date:   Tue May 23 20:16:40 2023 +0800

    RDMA/hns: Fix hns_roce_table_get return value
    
    [ Upstream commit cf5b608fb0e369c473a8303cad6ddb386505e5b8 ]
    
    The return value of set_hem has been fixed to ENODEV, which will lead a
    diagnostic information missing.
    
    Fixes: 9a4435375cd1 ("IB/hns: Add driver files for hns RoCE driver")
    Link: https://lore.kernel.org/r/20230523121641.3132102-3-huangjunxian6@hisilicon.com
    Signed-off-by: Chengchang Tang <tangchengchang@huawei.com>
    Signed-off-by: Junxian Huang <huangjunxian6@hisilicon.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/hns: Use refcount_t APIs for HEM [+ + +]
Author: Weihang Li <liweihang@huawei.com>
Date:   Fri May 21 17:29:54 2021 +0800

    RDMA/hns: Use refcount_t APIs for HEM
    
    [ Upstream commit 82eb481da64586ccd287b2b2c5a086202c65e7eb ]
    
    refcount_t is better than integer for reference counting, it will WARN on
    overflow/underflow and avoid use-after-free risks.
    
    Link: https://lore.kernel.org/r/1621589395-2435-5-git-send-email-liweihang@huawei.com
    Signed-off-by: Weihang Li <liweihang@huawei.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Stable-dep-of: cf5b608fb0e3 ("RDMA/hns: Fix hns_roce_table_get return value")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA: Remove uverbs_ex_cmd_mask values that are linked to functions [+ + +]
Author: Jason Gunthorpe <jgg@ziepe.ca>
Date:   Sat Oct 3 20:20:02 2020 -0300

    RDMA: Remove uverbs_ex_cmd_mask values that are linked to functions
    
    [ Upstream commit b8e3130dd96b7b2d6d92e62dcd1515af30212fe2 ]
    
    Since a while now the uverbs layer checks if the driver implements a
    function before allowing the ucmd to proceed. This largely obsoletes the
    cmd_mask stuff, but there is some tricky bits in drivers preventing it
    from being removed.
    
    Remove the easy elements of uverbs_ex_cmd_mask by pre-setting them in the
    core code. These are triggered soley based on the related ops function
    pointer.
    
    query_device_ex is not triggered based on an op, but all drivers already
    implement something compatible with the extension, so enable it globally
    too.
    
    Link: https://lore.kernel.org/r/2-v1-caa70ba3d1ab+1436e-ucmd_mask_jgg@nvidia.com
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Stable-dep-of: cf5b608fb0e3 ("RDMA/hns: Fix hns_roce_table_get return value")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
regmap: Account for register length in SMBus I/O limits [+ + +]
Author: Mark Brown <broonie@kernel.org>
Date:   Wed Jul 12 12:16:40 2023 +0100

    regmap: Account for register length in SMBus I/O limits
    
    commit 0c9d2eb5e94792fe64019008a04d4df5e57625af upstream.
    
    The SMBus I2C buses have limits on the size of transfers they can do but
    do not factor in the register length meaning we may try to do a transfer
    longer than our length limit, the core will not take care of this.
    Future changes will factor this out into the core but there are a number
    of users that assume current behaviour so let's just do something
    conservative here.
    
    This does not take account padding bits but practically speaking these
    are very rarely if ever used on I2C buses given that they generally run
    slowly enough to mean there's no issue.
    
    Cc: stable@kernel.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Reviewed-by: Xu Yilun <yilun.xu@intel.com>
    Link: https://lore.kernel.org/r/20230712-regmap-max-transfer-v1-2-80e2aed22e83@kernel.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

regmap: Drop initial version of maximum transfer length fixes [+ + +]
Author: Mark Brown <broonie@kernel.org>
Date:   Wed Jul 12 12:16:39 2023 +0100

    regmap: Drop initial version of maximum transfer length fixes
    
    commit bc64734825c59e18a27ac266b07e14944c111fd8 upstream.
    
    When problems were noticed with the register address not being taken
    into account when limiting raw transfers with I2C devices we fixed this
    in the core.  Unfortunately it has subsequently been realised that a lot
    of buses were relying on the prior behaviour, partly due to unclear
    documentation not making it obvious what was intended in the core.  This
    is all more involved to fix than is sensible for a fix commit so let's
    just drop the original fixes, a separate commit will fix the originally
    observed problem in an I2C specific way
    
    Fixes: 3981514180c9 ("regmap: Account for register length when chunking")
    Fixes: c8e796895e23 ("regmap: spi-avmm: Fix regmap_bus max_raw_write")
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Reviewed-by: Xu Yilun <yilun.xu@intel.com>
    Cc: stable@kernel.org
    Link: https://lore.kernel.org/r/20230712-regmap-max-transfer-v1-1-80e2aed22e83@kernel.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
regulator: core: Fix more error checking for debugfs_create_dir() [+ + +]
Author: Geert Uytterhoeven <geert+renesas@glider.be>
Date:   Thu May 25 13:13:58 2023 +0200

    regulator: core: Fix more error checking for debugfs_create_dir()
    
    [ Upstream commit 2715bb11cfff964aa33946847f9527cfbd4874f5 ]
    
    In case of failure, debugfs_create_dir() does not return NULL, but an
    error pointer.  Most incorrect error checks were fixed, but the one in
    create_regulator() was forgotten.
    
    Fix the remaining error check.
    
    Fixes: 2bf1c45be3b8f3a3 ("regulator: Fix error checking for debugfs_create_dir")
    Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Link: https://lore.kernel.org/r/ee980a108b5854dd8ce3630f8f673e784e057d17.1685013051.git.geert+renesas@glider.be
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

regulator: core: Streamline debugfs operations [+ + +]
Author: Geert Uytterhoeven <geert+renesas@glider.be>
Date:   Thu May 25 13:13:59 2023 +0200

    regulator: core: Streamline debugfs operations
    
    [ Upstream commit 08880713ceec023dd94d634f1e8902728c385939 ]
    
    If CONFIG_DEBUG_FS is not set:
    
        regulator: Failed to create debugfs directory
        ...
        regulator-dummy: Failed to create debugfs directory
    
    As per the comments for debugfs_create_dir(), errors returned by this
    function should be expected, and ignored:
    
     * If debugfs is not enabled in the kernel, the value -%ENODEV will be
     * returned.
     *
     * NOTE: it's expected that most callers should _ignore_ the errors returned
     * by this function. Other debugfs functions handle the fact that the "dentry"
     * passed to them could be an error and they don't crash in that case.
     * Drivers should generally work fine even if debugfs fails to init anyway.
    
    Adhere to the debugfs spirit, and streamline all operations by:
      1. Demoting the importance of the printed error messages to debug
         level, like is already done in create_regulator(),
      2. Further ignoring any returned errors, as by design, all debugfs
         functions are no-ops when passed an error pointer.
    
    Fixes: 2bf1c45be3b8f3a3 ("regulator: Fix error checking for debugfs_create_dir")
    Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Link: https://lore.kernel.org/r/2f8bb6e113359ddfab7b59e4d4274bd4c06d6d0a.1685013051.git.geert+renesas@glider.be
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Revert "8250: add support for ASIX devices with a FIFO bug" [+ + +]
Author: Jiaqing Zhao <jiaqing.zhao@linux.intel.com>
Date:   Mon Jun 19 15:57:44 2023 +0000

    Revert "8250: add support for ASIX devices with a FIFO bug"
    
    commit a82d62f708545d22859584e0e0620da8e3759bbc upstream.
    
    This reverts commit eb26dfe8aa7eeb5a5aa0b7574550125f8aa4c3b3.
    
    Commit eb26dfe8aa7e ("8250: add support for ASIX devices with a FIFO
    bug") merged on Jul 13, 2012 adds a quirk for PCI_VENDOR_ID_ASIX
    (0x9710). But that ID is the same as PCI_VENDOR_ID_NETMOS defined in
    1f8b061050c7 ("[PATCH] Netmos parallel/serial/combo support") merged
    on Mar 28, 2005. In pci_serial_quirks array, the NetMos entry always
    takes precedence over the ASIX entry even since it was initially
    merged, code in that commit is always unreachable.
    
    In my tests, adding the FIFO workaround to pci_netmos_init() makes no
    difference, and the vendor driver also does not have such workaround.
    Given that the code was never used for over a decade, it's safe to
    revert it.
    
    Also, the real PCI_VENDOR_ID_ASIX should be 0x125b, which is used on
    their newer AX99100 PCIe serial controllers released on 2016. The FIFO
    workaround should not be intended for these newer controllers, and it
    was never implemented in vendor driver.
    
    Fixes: eb26dfe8aa7e ("8250: add support for ASIX devices with a FIFO bug")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Jiaqing Zhao <jiaqing.zhao@linux.intel.com>
    Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Link: https://lore.kernel.org/r/20230619155743.827859-1-jiaqing.zhao@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Revert "f2fs: fix potential corruption when moving a directory" [+ + +]
Author: Jan Kara <jack@suse.cz>
Date:   Thu Jun 1 12:58:23 2023 +0200

    Revert "f2fs: fix potential corruption when moving a directory"
    
    commit cde3c9d7e2a359e337216855dcb333a19daaa436 upstream.
    
    This reverts commit d94772154e524b329a168678836745d2773a6e02. The
    locking is going to be provided by VFS.
    
    CC: Jaegeuk Kim <jaegeuk@kernel.org>
    CC: stable@vger.kernel.org
    Signed-off-by: Jan Kara <jack@suse.cz>
    Message-Id: <20230601105830.13168-3-jack@suse.cz>
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Revert "tcp: avoid the lookup process failing to get sk in ehash table" [+ + +]
Author: Kuniyuki Iwashima <kuniyu@amazon.com>
Date:   Mon Jul 17 14:59:18 2023 -0700

    Revert "tcp: avoid the lookup process failing to get sk in ehash table"
    
    [ Upstream commit 81b3ade5d2b98ad6e0a473b0e1e420a801275592 ]
    
    This reverts commit 3f4ca5fafc08881d7a57daa20449d171f2887043.
    
    Commit 3f4ca5fafc08 ("tcp: avoid the lookup process failing to get sk in
    ehash table") reversed the order in how a socket is inserted into ehash
    to fix an issue that ehash-lookup could fail when reqsk/full sk/twsk are
    swapped.  However, it introduced another lookup failure.
    
    The full socket in ehash is allocated from a slab with SLAB_TYPESAFE_BY_RCU
    and does not have SOCK_RCU_FREE, so the socket could be reused even while
    it is being referenced on another CPU doing RCU lookup.
    
    Let's say a socket is reused and inserted into the same hash bucket during
    lookup.  After the blamed commit, a new socket is inserted at the end of
    the list.  If that happens, we will skip sockets placed after the previous
    position of the reused socket, resulting in ehash lookup failure.
    
    As described in Documentation/RCU/rculist_nulls.rst, we should insert a
    new socket at the head of the list to avoid such an issue.
    
    This issue, the swap-lookup-failure, and another variant reported in [0]
    can all be handled properly by adding a locked ehash lookup suggested by
    Eric Dumazet [1].
    
    However, this issue could occur for every packet, thus more likely than
    the other two races, so let's revert the change for now.
    
    Link: https://lore.kernel.org/netdev/20230606064306.9192-1-duanmuquan@baidu.com/ [0]
    Link: https://lore.kernel.org/netdev/CANn89iK8snOz8TYOhhwfimC7ykYA78GA3Nyv8x06SZYa1nKdyA@mail.gmail.com/ [1]
    Fixes: 3f4ca5fafc08 ("tcp: avoid the lookup process failing to get sk in ehash table")
    Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Link: https://lore.kernel.org/r/20230717215918.15723-1-kuniyu@amazon.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Revert "thermal/drivers/mediatek: Use devm_of_iomap to avoid resource leak in mtk_thermal_probe" [+ + +]
Author: Ricardo Cañuelo <ricardo.canuelo@collabora.com>
Date:   Thu May 25 14:18:11 2023 +0200

    Revert "thermal/drivers/mediatek: Use devm_of_iomap to avoid resource leak in mtk_thermal_probe"
    
    commit 86edac7d3888c715fe3a81bd61f3617ecfe2e1dd upstream.
    
    This reverts commit f05c7b7d9ea9477fcc388476c6f4ade8c66d2d26.
    
    That change was causing a regression in the generic-adc-thermal-probed
    bootrr test as reported in the kernelci-results list [1].
    A proper rework will take longer, so revert it for now.
    
    [1] https://groups.io/g/kernelci-results/message/42660
    
    Fixes: f05c7b7d9ea9 ("thermal/drivers/mediatek: Use devm_of_iomap to avoid resource leak in mtk_thermal_probe")
    Signed-off-by: Ricardo Cañuelo <ricardo.canuelo@collabora.com>
    Suggested-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
    Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
    Link: https://lore.kernel.org/r/20230525121811.3360268-1-ricardo.canuelo@collabora.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Revert "usb: common: usb-conn-gpio: Set last role to unknown before initial detection" [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Thu Jun 15 11:30:35 2023 +0200

    Revert "usb: common: usb-conn-gpio: Set last role to unknown before initial detection"
    
    [ Upstream commit df49f2a0ac4a34c0cb4b5c233fcfa0add644c43c ]
    
    This reverts commit edd60d24bd858cef165274e4cd6cab43bdc58d15.
    
    Heikki reports that this should not be a global flag just to work around
    one broken driver and should be fixed differently, so revert it.
    
    Reported-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    Fixes: edd60d24bd85 ("usb: common: usb-conn-gpio: Set last role to unknown before initial detection")
    Link: https://lore.kernel.org/r/ZImE4L3YgABnCIsP@kuha.fi.intel.com
    Cc: Prashanth K <quic_prashk@quicinc.com>
    Cc: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ring-buffer: Fix deadloop issue on reading trace_pipe [+ + +]
Author: Zheng Yejian <zhengyejian1@huawei.com>
Date:   Sun Jul 9 06:51:44 2023 +0800

    ring-buffer: Fix deadloop issue on reading trace_pipe
    
    commit 7e42907f3a7b4ce3a2d1757f6d78336984daf8f5 upstream.
    
    Soft lockup occurs when reading file 'trace_pipe':
    
      watchdog: BUG: soft lockup - CPU#6 stuck for 22s! [cat:4488]
      [...]
      RIP: 0010:ring_buffer_empty_cpu+0xed/0x170
      RSP: 0018:ffff88810dd6fc48 EFLAGS: 00000246
      RAX: 0000000000000000 RBX: 0000000000000246 RCX: ffffffff93d1aaeb
      RDX: ffff88810a280040 RSI: 0000000000000008 RDI: ffff88811164b218
      RBP: ffff88811164b218 R08: 0000000000000000 R09: ffff88815156600f
      R10: ffffed102a2acc01 R11: 0000000000000001 R12: 0000000051651901
      R13: 0000000000000000 R14: ffff888115e49500 R15: 0000000000000000
      [...]
      CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: 00007f8d853c2000 CR3: 000000010dcd8000 CR4: 00000000000006e0
      DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
      Call Trace:
       __find_next_entry+0x1a8/0x4b0
       ? peek_next_entry+0x250/0x250
       ? down_write+0xa5/0x120
       ? down_write_killable+0x130/0x130
       trace_find_next_entry_inc+0x3b/0x1d0
       tracing_read_pipe+0x423/0xae0
       ? tracing_splice_read_pipe+0xcb0/0xcb0
       vfs_read+0x16b/0x490
       ksys_read+0x105/0x210
       ? __ia32_sys_pwrite64+0x200/0x200
       ? switch_fpu_return+0x108/0x220
       do_syscall_64+0x33/0x40
       entry_SYSCALL_64_after_hwframe+0x61/0xc6
    
    Through the vmcore, I found it's because in tracing_read_pipe(),
    ring_buffer_empty_cpu() found some buffer is not empty but then it
    cannot read anything due to "rb_num_of_entries() == 0" always true,
    Then it infinitely loop the procedure due to user buffer not been
    filled, see following code path:
    
      tracing_read_pipe() {
        ... ...
        waitagain:
          tracing_wait_pipe() // 1. find non-empty buffer here
          trace_find_next_entry_inc()  // 2. loop here try to find an entry
            __find_next_entry()
              ring_buffer_empty_cpu();  // 3. find non-empty buffer
              peek_next_entry()  // 4. but peek always return NULL
                ring_buffer_peek()
                  rb_buffer_peek()
                    rb_get_reader_page()
                      // 5. because rb_num_of_entries() == 0 always true here
                      //    then return NULL
          // 6. user buffer not been filled so goto 'waitgain'
          //    and eventually leads to an deadloop in kernel!!!
      }
    
    By some analyzing, I found that when resetting ringbuffer, the 'entries'
    of its pages are not all cleared (see rb_reset_cpu()). Then when reducing
    the ringbuffer, and if some reduced pages exist dirty 'entries' data, they
    will be added into 'cpu_buffer->overrun' (see rb_remove_pages()), which
    cause wrong 'overrun' count and eventually cause the deadloop issue.
    
    To fix it, we need to clear every pages in rb_reset_cpu().
    
    Link: https://lore.kernel.org/linux-trace-kernel/20230708225144.3785600-1-zhengyejian1@huawei.com
    
    Cc: stable@vger.kernel.org
    Fixes: a5fb833172eca ("ring-buffer: Fix uninitialized read_stamp")
    Signed-off-by: Zheng Yejian <zhengyejian1@huawei.com>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
riscv, bpf: Fix inconsistent JIT image generation [+ + +]
Author: Björn Töpel <bjorn@rivosinc.com>
Date:   Mon Jul 10 09:41:31 2023 +0200

    riscv, bpf: Fix inconsistent JIT image generation
    
    [ Upstream commit c56fb2aab23505bb7160d06097c8de100b82b851 ]
    
    In order to generate the prologue and epilogue, the BPF JIT needs to
    know which registers that are clobbered. Therefore, the during
    pre-final passes, the prologue is generated after the body of the
    program body-prologue-epilogue. Then, in the final pass, a proper
    prologue-body-epilogue JITted image is generated.
    
    This scheme has worked most of the time. However, for some large
    programs with many jumps, e.g. the test_kmod.sh BPF selftest with
    hardening enabled (blinding constants), this has shown to be
    incorrect. For the final pass, when the proper prologue-body-epilogue
    is generated, the image has not converged. This will lead to that the
    final image will have incorrect jump offsets. The following is an
    excerpt from an incorrect image:
    
      | ...
      |     3b8:       00c50663                beq     a0,a2,3c4 <.text+0x3c4>
      |     3bc:       0020e317                auipc   t1,0x20e
      |     3c0:       49630067                jalr    zero,1174(t1) # 20e852 <.text+0x20e852>
      | ...
      |  20e84c:       8796                    c.mv    a5,t0
      |  20e84e:       6422                    c.ldsp  s0,8(sp)    # Epilogue start
      |  20e850:       6141                    c.addi16sp      sp,16
      |  20e852:       853e                    c.mv    a0,a5       # Incorrect jump target
      |  20e854:       8082                    c.jr    ra
    
    The image has shrunk, and the epilogue offset is incorrect in the
    final pass.
    
    Correct the problem by always generating proper prologue-body-epilogue
    outputs, which means that the first pass will only generate the body
    to track what registers that are touched.
    
    Fixes: 2353ecc6f91f ("bpf, riscv: add BPF JIT for RV64G")
    Signed-off-by: Björn Töpel <bjorn@rivosinc.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Link: https://lore.kernel.org/bpf/20230710074131.19596-1-bjorn@kernel.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
riscv: bpf: Avoid breaking W^X [+ + +]
Author: Jisheng Zhang <jszhang@kernel.org>
Date:   Tue Mar 30 02:25:21 2021 +0800

    riscv: bpf: Avoid breaking W^X
    
    [ Upstream commit fc8504765ec5e812135b8ccafca7101069a0c6d8 ]
    
    We allocate Non-executable pages, then call bpf_jit_binary_lock_ro()
    to enable executable permission after mapping them read-only. This is
    to prepare for STRICT_MODULE_RWX in following patch.
    
    Signed-off-by: Jisheng Zhang <jszhang@kernel.org>
    Signed-off-by: Palmer Dabbelt <palmerdabbelt@google.com>
    Stable-dep-of: c56fb2aab235 ("riscv, bpf: Fix inconsistent JIT image generation")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

riscv: bpf: Move bpf_jit_alloc_exec() and bpf_jit_free_exec() to core [+ + +]
Author: Jisheng Zhang <jszhang@kernel.org>
Date:   Tue Mar 30 02:24:54 2021 +0800

    riscv: bpf: Move bpf_jit_alloc_exec() and bpf_jit_free_exec() to core
    
    [ Upstream commit 1d27d854425faec98f352cf88ec3e2a8844429a4 ]
    
    We will drop the executable permissions of the code pages from the
    mapping at allocation time soon. Move bpf_jit_alloc_exec() and
    bpf_jit_free_exec() to bpf_jit_core.c so that they can be shared by
    both RV64I and RV32I.
    
    Signed-off-by: Jisheng Zhang <jszhang@kernel.org>
    Acked-by: Luke Nelson <luke.r.nels@gmail.com>
    Signed-off-by: Palmer Dabbelt <palmerdabbelt@google.com>
    Stable-dep-of: c56fb2aab235 ("riscv, bpf: Fix inconsistent JIT image generation")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
rtc: st-lpc: Release some resources in st_rtc_probe() in case of error [+ + +]
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Thu Jun 8 21:11:42 2023 +0200

    rtc: st-lpc: Release some resources in st_rtc_probe() in case of error
    
    [ Upstream commit 06c6e1b01d9261f03629cefd1f3553503291e6cf ]
    
    If an error occurs after clk_get(), the corresponding resources should be
    released.
    
    Use devm_clk_get() to fix it.
    
    Fixes: b5b2bdfc2893 ("rtc: st: Add new driver for ST's LPC RTC")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Link: https://lore.kernel.org/r/866af6adbc7454a7b4505eb6c28fbdc86ccff39e.1686251455.git.christophe.jaillet@wanadoo.fr
    Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
rtnetlink: extend RTEXT_FILTER_SKIP_STATS to IFLA_VF_INFO [+ + +]
Author: Edwin Peer <edwin.peer@broadcom.com>
Date:   Sun Jun 11 13:51:08 2023 +0300

    rtnetlink: extend RTEXT_FILTER_SKIP_STATS to IFLA_VF_INFO
    
    [ Upstream commit fa0e21fa44438a0e856d42224bfa24641d37b979 ]
    
    This filter already exists for excluding IPv6 SNMP stats. Extend its
    definition to also exclude IFLA_VF_INFO stats in RTM_GETLINK.
    
    This patch constitutes a partial fix for a netlink attribute nesting
    overflow bug in IFLA_VFINFO_LIST. By excluding the stats when the
    requester doesn't need them, the truncation of the VF list is avoided.
    
    While it was technically only the stats added in commit c5a9f6f0ab40
    ("net/core: Add drop counters to VF statistics") breaking the camel's
    back, the appreciable size of the stats data should never have been
    included without due consideration for the maximum number of VFs
    supported by PCI.
    
    Fixes: 3b766cd83232 ("net/core: Add reading VF statistics through the PF netdevice")
    Fixes: c5a9f6f0ab40 ("net/core: Add drop counters to VF statistics")
    Signed-off-by: Edwin Peer <edwin.peer@broadcom.com>
    Cc: Edwin Peer <espeer@gmail.com>
    Signed-off-by: Gal Pressman <gal@nvidia.com>
    Link: https://lore.kernel.org/r/20230611105108.122586-1-gal@nvidia.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
s390/decompressor: fix misaligned symbol build error [+ + +]
Author: Heiko Carstens <hca@linux.ibm.com>
Date:   Thu Jun 22 14:55:08 2023 +0200

    s390/decompressor: fix misaligned symbol build error
    
    commit 938f0c35d7d93a822ab9c9728e3205e8e57409d0 upstream.
    
    Nathan Chancellor reported a kernel build error on Fedora 39:
    
    $ clang --version | head -1
    clang version 16.0.5 (Fedora 16.0.5-1.fc39)
    
    $ s390x-linux-gnu-ld --version | head -1
    GNU ld version 2.40-1.fc39
    
    $ make -skj"$(nproc)" ARCH=s390 CC=clang CROSS_COMPILE=s390x-linux-gnu- olddefconfig all
    s390x-linux-gnu-ld: arch/s390/boot/startup.o(.text+0x5b4): misaligned symbol `_decompressor_end' (0x35b0f) for relocation R_390_PC32DBL
    make[3]: *** [.../arch/s390/boot/Makefile:78: arch/s390/boot/vmlinux] Error 1
    
    It turned out that the problem with misaligned symbols on s390 was fixed
    with commit 80ddf5ce1c92 ("s390: always build relocatable kernel") for the
    kernel image, but did not take into account that the decompressor uses its
    own set of CFLAGS, which come without -fPIE.
    
    Add the -fPIE flag also to the decompresser CFLAGS to fix this.
    
    Reported-by: Nathan Chancellor <nathan@kernel.org>
    Tested-by: Nathan Chancellor <nathan@kernel.org>
    Reported-by: CKI <cki-project@redhat.com>
    Suggested-by: Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
    Link: https://github.com/ClangBuiltLinux/linux/issues/1747
    Link: https://lore.kernel.org/32935.123062114500601371@us-mta-9.us.mimecast.lan/
    Link: https://lore.kernel.org/r/20230622125508.1068457-1-hca@linux.ibm.com
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
    Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
s390/qeth: Fix vipa deletion [+ + +]
Author: Thorsten Winkler <twinkler@linux.ibm.com>
Date:   Tue Jul 4 16:41:21 2023 +0200

    s390/qeth: Fix vipa deletion
    
    [ Upstream commit 80de809bd35e2a8999edf9f5aaa2d8de18921f11 ]
    
    Change boolean parameter of function "qeth_l3_vipa_store" inside the
    "qeth_l3_dev_vipa_del4_store" function from "true" to "false" because
    "true" is used for adding a virtual ip address and "false" for deleting.
    
    Fixes: 2390166a6b45 ("s390/qeth: clean up L3 sysfs code")
    
    Reviewed-by: Alexandra Winter <wintera@linux.ibm.com>
    Reviewed-by: Wenjia Zhang <wenjia@linux.ibm.com>
    Signed-off-by: Thorsten Winkler <twinkler@linux.ibm.com>
    Signed-off-by: Alexandra Winter <wintera@linux.ibm.com>
    Reviewed-by: Simon Horman <simon.horman@corigine.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
samples/bpf: Fix buffer overflow in tcp_basertt [+ + +]
Author: Pengcheng Yang <yangpc@wangsu.com>
Date:   Fri May 5 16:50:58 2023 +0800

    samples/bpf: Fix buffer overflow in tcp_basertt
    
    [ Upstream commit f4dea9689c5fea3d07170c2cb0703e216f1a0922 ]
    
    Using sizeof(nv) or strlen(nv)+1 is correct.
    
    Fixes: c890063e4404 ("bpf: sample BPF_SOCKET_OPS_BASE_RTT program")
    Signed-off-by: Pengcheng Yang <yangpc@wangsu.com>
    Link: https://lore.kernel.org/r/1683276658-2860-1-git-send-email-yangpc@wangsu.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
samples: ftrace: Save required argument registers in sample trampolines [+ + +]
Author: Florent Revest <revest@chromium.org>
Date:   Thu Apr 27 16:06:59 2023 +0200

    samples: ftrace: Save required argument registers in sample trampolines
    
    commit 8564c315876ab86fcaf8e7f558d6a84cb2ce5590 upstream.
    
    The ftrace-direct-too sample traces the handle_mm_fault function whose
    signature changed since the introduction of the sample. Since:
    commit bce617edecad ("mm: do page fault accounting in handle_mm_fault")
    handle_mm_fault now has 4 arguments. Therefore, the sample trampoline
    should save 4 argument registers.
    
    s390 saves all argument registers already so it does not need a change
    but x86_64 needs an extra push and pop.
    
    This also evolves the signature of the tracing function to make it
    mirror the signature of the traced function.
    
    Link: https://lkml.kernel.org/r/20230427140700.625241-2-revest@chromium.org
    
    Cc: stable@vger.kernel.org
    Fixes: bce617edecad ("mm: do page fault accounting in handle_mm_fault")
    Reviewed-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Reviewed-by: Mark Rutland <mark.rutland@arm.com>
    Acked-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Florent Revest <revest@chromium.org>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
sched/fair: Don't balance task to its current running CPU [+ + +]
Author: Yicong Yang <yangyicong@hisilicon.com>
Date:   Tue May 30 16:25:07 2023 +0800

    sched/fair: Don't balance task to its current running CPU
    
    [ Upstream commit 0dd37d6dd33a9c23351e6115ae8cdac7863bc7de ]
    
    We've run into the case that the balancer tries to balance a migration
    disabled task and trigger the warning in set_task_cpu() like below:
    
     ------------[ cut here ]------------
     WARNING: CPU: 7 PID: 0 at kernel/sched/core.c:3115 set_task_cpu+0x188/0x240
     Modules linked in: hclgevf xt_CHECKSUM ipt_REJECT nf_reject_ipv4 <...snip>
     CPU: 7 PID: 0 Comm: swapper/7 Kdump: loaded Tainted: G           O       6.1.0-rc4+ #1
     Hardware name: Huawei TaiShan 2280 V2/BC82AMDC, BIOS 2280-V2 CS V5.B221.01 12/09/2021
     pstate: 604000c9 (nZCv daIF +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
     pc : set_task_cpu+0x188/0x240
     lr : load_balance+0x5d0/0xc60
     sp : ffff80000803bc70
     x29: ffff80000803bc70 x28: ffff004089e190e8 x27: ffff004089e19040
     x26: ffff007effcabc38 x25: 0000000000000000 x24: 0000000000000001
     x23: ffff80000803be84 x22: 000000000000000c x21: ffffb093e79e2a78
     x20: 000000000000000c x19: ffff004089e19040 x18: 0000000000000000
     x17: 0000000000001fad x16: 0000000000000030 x15: 0000000000000000
     x14: 0000000000000003 x13: 0000000000000000 x12: 0000000000000000
     x11: 0000000000000001 x10: 0000000000000400 x9 : ffffb093e4cee530
     x8 : 00000000fffffffe x7 : 0000000000ce168a x6 : 000000000000013e
     x5 : 00000000ffffffe1 x4 : 0000000000000001 x3 : 0000000000000b2a
     x2 : 0000000000000b2a x1 : ffffb093e6d6c510 x0 : 0000000000000001
     Call trace:
      set_task_cpu+0x188/0x240
      load_balance+0x5d0/0xc60
      rebalance_domains+0x26c/0x380
      _nohz_idle_balance.isra.0+0x1e0/0x370
      run_rebalance_domains+0x6c/0x80
      __do_softirq+0x128/0x3d8
      ____do_softirq+0x18/0x24
      call_on_irq_stack+0x2c/0x38
      do_softirq_own_stack+0x24/0x3c
      __irq_exit_rcu+0xcc/0xf4
      irq_exit_rcu+0x18/0x24
      el1_interrupt+0x4c/0xe4
      el1h_64_irq_handler+0x18/0x2c
      el1h_64_irq+0x74/0x78
      arch_cpu_idle+0x18/0x4c
      default_idle_call+0x58/0x194
      do_idle+0x244/0x2b0
      cpu_startup_entry+0x30/0x3c
      secondary_start_kernel+0x14c/0x190
      __secondary_switched+0xb0/0xb4
     ---[ end trace 0000000000000000 ]---
    
    Further investigation shows that the warning is superfluous, the migration
    disabled task is just going to be migrated to its current running CPU.
    This is because that on load balance if the dst_cpu is not allowed by the
    task, we'll re-select a new_dst_cpu as a candidate. If no task can be
    balanced to dst_cpu we'll try to balance the task to the new_dst_cpu
    instead. In this case when the migration disabled task is not on CPU it
    only allows to run on its current CPU, load balance will select its
    current CPU as new_dst_cpu and later triggers the warning above.
    
    The new_dst_cpu is chosen from the env->dst_grpmask. Currently it
    contains CPUs in sched_group_span() and if we have overlapped groups it's
    possible to run into this case. This patch makes env->dst_grpmask of
    group_balance_mask() which exclude any CPUs from the busiest group and
    solve the issue. For balancing in a domain with no overlapped groups
    the behaviour keeps same as before.
    
    Suggested-by: Vincent Guittot <vincent.guittot@linaro.org>
    Signed-off-by: Yicong Yang <yangyicong@hisilicon.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Reviewed-by: Vincent Guittot <vincent.guittot@linaro.org>
    Link: https://lore.kernel.org/r/20230530082507.10444-1-yangyicong@huawei.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
scripts/tags.sh: Resolve gtags empty index generation [+ + +]
Author: Ahmed S. Darwish <darwi@linutronix.de>
Date:   Mon May 15 19:32:16 2023 +0200

    scripts/tags.sh: Resolve gtags empty index generation
    
    commit e1b37563caffc410bb4b55f153ccb14dede66815 upstream.
    
    gtags considers any file outside of its current working directory
    "outside the source tree" and refuses to index it. For O= kernel builds,
    or when "make" is invoked from a directory other then the kernel source
    tree, gtags ignores the entire kernel source and generates an empty
    index.
    
    Force-set gtags current working directory to the kernel source tree.
    
    Due to commit 9da0763bdd82 ("kbuild: Use relative path when building in
    a subdir of the source tree"), if the kernel build is done in a
    sub-directory of the kernel source tree, the kernel Makefile will set
    the kernel's $srctree to ".." for shorter compile-time and run-time
    warnings. Consequently, the list of files to be indexed will be in the
    "../*" form, rendering all such paths invalid once gtags switches to the
    kernel source tree as its current working directory.
    
    If gtags indexing is requested and the build directory is not the kernel
    source tree, index all files in absolute-path form.
    
    Note, indexing in absolute-path form will not affect the generated
    index, as paths in gtags indices are always relative to the gtags "root
    directory" anyway (as evidenced by "gtags --dump").
    
    Signed-off-by: Ahmed S. Darwish <darwi@linutronix.de>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
scsi: 3w-xxxx: Add error handling for initialization failure in tw_probe() [+ + +]
Author: Yuchen Yang <u202114568@hust.edu.cn>
Date:   Fri May 5 22:12:55 2023 +0800

    scsi: 3w-xxxx: Add error handling for initialization failure in tw_probe()
    
    [ Upstream commit 2e2fe5ac695a00ab03cab4db1f4d6be07168ed9d ]
    
    Smatch complains that:
    
    tw_probe() warn: missing error code 'retval'
    
    This patch adds error checking to tw_probe() to handle initialization
    failure. If tw_reset_sequence() function returns a non-zero value, the
    function will return -EINVAL to indicate initialization failure.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Yuchen Yang <u202114568@hust.edu.cn>
    Link: https://lore.kernel.org/r/20230505141259.7730-1-u202114568@hust.edu.cn
    Reviewed-by: Dan Carpenter <dan.carpenter@linaro.org>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: qedf: Fix NULL dereference in error handling [+ + +]
Author: Jinhong Zhu <jinhongzhu@hust.edu.cn>
Date:   Tue May 2 22:00:21 2023 +0800

    scsi: qedf: Fix NULL dereference in error handling
    
    [ Upstream commit f025312b089474a54e4859f3453771314d9e3d4f ]
    
    Smatch reported:
    
    drivers/scsi/qedf/qedf_main.c:3056 qedf_alloc_global_queues()
    warn: missing unwind goto?
    
    At this point in the function, nothing has been allocated so we can return
    directly. In particular the "qedf->global_queues" have not been allocated
    so calling qedf_free_global_queues() will lead to a NULL dereference when
    we check if (!gl[i]) and "gl" is NULL.
    
    Fixes: 61d8658b4a43 ("scsi: qedf: Add QLogic FastLinQ offload FCoE driver framework.")
    Signed-off-by: Jinhong Zhu <jinhongzhu@hust.edu.cn>
    Link: https://lore.kernel.org/r/20230502140022.2852-1-jinhongzhu@hust.edu.cn
    Reviewed-by: Dan Carpenter <error27@gmail.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: qla2xxx: Array index may go out of bound [+ + +]
Author: Nilesh Javali <njavali@marvell.com>
Date:   Wed Jun 7 17:08:36 2023 +0530

    scsi: qla2xxx: Array index may go out of bound
    
    commit d721b591b95cf3f290f8a7cbe90aa2ee0368388d upstream.
    
    Klocwork reports array 'vha->host_str' of size 16 may use index value(s)
    16..19.  Use snprintf() instead of sprintf().
    
    Cc: stable@vger.kernel.org
    Co-developed-by: Bikash Hazarika <bhazarika@marvell.com>
    Signed-off-by: Bikash Hazarika <bhazarika@marvell.com>
    Signed-off-by: Nilesh Javali <njavali@marvell.com>
    Link: https://lore.kernel.org/r/20230607113843.37185-2-njavali@marvell.com
    Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: qla2xxx: Check valid rport returned by fc_bsg_to_rport() [+ + +]
Author: Nilesh Javali <njavali@marvell.com>
Date:   Wed Jun 7 17:08:39 2023 +0530

    scsi: qla2xxx: Check valid rport returned by fc_bsg_to_rport()
    
    commit af73f23a27206ffb3c477cac75b5fcf03410556e upstream.
    
    Klocwork reported warning of rport maybe NULL and will be dereferenced.
    rport returned by call to fc_bsg_to_rport() could be NULL and dereferenced.
    
    Check valid rport returned by fc_bsg_to_rport().
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Nilesh Javali <njavali@marvell.com>
    Link: https://lore.kernel.org/r/20230607113843.37185-5-njavali@marvell.com
    Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: qla2xxx: Correct the index of array [+ + +]
Author: Bikash Hazarika <bhazarika@marvell.com>
Date:   Wed Jun 7 17:08:42 2023 +0530

    scsi: qla2xxx: Correct the index of array
    
    commit b1b9d3825df4c757d653d0b1df66f084835db9c3 upstream.
    
    Klocwork reported array 'port_dstate_str' of size 10 may use index value(s)
    10..15.
    
    Add a fix to correct the index of array.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Bikash Hazarika <bhazarika@marvell.com>
    Signed-off-by: Nilesh Javali <njavali@marvell.com>
    Link: https://lore.kernel.org/r/20230607113843.37185-8-njavali@marvell.com
    Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: qla2xxx: Fix buffer overrun [+ + +]
Author: Quinn Tran <qutran@marvell.com>
Date:   Wed Jun 7 17:08:40 2023 +0530

    scsi: qla2xxx: Fix buffer overrun
    
    commit b68710a8094fdffe8dd4f7a82c82649f479bb453 upstream.
    
    Klocwork warning: Buffer Overflow - Array Index Out of Bounds
    
    Driver uses fc_els_flogi to calculate size of buffer.  The actual buffer is
    nested inside of fc_els_flogi which is smaller.
    
    Replace structure name to allow proper size calculation.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Quinn Tran <qutran@marvell.com>
    Signed-off-by: Nilesh Javali <njavali@marvell.com>
    Link: https://lore.kernel.org/r/20230607113843.37185-6-njavali@marvell.com
    Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: qla2xxx: Fix error code in qla2x00_start_sp() [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Mon Jun 26 13:58:47 2023 +0300

    scsi: qla2xxx: Fix error code in qla2x00_start_sp()
    
    [ Upstream commit e579b007eff3ff8d29d59d16214cd85fb9e573f7 ]
    
    This should be negative -EAGAIN instead of positive.  The callers treat
    non-zero error codes the same so it doesn't really impact runtime beyond
    some trivial differences to debug output.
    
    Fixes: 80676d054e5a ("scsi: qla2xxx: Fix session cleanup hang")
    Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
    Link: https://lore.kernel.org/r/49866d28-4cfe-47b0-842b-78f110e61aab@moroto.mountain
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: qla2xxx: Fix potential NULL pointer dereference [+ + +]
Author: Bikash Hazarika <bhazarika@marvell.com>
Date:   Wed Jun 7 17:08:37 2023 +0530

    scsi: qla2xxx: Fix potential NULL pointer dereference
    
    commit 464ea494a40c6e3e0e8f91dd325408aaf21515ba upstream.
    
    Klocwork tool reported 'cur_dsd' may be dereferenced.  Add fix to validate
    pointer before dereferencing the pointer.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Bikash Hazarika <bhazarika@marvell.com>
    Signed-off-by: Nilesh Javali <njavali@marvell.com>
    Link: https://lore.kernel.org/r/20230607113843.37185-3-njavali@marvell.com
    Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: qla2xxx: Pointer may be dereferenced [+ + +]
Author: Shreyas Deodhar <sdeodhar@marvell.com>
Date:   Wed Jun 7 17:08:41 2023 +0530

    scsi: qla2xxx: Pointer may be dereferenced
    
    commit 00eca15319d9ce8c31cdf22f32a3467775423df4 upstream.
    
    Klocwork tool reported pointer 'rport' returned from call to function
    fc_bsg_to_rport() may be NULL and will be dereferenced.
    
    Add a fix to validate rport before dereferencing.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Shreyas Deodhar <sdeodhar@marvell.com>
    Signed-off-by: Nilesh Javali <njavali@marvell.com>
    Link: https://lore.kernel.org/r/20230607113843.37185-7-njavali@marvell.com
    Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: qla2xxx: Remove unused nvme_ls_waitq wait queue [+ + +]
Author: Manish Rangankar <mrangankar@marvell.com>
Date:   Thu Jun 15 13:16:33 2023 +0530

    scsi: qla2xxx: Remove unused nvme_ls_waitq wait queue
    
    commit 20fce500b232b970e40312a9c97e7f3b6d7a709c upstream.
    
    System crash when qla2x00_start_sp(sp) returns error code EGAIN and wake_up
    gets called for uninitialized wait queue sp->nvme_ls_waitq.
    
        qla2xxx [0000:37:00.1]-2121:5: Returning existing qpair of ffff8ae2c0513400 for idx=0
        qla2xxx [0000:37:00.1]-700e:5: qla2x00_start_sp failed = 11
        BUG: unable to handle kernel NULL pointer dereference at 0000000000000000
        PGD 0 P4D 0
        Oops: 0000 [#1] SMP NOPTI
        Hardware name: HPE ProLiant DL360 Gen10/ProLiant DL360 Gen10, BIOS U32 09/03/2021
        Workqueue: nvme-wq nvme_fc_connect_ctrl_work [nvme_fc]
        RIP: 0010:__wake_up_common+0x4c/0x190
        RSP: 0018:ffff95f3e0cb7cd0 EFLAGS: 00010086
        RAX: 0000000000000000 RBX: ffff8b08d3b26328 RCX: 0000000000000000
        RDX: 0000000000000001 RSI: 0000000000000003 RDI: ffff8b08d3b26320
        RBP: 0000000000000001 R08: 0000000000000000 R09: ffffffffffffffe8
        R10: 0000000000000000 R11: ffff95f3e0cb7a60 R12: ffff95f3e0cb7d20
        R13: 0000000000000003 R14: 0000000000000000 R15: 0000000000000000
        FS:  0000000000000000(0000) GS:ffff8b2fdf6c0000(0000) knlGS:0000000000000000
        CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
        CR2: 0000000000000000 CR3: 0000002f1e410002 CR4: 00000000007706e0
        DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
        DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
        PKRU: 55555554
        Call Trace:
         __wake_up_common_lock+0x7c/0xc0
         qla_nvme_ls_req+0x355/0x4c0 [qla2xxx]
         ? __nvme_fc_send_ls_req+0x260/0x380 [nvme_fc]
         ? nvme_fc_send_ls_req.constprop.42+0x1a/0x45 [nvme_fc]
         ? nvme_fc_connect_ctrl_work.cold.63+0x1e3/0xa7d [nvme_fc]
    
    Remove unused nvme_ls_waitq wait queue. nvme_ls_waitq logic was removed
    previously in the commits tagged Fixed: below.
    
    Fixes: 219d27d7147e ("scsi: qla2xxx: Fix race conditions in the code for aborting SCSI commands")
    Fixes: 5621b0dd7453 ("scsi: qla2xxx: Simpify unregistration of FC-NVMe local/remote ports")
    Cc: stable@vger.kernel.org
    Signed-off-by: Manish Rangankar <mrangankar@marvell.com>
    Signed-off-by: Nilesh Javali <njavali@marvell.com>
    Link: https://lore.kernel.org/r/20230615074633.12721-1-njavali@marvell.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: qla2xxx: Wait for io return on terminate rport [+ + +]
Author: Quinn Tran <qutran@marvell.com>
Date:   Fri Apr 28 00:53:38 2023 -0700

    scsi: qla2xxx: Wait for io return on terminate rport
    
    commit fc0cba0c7be8261a1625098bd1d695077ec621c9 upstream.
    
    System crash due to use after free.
    Current code allows terminate_rport_io to exit before making
    sure all IOs has returned. For FCP-2 device, IO's can hang
    on in HW because driver has not tear down the session in FW at
    first sign of cable pull. When dev_loss_tmo timer pops,
    terminate_rport_io is called and upper layer is about to
    free various resources. Terminate_rport_io trigger qla to do
    the final cleanup, but the cleanup might not be fast enough where it
    leave qla still holding on to the same resource.
    
    Wait for IO's to return to upper layer before resources are freed.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Quinn Tran <qutran@marvell.com>
    Signed-off-by: Nilesh Javali <njavali@marvell.com>
    Link: https://lore.kernel.org/r/20230428075339.32551-7-njavali@marvell.com
    Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
sctp: add bpf_bypass_getsockopt proto callback [+ + +]
Author: Alexander Mikhalitsyn <alexander@mihalicyn.com>
Date:   Thu May 11 15:25:06 2023 +0200

    sctp: add bpf_bypass_getsockopt proto callback
    
    [ Upstream commit 2598619e012cee5273a2821441b9a051ad931249 ]
    
    Implement ->bpf_bypass_getsockopt proto callback and filter out
    SCTP_SOCKOPT_PEELOFF, SCTP_SOCKOPT_PEELOFF_FLAGS and SCTP_SOCKOPT_CONNECTX3
    socket options from running eBPF hook on them.
    
    SCTP_SOCKOPT_PEELOFF and SCTP_SOCKOPT_PEELOFF_FLAGS options do fd_install(),
    and if BPF_CGROUP_RUN_PROG_GETSOCKOPT hook returns an error after success of
    the original handler sctp_getsockopt(...), userspace will receive an error
    from getsockopt syscall and will be not aware that fd was successfully
    installed into a fdtable.
    
    As pointed by Marcelo Ricardo Leitner it seems reasonable to skip
    bpf getsockopt hook for SCTP_SOCKOPT_CONNECTX3 sockopt too.
    Because internaly, it triggers connect() and if error is masked
    then userspace will be confused.
    
    This patch was born as a result of discussion around a new SCM_PIDFD interface:
    https://lore.kernel.org/all/20230413133355.350571-3-aleksandr.mikhalitsyn@canonical.com/
    
    Fixes: 0d01da6afc54 ("bpf: implement getsockopt and setsockopt hooks")
    Cc: Daniel Borkmann <daniel@iogearbox.net>
    Cc: Christian Brauner <brauner@kernel.org>
    Cc: Stanislav Fomichev <sdf@google.com>
    Cc: Neil Horman <nhorman@tuxdriver.com>
    Cc: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
    Cc: Xin Long <lucien.xin@gmail.com>
    Cc: linux-sctp@vger.kernel.org
    Cc: linux-kernel@vger.kernel.org
    Cc: netdev@vger.kernel.org
    Suggested-by: Stanislav Fomichev <sdf@google.com>
    Acked-by: Stanislav Fomichev <sdf@google.com>
    Signed-off-by: Alexander Mikhalitsyn <aleksandr.mikhalitsyn@canonical.com>
    Acked-by: Xin Long <lucien.xin@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

sctp: fix potential deadlock on &net->sctp.addr_wq_lock [+ + +]
Author: Chengfeng Ye <dg573847474@gmail.com>
Date:   Tue Jun 27 12:03:40 2023 +0000

    sctp: fix potential deadlock on &net->sctp.addr_wq_lock
    
    [ Upstream commit 6feb37b3b06e9049e20dcf7e23998f92c9c5be9a ]
    
    As &net->sctp.addr_wq_lock is also acquired by the timer
    sctp_addr_wq_timeout_handler() in protocal.c, the same lock acquisition
    at sctp_auto_asconf_init() seems should disable irq since it is called
    from sctp_accept() under process context.
    
    Possible deadlock scenario:
    sctp_accept()
        -> sctp_sock_migrate()
        -> sctp_auto_asconf_init()
        -> spin_lock(&net->sctp.addr_wq_lock)
            <timer interrupt>
            -> sctp_addr_wq_timeout_handler()
            -> spin_lock_bh(&net->sctp.addr_wq_lock); (deadlock here)
    
    This flaw was found using an experimental static analysis tool we are
    developing for irq-related deadlock.
    
    The tentative patch fix the potential deadlock by spin_lock_bh().
    
    Signed-off-by: Chengfeng Ye <dg573847474@gmail.com>
    Fixes: 34e5b0118685 ("sctp: delay auto_asconf init until binding the first addr")
    Acked-by: Xin Long <lucien.xin@gmail.com>
    Link: https://lore.kernel.org/r/20230627120340.19432-1-dg573847474@gmail.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
security: keys: Modify mismatched function name [+ + +]
Author: Jiapeng Chong <jiapeng.chong@linux.alibaba.com>
Date:   Wed Jun 14 10:18:25 2023 +0800

    security: keys: Modify mismatched function name
    
    [ Upstream commit 2a4152742025c5f21482e8cebc581702a0fa5b01 ]
    
    No functional modification involved.
    
    security/keys/trusted-keys/trusted_tpm2.c:203: warning: expecting prototype for tpm_buf_append_auth(). Prototype was for tpm2_buf_append_auth() instead.
    
    Fixes: 2e19e10131a0 ("KEYS: trusted: Move TPM2 trusted keys code")
    Reported-by: Abaci Robot <abaci@linux.alibaba.com>
    Closes: https://bugzilla.openanolis.cn/show_bug.cgi?id=5524
    Signed-off-by: Jiapeng Chong <jiapeng.chong@linux.alibaba.com>
    Reviewed-by: Paul Moore <paul@paul-moore.com>
    Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
selftests/bpf: Add verifier test for PTR_TO_MEM spill [+ + +]
Author: Gilad Reti <gilad.reti@gmail.com>
Date:   Wed Jan 13 07:38:08 2021 +0200

    selftests/bpf: Add verifier test for PTR_TO_MEM spill
    
    commit 4237e9f4a96228ccc8a7abe5e4b30834323cd353 upstream.
    
    Add a test to check that the verifier is able to recognize spilling of
    PTR_TO_MEM registers, by reserving a ringbuf buffer, forcing the spill
    of a pointer holding the buffer address to the stack, filling it back
    in from the stack and writing to the memory area pointed by it.
    
    The patch was partially contributed by CyberArk Software, Inc.
    
    Signed-off-by: Gilad Reti <gilad.reti@gmail.com>
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Acked-by: Yonghong Song <yhs@fb.com>
    Acked-by: KP Singh <kpsingh@kernel.org>
    Link: https://lore.kernel.org/bpf/20210113053810.13518-2-gilad.reti@gmail.com
    Cc: Lorenz Bauer <lmb@isovalent.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
selftests: rtnetlink: remove netdevsim device after ipsec offload test [+ + +]
Author: Sabrina Dubroca <sd@queasysnail.net>
Date:   Thu Jun 22 23:03:34 2023 +0200

    selftests: rtnetlink: remove netdevsim device after ipsec offload test
    
    [ Upstream commit 5f789f103671fec3733ebe756e56adf15c90c21d ]
    
    On systems where netdevsim is built-in or loaded before the test
    starts, kci_test_ipsec_offload doesn't remove the netdevsim device it
    created during the test.
    
    Fixes: e05b2d141fef ("netdevsim: move netdev creation/destruction to dev probe")
    Signed-off-by: Sabrina Dubroca <sd@queasysnail.net>
    Reviewed-by: Simon Horman <simon.horman@corigine.com>
    Reviewed-by: Jiri Pirko <jiri@nvidia.com>
    Link: https://lore.kernel.org/r/e1cb94f4f82f4eca4a444feec4488a1323396357.1687466906.git.sd@queasysnail.net
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

selftests: tc: add 'ct' action kconfig dep [+ + +]
Author: Matthieu Baerts <matthieu.baerts@tessares.net>
Date:   Thu Jul 13 23:16:45 2023 +0200

    selftests: tc: add 'ct' action kconfig dep
    
    commit 719b4774a8cb1a501e2d22a5a4a3a0a870e427d5 upstream.
    
    When looking for something else in LKFT reports [1], I noticed most of
    the tests were skipped because the "teardown stage" did not complete
    successfully.
    
    Pedro found out this is due to the fact CONFIG_NF_FLOW_TABLE is required
    but not listed in the 'config' file. Adding it to the list fixes the
    issues on LKFT side. CONFIG_NET_ACT_CT is now set to 'm' in the final
    kconfig.
    
    Fixes: c34b961a2492 ("net/sched: act_ct: Create nf flow table per zone")
    Cc: stable@vger.kernel.org
    Link: https://qa-reports.linaro.org/lkft/linux-next-master/build/next-20230711/testrun/18267241/suite/kselftest-tc-testing/test/tc-testing_tdc_sh/log [1]
    Link: https://lore.kernel.org/netdev/0e061d4a-9a23-9f58-3b35-d8919de332d7@tessares.net/T/ [2]
    Suggested-by: Pedro Tammela <pctammela@mojatatu.com>
    Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
    Tested-by: Zhengchao Shao <shaozhengchao@huawei.com>
    Link: https://lore.kernel.org/r/20230713-tc-selftests-lkft-v1-2-1eb4fd3a96e7@tessares.net
    Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

selftests: tc: set timeout to 15 minutes [+ + +]
Author: Matthieu Baerts <matthieu.baerts@tessares.net>
Date:   Thu Jul 13 23:16:44 2023 +0200

    selftests: tc: set timeout to 15 minutes
    
    commit fda05798c22a354efde09a76bdfc276b2d591829 upstream.
    
    When looking for something else in LKFT reports [1], I noticed that the
    TC selftest ended with a timeout error:
    
      not ok 1 selftests: tc-testing: tdc.sh # TIMEOUT 45 seconds
    
    The timeout had been introduced 3 years ago, see the Fixes commit below.
    
    This timeout is only in place when executing the selftests via the
    kselftests runner scripts. I guess this is not what most TC devs are
    using and nobody noticed the issue before.
    
    The new timeout is set to 15 minutes as suggested by Pedro [2]. It looks
    like it is plenty more time than what it takes in "normal" conditions.
    
    Fixes: 852c8cbf34d3 ("selftests/kselftest/runner.sh: Add 45 second timeout per test")
    Cc: stable@vger.kernel.org
    Link: https://qa-reports.linaro.org/lkft/linux-next-master/build/next-20230711/testrun/18267241/suite/kselftest-tc-testing/test/tc-testing_tdc_sh/log [1]
    Link: https://lore.kernel.org/netdev/0e061d4a-9a23-9f58-3b35-d8919de332d7@tessares.net/T/ [2]
    Suggested-by: Pedro Tammela <pctammela@mojatatu.com>
    Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
    Reviewed-by: Zhengchao Shao <shaozhengchao@huawei.com>
    Link: https://lore.kernel.org/r/20230713-tc-selftests-lkft-v1-1-1eb4fd3a96e7@tessares.net
    Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
serial: 8250: lock port for stop_rx() in omap8250_irq() [+ + +]
Author: John Ogness <john.ogness@linutronix.de>
Date:   Thu May 25 11:37:54 2023 +0206

    serial: 8250: lock port for stop_rx() in omap8250_irq()
    
    [ Upstream commit ca73a892c5bec4b08a2fa22b3015e98ed905abb7 ]
    
    The uarts_ops stop_rx() callback expects that the port->lock is
    taken and interrupts are disabled.
    
    Fixes: 1fe0e1fa3209 ("serial: 8250_omap: Handle optional overrun-throttle-ms property")
    Signed-off-by: John Ogness <john.ogness@linutronix.de>
    Reviewed-by: Tony Lindgren <tony@atomide.com>
    Link: https://lore.kernel.org/r/20230525093159.223817-4-john.ogness@linutronix.de
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

serial: 8250: lock port for UART_IER access in omap8250_irq() [+ + +]
Author: John Ogness <john.ogness@linutronix.de>
Date:   Thu May 25 11:37:58 2023 +0206

    serial: 8250: lock port for UART_IER access in omap8250_irq()
    
    [ Upstream commit 25614735a647693c1260f253dc3ab32127697806 ]
    
    omap8250_irq() accesses UART_IER. This register is modified twice
    by each console write (serial8250_console_write()) under the port
    lock. omap8250_irq() must also take the port lock to guanentee
    synchronized access to UART_IER.
    
    Since the port lock is already being taken for the stop_rx() callback
    and since it is safe to call cancel_delayed_work() while holding the
    port lock, simply extend the port lock region to include UART_IER
    access.
    
    Fixes: 1fe0e1fa3209 ("serial: 8250_omap: Handle optional overrun-throttle-ms property")
    Signed-off-by: John Ogness <john.ogness@linutronix.de>
    Reviewed-by: Tony Lindgren <tony@atomide.com>
    Link: https://lore.kernel.org/r/20230525093159.223817-8-john.ogness@linutronix.de
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

serial: 8250: omap: Fix freeing of resources on failed register [+ + +]
Author: Tony Lindgren <tony@atomide.com>
Date:   Mon May 8 11:20:11 2023 +0300

    serial: 8250: omap: Fix freeing of resources on failed register
    
    [ Upstream commit b9ab22c2bc8652324a803b3e2be69838920b4025 ]
    
    If serial8250_register_8250_port() fails, the SoC can hang as the
    deferred PMQoS work will still run as is not flushed and removed.
    
    Fixes: 61929cf0169d ("tty: serial: Add 8250-core based omap driver")
    Signed-off-by: Tony Lindgren <tony@atomide.com>
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Link: https://lore.kernel.org/r/20230508082014.23083-2-tony@atomide.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

serial: 8250_omap: Use force_suspend and resume for system suspend [+ + +]
Author: Tony Lindgren <tony@atomide.com>
Date:   Wed Jun 14 07:59:19 2023 +0300

    serial: 8250_omap: Use force_suspend and resume for system suspend
    
    [ Upstream commit 20a41a62618df85f3a2981008edec5cadd785e0a ]
    
    We should not rely on autosuspend timeout for system suspend. Instead,
    let's use force_suspend and force_resume functions. Otherwise the serial
    port controller device may not be idled on suspend.
    
    As we are doing a register write on suspend to configure the serial port,
    we still need to runtime PM resume the port on suspend.
    
    While at it, let's switch to pm_runtime_resume_and_get() and check for
    errors returned. And let's add the missing line break before return to the
    suspend function while at it.
    
    Fixes: 09d8b2bdbc5c ("serial: 8250: omap: Provide ability to enable/disable UART as wakeup source")
    Signed-off-by: Tony Lindgren <tony@atomide.com>
    Tested-by: Dhruva Gole <d-gole@ti.com>
    Message-ID: <20230614045922.4798-1-tony@atomide.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

serial: atmel: don't enable IRQs prematurely [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Mon Jun 19 12:45:17 2023 +0300

    serial: atmel: don't enable IRQs prematurely
    
    commit 27a826837ec9a3e94cc44bd9328b8289b0fcecd7 upstream.
    
    The atmel_complete_tx_dma() function disables IRQs at the start
    of the function by calling spin_lock_irqsave(&port->lock, flags);
    There is no need to disable them a second time using the
    spin_lock_irq() function and, in fact, doing so is a bug because
    it will enable IRQs prematurely when we call spin_unlock_irq().
    
    Just use spin_lock/unlock() instead without disabling or enabling
    IRQs.
    
    Fixes: 08f738be88bb ("serial: at91: add tx dma support")
    Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
    Reviewed-by: Jiri Slaby <jirislaby@kernel.org>
    Acked-by: Richard Genoud <richard.genoud@gmail.com>
    Link: https://lore.kernel.org/r/cb7c39a9-c004-4673-92e1-be4e34b85368@moroto.mountain
    Cc: stable <stable@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
sfc: fix crash when reading stats while NIC is resetting [+ + +]
Author: Edward Cree <ecree.xilinx@gmail.com>
Date:   Fri Jun 23 15:34:48 2023 +0100

    sfc: fix crash when reading stats while NIC is resetting
    
    [ Upstream commit d1b355438b8325a486f087e506d412c4e852f37b ]
    
    efx_net_stats() (.ndo_get_stats64) can be called during an ethtool
     selftest, during which time nic_data->mc_stats is NULL as the NIC has
     been fini'd.  In this case do not attempt to fetch the latest stats
     from the hardware, else we will crash on a NULL dereference:
        BUG: kernel NULL pointer dereference, address: 0000000000000038
        RIP efx_nic_update_stats
        abridged calltrace:
        efx_ef10_update_stats_pf
        efx_net_stats
        dev_get_stats
        dev_seq_printf_stats
    Skipping the read is safe, we will simply give out stale stats.
    To ensure that the free in efx_ef10_fini_nic() does not race against
     efx_ef10_update_stats_pf(), which could cause a TOCTTOU bug, take the
     efx->stats_lock in fini_nic (it is already held across update_stats).
    
    Fixes: d3142c193dca ("sfc: refactor EF10 stats handling")
    Reviewed-by: Pieter Jansen van Vuuren <pieter.jansen-van-vuuren@amd.com>
    Signed-off-by: Edward Cree <ecree.xilinx@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
sh: dma: Fix DMA channel offset calculation [+ + +]
Author: Artur Rojek <contact@artur-rojek.eu>
Date:   Sat May 27 18:44:50 2023 +0200

    sh: dma: Fix DMA channel offset calculation
    
    [ Upstream commit e82e47584847129a20b8c9f4a1dcde09374fb0e0 ]
    
    Various SoCs of the SH3, SH4 and SH4A family, which use this driver,
    feature a differing number of DMA channels, which can be distributed
    between up to two DMAC modules. The existing implementation fails to
    correctly accommodate for all those variations, resulting in wrong
    channel offset calculations and leading to kernel panics.
    
    Rewrite dma_base_addr() in order to properly calculate channel offsets
    in a DMAC module. Fix dmaor_read_reg() and dmaor_write_reg(), so that
    the correct DMAC module base is selected for the DMAOR register.
    
    Fixes: 7f47c7189b3e8f19 ("sh: dma: More legacy cpu dma chainsawing.")
    Signed-off-by: Artur Rojek <contact@artur-rojek.eu>
    Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Reviewed-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
    Link: https://lore.kernel.org/r/20230527164452.64797-2-contact@artur-rojek.eu
    Signed-off-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

sh: j2: Use ioremap() to translate device tree address into kernel memory [+ + +]
Author: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
Date:   Wed May 3 14:57:41 2023 +0200

    sh: j2: Use ioremap() to translate device tree address into kernel memory
    
    [ Upstream commit bc9d1f0cecd2407cfb2364a7d4be2f52d1d46a9d ]
    
    Addresses the following warning when building j2_defconfig:
    
    arch/sh/kernel/cpu/sh2/probe.c: In function 'scan_cache':
    arch/sh/kernel/cpu/sh2/probe.c:24:16: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
       24 |  j2_ccr_base = (u32 __iomem *)of_flat_dt_translate_address(node);
          |
    
    Fixes: 5a846abad07f ("sh: add support for J-Core J2 processor")
    Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Tested-by: Rob Landley <rob@landley.net>
    Signed-off-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
    Link: https://lore.kernel.org/r/20230503125746.331835-1-glaubitz@physik.fu-berlin.de
    Signed-off-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

sh: pgtable-3level: Fix cast to pointer from integer of different size [+ + +]
Author: Geert Uytterhoeven <geert+renesas@glider.be>
Date:   Wed Sep 15 15:50:04 2021 +0200

    sh: pgtable-3level: Fix cast to pointer from integer of different size
    
    commit 8518e694203d0bfd202ea4a80356785b6992322e upstream.
    
    If X2TLB=y (CPU_SHX2=y or CPU_SHX3=y, e.g. migor_defconfig), pgd_t.pgd
    is "unsigned long long", causing:
    
        In file included from arch/sh/include/asm/pgtable.h:13,
                         from include/linux/pgtable.h:6,
                         from include/linux/mm.h:33,
                         from arch/sh/kernel/asm-offsets.c:14:
        arch/sh/include/asm/pgtable-3level.h: In function ‘pud_pgtable’:
        arch/sh/include/asm/pgtable-3level.h:37:9: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
           37 |  return (pmd_t *)pud_val(pud);
              |         ^
    
    Fix this by adding an intermediate cast to "unsigned long", which is
    basically what the old code did before.
    
    Fixes: 9cf6fa2458443118 ("mm: rename pud_page_vaddr to pud_pgtable and make it return pmd_t *")
    Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Tested-by: Daniel Palmer <daniel@thingy.jp>
    Acked-by: Rob Landley <rob@landley.net>
    Tested-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
    Signed-off-by: Rich Felker <dalias@libc.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
shmem: use ramfs_kill_sb() for kill_sb method of ramfs-based tmpfs [+ + +]
Author: Roberto Sassu <roberto.sassu@huawei.com>
Date:   Wed Jun 7 18:15:23 2023 +0200

    shmem: use ramfs_kill_sb() for kill_sb method of ramfs-based tmpfs
    
    commit 36ce9d76b0a93bae799e27e4f5ac35478c676592 upstream.
    
    As the ramfs-based tmpfs uses ramfs_init_fs_context() for the
    init_fs_context method, which allocates fc->s_fs_info, use ramfs_kill_sb()
    to free it and avoid a memory leak.
    
    Link: https://lkml.kernel.org/r/20230607161523.2876433-1-roberto.sassu@huaweicloud.com
    Fixes: c3b1b1cbf002 ("ramfs: add support for "mode=" mount option")
    Signed-off-by: Roberto Sassu <roberto.sassu@huawei.com>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: David Howells <dhowells@redhat.com>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
soc/fsl/qe: fix usb.c build errors [+ + +]
Author: Randy Dunlap <rdunlap@infradead.org>
Date:   Sun May 21 15:52:16 2023 -0700

    soc/fsl/qe: fix usb.c build errors
    
    [ Upstream commit 7b1a78babd0d2cd27aa07255dee0c2d7ac0f31e3 ]
    
    Fix build errors in soc/fsl/qe/usb.c when QUICC_ENGINE is not set.
    This happens when PPC_EP88XC is set, which selects CPM1 & CPM.
    When CPM is set, USB_FSL_QE can be set without QUICC_ENGINE
    being set. When USB_FSL_QE is set, QE_USB deafults to y, which
    causes build errors when QUICC_ENGINE is not set. Making
    QE_USB depend on QUICC_ENGINE prevents QE_USB from defaulting to y.
    
    Fixes these build errors:
    
    drivers/soc/fsl/qe/usb.o: in function `qe_usb_clock_set':
    usb.c:(.text+0x1e): undefined reference to `qe_immr'
    powerpc-linux-ld: usb.c:(.text+0x2a): undefined reference to `qe_immr'
    powerpc-linux-ld: usb.c:(.text+0xbc): undefined reference to `qe_setbrg'
    powerpc-linux-ld: usb.c:(.text+0xca): undefined reference to `cmxgcr_lock'
    powerpc-linux-ld: usb.c:(.text+0xce): undefined reference to `cmxgcr_lock'
    
    Fixes: 5e41486c408e ("powerpc/QE: add support for QE USB clocks routing")
    Signed-off-by: Randy Dunlap <rdunlap@infradead.org>
    Reported-by: kernel test robot <lkp@intel.com>
    Link: https://lore.kernel.org/all/202301101500.pillNv6R-lkp@intel.com/
    Suggested-by: Michael Ellerman <mpe@ellerman.id.au>
    Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
    Cc: Leo Li <leoyang.li@nxp.com>
    Cc: Masahiro Yamada <masahiroy@kernel.org>
    Cc: Nicolas Schier <nicolas@fjasle.eu>
    Cc: Qiang Zhao <qiang.zhao@nxp.com>
    Cc: linuxppc-dev <linuxppc-dev@lists.ozlabs.org>
    Cc: linux-arm-kernel@lists.infradead.org
    Cc: Kumar Gala <galak@kernel.crashing.org>
    Acked-by: Nicolas Schier <nicolas@jasle.eu>
    Signed-off-by: Li Yang <leoyang.li@nxp.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
spi: bcm-qspi: return error if neither hif_mspi nor mspi is available [+ + +]
Author: Jonas Gorski <jonas.gorski@gmail.com>
Date:   Thu Jun 29 15:43:05 2023 +0200

    spi: bcm-qspi: return error if neither hif_mspi nor mspi is available
    
    [ Upstream commit 7c1f23ad34fcdace50275a6aa1e1969b41c6233f ]
    
    If neither a "hif_mspi" nor "mspi" resource is present, the driver will
    just early exit in probe but still return success. Apart from not doing
    anything meaningful, this would then also lead to a null pointer access
    on removal, as platform_get_drvdata() would return NULL, which it would
    then try to dereference when trying to unregister the spi master.
    
    Fix this by unconditionally calling devm_ioremap_resource(), as it can
    handle a NULL res and will then return a viable ERR_PTR() if we get one.
    
    The "return 0;" was previously a "goto qspi_resource_err;" where then
    ret was returned, but since ret was still initialized to 0 at this place
    this was a valid conversion in 63c5395bb7a9 ("spi: bcm-qspi: Fix
    use-after-free on unbind"). The issue was not introduced by this commit,
    only made more obvious.
    
    Fixes: fa236a7ef240 ("spi: bcm-qspi: Add Broadcom MSPI driver")
    Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
    Reviewed-by: Kamal Dasu <kamal.dasu@broadcom.com>
    Link: https://lore.kernel.org/r/20230629134306.95823-1-jonas.gorski@gmail.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: bcm63xx: fix max prepend length [+ + +]
Author: Jonas Gorski <jonas.gorski@gmail.com>
Date:   Thu Jun 29 09:14:52 2023 +0200

    spi: bcm63xx: fix max prepend length
    
    [ Upstream commit 5158814cbb37bbb38344b3ecddc24ba2ed0365f2 ]
    
    The command word is defined as following:
    
        /* Command */
        #define SPI_CMD_COMMAND_SHIFT           0
        #define SPI_CMD_DEVICE_ID_SHIFT         4
        #define SPI_CMD_PREPEND_BYTE_CNT_SHIFT  8
        #define SPI_CMD_ONE_BYTE_SHIFT          11
        #define SPI_CMD_ONE_WIRE_SHIFT          12
    
    If the prepend byte count field starts at bit 8, and the next defined
    bit is SPI_CMD_ONE_BYTE at bit 11, it can be at most 3 bits wide, and
    thus the max value is 7, not 15.
    
    Fixes: b17de076062a ("spi/bcm63xx: work around inability to keep CS up")
    Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
    Link: https://lore.kernel.org/r/20230629071453.62024-1-jonas.gorski@gmail.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: spi-geni-qcom: Correct CS_TOGGLE bit in SPI_TRANS_CFG [+ + +]
Author: Vijaya Krishna Nivarthi <quic_vnivarth@quicinc.com>
Date:   Tue Apr 25 14:12:08 2023 +0530

    spi: spi-geni-qcom: Correct CS_TOGGLE bit in SPI_TRANS_CFG
    
    [ Upstream commit 5fd7c99ecf45c8ee8a9b1268f0ffc91cc6271da2 ]
    
    The CS_TOGGLE bit when set is supposed to instruct FW to
    toggle CS line between words. The driver with intent of
    disabling this behaviour has been unsetting BIT(0). This has
    not caused any trouble so far because the original BIT(1)
    is untouched and BIT(0) likely wasn't being used.
    
    Correct this to prevent a potential future bug.
    
    Signed-off-by: Vijaya Krishna Nivarthi <quic_vnivarth@quicinc.com
    Acked-by: Konrad Dybcio <konrad.dybcio@linaro.org
    Fixes: 561de45f72bd ("spi: spi-geni-qcom: Add SPI driver support for GENI based QUP")
    Reviewed-by: Douglas Anderson <dianders@chromium.org
    Link: https://lore.kernel.org/r/1682412128-1913-1-git-send-email-quic_vnivarth@quicinc.com
    Signed-off-by: Mark Brown <broonie@kernel.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
SUNRPC: Fix UAF in svc_tcp_listen_data_ready() [+ + +]
Author: Ding Hui <dinghui@sangfor.com.cn>
Date:   Mon May 15 10:13:07 2023 +0800

    SUNRPC: Fix UAF in svc_tcp_listen_data_ready()
    
    commit fc80fc2d4e39137869da3150ee169b40bf879287 upstream.
    
    After the listener svc_sock is freed, and before invoking svc_tcp_accept()
    for the established child sock, there is a window that the newsock
    retaining a freed listener svc_sock in sk_user_data which cloning from
    parent. In the race window, if data is received on the newsock, we will
    observe use-after-free report in svc_tcp_listen_data_ready().
    
    Reproduce by two tasks:
    
    1. while :; do rpc.nfsd 0 ; rpc.nfsd; done
    2. while :; do echo "" | ncat -4 127.0.0.1 2049 ; done
    
    KASAN report:
    
      ==================================================================
      BUG: KASAN: slab-use-after-free in svc_tcp_listen_data_ready+0x1cf/0x1f0 [sunrpc]
      Read of size 8 at addr ffff888139d96228 by task nc/102553
      CPU: 7 PID: 102553 Comm: nc Not tainted 6.3.0+ #18
      Hardware name: VMware, Inc. VMware Virtual Platform/440BX Desktop Reference Platform, BIOS 6.00 11/12/2020
      Call Trace:
       <IRQ>
       dump_stack_lvl+0x33/0x50
       print_address_description.constprop.0+0x27/0x310
       print_report+0x3e/0x70
       kasan_report+0xae/0xe0
       svc_tcp_listen_data_ready+0x1cf/0x1f0 [sunrpc]
       tcp_data_queue+0x9f4/0x20e0
       tcp_rcv_established+0x666/0x1f60
       tcp_v4_do_rcv+0x51c/0x850
       tcp_v4_rcv+0x23fc/0x2e80
       ip_protocol_deliver_rcu+0x62/0x300
       ip_local_deliver_finish+0x267/0x350
       ip_local_deliver+0x18b/0x2d0
       ip_rcv+0x2fb/0x370
       __netif_receive_skb_one_core+0x166/0x1b0
       process_backlog+0x24c/0x5e0
       __napi_poll+0xa2/0x500
       net_rx_action+0x854/0xc90
       __do_softirq+0x1bb/0x5de
       do_softirq+0xcb/0x100
       </IRQ>
       <TASK>
       ...
       </TASK>
    
      Allocated by task 102371:
       kasan_save_stack+0x1e/0x40
       kasan_set_track+0x21/0x30
       __kasan_kmalloc+0x7b/0x90
       svc_setup_socket+0x52/0x4f0 [sunrpc]
       svc_addsock+0x20d/0x400 [sunrpc]
       __write_ports_addfd+0x209/0x390 [nfsd]
       write_ports+0x239/0x2c0 [nfsd]
       nfsctl_transaction_write+0xac/0x110 [nfsd]
       vfs_write+0x1c3/0xae0
       ksys_write+0xed/0x1c0
       do_syscall_64+0x38/0x90
       entry_SYSCALL_64_after_hwframe+0x72/0xdc
    
      Freed by task 102551:
       kasan_save_stack+0x1e/0x40
       kasan_set_track+0x21/0x30
       kasan_save_free_info+0x2a/0x50
       __kasan_slab_free+0x106/0x190
       __kmem_cache_free+0x133/0x270
       svc_xprt_free+0x1e2/0x350 [sunrpc]
       svc_xprt_destroy_all+0x25a/0x440 [sunrpc]
       nfsd_put+0x125/0x240 [nfsd]
       nfsd_svc+0x2cb/0x3c0 [nfsd]
       write_threads+0x1ac/0x2a0 [nfsd]
       nfsctl_transaction_write+0xac/0x110 [nfsd]
       vfs_write+0x1c3/0xae0
       ksys_write+0xed/0x1c0
       do_syscall_64+0x38/0x90
       entry_SYSCALL_64_after_hwframe+0x72/0xdc
    
    Fix the UAF by simply doing nothing in svc_tcp_listen_data_ready()
    if state != TCP_LISTEN, that will avoid dereferencing svsk for all
    child socket.
    
    Link: https://lore.kernel.org/lkml/20230507091131.23540-1-dinghui@sangfor.com.cn/
    Fixes: fa9251afc33c ("SUNRPC: Call the default socket callbacks instead of open coding")
    Signed-off-by: Ding Hui <dinghui@sangfor.com.cn>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
tcp: annotate data races in __tcp_oow_rate_limited() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Thu Jun 29 16:41:50 2023 +0000

    tcp: annotate data races in __tcp_oow_rate_limited()
    
    [ Upstream commit 998127cdb4699b9d470a9348ffe9f1154346be5f ]
    
    request sockets are lockless, __tcp_oow_rate_limited() could be called
    on the same object from different cpus. This is harmless.
    
    Add READ_ONCE()/WRITE_ONCE() annotations to avoid a KCSAN report.
    
    Fixes: 4ce7e93cb3fe ("tcp: rate limit ACK sent by SYN_RECV request sockets")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

tcp: annotate data-races around fastopenq.max_qlen [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Jul 19 21:28:57 2023 +0000

    tcp: annotate data-races around fastopenq.max_qlen
    
    [ Upstream commit 70f360dd7042cb843635ece9d28335a4addff9eb ]
    
    This field can be read locklessly.
    
    Fixes: 1536e2857bd3 ("tcp: Add a TCP_FASTOPEN socket option to get a max backlog on its listner")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Link: https://lore.kernel.org/r/20230719212857.3943972-12-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

tcp: annotate data-races around icsk->icsk_syn_retries [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Jul 19 21:28:52 2023 +0000

    tcp: annotate data-races around icsk->icsk_syn_retries
    
    [ Upstream commit 3a037f0f3c4bfe44518f2fbb478aa2f99a9cd8bb ]
    
    do_tcp_getsockopt() and reqsk_timer_handler() read
    icsk->icsk_syn_retries while another cpu might change its value.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Link: https://lore.kernel.org/r/20230719212857.3943972-7-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

tcp: annotate data-races around icsk->icsk_user_timeout [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Jul 19 21:28:56 2023 +0000

    tcp: annotate data-races around icsk->icsk_user_timeout
    
    [ Upstream commit 26023e91e12c68669db416b97234328a03d8e499 ]
    
    This field can be read locklessly from do_tcp_getsockopt()
    
    Fixes: dca43c75e7e5 ("tcp: Add TCP_USER_TIMEOUT socket option.")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Link: https://lore.kernel.org/r/20230719212857.3943972-11-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

tcp: annotate data-races around rskq_defer_accept [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Jul 19 21:28:54 2023 +0000

    tcp: annotate data-races around rskq_defer_accept
    
    [ Upstream commit ae488c74422fb1dcd807c0201804b3b5e8a322a3 ]
    
    do_tcp_getsockopt() reads rskq_defer_accept while another cpu
    might change its value.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Link: https://lore.kernel.org/r/20230719212857.3943972-9-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

tcp: annotate data-races around tcp_rsk(req)->ts_recent [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Mon Jul 17 14:44:45 2023 +0000

    tcp: annotate data-races around tcp_rsk(req)->ts_recent
    
    [ Upstream commit eba20811f32652bc1a52d5e7cc403859b86390d9 ]
    
    TCP request sockets are lockless, tcp_rsk(req)->ts_recent
    can change while being read by another cpu as syzbot noticed.
    
    This is harmless, but we should annotate the known races.
    
    Note that tcp_check_req() changes req->ts_recent a bit early,
    we might change this in the future.
    
    BUG: KCSAN: data-race in tcp_check_req / tcp_check_req
    
    write to 0xffff88813c8afb84 of 4 bytes by interrupt on cpu 1:
    tcp_check_req+0x694/0xc70 net/ipv4/tcp_minisocks.c:762
    tcp_v4_rcv+0x12db/0x1b70 net/ipv4/tcp_ipv4.c:2071
    ip_protocol_deliver_rcu+0x356/0x6d0 net/ipv4/ip_input.c:205
    ip_local_deliver_finish+0x13c/0x1a0 net/ipv4/ip_input.c:233
    NF_HOOK include/linux/netfilter.h:303 [inline]
    ip_local_deliver+0xec/0x1c0 net/ipv4/ip_input.c:254
    dst_input include/net/dst.h:468 [inline]
    ip_rcv_finish net/ipv4/ip_input.c:449 [inline]
    NF_HOOK include/linux/netfilter.h:303 [inline]
    ip_rcv+0x197/0x270 net/ipv4/ip_input.c:569
    __netif_receive_skb_one_core net/core/dev.c:5493 [inline]
    __netif_receive_skb+0x90/0x1b0 net/core/dev.c:5607
    process_backlog+0x21f/0x380 net/core/dev.c:5935
    __napi_poll+0x60/0x3b0 net/core/dev.c:6498
    napi_poll net/core/dev.c:6565 [inline]
    net_rx_action+0x32b/0x750 net/core/dev.c:6698
    __do_softirq+0xc1/0x265 kernel/softirq.c:571
    do_softirq+0x7e/0xb0 kernel/softirq.c:472
    __local_bh_enable_ip+0x64/0x70 kernel/softirq.c:396
    local_bh_enable+0x1f/0x20 include/linux/bottom_half.h:33
    rcu_read_unlock_bh include/linux/rcupdate.h:843 [inline]
    __dev_queue_xmit+0xabb/0x1d10 net/core/dev.c:4271
    dev_queue_xmit include/linux/netdevice.h:3088 [inline]
    neigh_hh_output include/net/neighbour.h:528 [inline]
    neigh_output include/net/neighbour.h:542 [inline]
    ip_finish_output2+0x700/0x840 net/ipv4/ip_output.c:229
    ip_finish_output+0xf4/0x240 net/ipv4/ip_output.c:317
    NF_HOOK_COND include/linux/netfilter.h:292 [inline]
    ip_output+0xe5/0x1b0 net/ipv4/ip_output.c:431
    dst_output include/net/dst.h:458 [inline]
    ip_local_out net/ipv4/ip_output.c:126 [inline]
    __ip_queue_xmit+0xa4d/0xa70 net/ipv4/ip_output.c:533
    ip_queue_xmit+0x38/0x40 net/ipv4/ip_output.c:547
    __tcp_transmit_skb+0x1194/0x16e0 net/ipv4/tcp_output.c:1399
    tcp_transmit_skb net/ipv4/tcp_output.c:1417 [inline]
    tcp_write_xmit+0x13ff/0x2fd0 net/ipv4/tcp_output.c:2693
    __tcp_push_pending_frames+0x6a/0x1a0 net/ipv4/tcp_output.c:2877
    tcp_push_pending_frames include/net/tcp.h:1952 [inline]
    __tcp_sock_set_cork net/ipv4/tcp.c:3336 [inline]
    tcp_sock_set_cork+0xe8/0x100 net/ipv4/tcp.c:3343
    rds_tcp_xmit_path_complete+0x3b/0x40 net/rds/tcp_send.c:52
    rds_send_xmit+0xf8d/0x1420 net/rds/send.c:422
    rds_send_worker+0x42/0x1d0 net/rds/threads.c:200
    process_one_work+0x3e6/0x750 kernel/workqueue.c:2408
    worker_thread+0x5f2/0xa10 kernel/workqueue.c:2555
    kthread+0x1d7/0x210 kernel/kthread.c:379
    ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:308
    
    read to 0xffff88813c8afb84 of 4 bytes by interrupt on cpu 0:
    tcp_check_req+0x32a/0xc70 net/ipv4/tcp_minisocks.c:622
    tcp_v4_rcv+0x12db/0x1b70 net/ipv4/tcp_ipv4.c:2071
    ip_protocol_deliver_rcu+0x356/0x6d0 net/ipv4/ip_input.c:205
    ip_local_deliver_finish+0x13c/0x1a0 net/ipv4/ip_input.c:233
    NF_HOOK include/linux/netfilter.h:303 [inline]
    ip_local_deliver+0xec/0x1c0 net/ipv4/ip_input.c:254
    dst_input include/net/dst.h:468 [inline]
    ip_rcv_finish net/ipv4/ip_input.c:449 [inline]
    NF_HOOK include/linux/netfilter.h:303 [inline]
    ip_rcv+0x197/0x270 net/ipv4/ip_input.c:569
    __netif_receive_skb_one_core net/core/dev.c:5493 [inline]
    __netif_receive_skb+0x90/0x1b0 net/core/dev.c:5607
    process_backlog+0x21f/0x380 net/core/dev.c:5935
    __napi_poll+0x60/0x3b0 net/core/dev.c:6498
    napi_poll net/core/dev.c:6565 [inline]
    net_rx_action+0x32b/0x750 net/core/dev.c:6698
    __do_softirq+0xc1/0x265 kernel/softirq.c:571
    run_ksoftirqd+0x17/0x20 kernel/softirq.c:939
    smpboot_thread_fn+0x30a/0x4a0 kernel/smpboot.c:164
    kthread+0x1d7/0x210 kernel/kthread.c:379
    ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:308
    
    value changed: 0x1cd237f1 -> 0x1cd237f2
    
    Fixes: 079096f103fa ("tcp/dccp: install syn_recv requests into ehash table")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reported-by: syzbot <syzkaller@googlegroups.com>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Link: https://lore.kernel.org/r/20230717144445.653164-3-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

tcp: annotate data-races around tp->keepalive_intvl [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Jul 19 21:28:50 2023 +0000

    tcp: annotate data-races around tp->keepalive_intvl
    
    [ Upstream commit 5ecf9d4f52ff2f1d4d44c9b68bc75688e82f13b4 ]
    
    do_tcp_getsockopt() reads tp->keepalive_intvl while another cpu
    might change its value.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Link: https://lore.kernel.org/r/20230719212857.3943972-5-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

tcp: annotate data-races around tp->keepalive_probes [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Jul 19 21:28:51 2023 +0000

    tcp: annotate data-races around tp->keepalive_probes
    
    [ Upstream commit 6e5e1de616bf5f3df1769abc9292191dfad9110a ]
    
    do_tcp_getsockopt() reads tp->keepalive_probes while another cpu
    might change its value.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Link: https://lore.kernel.org/r/20230719212857.3943972-6-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

tcp: annotate data-races around tp->keepalive_time [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Jul 19 21:28:49 2023 +0000

    tcp: annotate data-races around tp->keepalive_time
    
    [ Upstream commit 4164245c76ff906c9086758e1c3f87082a7f5ef5 ]
    
    do_tcp_getsockopt() reads tp->keepalive_time while another cpu
    might change its value.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Link: https://lore.kernel.org/r/20230719212857.3943972-4-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

tcp: annotate data-races around tp->linger2 [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Jul 19 21:28:53 2023 +0000

    tcp: annotate data-races around tp->linger2
    
    [ Upstream commit 9df5335ca974e688389c875546e5819778a80d59 ]
    
    do_tcp_getsockopt() reads tp->linger2 while another cpu
    might change its value.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Link: https://lore.kernel.org/r/20230719212857.3943972-8-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

tcp: annotate data-races around tp->notsent_lowat [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Jul 19 21:28:55 2023 +0000

    tcp: annotate data-races around tp->notsent_lowat
    
    [ Upstream commit 1aeb87bc1440c5447a7fa2d6e3c2cca52cbd206b ]
    
    tp->notsent_lowat can be read locklessly from do_tcp_getsockopt()
    and tcp_poll().
    
    Fixes: c9bee3b7fdec ("tcp: TCP_NOTSENT_LOWAT socket option")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Link: https://lore.kernel.org/r/20230719212857.3943972-10-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

tcp: annotate data-races around tp->tcp_tx_delay [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Jul 19 21:28:47 2023 +0000

    tcp: annotate data-races around tp->tcp_tx_delay
    
    [ Upstream commit 348b81b68b13ebd489a3e6a46aa1c384c731c919 ]
    
    do_tcp_getsockopt() reads tp->tcp_tx_delay while another cpu
    might change its value.
    
    Fixes: a842fe1425cb ("tcp: add optional per socket transmit delay")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Link: https://lore.kernel.org/r/20230719212857.3943972-2-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

tcp: Fix data-races around sysctl_tcp_syn(ack)?_retries. [+ + +]
Author: Kuniyuki Iwashima <kuniyu@amazon.com>
Date:   Fri Jul 15 10:17:46 2022 -0700

    tcp: Fix data-races around sysctl_tcp_syn(ack)?_retries.
    
    [ Upstream commit 20a3b1c0f603e8c55c3396abd12dfcfb523e4d3c ]
    
    While reading sysctl_tcp_syn(ack)?_retries, they can be changed
    concurrently.  Thus, we need to add READ_ONCE() to their readers.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: 3a037f0f3c4b ("tcp: annotate data-races around icsk->icsk_syn_retries")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
test_firmware: return ENOMEM instead of ENOSPC on failed memory allocation [+ + +]
Author: Mirsad Goran Todorovac <mirsad.todorovac@alu.unizg.hr>
Date:   Tue Jun 6 09:08:10 2023 +0200

    test_firmware: return ENOMEM instead of ENOSPC on failed memory allocation
    
    [ Upstream commit 7dae593cd226a0bca61201cf85ceb9335cf63682 ]
    
    In a couple of situations like
    
            name = kstrndup(buf, count, GFP_KERNEL);
            if (!name)
                    return -ENOSPC;
    
    the error is not actually "No space left on device", but "Out of memory".
    
    It is semantically correct to return -ENOMEM in all failed kstrndup()
    and kzalloc() cases in this driver, as it is not a problem with disk
    space, but with kernel memory allocator failing allocation.
    
    The semantically correct should be:
    
            name = kstrndup(buf, count, GFP_KERNEL);
            if (!name)
                    return -ENOMEM;
    
    Cc: Dan Carpenter <error27@gmail.com>
    Cc: Takashi Iwai <tiwai@suse.de>
    Cc: Kees Cook <keescook@chromium.org>
    Cc: "Luis R. Rodriguez" <mcgrof@ruslug.rutgers.edu>
    Cc: Scott Branden <sbranden@broadcom.com>
    Cc: Hans de Goede <hdegoede@redhat.com>
    Cc: Brian Norris <briannorris@chromium.org>
    Fixes: c92316bf8e948 ("test_firmware: add batched firmware tests")
    Fixes: 0a8adf584759c ("test: add firmware_class loader test")
    Fixes: 548193cba2a7d ("test_firmware: add support for firmware_request_platform")
    Fixes: eb910947c82f9 ("test: firmware_class: add asynchronous request trigger")
    Fixes: 061132d2b9c95 ("test_firmware: add test custom fallback trigger")
    Fixes: 7feebfa487b92 ("test_firmware: add support for request_firmware_into_buf")
    Signed-off-by: Mirsad Goran Todorovac <mirsad.todorovac@alu.unizg.hr>
    Reviewed-by: Dan Carpenter <dan.carpenter@linaro.org>
    Message-ID: <20230606070808.9300-1-mirsad.todorovac@alu.unizg.hr>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
thermal/drivers/sun8i: Fix some error handling paths in sun8i_ths_probe() [+ + +]
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Sun May 14 20:46:05 2023 +0200

    thermal/drivers/sun8i: Fix some error handling paths in sun8i_ths_probe()
    
    [ Upstream commit 89382022b370dfd34eaae9c863baa123fcd4d132 ]
    
    Should an error occur after calling sun8i_ths_resource_init() in the probe
    function, some resources need to be released, as already done in the
    .remove() function.
    
    Switch to the devm_clk_get_enabled() helper and add a new devm_action to
    turn sun8i_ths_resource_init() into a fully managed function.
    
    Move the place where reset_control_deassert() is called so that the
    recommended order of reset release/clock enable steps is kept.
    A64 manual states that:
    
            3.3.6.4. Gating and reset
    
            Make sure that the reset signal has been released before the release of
            module clock gating;
    
    This fixes the issue and removes some LoC at the same time.
    
    Fixes: dccc5c3b6f30 ("thermal/drivers/sun8i: Add thermal driver for H6/H5/H3/A64/A83T/R40")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Acked-by: Maxime Ripard <maxime@cerno.tech>
    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
    Link: https://lore.kernel.org/r/a8ae84bd2dc4b55fe428f8e20f31438bf8bb6762.1684089931.git.christophe.jaillet@wanadoo.fr
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tpm, tpm_tis: Claim locality in interrupt handler [+ + +]
Author: Lino Sanfilippo <l.sanfilippo@kunbus.com>
Date:   Thu Nov 24 14:55:35 2022 +0100

    tpm, tpm_tis: Claim locality in interrupt handler
    
    commit 0e069265bce5a40c4eee52e2364bbbd4dabee94a upstream.
    
    Writing the TPM_INT_STATUS register in the interrupt handler to clear the
    interrupts only has effect if a locality is held. Since this is not
    guaranteed at the time the interrupt is fired, claim the locality
    explicitly in the handler.
    
    Signed-off-by: Lino Sanfilippo <l.sanfilippo@kunbus.com>
    Tested-by: Michael Niewöhner <linux@mniewoehner.de>
    Tested-by: Jarkko Sakkinen <jarkko@kernel.org>
    Reviewed-by: Jarkko Sakkinen <jarkko@kernel.org>
    Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
tpm: tpm_vtpm_proxy: fix a race condition in /dev/vtpmx creation [+ + +]
Author: Jarkko Sakkinen <jarkko@kernel.org>
Date:   Tue May 16 01:25:54 2023 +0300

    tpm: tpm_vtpm_proxy: fix a race condition in /dev/vtpmx creation
    
    commit f4032d615f90970d6c3ac1d9c0bce3351eb4445c upstream.
    
    /dev/vtpmx is made visible before 'workqueue' is initialized, which can
    lead to a memory corruption in the worst case scenario.
    
    Address this by initializing 'workqueue' as the very first step of the
    driver initialization.
    
    Cc: stable@vger.kernel.org
    Fixes: 6f99612e2500 ("tpm: Proxy driver for supporting multiple emulated TPMs")
    Reviewed-by: Stefan Berger <stefanb@linux.ibm.com>
    Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@tuni.fi>
    Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
tracing/histograms: Add histograms to hist_vars if they have referenced variables [+ + +]
Author: Mohamed Khalfella <mkhalfella@purestorage.com>
Date:   Wed Jul 12 22:30:21 2023 +0000

    tracing/histograms: Add histograms to hist_vars if they have referenced variables
    
    commit 6018b585e8c6fa7d85d4b38d9ce49a5b67be7078 upstream.
    
    Hist triggers can have referenced variables without having direct
    variables fields. This can be the case if referenced variables are added
    for trigger actions. In this case the newly added references will not
    have field variables. Not taking such referenced variables into
    consideration can result in a bug where it would be possible to remove
    hist trigger with variables being refenced. This will result in a bug
    that is easily reproducable like so
    
    $ cd /sys/kernel/tracing
    $ echo 'synthetic_sys_enter char[] comm; long id' >> synthetic_events
    $ echo 'hist:keys=common_pid.execname,id.syscall:vals=hitcount:comm=common_pid.execname' >> events/raw_syscalls/sys_enter/trigger
    $ echo 'hist:keys=common_pid.execname,id.syscall:onmatch(raw_syscalls.sys_enter).synthetic_sys_enter($comm, id)' >> events/raw_syscalls/sys_enter/trigger
    $ echo '!hist:keys=common_pid.execname,id.syscall:vals=hitcount:comm=common_pid.execname' >> events/raw_syscalls/sys_enter/trigger
    
    [  100.263533] ==================================================================
    [  100.264634] BUG: KASAN: slab-use-after-free in resolve_var_refs+0xc7/0x180
    [  100.265520] Read of size 8 at addr ffff88810375d0f0 by task bash/439
    [  100.266320]
    [  100.266533] CPU: 2 PID: 439 Comm: bash Not tainted 6.5.0-rc1 #4
    [  100.267277] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.0-20220807_005459-localhost 04/01/2014
    [  100.268561] Call Trace:
    [  100.268902]  <TASK>
    [  100.269189]  dump_stack_lvl+0x4c/0x70
    [  100.269680]  print_report+0xc5/0x600
    [  100.270165]  ? resolve_var_refs+0xc7/0x180
    [  100.270697]  ? kasan_complete_mode_report_info+0x80/0x1f0
    [  100.271389]  ? resolve_var_refs+0xc7/0x180
    [  100.271913]  kasan_report+0xbd/0x100
    [  100.272380]  ? resolve_var_refs+0xc7/0x180
    [  100.272920]  __asan_load8+0x71/0xa0
    [  100.273377]  resolve_var_refs+0xc7/0x180
    [  100.273888]  event_hist_trigger+0x749/0x860
    [  100.274505]  ? kasan_save_stack+0x2a/0x50
    [  100.275024]  ? kasan_set_track+0x29/0x40
    [  100.275536]  ? __pfx_event_hist_trigger+0x10/0x10
    [  100.276138]  ? ksys_write+0xd1/0x170
    [  100.276607]  ? do_syscall_64+0x3c/0x90
    [  100.277099]  ? entry_SYSCALL_64_after_hwframe+0x6e/0xd8
    [  100.277771]  ? destroy_hist_data+0x446/0x470
    [  100.278324]  ? event_hist_trigger_parse+0xa6c/0x3860
    [  100.278962]  ? __pfx_event_hist_trigger_parse+0x10/0x10
    [  100.279627]  ? __kasan_check_write+0x18/0x20
    [  100.280177]  ? mutex_unlock+0x85/0xd0
    [  100.280660]  ? __pfx_mutex_unlock+0x10/0x10
    [  100.281200]  ? kfree+0x7b/0x120
    [  100.281619]  ? ____kasan_slab_free+0x15d/0x1d0
    [  100.282197]  ? event_trigger_write+0xac/0x100
    [  100.282764]  ? __kasan_slab_free+0x16/0x20
    [  100.283293]  ? __kmem_cache_free+0x153/0x2f0
    [  100.283844]  ? sched_mm_cid_remote_clear+0xb1/0x250
    [  100.284550]  ? __pfx_sched_mm_cid_remote_clear+0x10/0x10
    [  100.285221]  ? event_trigger_write+0xbc/0x100
    [  100.285781]  ? __kasan_check_read+0x15/0x20
    [  100.286321]  ? __bitmap_weight+0x66/0xa0
    [  100.286833]  ? _find_next_bit+0x46/0xe0
    [  100.287334]  ? task_mm_cid_work+0x37f/0x450
    [  100.287872]  event_triggers_call+0x84/0x150
    [  100.288408]  trace_event_buffer_commit+0x339/0x430
    [  100.289073]  ? ring_buffer_event_data+0x3f/0x60
    [  100.292189]  trace_event_raw_event_sys_enter+0x8b/0xe0
    [  100.295434]  syscall_trace_enter.constprop.0+0x18f/0x1b0
    [  100.298653]  syscall_enter_from_user_mode+0x32/0x40
    [  100.301808]  do_syscall_64+0x1a/0x90
    [  100.304748]  entry_SYSCALL_64_after_hwframe+0x6e/0xd8
    [  100.307775] RIP: 0033:0x7f686c75c1cb
    [  100.310617] Code: 73 01 c3 48 8b 0d 65 3c 10 00 f7 d8 64 89 01 48 83 c8 ff c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa b8 21 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 35 3c 10 00 f7 d8 64 89 01 48
    [  100.317847] RSP: 002b:00007ffc60137a38 EFLAGS: 00000246 ORIG_RAX: 0000000000000021
    [  100.321200] RAX: ffffffffffffffda RBX: 000055f566469ea0 RCX: 00007f686c75c1cb
    [  100.324631] RDX: 0000000000000001 RSI: 0000000000000001 RDI: 000000000000000a
    [  100.328104] RBP: 00007ffc60137ac0 R08: 00007f686c818460 R09: 000000000000000a
    [  100.331509] R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000009
    [  100.334992] R13: 0000000000000007 R14: 000000000000000a R15: 0000000000000007
    [  100.338381]  </TASK>
    
    We hit the bug because when second hist trigger has was created
    has_hist_vars() returned false because hist trigger did not have
    variables. As a result of that save_hist_vars() was not called to add
    the trigger to trace_array->hist_vars. Later on when we attempted to
    remove the first histogram find_any_var_ref() failed to detect it is
    being used because it did not find the second trigger in hist_vars list.
    
    With this change we wait until trigger actions are created so we can take
    into consideration if hist trigger has variable references. Also, now we
    check the return value of save_hist_vars() and fail trigger creation if
    save_hist_vars() fails.
    
    Link: https://lore.kernel.org/linux-trace-kernel/20230712223021.636335-1-mkhalfella@purestorage.com
    
    Cc: stable@vger.kernel.org
    Fixes: 067fe038e70f6 ("tracing: Add variable reference handling to hist triggers")
    Signed-off-by: Mohamed Khalfella <mkhalfella@purestorage.com>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

tracing/histograms: Return an error if we fail to add histogram to hist_vars list [+ + +]
Author: Mohamed Khalfella <mkhalfella@purestorage.com>
Date:   Fri Jul 14 20:33:41 2023 +0000

    tracing/histograms: Return an error if we fail to add histogram to hist_vars list
    
    commit 4b8b3905165ef98386a3c06f196c85d21292d029 upstream.
    
    Commit 6018b585e8c6 ("tracing/histograms: Add histograms to hist_vars if
    they have referenced variables") added a check to fail histogram creation
    if save_hist_vars() failed to add histogram to hist_vars list. But the
    commit failed to set ret to failed return code before jumping to
    unregister histogram, fix it.
    
    Link: https://lore.kernel.org/linux-trace-kernel/20230714203341.51396-1-mkhalfella@purestorage.com
    
    Cc: stable@vger.kernel.org
    Fixes: 6018b585e8c6 ("tracing/histograms: Add histograms to hist_vars if they have referenced variables")
    Signed-off-by: Mohamed Khalfella <mkhalfella@purestorage.com>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
tracing/probes: Fix not to count error code to total length [+ + +]
Author: Masami Hiramatsu (Google) <mhiramat@kernel.org>
Date:   Tue Jul 11 23:15:38 2023 +0900

    tracing/probes: Fix not to count error code to total length
    
    commit b41326b5e0f82e93592c4366359917b5d67b529f upstream.
    
    Fix not to count the error code (which is minus value) to the total
    used length of array, because it can mess up the return code of
    process_fetch_insn_bottom(). Also clear the 'ret' value because it
    will be used for calculating next data_loc entry.
    
    Link: https://lore.kernel.org/all/168908493827.123124.2175257289106364229.stgit@devnote2/
    
    Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
    Closes: https://lore.kernel.org/all/8819b154-2ba1-43c3-98a2-cbde20892023@moroto.mountain/
    Fixes: 9b960a38835f ("tracing: probeevent: Unify fetch_insn processing common part")
    Cc: stable@vger.kernel.org
    Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Reviewed-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
tracing/timer: Add missing hrtimer modes to decode_hrtimer_mode(). [+ + +]
Author: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date:   Tue Apr 18 16:38:54 2023 +0200

    tracing/timer: Add missing hrtimer modes to decode_hrtimer_mode().
    
    [ Upstream commit 2951580ba6adb082bb6b7154a5ecb24e7c1f7569 ]
    
    The trace output for the HRTIMER_MODE_.*_HARD modes is seen as a number
    since these modes are not decoded. The author was not aware of the fancy
    decoding function which makes the life easier.
    
    Extend decode_hrtimer_mode() with the additional HRTIMER_MODE_.*_HARD
    modes.
    
    Fixes: ae6683d815895 ("hrtimer: Introduce HARD expiry mode")
    Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Reviewed-by: Mukesh Ojha <quic_mojha@quicinc.com>
    Acked-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Link: https://lore.kernel.org/r/20230418143854.8vHWQKLM@linutronix.de
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tracing: Fix memory leak of iter->temp when reading trace_pipe [+ + +]
Author: Zheng Yejian <zhengyejian1@huawei.com>
Date:   Thu Jul 13 22:14:35 2023 +0800

    tracing: Fix memory leak of iter->temp when reading trace_pipe
    
    commit d5a821896360cc8b93a15bd888fabc858c038dc0 upstream.
    
    kmemleak reports:
      unreferenced object 0xffff88814d14e200 (size 256):
        comm "cat", pid 336, jiffies 4294871818 (age 779.490s)
        hex dump (first 32 bytes):
          04 00 01 03 00 00 00 00 08 00 00 00 00 00 00 00  ................
          0c d8 c8 9b ff ff ff ff 04 5a ca 9b ff ff ff ff  .........Z......
        backtrace:
          [<ffffffff9bdff18f>] __kmalloc+0x4f/0x140
          [<ffffffff9bc9238b>] trace_find_next_entry+0xbb/0x1d0
          [<ffffffff9bc9caef>] trace_print_lat_context+0xaf/0x4e0
          [<ffffffff9bc94490>] print_trace_line+0x3e0/0x950
          [<ffffffff9bc95499>] tracing_read_pipe+0x2d9/0x5a0
          [<ffffffff9bf03a43>] vfs_read+0x143/0x520
          [<ffffffff9bf04c2d>] ksys_read+0xbd/0x160
          [<ffffffff9d0f0edf>] do_syscall_64+0x3f/0x90
          [<ffffffff9d2000aa>] entry_SYSCALL_64_after_hwframe+0x6e/0xd8
    
    when reading file 'trace_pipe', 'iter->temp' is allocated or relocated
    in trace_find_next_entry() but not freed before 'trace_pipe' is closed.
    
    To fix it, free 'iter->temp' in tracing_release_pipe().
    
    Link: https://lore.kernel.org/linux-trace-kernel/20230713141435.1133021-1-zhengyejian1@huawei.com
    
    Cc: stable@vger.kernel.org
    Fixes: ff895103a84ab ("tracing: Save off entry when peeking at next entry")
    Signed-off-by: Zheng Yejian <zhengyejian1@huawei.com>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    [Fix conflict due to lack of 649e72070cbbb8600eb823833e4748f5a0815116]
    Signed-off-by: Zheng Yejian <zhengyejian1@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

tracing: Fix null pointer dereference in tracing_err_log_open() [+ + +]
Author: Mateusz Stachyra <m.stachyra@samsung.com>
Date:   Tue Jul 4 12:27:06 2023 +0200

    tracing: Fix null pointer dereference in tracing_err_log_open()
    
    commit 02b0095e2fbbc060560c1065f86a211d91e27b26 upstream.
    
    Fix an issue in function 'tracing_err_log_open'.
    The function doesn't call 'seq_open' if the file is opened only with
    write permissions, which results in 'file->private_data' being left as null.
    If we then use 'lseek' on that opened file, 'seq_lseek' dereferences
    'file->private_data' in 'mutex_lock(&m->lock)', resulting in a kernel panic.
    Writing to this node requires root privileges, therefore this bug
    has very little security impact.
    
    Tracefs node: /sys/kernel/tracing/error_log
    
    Example Kernel panic:
    
    Unable to handle kernel NULL pointer dereference at virtual address 0000000000000038
    Call trace:
     mutex_lock+0x30/0x110
     seq_lseek+0x34/0xb8
     __arm64_sys_lseek+0x6c/0xb8
     invoke_syscall+0x58/0x13c
     el0_svc_common+0xc4/0x10c
     do_el0_svc+0x24/0x98
     el0_svc+0x24/0x88
     el0t_64_sync_handler+0x84/0xe4
     el0t_64_sync+0x1b4/0x1b8
    Code: d503201f aa0803e0 aa1f03e1 aa0103e9 (c8e97d02)
    ---[ end trace 561d1b49c12cf8a5 ]---
    Kernel panic - not syncing: Oops: Fatal exception
    
    Link: https://lore.kernel.org/linux-trace-kernel/20230703155237eucms1p4dfb6a19caa14c79eb6c823d127b39024@eucms1p4
    Link: https://lore.kernel.org/linux-trace-kernel/20230704102706eucms1p30d7ecdcc287f46ad67679fc8491b2e0f@eucms1p3
    
    Cc: stable@vger.kernel.org
    Fixes: 8a062902be725 ("tracing: Add tracing error log")
    Signed-off-by: Mateusz Stachyra <m.stachyra@samsung.com>
    Suggested-by: Steven Rostedt <rostedt@goodmis.org>
    Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
tty: serial: fsl_lpuart: add earlycon for imx8ulp platform [+ + +]
Author: Sherry Sun <sherry.sun@nxp.com>
Date:   Mon Jun 19 16:06:13 2023 +0800

    tty: serial: fsl_lpuart: add earlycon for imx8ulp platform
    
    commit e0edfdc15863ec80a1d9ac6e174dbccc00206dd0 upstream.
    
    Add earlycon support for imx8ulp platform.
    
    Signed-off-by: Sherry Sun <sherry.sun@nxp.com>
    Cc: stable <stable@kernel.org>
    Link: https://lore.kernel.org/r/20230619080613.16522-1-sherry.sun@nxp.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

tty: serial: samsung_tty: Fix a memory leak in s3c24xx_serial_getclk() in case of error [+ + +]
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Sat Jun 10 17:59:25 2023 +0200

    tty: serial: samsung_tty: Fix a memory leak in s3c24xx_serial_getclk() in case of error
    
    commit a9c09546e903f1068acfa38e1ee18bded7114b37 upstream.
    
    If clk_get_rate() fails, the clk that has just been allocated needs to be
    freed.
    
    Cc: <stable@vger.kernel.org> # v3.3+
    Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Reviewed-by: Andi Shyti <andi.shyti@kernel.org>
    Fixes: 5f5a7a5578c5 ("serial: samsung: switch to clkdev based clock lookup")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Reviewed-by: Jiri Slaby <jirislaby@kernel.org>
    Message-ID: <e4baf6039368f52e5a5453982ddcb9a330fc689e.1686412569.git.christophe.jaillet@wanadoo.fr>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

tty: serial: samsung_tty: Fix a memory leak in s3c24xx_serial_getclk() when iterating clk [+ + +]
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Sat Jun 10 17:59:26 2023 +0200

    tty: serial: samsung_tty: Fix a memory leak in s3c24xx_serial_getclk() when iterating clk
    
    commit 832e231cff476102e8204a9e7bddfe5c6154a375 upstream.
    
    When the best clk is searched, we iterate over all possible clk.
    
    If we find a better match, the previous one, if any, needs to be freed.
    If a better match has already been found, we still need to free the new
    one, otherwise it leaks.
    
    Cc: <stable@vger.kernel.org> # v3.3+
    Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Reviewed-by: Andi Shyti <andi.shyti@kernel.org>
    Fixes: 5f5a7a5578c5 ("serial: samsung: switch to clkdev based clock lookup")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Reviewed-by: Jiri Slaby <jirislaby@kernel.org>
    Message-ID: <cf3e0053d2fc7391b2d906a86cd01a5ef15fb9dc.1686412569.git.christophe.jaillet@wanadoo.fr>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
udp6: fix udp6_ehashfn() typo [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Sat Jul 8 08:29:58 2023 +0000

    udp6: fix udp6_ehashfn() typo
    
    [ Upstream commit 51d03e2f2203e76ed02d33fb5ffbb5fc85ffaf54 ]
    
    Amit Klein reported that udp6_ehash_secret was initialized but never used.
    
    Fixes: 1bbdceef1e53 ("inet: convert inet_ehash_secret and ipv6_hash_secret to net_get_random_once")
    Reported-by: Amit Klein <aksecurity@gmail.com>
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Cc: Willy Tarreau <w@1wt.eu>
    Cc: Willem de Bruijn <willemdebruijn.kernel@gmail.com>
    Cc: David Ahern <dsahern@kernel.org>
    Cc: Hannes Frederic Sowa <hannes@stressinduktion.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
um: Use HOST_DIR for mrproper [+ + +]
Author: Kees Cook <keescook@chromium.org>
Date:   Tue Jun 6 15:24:45 2023 -0700

    um: Use HOST_DIR for mrproper
    
    commit a5a319ec2c2236bb96d147c16196d2f1f3799301 upstream.
    
    When HEADER_ARCH was introduced, the MRPROPER_FILES (then MRPROPER_DIRS)
    list wasn't adjusted, leaving SUBARCH as part of the path argument.
    This resulted in the "mrproper" target not cleaning up arch/x86/... when
    SUBARCH was specified. Since HOST_DIR is arch/$(HEADER_ARCH), use it
    instead to get the correct path.
    
    Cc: Richard Weinberger <richard@nod.at>
    Cc: Anton Ivanov <anton.ivanov@cambridgegreys.com>
    Cc: Johannes Berg <johannes@sipsolutions.net>
    Cc: Azeem Shaikh <azeemshaikh38@gmail.com>
    Cc: linux-um@lists.infradead.org
    Fixes: 7bbe7204e937 ("um: merge Makefile-{i386,x86_64}")
    Cc: stable@vger.kernel.org
    Signed-off-by: Kees Cook <keescook@chromium.org>
    Link: https://lore.kernel.org/r/20230606222442.never.807-kees@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
usb: common: usb-conn-gpio: Set last role to unknown before initial detection [+ + +]
Author: Prashanth K <quic_prashk@quicinc.com>
Date:   Wed May 31 20:11:14 2023 +0530

    usb: common: usb-conn-gpio: Set last role to unknown before initial detection
    
    [ Upstream commit edd60d24bd858cef165274e4cd6cab43bdc58d15 ]
    
    Currently if we bootup a device without cable connected, then
    usb-conn-gpio won't call set_role() since last_role is same as
    current role. This happens because during probe last_role gets
    initialised to zero.
    
    To avoid this, added a new constant in enum usb_role, last_role
    is set to USB_ROLE_UNKNOWN before performing initial detection.
    
    While at it, also handle default case for the usb_role switch
    in cdns3, intel-xhci-usb-role-switch & musb/jz4740 to avoid
    build warnings.
    
    Fixes: 4602f3bff266 ("usb: common: add USB GPIO based connection detection driver")
    Signed-off-by: Prashanth K <quic_prashk@quicinc.com>
    Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
    Message-ID: <1685544074-17337-1-git-send-email-quic_prashk@quicinc.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

usb: dwc3-meson-g12a: Fix an error handling path in dwc3_meson_g12a_probe() [+ + +]
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Sat Jun 10 15:32:52 2023 +0200

    usb: dwc3-meson-g12a: Fix an error handling path in dwc3_meson_g12a_probe()
    
    [ Upstream commit 01052b91c9808e3c3b068ae2721cb728ec9aa4c0 ]
    
    If dwc3_meson_g12a_otg_init() fails, resources allocated by the previous
    of_platform_populate() call should be released, as already done in the
    error handling path.
    
    Fixes: 1e355f21d3fb ("usb: dwc3: Add Amlogic A1 DWC3 glue")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Reviewed-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
    Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
    Message-ID: <9d28466de1808ccc756b4cc25fc72c482d133d13.1686403934.git.christophe.jaillet@wanadoo.fr>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

usb: dwc3: gadget: Propagate core init errors to UDC during pullup [+ + +]
Author: Krishna Kurapati <quic_kriskura@quicinc.com>
Date:   Sun Jun 18 17:39:49 2023 +0530

    usb: dwc3: gadget: Propagate core init errors to UDC during pullup
    
    commit c0aabed9cabe057309779a9e26fe86a113d24dad upstream.
    
    In scenarios where pullup relies on resume (get sync) to initialize
    the controller and set the run stop bit, then core_init is followed by
    gadget_resume which will eventually set run stop bit.
    
    But in cases where the core_init fails, the return value is not sent
    back to udc appropriately. So according to UDC the controller has
    started but in reality we never set the run stop bit.
    
    On systems like Android, there are uevents sent to HAL depending on
    whether the configfs_bind / configfs_disconnect were invoked. In the
    above mentioned scnenario, if the core init fails, the run stop won't
    be set and the cable plug-out won't result in generation of any
    disconnect event and userspace would never get any uevent regarding
    cable plug out and we never call pullup(0) again. Furthermore none of
    the next Plug-In/Plug-Out's would be known to configfs.
    
    Return back the appropriate result to UDC to let the userspace/
    configfs know that the pullup failed so they can take appropriate
    action.
    
    Fixes: 77adb8bdf422 ("usb: dwc3: gadget: Allow runtime suspend if UDC unbinded")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Krishna Kurapati <quic_kriskura@quicinc.com>
    Acked-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
    Message-ID: <20230618120949.14868-1-quic_kriskura@quicinc.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: dwc3: qcom: Fix an error handling path in dwc3_qcom_probe() [+ + +]
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Sun Jun 4 16:56:34 2023 +0200

    usb: dwc3: qcom: Fix an error handling path in dwc3_qcom_probe()
    
    [ Upstream commit 4a944da707123686d372ec01ea60056902fadf35 ]
    
    If dwc3_qcom_create_urs_usb_platdev() fails, some resources still need to
    be released, as already done in the other error handling path of the
    probe.
    
    Fixes: c25c210f590e ("usb: dwc3: qcom: add URS Host support for sdm845 ACPI boot")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Reviewed-by: Andrew Halaney <ahalaney@redhat.com>
    Message-ID: <b69fa8dd68d816e7d24c88d3eda776ceb28c5dc5.1685890571.git.christophe.jaillet@wanadoo.fr>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

usb: dwc3: qcom: Fix potential memory leak [+ + +]
Author: Vladislav Efanov <VEfanov@ispras.ru>
Date:   Wed May 17 20:25:18 2023 +0300

    usb: dwc3: qcom: Fix potential memory leak
    
    [ Upstream commit 097fb3ee710d4de83b8d4f5589e8ee13e0f0541e ]
    
    Function dwc3_qcom_probe() allocates memory for resource structure
    which is pointed by parent_res pointer. This memory is not
    freed. This leads to memory leak. Use stack memory to prevent
    memory leak.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: 2bc02355f8ba ("usb: dwc3: qcom: Add support for booting with ACPI")
    Signed-off-by: Vladislav Efanov <VEfanov@ispras.ru>
    Acked-by: Shawn Guo <shawn.guo@linaro.org>
    Link: https://lore.kernel.org/r/20230517172518.442591-1-VEfanov@ispras.ru
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

usb: dwc3: qcom: Release the correct resources in dwc3_qcom_remove() [+ + +]
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Sun Jun 4 17:04:37 2023 +0200

    usb: dwc3: qcom: Release the correct resources in dwc3_qcom_remove()
    
    [ Upstream commit 8fd95da2cfb5046c4bb5a3cdc9eb7963ba8b10dd ]
    
    In the probe, some resources are allocated with
    dwc3_qcom_of_register_core() or dwc3_qcom_acpi_register_core(). The
    corresponding resources are already coorectly freed in the error handling
    path of the probe, but not in the remove function.
    
    Fix it.
    
    Fixes: 2bc02355f8ba ("usb: dwc3: qcom: Add support for booting with ACPI")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Reviewed-by: Andrew Halaney <ahalaney@redhat.com>
    Message-ID: <c0215a84cdf18fb3514c81842783ec53cf149deb.1685891059.git.christophe.jaillet@wanadoo.fr>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

usb: gadget: u_serial: Add null pointer check in gserial_suspend [+ + +]
Author: Prashanth K <quic_prashk@quicinc.com>
Date:   Fri May 5 14:48:37 2023 +0530

    usb: gadget: u_serial: Add null pointer check in gserial_suspend
    
    [ Upstream commit 2f6ecb89fe8feb2b60a53325b0eeb9866d88909a ]
    
    Consider a case where gserial_disconnect has already cleared
    gser->ioport. And if gserial_suspend gets called afterwards,
    it will lead to accessing of gser->ioport and thus causing
    null pointer dereference.
    
    Avoid this by adding a null pointer check. Added a static
    spinlock to prevent gser->ioport from becoming null after
    the newly added null pointer check.
    
    Fixes: aba3a8d01d62 ("usb: gadget: u_serial: add suspend resume callbacks")
    Signed-off-by: Prashanth K <quic_prashk@quicinc.com>
    Link: https://lore.kernel.org/r/1683278317-11774-1-git-send-email-quic_prashk@quicinc.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

usb: hide unused usbfs_notify_suspend/resume functions [+ + +]
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Tue May 16 22:17:42 2023 +0200

    usb: hide unused usbfs_notify_suspend/resume functions
    
    [ Upstream commit 8e6bd945e6dde64fbc60ec3fe252164493a8d3a2 ]
    
    The declaration is in an #ifdef, which causes warnings when building
    with 'make W=1' and without CONFIG_PM:
    
    drivers/usb/core/devio.c:742:6: error: no previous prototype for 'usbfs_notify_suspend'
    drivers/usb/core/devio.c:747:6: error: no previous prototype for 'usbfs_notify_resume'
    
    Use the same #ifdef check around the function definitions to avoid
    the warnings and slightly shrink the USB core.
    
    Fixes: 7794f486ed0b ("usbfs: Add ioctls for runtime power management")
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com>
    Acked-by: Alan Stern <stern@rowland.harvard.edu>
    Link: https://lore.kernel.org/r/20230516202103.558301-1-arnd@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

usb: phy: phy-tahvo: fix memory leak in tahvo_usb_probe() [+ + +]
Author: Li Yang <lidaxian@hust.edu.cn>
Date:   Thu Apr 20 22:08:31 2023 +0800

    usb: phy: phy-tahvo: fix memory leak in tahvo_usb_probe()
    
    [ Upstream commit 342161c11403ea00e9febc16baab1d883d589d04 ]
    
    Smatch reports:
    drivers/usb/phy/phy-tahvo.c: tahvo_usb_probe()
    warn: missing unwind goto?
    
    After geting irq, if ret < 0, it will return without error handling to
    free memory.
    Just add error handling to fix this problem.
    
    Fixes: 0d45a1373e66 ("usb: phy: tahvo: add IRQ check")
    Signed-off-by: Li Yang <lidaxian@hust.edu.cn>
    Reviewed-by: Dongliang Mu <dzm91@hust.edu.cn>
    Link: https://lore.kernel.org/r/20230420140832.9110-1-lidaxian@hust.edu.cn
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
USB: serial: option: add LARA-R6 01B PIDs [+ + +]
Author: Davide Tronchin <davide.tronchin.94@gmail.com>
Date:   Thu Jun 22 11:29:21 2023 +0200

    USB: serial: option: add LARA-R6 01B PIDs
    
    commit ffa5f7a3bf28c1306eef85d4056539c2d4b8eb09 upstream.
    
    The new LARA-R6 product variant identified by the "01B" string can be
    configured (by AT interface) in three different USB modes:
    
    * Default mode (Vendor ID: 0x1546 Product ID: 0x1311) with 4 serial
    interfaces
    
    * RmNet mode (Vendor ID: 0x1546 Product ID: 0x1312) with 4 serial
    interfaces and 1 RmNet virtual network interface
    
    * CDC-ECM mode (Vendor ID: 0x1546 Product ID: 0x1313) with 4 serial
    interface and 1 CDC-ECM virtual network interface
    The first 4 interfaces of all the 3 USB configurations (default, RmNet,
    CDC-ECM) are the same.
    
    In default mode LARA-R6 01B exposes the following interfaces:
    If 0: Diagnostic
    If 1: AT parser
    If 2: AT parser
    If 3: AT parser/alternative functions
    
    In RmNet mode LARA-R6 01B exposes the following interfaces:
    If 0: Diagnostic
    If 1: AT parser
    If 2: AT parser
    If 3: AT parser/alternative functions
    If 4: RMNET interface
    
    In CDC-ECM mode LARA-R6 01B exposes the following interfaces:
    If 0: Diagnostic
    If 1: AT parser
    If 2: AT parser
    If 3: AT parser/alternative functions
    If 4: CDC-ECM interface
    
    Signed-off-by: Davide Tronchin <davide.tronchin.94@gmail.com>
    Link: https://lore.kernel.org/r/20230622092921.12651-1-davide.tronchin.94@gmail.com
    Cc: stable@vger.kernel.org
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
video: imsttfb: check for ioremap() failures [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Mon May 3 13:57:34 2021 +0200

    video: imsttfb: check for ioremap() failures
    
    commit 13b7c0390a5d3840e1e2cda8f44a310fdbb982de upstream.
    
    We should check if ioremap() were to somehow fail in imsttfb_probe() and
    handle the unwinding of the resources allocated here properly.
    
    Ideally if anyone cares about this driver (it's for a PowerMac era PCI
    display card), they wouldn't even be using fbdev anymore.  Or the devm_*
    apis could be used, but that's just extra work for diminishing
    returns...
    
    Cc: Finn Thain <fthain@telegraphics.com.au>
    Cc: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
    Reviewed-by: Rob Herring <robh@kernel.org>
    Link: https://lore.kernel.org/r/20210503115736.2104747-68-gregkh@linuxfoundation.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
w1: fix loop in w1_fini() [+ + +]
Author: Dan Carpenter <error27@gmail.com>
Date:   Wed May 19 17:17:45 2021 +0300

    w1: fix loop in w1_fini()
    
    [ Upstream commit 83f3fcf96fcc7e5405b37d9424c7ef26bfa203f8 ]
    
    The __w1_remove_master_device() function calls:
    
            list_del(&dev->w1_master_entry);
    
    So presumably this can cause an endless loop.
    
    Fixes: 7785925dd8e0 ("[PATCH] w1: cleanups.")
    Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

w1: w1_therm: fix locking behavior in convert_t [+ + +]
Author: Stefan Wahren <stefan.wahren@i2se.com>
Date:   Thu Apr 27 13:21:52 2023 +0200

    w1: w1_therm: fix locking behavior in convert_t
    
    [ Upstream commit dca5480ab7b77a889088ab7cac81934604510ac7 ]
    
    The commit 67b392f7b8ed ("w1_therm: optimizing temperature read timings")
    accidentially inverted the logic for lock handling of the bus mutex.
    
    Before:
      pullup -> release lock before sleep
      no pullup -> release lock after sleep
    
    After:
      pullup -> release lock after sleep
      no pullup -> release lock before sleep
    
    This cause spurious measurements of 85 degree (powerup value) on the
    Tarragon board with connected 1-w temperature sensor
    (w1_therm.w1_strong_pull=0).
    
    In the meantime a new feature for polling the conversion
    completion has been integrated in these branches with
    commit 021da53e65fd ("w1: w1_therm: Add sysfs entries to control
    conversion time and driver features"). But this feature isn't
    available for parasite power mode, so handle this separately.
    
    Link: https://lore.kernel.org/regressions/2023042645-attentive-amends-7b0b@gregkh/T/
    Fixes: 67b392f7b8ed ("w1_therm: optimizing temperature read timings")
    Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com>
    Link: https://lore.kernel.org/r/20230427112152.12313-1-stefan.wahren@i2se.com
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
watchdog/perf: define dummy watchdog_update_hrtimer_threshold() on correct config [+ + +]
Author: Douglas Anderson <dianders@chromium.org>
Date:   Fri May 19 10:18:25 2023 -0700

    watchdog/perf: define dummy watchdog_update_hrtimer_threshold() on correct config
    
    [ Upstream commit 5e008df11c55228a86a1bae692cc2002503572c9 ]
    
    Patch series "watchdog/hardlockup: Add the buddy hardlockup detector", v5.
    
    This patch series adds the "buddy" hardlockup detector.  In brief, the
    buddy hardlockup detector can detect hardlockups without arch-level
    support by having CPUs checkup on a "buddy" CPU periodically.
    
    Given the new design of this patch series, testing all combinations is
    fairly difficult. I've attempted to make sure that all combinations of
    CONFIG_ options are good, but it wouldn't surprise me if I missed
    something. I apologize in advance and I'll do my best to fix any
    problems that are found.
    
    This patch (of 18):
    
    The real watchdog_update_hrtimer_threshold() is defined in
    kernel/watchdog_hld.c.  That file is included if
    CONFIG_HARDLOCKUP_DETECTOR_PERF and the function is defined in that file
    if CONFIG_HARDLOCKUP_CHECK_TIMESTAMP.
    
    The dummy version of the function in "nmi.h" didn't get that quite right.
    While this doesn't appear to be a huge deal, it's nice to make it
    consistent.
    
    It doesn't break builds because CHECK_TIMESTAMP is only defined by x86 so
    others don't get a double definition, and x86 uses perf lockup detector,
    so it gets the out of line version.
    
    Link: https://lkml.kernel.org/r/20230519101840.v5.18.Ia44852044cdcb074f387e80df6b45e892965d4a1@changeid
    Link: https://lkml.kernel.org/r/20230519101840.v5.1.I8cbb2f4fa740528fcfade4f5439b6cdcdd059251@changeid
    Fixes: 7edaeb6841df ("kernel/watchdog: Prevent false positives with turbo modes")
    Signed-off-by: Douglas Anderson <dianders@chromium.org>
    Reviewed-by: Nicholas Piggin <npiggin@gmail.com>
    Reviewed-by: Petr Mladek <pmladek@suse.com>
    Cc: Andi Kleen <ak@linux.intel.com>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Chen-Yu Tsai <wens@csie.org>
    Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
    Cc: Daniel Thompson <daniel.thompson@linaro.org>
    Cc: "David S. Miller" <davem@davemloft.net>
    Cc: Guenter Roeck <groeck@chromium.org>
    Cc: Ian Rogers <irogers@google.com>
    Cc: Lecopzer Chen <lecopzer.chen@mediatek.com>
    Cc: Marc Zyngier <maz@kernel.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Masayoshi Mizuma <msys.mizuma@gmail.com>
    Cc: Matthias Kaehlcke <mka@chromium.org>
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: Pingfan Liu <kernelfans@gmail.com>
    Cc: Randy Dunlap <rdunlap@infradead.org>
    Cc: "Ravi V. Shankar" <ravi.v.shankar@intel.com>
    Cc: Ricardo Neri <ricardo.neri@intel.com>
    Cc: Stephane Eranian <eranian@google.com>
    Cc: Stephen Boyd <swboyd@chromium.org>
    Cc: Sumit Garg <sumit.garg@linaro.org>
    Cc: Tzung-Bi Shih <tzungbi@chromium.org>
    Cc: Will Deacon <will@kernel.org>
    Cc: Colin Cross <ccross@android.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

watchdog/perf: more properly prevent false positives with turbo modes [+ + +]
Author: Douglas Anderson <dianders@chromium.org>
Date:   Fri May 19 10:18:26 2023 -0700

    watchdog/perf: more properly prevent false positives with turbo modes
    
    [ Upstream commit 4379e59fe5665cfda737e45b8bf2f05321ef049c ]
    
    Currently, in the watchdog_overflow_callback() we first check to see if
    the watchdog had been touched and _then_ we handle the workaround for
    turbo mode.  This order should be reversed.
    
    Specifically, "touching" the hardlockup detector's watchdog should avoid
    lockups being detected for one period that should be roughly the same
    regardless of whether we're running turbo or not.  That means that we
    should do the extra accounting for turbo _before_ we look at (and clear)
    the global indicating that we've been touched.
    
    NOTE: this fix is made based on code inspection.  I am not aware of any
    reports where the old code would have generated false positives.  That
    being said, this order seems more correct and also makes it easier down
    the line to share code with the "buddy" hardlockup detector.
    
    Link: https://lkml.kernel.org/r/20230519101840.v5.2.I843b0d1de3e096ba111a179f3adb16d576bef5c7@changeid
    Fixes: 7edaeb6841df ("kernel/watchdog: Prevent false positives with turbo modes")
    Signed-off-by: Douglas Anderson <dianders@chromium.org>
    Cc: Andi Kleen <ak@linux.intel.com>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Chen-Yu Tsai <wens@csie.org>
    Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
    Cc: Colin Cross <ccross@android.com>
    Cc: Daniel Thompson <daniel.thompson@linaro.org>
    Cc: "David S. Miller" <davem@davemloft.net>
    Cc: Guenter Roeck <groeck@chromium.org>
    Cc: Ian Rogers <irogers@google.com>
    Cc: Lecopzer Chen <lecopzer.chen@mediatek.com>
    Cc: Marc Zyngier <maz@kernel.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Masayoshi Mizuma <msys.mizuma@gmail.com>
    Cc: Matthias Kaehlcke <mka@chromium.org>
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: Nicholas Piggin <npiggin@gmail.com>
    Cc: Petr Mladek <pmladek@suse.com>
    Cc: Pingfan Liu <kernelfans@gmail.com>
    Cc: Randy Dunlap <rdunlap@infradead.org>
    Cc: "Ravi V. Shankar" <ravi.v.shankar@intel.com>
    Cc: Ricardo Neri <ricardo.neri@intel.com>
    Cc: Stephane Eranian <eranian@google.com>
    Cc: Stephen Boyd <swboyd@chromium.org>
    Cc: Sumit Garg <sumit.garg@linaro.org>
    Cc: Tzung-Bi Shih <tzungbi@chromium.org>
    Cc: Will Deacon <will@kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
wifi: airo: avoid uninitialized warning in airo_get_rate() [+ + +]
Author: Randy Dunlap <rdunlap@infradead.org>
Date:   Sun Jul 9 06:31:54 2023 -0700

    wifi: airo: avoid uninitialized warning in airo_get_rate()
    
    [ Upstream commit 9373771aaed17f5c2c38485f785568abe3a9f8c1 ]
    
    Quieten a gcc (11.3.0) build error or warning by checking the function
    call status and returning -EBUSY if the function call failed.
    This is similar to what several other wireless drivers do for the
    SIOCGIWRATE ioctl call when there is a locking problem.
    
    drivers/net/wireless/cisco/airo.c: error: 'status_rid.currentXmitRate' is used uninitialized [-Werror=uninitialized]
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Randy Dunlap <rdunlap@infradead.org>
    Reported-by: Geert Uytterhoeven <geert@linux-m68k.org>
    Link: https://lore.kernel.org/r/39abf2c7-24a-f167-91da-ed4c5435d1c4@linux-m68k.org
    Link: https://lore.kernel.org/r/20230709133154.26206-1-rdunlap@infradead.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: ath11k: fix registration of 6Ghz-only phy without the full channel range [+ + +]
Author: Maxime Bizon <mbizon@freebox.fr>
Date:   Fri Apr 21 16:54:45 2023 +0200

    wifi: ath11k: fix registration of 6Ghz-only phy without the full channel range
    
    [ Upstream commit e2ceb1de2f83aafd8003f0b72dfd4b7441e97d14 ]
    
    Because of what seems to be a typo, a 6Ghz-only phy for which the BDF
    does not allow the 7115Mhz channel will fail to register:
    
      WARNING: CPU: 2 PID: 106 at net/wireless/core.c:907 wiphy_register+0x914/0x954
      Modules linked in: ath11k_pci sbsa_gwdt
      CPU: 2 PID: 106 Comm: kworker/u8:5 Not tainted 6.3.0-rc7-next-20230418-00549-g1e096a17625a-dirty #9
      Hardware name: Freebox V7R Board (DT)
      Workqueue: ath11k_qmi_driver_event ath11k_qmi_driver_event_work
      pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
      pc : wiphy_register+0x914/0x954
      lr : ieee80211_register_hw+0x67c/0xc10
      sp : ffffff800b123aa0
      x29: ffffff800b123aa0 x28: 0000000000000000 x27: 0000000000000000
      x26: 0000000000000000 x25: 0000000000000006 x24: ffffffc008d51418
      x23: ffffffc008cb0838 x22: ffffff80176c2460 x21: 0000000000000168
      x20: ffffff80176c0000 x19: ffffff80176c03e0 x18: 0000000000000014
      x17: 00000000cbef338c x16: 00000000d2a26f21 x15: 00000000ad6bb85f
      x14: 0000000000000020 x13: 0000000000000020 x12: 00000000ffffffbd
      x11: 0000000000000208 x10: 00000000fffffdf7 x9 : ffffffc009394718
      x8 : ffffff80176c0528 x7 : 000000007fffffff x6 : 0000000000000006
      x5 : 0000000000000005 x4 : ffffff800b304284 x3 : ffffff800b304284
      x2 : ffffff800b304d98 x1 : 0000000000000000 x0 : 0000000000000000
      Call trace:
       wiphy_register+0x914/0x954
       ieee80211_register_hw+0x67c/0xc10
       ath11k_mac_register+0x7c4/0xe10
       ath11k_core_qmi_firmware_ready+0x1f4/0x570
       ath11k_qmi_driver_event_work+0x198/0x590
       process_one_work+0x1b8/0x328
       worker_thread+0x6c/0x414
       kthread+0x100/0x104
       ret_from_fork+0x10/0x20
      ---[ end trace 0000000000000000 ]---
      ath11k_pci 0002:01:00.0: ieee80211 registration failed: -22
      ath11k_pci 0002:01:00.0: failed register the radio with mac80211: -22
      ath11k_pci 0002:01:00.0: failed to create pdev core: -22
    
    Signed-off-by: Maxime Bizon <mbizon@freebox.fr>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/20230421145445.2612280-1-mbizon@freebox.fr
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: ath9k: avoid referencing uninit memory in ath9k_wmi_ctrl_rx [+ + +]
Author: Fedor Pchelkin <pchelkin@ispras.ru>
Date:   Wed Apr 26 17:35:01 2023 +0300

    wifi: ath9k: avoid referencing uninit memory in ath9k_wmi_ctrl_rx
    
    [ Upstream commit f24292e827088bba8de7158501ac25a59b064953 ]
    
    For the reasons also described in commit b383e8abed41 ("wifi: ath9k: avoid
    uninit memory read in ath9k_htc_rx_msg()"), ath9k_htc_rx_msg() should
    validate pkt_len before accessing the SKB.
    
    For example, the obtained SKB may have been badly constructed with
    pkt_len = 8. In this case, the SKB can only contain a valid htc_frame_hdr
    but after being processed in ath9k_htc_rx_msg() and passed to
    ath9k_wmi_ctrl_rx() endpoint RX handler, it is expected to have a WMI
    command header which should be located inside its data payload.
    
    Implement sanity checking inside ath9k_wmi_ctrl_rx(). Otherwise, uninit
    memory can be referenced.
    
    Tested on Qualcomm Atheros Communications AR9271 802.11n .
    
    Found by Linux Verification Center (linuxtesting.org) with Syzkaller.
    
    Fixes: fb9987d0f748 ("ath9k_htc: Support for AR9271 chipset.")
    Reported-and-tested-by: syzbot+f2cb6e0ffdb961921e4d@syzkaller.appspotmail.com
    Signed-off-by: Fedor Pchelkin <pchelkin@ispras.ru>
    Acked-by: Toke Høiland-Jørgensen <toke@toke.dk>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/20230424183348.111355-1-pchelkin@ispras.ru
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: ath9k: convert msecs to jiffies where needed [+ + +]
Author: Dmitry Antipov <dmantipov@yandex.ru>
Date:   Tue Jun 13 16:46:55 2023 +0300

    wifi: ath9k: convert msecs to jiffies where needed
    
    [ Upstream commit 2aa083acea9f61be3280184384551178f510ff51 ]
    
    Since 'ieee80211_queue_delayed_work()' expects timeout in
    jiffies and not milliseconds, 'msecs_to_jiffies()' should
    be used in 'ath_restart_work()' and '__ath9k_flush()'.
    
    Fixes: d63ffc45c5d3 ("ath9k: rename tx_complete_work to hw_check_work")
    Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
    Acked-by: Toke Høiland-Jørgensen <toke@toke.dk>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/20230613134655.248728-1-dmantipov@yandex.ru
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: ath9k: don't allow to overwrite ENDPOINT0 attributes [+ + +]
Author: Fedor Pchelkin <pchelkin@ispras.ru>
Date:   Wed May 17 18:03:17 2023 +0300

    wifi: ath9k: don't allow to overwrite ENDPOINT0 attributes
    
    [ Upstream commit 061b0cb9327b80d7a0f63a33e7c3e2a91a71f142 ]
    
    A bad USB device is able to construct a service connection response
    message with target endpoint being ENDPOINT0 which is reserved for
    HTC_CTRL_RSVD_SVC and should not be modified to be used for any other
    services.
    
    Reject such service connection responses.
    
    Found by Linux Verification Center (linuxtesting.org) with Syzkaller.
    
    Fixes: fb9987d0f748 ("ath9k_htc: Support for AR9271 chipset.")
    Reported-by: syzbot+b68fbebe56d8362907e8@syzkaller.appspotmail.com
    Signed-off-by: Fedor Pchelkin <pchelkin@ispras.ru>
    Acked-by: Toke Høiland-Jørgensen <toke@toke.dk>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/20230516150427.79469-1-pchelkin@ispras.ru
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: ath9k: fix AR9003 mac hardware hang check register offset calculation [+ + +]
Author: Peter Seiderer <ps.report@gmx.net>
Date:   Wed Apr 26 17:35:00 2023 +0300

    wifi: ath9k: fix AR9003 mac hardware hang check register offset calculation
    
    [ Upstream commit 3e56c80931c7615250fe4bf83f93b57881969266 ]
    
    Fix ath9k_hw_verify_hang()/ar9003_hw_detect_mac_hang() register offset
    calculation (do not overflow the shift for the second register/queues
    above five, use the register layout described in the comments above
    ath9k_hw_verify_hang() instead).
    
    Fixes: 222e04830ff0 ("ath9k: Fix MAC HW hang check for AR9003")
    
    Reported-by: Gregg Wonderly <greggwonderly@seqtechllc.com>
    Link: https://lore.kernel.org/linux-wireless/E3A9C354-0CB7-420C-ADEF-F0177FB722F4@seqtechllc.com/
    Signed-off-by: Peter Seiderer <ps.report@gmx.net>
    Acked-by: Toke Høiland-Jørgensen <toke@toke.dk>
    Reviewed-by: Simon Horman <simon.horman@corigine.com>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/20230422212423.26065-1-ps.report@gmx.net
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: ath9k: Fix possible stall on ath9k_txq_list_has_key() [+ + +]
Author: Remi Pommarel <repk@triplefau.lt>
Date:   Fri Jun 9 11:37:44 2023 +0200

    wifi: ath9k: Fix possible stall on ath9k_txq_list_has_key()
    
    [ Upstream commit 75086cc6dee046e3fbb3dba148b376d8802f83bc ]
    
    On EDMA capable hardware, ath9k_txq_list_has_key() can enter infinite
    loop if it is called while all txq_fifos have packets that use different
    key that the one we are looking for. Fix it by exiting the loop if all
    txq_fifos have been checked already.
    
    Because this loop is called under spin_lock_bh() (see ath_txq_lock) it
    causes the following rcu stall:
    
    rcu: INFO: rcu_sched self-detected stall on CPU
    ath10k_pci 0000:01:00.0: failed to read temperature -11
    rcu:    1-....: (5254 ticks this GP) idle=189/1/0x4000000000000002 softirq=8442983/8442984 fqs=2579
            (t=5257 jiffies g=17983297 q=334)
    Task dump for CPU 1:
    task:hostapd         state:R  running task     stack:    0 pid:  297 ppid:   289 flags:0x0000000a
    Call trace:
     dump_backtrace+0x0/0x170
     show_stack+0x1c/0x24
     sched_show_task+0x140/0x170
     dump_cpu_task+0x48/0x54
     rcu_dump_cpu_stacks+0xf0/0x134
     rcu_sched_clock_irq+0x8d8/0x9fc
     update_process_times+0xa0/0xec
     tick_sched_timer+0x5c/0xd0
     __hrtimer_run_queues+0x154/0x320
     hrtimer_interrupt+0x120/0x2f0
     arch_timer_handler_virt+0x38/0x44
     handle_percpu_devid_irq+0x9c/0x1e0
     handle_domain_irq+0x64/0x90
     gic_handle_irq+0x78/0xb0
     call_on_irq_stack+0x28/0x38
     do_interrupt_handler+0x54/0x5c
     el1_interrupt+0x2c/0x4c
     el1h_64_irq_handler+0x14/0x1c
     el1h_64_irq+0x74/0x78
     ath9k_txq_has_key+0x1bc/0x250 [ath9k]
     ath9k_set_key+0x1cc/0x3dc [ath9k]
     drv_set_key+0x78/0x170
     ieee80211_key_replace+0x564/0x6cc
     ieee80211_key_link+0x174/0x220
     ieee80211_add_key+0x11c/0x300
     nl80211_new_key+0x12c/0x330
     genl_family_rcv_msg_doit+0xbc/0x11c
     genl_rcv_msg+0xd8/0x1c4
     netlink_rcv_skb+0x40/0x100
     genl_rcv+0x3c/0x50
     netlink_unicast+0x1ec/0x2c0
     netlink_sendmsg+0x198/0x3c0
     ____sys_sendmsg+0x210/0x250
     ___sys_sendmsg+0x78/0xc4
     __sys_sendmsg+0x4c/0x90
     __arm64_sys_sendmsg+0x28/0x30
     invoke_syscall.constprop.0+0x60/0x100
     do_el0_svc+0x48/0xd0
     el0_svc+0x14/0x50
     el0t_64_sync_handler+0xa8/0xb0
     el0t_64_sync+0x158/0x15c
    
    This rcu stall is hard to reproduce as is, but changing ATH_TXFIFO_DEPTH
    from 8 to 2 makes it reasonably easy to reproduce.
    
    Fixes: ca2848022c12 ("ath9k: Postpone key cache entry deletion for TXQ frames reference it")
    Signed-off-by: Remi Pommarel <repk@triplefau.lt>
    Tested-by: Nicolas Escande <nico.escande@gmail.com>
    Acked-by: Toke Høiland-Jørgensen <toke@toke.dk>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/20230609093744.1985-1-repk@triplefau.lt
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: atmel: Fix an error handling path in atmel_probe() [+ + +]
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Sat May 20 09:53:14 2023 +0200

    wifi: atmel: Fix an error handling path in atmel_probe()
    
    [ Upstream commit 6b92e4351a29af52c285fe235e6e4d1a75de04b2 ]
    
    Should atmel_config() fail, some resources need to be released as already
    done in the remove function.
    
    While at it, remove a useless and erroneous comment. The probe is
    atmel_probe(), not atmel_attach().
    
    Fixes: 15b99ac17295 ("[PATCH] pcmcia: add return value to _config() functions")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Reviewed-by: Simon Horman <simon.horman@corigine.com>
    Signed-off-by: Kalle Valo <kvalo@kernel.org>
    Link: https://lore.kernel.org/r/1e65f174607a83348034197fa7d603bab10ba4a9.1684569156.git.christophe.jaillet@wanadoo.fr
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: cfg80211: rewrite merging of inherited elements [+ + +]
Author: Benjamin Berg <benjamin.berg@intel.com>
Date:   Fri Jun 16 09:54:03 2023 +0300

    wifi: cfg80211: rewrite merging of inherited elements
    
    [ Upstream commit dfd9aa3e7a456d57b18021d66472ab7ff8373ab7 ]
    
    The cfg80211_gen_new_ie function merges the IEs using inheritance rules.
    Rewrite this function to fix issues around inheritance rules. In
    particular, vendor elements do not require any special handling, as they
    are either all inherited or overridden by the subprofile.
    Also, add fragmentation handling as this may be needed in some cases.
    
    This also changes the function to not require making a copy. The new
    version could be optimized a bit by explicitly tracking which IEs have
    been handled already rather than looking that up again every time.
    
    Note that a small behavioural change is the removal of the SSID special
    handling. This should be fine for the MBSSID element, as the SSID must
    be included in the subelement.
    
    Fixes: 0b8fb8235be8 ("cfg80211: Parsing of Multiple BSSID information in scanning")
    Signed-off-by: Benjamin Berg <benjamin.berg@intel.com>
    Signed-off-by: Gregory Greenman <gregory.greenman@intel.com>
    Link: https://lore.kernel.org/r/20230616094949.bc6152e146db.I2b5f3bc45085e1901e5b5192a674436adaf94748@changeid
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: iwlwifi: mvm: avoid baid size integer overflow [+ + +]
Author: Johannes Berg <johannes.berg@intel.com>
Date:   Tue Jun 20 13:04:02 2023 +0300

    wifi: iwlwifi: mvm: avoid baid size integer overflow
    
    [ Upstream commit 1a528ab1da324d078ec60283c34c17848580df24 ]
    
    Roee reported various hard-to-debug crashes with pings in
    EHT aggregation scenarios. Enabling KASAN showed that we
    access the BAID allocation out of bounds, and looking at
    the code a bit shows that since the reorder buffer entry
    (struct iwl_mvm_reorder_buf_entry) is 128 bytes if debug
    such as lockdep is enabled, then staring from an agg size
    512 we overflow the size calculation, and allocate a much
    smaller structure than we should, causing slab corruption
    once we initialize this.
    
    Fix this by simply using u32 instead of u16.
    
    Reported-by: Roee Goldfiner <roee.h.goldfiner@intel.com>
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Gregory Greenman <gregory.greenman@intel.com>
    Link: https://lore.kernel.org/r/20230620125813.f428c856030d.I2c2bb808e945adb71bc15f5b2bac2d8957ea90eb@changeid
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: iwlwifi: pull from TXQs with softirqs disabled [+ + +]
Author: Johannes Berg <johannes.berg@intel.com>
Date:   Wed Jun 14 12:41:22 2023 +0300

    wifi: iwlwifi: pull from TXQs with softirqs disabled
    
    [ Upstream commit 96fb6f47db24a712d650b0a9b9074873f273fb0e ]
    
    In mac80211, it's required that we pull from TXQs by calling
    ieee80211_tx_dequeue() only with softirqs disabled. However,
    in iwl_mvm_queue_state_change() we're often called with them
    enabled, e.g. from flush if anything was flushed, triggering
    a mac80211 warning.
    
    Fix that by disabling the softirqs across the TX call.
    
    Fixes: cfbc6c4c5b91 ("iwlwifi: mvm: support mac80211 TXQs model")
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Gregory Greenman <gregory.greenman@intel.com>
    Link: https://lore.kernel.org/r/20230614123446.0feef7fa81db.I4dd62542d955b40dd8f0af34fa4accb9d0d17c7e@changeid
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: mwifiex: Fix the size of a memory allocation in mwifiex_ret_802_11_scan() [+ + +]
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Sat May 6 15:53:15 2023 +0200

    wifi: mwifiex: Fix the size of a memory allocation in mwifiex_ret_802_11_scan()
    
    [ Upstream commit d9aef04fcfa81ee4fb2804a21a3712b7bbd936af ]
    
    The type of "mwifiex_adapter->nd_info" is "struct cfg80211_wowlan_nd_info",
    not "struct cfg80211_wowlan_nd_match".
    
    Use struct_size() to ease the computation of the needed size.
    
    The current code over-allocates some memory, so is safe.
    But it wastes 32 bytes.
    
    Fixes: 7d7f07d8c5d3 ("mwifiex: add wowlan net-detect support")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Reviewed-by: Simon Horman <simon.horman@corigine.com>
    Signed-off-by: Kalle Valo <kvalo@kernel.org>
    Link: https://lore.kernel.org/r/7a6074fb056d2181e058a3cc6048d8155c20aec7.1683371982.git.christophe.jaillet@wanadoo.fr
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: orinoco: Fix an error handling path in orinoco_cs_probe() [+ + +]
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Sat May 20 09:38:22 2023 +0200

    wifi: orinoco: Fix an error handling path in orinoco_cs_probe()
    
    [ Upstream commit 67a81d911c01225f426cc6bee2373df044c1a9b7 ]
    
    Should orinoco_cs_config() fail, some resources need to be released as
    already done in the remove function.
    
    While at it, remove a useless and erroneous comment. The probe is
    orinoco_cs_probe(), not orinoco_cs_attach().
    
    Fixes: 15b99ac17295 ("[PATCH] pcmcia: add return value to _config() functions")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Signed-off-by: Kalle Valo <kvalo@kernel.org>
    Link: https://lore.kernel.org/r/e24735ce4d82901d5f7ea08419eea53bfdde3d65.1684568286.git.christophe.jaillet@wanadoo.fr
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: orinoco: Fix an error handling path in spectrum_cs_probe() [+ + +]
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Sat May 20 09:29:46 2023 +0200

    wifi: orinoco: Fix an error handling path in spectrum_cs_probe()
    
    [ Upstream commit 925244325159824385209e3e0e3f91fa6bf0646c ]
    
    Should spectrum_cs_config() fail, some resources need to be released as
    already done in the remove function.
    
    While at it, remove a useless and erroneous comment. The probe is
    spectrum_cs_probe(), not spectrum_cs_attach().
    
    Fixes: 15b99ac17295 ("[PATCH] pcmcia: add return value to _config() functions")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Reviewed-by: Simon Horman <simon.horman@corigine.com>
    Signed-off-by: Kalle Valo <kvalo@kernel.org>
    Link: https://lore.kernel.org/r/c0bc0c21c58ca477fc5521607615bafbf2aef8eb.1684567733.git.christophe.jaillet@wanadoo.fr
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: ray_cs: Drop useless status variable in parse_addr() [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Fri Jun 3 19:44:14 2022 +0300

    wifi: ray_cs: Drop useless status variable in parse_addr()
    
    [ Upstream commit 4dfc63c002a555a2c3c34d89009532ad803be876 ]
    
    The status variable assigned only once and used also only once.
    Replace it's usage by actual value.
    
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Signed-off-by: Kalle Valo <kvalo@kernel.org>
    Link: https://lore.kernel.org/r/20220603164414.48436-2-andriy.shevchenko@linux.intel.com
    Stable-dep-of: 4f8d66a9fb2e ("wifi: ray_cs: Fix an error handling path in ray_probe()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: ray_cs: Fix an error handling path in ray_probe() [+ + +]
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Sat May 20 10:13:22 2023 +0200

    wifi: ray_cs: Fix an error handling path in ray_probe()
    
    [ Upstream commit 4f8d66a9fb2edcd05c1e563456a55a08910bfb37 ]
    
    Should ray_config() fail, some resources need to be released as already
    done in the remove function.
    
    While at it, remove a useless and erroneous comment. The probe is
    ray_probe(), not ray_attach().
    
    Fixes: 15b99ac17295 ("[PATCH] pcmcia: add return value to _config() functions")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Reviewed-by: Simon Horman <simon.horman@corigine.com>
    Signed-off-by: Kalle Valo <kvalo@kernel.org>
    Link: https://lore.kernel.org/r/8c544d18084f8b37dd108e844f7e79e85ff708ff.1684570373.git.christophe.jaillet@wanadoo.fr
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: ray_cs: Utilize strnlen() in parse_addr() [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Fri Jun 3 19:44:13 2022 +0300

    wifi: ray_cs: Utilize strnlen() in parse_addr()
    
    [ Upstream commit 9e8e9187673cb24324f9165dd47b2b28f60b0b10 ]
    
    Instead of doing simple operations and using an additional variable on stack,
    utilize strnlen() and reuse len variable.
    
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Signed-off-by: Kalle Valo <kvalo@kernel.org>
    Link: https://lore.kernel.org/r/20220603164414.48436-1-andriy.shevchenko@linux.intel.com
    Stable-dep-of: 4f8d66a9fb2e ("wifi: ray_cs: Fix an error handling path in ray_probe()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: rsi: Do not configure WoWlan in shutdown hook if not enabled [+ + +]
Author: Marek Vasut <marex@denx.de>
Date:   Sun May 28 00:28:33 2023 +0200

    wifi: rsi: Do not configure WoWlan in shutdown hook if not enabled
    
    [ Upstream commit b241e260820b68c09586e8a0ae0fc23c0e3215bd ]
    
    In case WoWlan was never configured during the operation of the system,
    the hw->wiphy->wowlan_config will be NULL. rsi_config_wowlan() checks
    whether wowlan_config is non-NULL and if it is not, then WARNs about it.
    The warning is valid, as during normal operation the rsi_config_wowlan()
    should only ever be called with non-NULL wowlan_config. In shutdown this
    rsi_config_wowlan() should only ever be called if WoWlan was configured
    before by the user.
    
    Add checks for non-NULL wowlan_config into the shutdown hook. While at it,
    check whether the wiphy is also non-NULL before accessing wowlan_config .
    Drop the single-use wowlan_config variable, just inline it into function
    call.
    
    Fixes: 16bbc3eb8372 ("rsi: fix null pointer dereference during rsi_shutdown()")
    Signed-off-by: Marek Vasut <marex@denx.de>
    Reviewed-by: Simon Horman <simon.horman@corigine.com>
    Signed-off-by: Kalle Valo <kvalo@kernel.org>
    Link: https://lore.kernel.org/r/20230527222833.273741-1-marex@denx.de
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: rsi: Do not set MMC_PM_KEEP_POWER in shutdown [+ + +]
Author: Marek Vasut <marex@denx.de>
Date:   Sun May 28 00:28:59 2023 +0200

    wifi: rsi: Do not set MMC_PM_KEEP_POWER in shutdown
    
    [ Upstream commit e74f562328b03fbe9cf438f958464dff3a644dfc ]
    
    It makes no sense to set MMC_PM_KEEP_POWER in shutdown. The flag
    indicates to the MMC subsystem to keep the slot powered on during
    suspend, but in shutdown the slot should actually be powered off.
    Drop this call.
    
    Fixes: 063848c3e155 ("rsi: sdio: Add WOWLAN support for S5 shutdown state")
    Signed-off-by: Marek Vasut <marex@denx.de>
    Reviewed-by: Simon Horman <simon.horman@corigine.com>
    Signed-off-by: Kalle Valo <kvalo@kernel.org>
    Link: https://lore.kernel.org/r/20230527222859.273768-1-marex@denx.de
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: wext-core: Fix -Wstringop-overflow warning in ioctl_standard_iw_point() [+ + +]
Author: Gustavo A. R. Silva <gustavoars@kernel.org>
Date:   Thu Jun 15 12:04:07 2023 -0600

    wifi: wext-core: Fix -Wstringop-overflow warning in ioctl_standard_iw_point()
    
    [ Upstream commit 71e7552c90db2a2767f5c17c7ec72296b0d92061 ]
    
    -Wstringop-overflow is legitimately warning us about extra_size
    pontentially being zero at some point, hence potenially ending
    up _allocating_ zero bytes of memory for extra pointer and then
    trying to access such object in a call to copy_from_user().
    
    Fix this by adding a sanity check to ensure we never end up
    trying to allocate zero bytes of data for extra pointer, before
    continue executing the rest of the code in the function.
    
    Address the following -Wstringop-overflow warning seen when built
    m68k architecture with allyesconfig configuration:
                     from net/wireless/wext-core.c:11:
    In function '_copy_from_user',
        inlined from 'copy_from_user' at include/linux/uaccess.h:183:7,
        inlined from 'ioctl_standard_iw_point' at net/wireless/wext-core.c:825:7:
    arch/m68k/include/asm/string.h:48:25: warning: '__builtin_memset' writing 1 or more bytes into a region of size 0 overflows the destination [-Wstringop-overflow=]
       48 | #define memset(d, c, n) __builtin_memset(d, c, n)
          |                         ^~~~~~~~~~~~~~~~~~~~~~~~~
    include/linux/uaccess.h:153:17: note: in expansion of macro 'memset'
      153 |                 memset(to + (n - res), 0, res);
          |                 ^~~~~~
    In function 'kmalloc',
        inlined from 'kzalloc' at include/linux/slab.h:694:9,
        inlined from 'ioctl_standard_iw_point' at net/wireless/wext-core.c:819:10:
    include/linux/slab.h:577:16: note: at offset 1 into destination object of size 0 allocated by '__kmalloc'
      577 |         return __kmalloc(size, flags);
          |                ^~~~~~~~~~~~~~~~~~~~~~
    
    This help with the ongoing efforts to globally enable
    -Wstringop-overflow.
    
    Link: https://github.com/KSPP/linux/issues/315
    Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
    Reviewed-by: Simon Horman <simon.horman@corigine.com>
    Link: https://lore.kernel.org/r/ZItSlzvIpjdjNfd8@work
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: wilc1000: fix for absent RSN capabilities WFA testcase [+ + +]
Author: Amisha Patel <amisha.patel@microchip.com>
Date:   Fri Apr 21 18:10:20 2023 +0000

    wifi: wilc1000: fix for absent RSN capabilities WFA testcase
    
    [ Upstream commit 9ce4bb09123e9754996e358bd808d39f5d112899 ]
    
    Mandatory WFA testcase
    CT_Security_WPA2Personal_STA_RSNEBoundsVerification-AbsentRSNCap,
    performs bounds verfication on Beacon and/or Probe response frames. It
    failed and observed the reason to be absence of cipher suite and AKM
    suite in RSN information. To fix this, enable the RSN flag before extracting RSN
    capabilities.
    
    Fixes: cd21d99e595e ("wifi: wilc1000: validate pairwise and authentication suite offsets")
    Signed-off-by: Amisha Patel <amisha.patel@microchip.com>
    Signed-off-by: Kalle Valo <kvalo@kernel.org>
    Link: https://lore.kernel.org/r/20230421181005.4865-1-amisha.patel@microchip.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: wl3501_cs: Fix an error handling path in wl3501_probe() [+ + +]
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Sat May 20 10:05:08 2023 +0200

    wifi: wl3501_cs: Fix an error handling path in wl3501_probe()
    
    [ Upstream commit 391af06a02e7642039ac5f6c4b2c034ab0992b5d ]
    
    Should wl3501_config() fail, some resources need to be released as already
    done in the remove function.
    
    Fixes: 15b99ac17295 ("[PATCH] pcmcia: add return value to _config() functions")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Reviewed-by: Simon Horman <simon.horman@corigine.com>
    Signed-off-by: Kalle Valo <kvalo@kernel.org>
    Link: https://lore.kernel.org/r/7cc9c9316489b7d69b36aeb0edd3123538500b41.1684569865.git.christophe.jaillet@wanadoo.fr
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
wireguard: netlink: send staged packets when setting initial private key [+ + +]
Author: Jason A. Donenfeld <Jason@zx2c4.com>
Date:   Mon Jul 3 03:27:05 2023 +0200

    wireguard: netlink: send staged packets when setting initial private key
    
    commit f58d0a9b4c6a7a5199c3af967e43cc8b654604d4 upstream.
    
    Packets bound for peers can queue up prior to the device private key
    being set. For example, if persistent keepalive is set, a packet is
    queued up to be sent as soon as the device comes up. However, if the
    private key hasn't been set yet, the handshake message never sends, and
    no timer is armed to retry, since that would be pointless.
    
    But, if a user later sets a private key, the expectation is that those
    queued packets, such as a persistent keepalive, are actually sent. So
    adjust the configuration logic to account for this edge case, and add a
    test case to make sure this works.
    
    Maxim noticed this with a wg-quick(8) config to the tune of:
    
        [Interface]
        PostUp = wg set %i private-key somefile
    
        [Peer]
        PublicKey = ...
        Endpoint = ...
        PersistentKeepalive = 25
    
    Here, the private key gets set after the device comes up using a PostUp
    script, triggering the bug.
    
    Fixes: e7096c131e51 ("net: WireGuard secure network tunnel")
    Cc: stable@vger.kernel.org
    Reported-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
    Tested-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
    Link: https://lore.kernel.org/wireguard/87fs7xtqrv.fsf@gmail.com/
    Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

wireguard: queueing: use saner cpu selection wrapping [+ + +]
Author: Jason A. Donenfeld <Jason@zx2c4.com>
Date:   Mon Jul 3 03:27:04 2023 +0200

    wireguard: queueing: use saner cpu selection wrapping
    
    commit 7387943fa35516f6f8017a3b0e9ce48a3bef9faa upstream.
    
    Using `% nr_cpumask_bits` is slow and complicated, and not totally
    robust toward dynamic changes to CPU topologies. Rather than storing the
    next CPU in the round-robin, just store the last one, and also return
    that value. This simplifies the loop drastically into a much more common
    pattern.
    
    Fixes: e7096c131e51 ("net: WireGuard secure network tunnel")
    Cc: stable@vger.kernel.org
    Reported-by: Linus Torvalds <torvalds@linux-foundation.org>
    Tested-by: Manuel Leiner <manuel.leiner@gmx.de>
    Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
wl3501_cs: Fix misspelling and provide missing documentation [+ + +]
Author: Lee Jones <lee@kernel.org>
Date:   Mon Nov 2 11:23:53 2020 +0000

    wl3501_cs: Fix misspelling and provide missing documentation
    
    [ Upstream commit 8b8a6f8c3b50193d161c598a6784e721128d6dc3 ]
    
    Fixes the following W=1 kernel build warning(s):
    
     In file included from drivers/net/wireless/wl3501_cs.c:57:
     drivers/net/wireless/wl3501_cs.c:143: warning: Function parameter or member 'reg_domain' not described in 'iw_valid_channel'
     drivers/net/wireless/wl3501_cs.c:143: warning: Excess function parameter 'reg_comain' description in 'iw_valid_channel'
     drivers/net/wireless/wl3501_cs.c:469: warning: Function parameter or member 'data' not described in 'wl3501_send_pkt'
     drivers/net/wireless/wl3501_cs.c:469: warning: Function parameter or member 'len' not described in 'wl3501_send_pkt'
    
    Cc: Kalle Valo <kvalo@codeaurora.org>
    Cc: "David S. Miller" <davem@davemloft.net>
    Cc: Jakub Kicinski <kuba@kernel.org>
    Cc: Fox Chen <mhchen@golf.ccl.itri.org.tw>
    Cc: de Melo <acme@conectiva.com.br>
    Cc: Gustavo Niemeyer <niemeyer@conectiva.com>
    Cc: linux-wireless@vger.kernel.org
    Cc: netdev@vger.kernel.org
    Signed-off-by: Lee Jones <lee.jones@linaro.org>
    Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
    Link: https://lore.kernel.org/r/20201102112410.1049272-25-lee.jones@linaro.org
    Stable-dep-of: 391af06a02e7 ("wifi: wl3501_cs: Fix an error handling path in wl3501_probe()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wl3501_cs: use eth_hw_addr_set() [+ + +]
Author: Jakub Kicinski <kuba@kernel.org>
Date:   Mon Oct 18 16:50:20 2021 -0700

    wl3501_cs: use eth_hw_addr_set()
    
    [ Upstream commit 18774612246d036c04ce9fee7f67192f96f48725 ]
    
    Commit 406f42fa0d3c ("net-next: When a bond have a massive amount
    of VLANs...") introduced a rbtree for faster Ethernet address look
    up. To maintain netdev->dev_addr in this tree we need to make all
    the writes to it got through appropriate helpers.
    
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
    Link: https://lore.kernel.org/r/20211018235021.1279697-15-kuba@kernel.org
    Stable-dep-of: 391af06a02e7 ("wifi: wl3501_cs: Fix an error handling path in wl3501_probe()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
workqueue: clean up WORK_* constant types, clarify masking [+ + +]
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date:   Fri Jun 23 12:08:14 2023 -0700

    workqueue: clean up WORK_* constant types, clarify masking
    
    commit afa4bb778e48d79e4a642ed41e3b4e0de7489a6c upstream.
    
    Dave Airlie reports that gcc-13.1.1 has started complaining about some
    of the workqueue code in 32-bit arm builds:
    
      kernel/workqueue.c: In function ‘get_work_pwq’:
      kernel/workqueue.c:713:24: error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast]
        713 |                 return (void *)(data & WORK_STRUCT_WQ_DATA_MASK);
            |                        ^
      [ ... a couple of other cases ... ]
    
    and while it's not immediately clear exactly why gcc started complaining
    about it now, I suspect it's some C23-induced enum type handlign fixup in
    gcc-13 is the cause.
    
    Whatever the reason for starting to complain, the code and data types
    are indeed disgusting enough that the complaint is warranted.
    
    The wq code ends up creating various "helper constants" (like that
    WORK_STRUCT_WQ_DATA_MASK) using an enum type, which is all kinds of
    confused.  The mask needs to be 'unsigned long', not some unspecified
    enum type.
    
    To make matters worse, the actual "mask and cast to a pointer" is
    repeated a couple of times, and the cast isn't even always done to the
    right pointer, but - as the error case above - to a 'void *' with then
    the compiler finishing the job.
    
    That's now how we roll in the kernel.
    
    So create the masks using the proper types rather than some ambiguous
    enumeration, and use a nice helper that actually does the type
    conversion in one well-defined place.
    
    Incidentally, this magically makes clang generate better code.  That,
    admittedly, is really just a sign of clang having been seriously
    confused before, and cleaning up the typing unconfuses the compiler too.
    
    Reported-by: Dave Airlie <airlied@gmail.com>
    Link: https://lore.kernel.org/lkml/CAPM=9twNnV4zMCvrPkw3H-ajZOH-01JVh_kDrxdPYQErz8ZTdA@mail.gmail.com/
    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: Tejun Heo <tj@kernel.org>
    Cc: Nick Desaulniers <ndesaulniers@google.com>
    Cc: Nathan Chancellor <nathan@kernel.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
x86/mm: Fix __swp_entry_to_pte() for Xen PV guests [+ + +]
Author: Juergen Gross <jgross@suse.com>
Date:   Mon Mar 6 13:32:59 2023 +0100

    x86/mm: Fix __swp_entry_to_pte() for Xen PV guests
    
    [ Upstream commit 0f88130e8a6fd185b0aeb5d8e286083735f2585a ]
    
    Normally __swp_entry_to_pte() is never called with a value translating
    to a valid PTE. The only known exception is pte_swap_tests(), resulting
    in a WARN splat in Xen PV guests, as __pte_to_swp_entry() did
    translate the PFN of the valid PTE to a guest local PFN, while
    __swp_entry_to_pte() doesn't do the opposite translation.
    
    Fix that by using __pte() in __swp_entry_to_pte() instead of open
    coding the native variant of it.
    
    For correctness do the similar conversion for __swp_entry_to_pmd().
    
    Fixes: 05289402d717 ("mm/debug_vm_pgtable: add tests validating arch helpers for core MM features")
    Signed-off-by: Juergen Gross <jgross@suse.com>
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Link: https://lore.kernel.org/r/20230306123259.12461-1-jgross@suse.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86/resctrl: Only show tasks' pid in current pid namespace [+ + +]
Author: Shawn Wang <shawnwang@linux.alibaba.com>
Date:   Mon May 15 14:04:48 2023 +0800

    x86/resctrl: Only show tasks' pid in current pid namespace
    
    [ Upstream commit 2997d94b5dd0e8b10076f5e0b6f18410c73e28bd ]
    
    When writing a task id to the "tasks" file in an rdtgroup,
    rdtgroup_tasks_write() treats the pid as a number in the current pid
    namespace. But when reading the "tasks" file, rdtgroup_tasks_show() shows
    the list of global pids from the init namespace, which is confusing and
    incorrect.
    
    To be more robust, let the "tasks" file only show pids in the current pid
    namespace.
    
    Fixes: e02737d5b826 ("x86/intel_rdt: Add tasks files")
    Signed-off-by: Shawn Wang <shawnwang@linux.alibaba.com>
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Acked-by: Reinette Chatre <reinette.chatre@intel.com>
    Acked-by: Fenghua Yu <fenghua.yu@intel.com>
    Tested-by: Reinette Chatre <reinette.chatre@intel.com>
    Link: https://lore.kernel.org/all/20230116071246.97717-1-shawnwang@linux.alibaba.com/
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86/smp: Use dedicated cache-line for mwait_play_dead() [+ + +]
Author: Thomas Gleixner <tglx@linutronix.de>
Date:   Thu Jun 15 22:33:55 2023 +0200

    x86/smp: Use dedicated cache-line for mwait_play_dead()
    
    commit f9c9987bf52f4e42e940ae217333ebb5a4c3b506 upstream.
    
    Monitoring idletask::thread_info::flags in mwait_play_dead() has been an
    obvious choice as all what is needed is a cache line which is not written
    by other CPUs.
    
    But there is a use case where a "dead" CPU needs to be brought out of
    MWAIT: kexec().
    
    This is required as kexec() can overwrite text, pagetables, stacks and the
    monitored cacheline of the original kernel. The latter causes MWAIT to
    resume execution which obviously causes havoc on the kexec kernel which
    results usually in triple faults.
    
    Use a dedicated per CPU storage to prepare for that.
    
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Reviewed-by: Ashok Raj <ashok.raj@intel.com>
    Reviewed-by: Borislav Petkov (AMD) <bp@alien8.de>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20230615193330.434553750@linutronix.de
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
xhci: Fix resume issue of some ZHAOXIN hosts [+ + +]
Author: Weitao Wang <WeitaoWang-oc@zhaoxin.com>
Date:   Fri Jun 2 17:40:06 2023 +0300

    xhci: Fix resume issue of some ZHAOXIN hosts
    
    commit f927728186f0de1167262d6a632f9f7e96433d1a upstream.
    
    On ZHAOXIN ZX-100 project, xHCI can't work normally after resume
    from system Sx state. To fix this issue, when resume from system
    Sx state, reinitialize xHCI instead of restore.
    So, Add XHCI_RESET_ON_RESUME quirk for ZX-100 to fix issue of
    resuming from system Sx state.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Weitao Wang <WeitaoWang-oc@zhaoxin.com>
    Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
    Message-ID: <20230602144009.1225632-9-mathias.nyman@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

xhci: Fix TRB prefetch issue of ZHAOXIN hosts [+ + +]
Author: Weitao Wang <WeitaoWang-oc@zhaoxin.com>
Date:   Fri Jun 2 17:40:07 2023 +0300

    xhci: Fix TRB prefetch issue of ZHAOXIN hosts
    
    commit 2a865a652299f5666f3b785cbe758c5f57453036 upstream.
    
    On some ZHAOXIN hosts, xHCI will prefetch TRB for performance
    improvement. However this TRB prefetch mechanism may cross page boundary,
    which may access memory not allocated by xHCI driver. In order to fix
    this issue, two pages was allocated for a segment and only the first
    page will be used. And add a quirk XHCI_ZHAOXIN_TRB_FETCH for this issue.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Weitao Wang <WeitaoWang-oc@zhaoxin.com>
    Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
    Message-ID: <20230602144009.1225632-10-mathias.nyman@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

xhci: Show ZHAOXIN xHCI root hub speed correctly [+ + +]
Author: Weitao Wang <WeitaoWang-oc@zhaoxin.com>
Date:   Fri Jun 2 17:40:08 2023 +0300

    xhci: Show ZHAOXIN xHCI root hub speed correctly
    
    commit d9b0328d0b8b8298dfdc97cd8e0e2371d4bcc97b upstream.
    
    Some ZHAOXIN xHCI controllers follow usb3.1 spec, but only support
    gen1 speed 5Gbps. While in Linux kernel, if xHCI suspport usb3.1,
    root hub speed will show on 10Gbps.
    To fix this issue of ZHAOXIN xHCI platforms, read usb speed ID
    supported by xHCI to determine root hub speed. And add a quirk
    XHCI_ZHAOXIN_HOST for this issue.
    
    [fix warning about uninitialized symbol -Mathias]
    
    Suggested-by: Mathias Nyman <mathias.nyman@linux.intel.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Weitao Wang <WeitaoWang-oc@zhaoxin.com>
    Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
    Message-ID: <20230602144009.1225632-11-mathias.nyman@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
xsk: Honor SO_BINDTODEVICE on bind [+ + +]
Author: Ilya Maximets <i.maximets@ovn.org>
Date:   Mon Jul 3 19:53:29 2023 +0200

    xsk: Honor SO_BINDTODEVICE on bind
    
    [ Upstream commit f7306acec9aae9893d15e745c8791124d42ab10a ]
    
    Initial creation of an AF_XDP socket requires CAP_NET_RAW capability. A
    privileged process might create the socket and pass it to a non-privileged
    process for later use. However, that process will be able to bind the socket
    to any network interface. Even though it will not be able to receive any
    traffic without modification of the BPF map, the situation is not ideal.
    
    Sockets already have a mechanism that can be used to restrict what interface
    they can be attached to. That is SO_BINDTODEVICE.
    
    To change the SO_BINDTODEVICE binding the process will need CAP_NET_RAW.
    
    Make xsk_bind() honor the SO_BINDTODEVICE in order to allow safer workflow
    when non-privileged process is using AF_XDP.
    
    The intended workflow is following:
    
      1. First process creates a bare socket with socket(AF_XDP, ...).
      2. First process loads the XSK program to the interface.
      3. First process adds the socket fd to a BPF map.
      4. First process ties socket fd to a particular interface using
         SO_BINDTODEVICE.
      5. First process sends socket fd to a second process.
      6. Second process allocates UMEM.
      7. Second process binds socket to the interface with bind(...).
      8. Second process sends/receives the traffic.
    
    All the steps above are possible today if the first process is privileged
    and the second one has sufficient RLIMIT_MEMLOCK and no capabilities.
    However, the second process will be able to bind the socket to any interface
    it wants on step 7 and send traffic from it. With the proposed change, the
    second process will be able to bind the socket only to a specific interface
    chosen by the first process at step 4.
    
    Fixes: 965a99098443 ("xsk: add support for bind for Rx")
    Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: Magnus Karlsson <magnus.karlsson@intel.com>
    Acked-by: John Fastabend <john.fastabend@gmail.com>
    Acked-by: Jason Wang <jasowang@redhat.com>
    Link: https://lore.kernel.org/bpf/20230703175329.3259672-1-i.maximets@ovn.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
xtensa: ISS: fix call to split_if_spec [+ + +]
Author: Max Filippov <jcmvbkbc@gmail.com>
Date:   Mon Jul 3 11:01:42 2023 -0700

    xtensa: ISS: fix call to split_if_spec
    
    commit bc8d5916541fa19ca5bc598eb51a5f78eb891a36 upstream.
    
    split_if_spec expects a NULL-pointer as an end marker for the argument
    list, but tuntap_probe never supplied that terminating NULL. As a result
    incorrectly formatted interface specification string may cause a crash
    because of the random memory access. Fix that by adding NULL terminator
    to the split_if_spec argument list.
    
    Cc: stable@vger.kernel.org
    Fixes: 7282bee78798 ("[PATCH] xtensa: Architecture support for Tensilica Xtensa Part 8")
    Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>