Changelog in Linux kernel 6.9.8

 
af_unix: Don't stop recv() at consumed ex-OOB skb. [+ + +]
Author: Kuniyuki Iwashima <[email protected]>
Date:   Mon Jun 24 18:36:40 2024 -0700

    af_unix: Don't stop recv() at consumed ex-OOB skb.
    
    [ Upstream commit 36893ef0b661671ee64eb37bf5f345f33d2cabb7 ]
    
    Currently, recv() is stopped at a consumed OOB skb even if a new
    OOB skb is queued and we can ignore the old OOB skb.
    
      >>> from socket import *
      >>> c1, c2 = socket(AF_UNIX, SOCK_STREAM)
      >>> c1.send(b'hellowor', MSG_OOB)
      8
      >>> c2.recv(1, MSG_OOB)  # consume OOB data stays at middle of recvq.
      b'r'
      >>> c1.send(b'ld', MSG_OOB)
      2
      >>> c2.recv(10)          # recv() stops at the old consumed OOB
      b'hellowo'               # should be 'hellowol'
    
    manage_oob() should not stop recv() at the old consumed OOB skb if
    there is a new OOB data queued.
    
    Note that TCP behaviour is apparently wrong in this test case because
    we can recv() the same OOB data twice.
    
    Without fix:
    
      #  RUN           msg_oob.no_peek.ex_oob_ahead_break ...
      # msg_oob.c:138:ex_oob_ahead_break:AF_UNIX :hellowo
      # msg_oob.c:139:ex_oob_ahead_break:Expected:hellowol
      # msg_oob.c:141:ex_oob_ahead_break:Expected ret[0] (7) == expected_len (8)
      # ex_oob_ahead_break: Test terminated by assertion
      #          FAIL  msg_oob.no_peek.ex_oob_ahead_break
      not ok 11 msg_oob.no_peek.ex_oob_ahead_break
    
    With fix:
    
      #  RUN           msg_oob.no_peek.ex_oob_ahead_break ...
      # msg_oob.c:146:ex_oob_ahead_break:AF_UNIX :hellowol
      # msg_oob.c:147:ex_oob_ahead_break:TCP     :helloworl
      #            OK  msg_oob.no_peek.ex_oob_ahead_break
      ok 11 msg_oob.no_peek.ex_oob_ahead_break
    
    Fixes: 314001f0bf92 ("af_unix: Add OOB support")
    Signed-off-by: Kuniyuki Iwashima <[email protected]>
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

af_unix: Don't stop recv(MSG_DONTWAIT) if consumed OOB skb is at the head. [+ + +]
Author: Kuniyuki Iwashima <[email protected]>
Date:   Mon Jun 24 18:36:38 2024 -0700

    af_unix: Don't stop recv(MSG_DONTWAIT) if consumed OOB skb is at the head.
    
    [ Upstream commit 93c99f21db360957d49853e5666b5c147f593bda ]
    
    Let's say a socket send()s "hello" with MSG_OOB and "world" without flags,
    
      >>> from socket import *
      >>> c1, c2 = socketpair(AF_UNIX)
      >>> c1.send(b'hello', MSG_OOB)
      5
      >>> c1.send(b'world')
      5
    
    and its peer recv()s "hell" and "o".
    
      >>> c2.recv(10)
      b'hell'
      >>> c2.recv(1, MSG_OOB)
      b'o'
    
    Now the consumed OOB skb stays at the head of recvq to return a correct
    value for ioctl(SIOCATMARK), which is broken now and fixed by a later
    patch.
    
    Then, if peer issues recv() with MSG_DONTWAIT, manage_oob() returns NULL,
    so recv() ends up with -EAGAIN.
    
      >>> c2.setblocking(False)  # This causes -EAGAIN even with available data
      >>> c2.recv(5)
      Traceback (most recent call last):
        File "<stdin>", line 1, in <module>
      BlockingIOError: [Errno 11] Resource temporarily unavailable
    
    However, next recv() will return the following available data, "world".
    
      >>> c2.recv(5)
      b'world'
    
    When the consumed OOB skb is at the head of the queue, we need to fetch
    the next skb to fix the weird behaviour.
    
    Note that the issue does not happen without MSG_DONTWAIT because we can
    retry after manage_oob().
    
    This patch also adds a test case that covers the issue.
    
    Without fix:
    
      #  RUN           msg_oob.no_peek.ex_oob_break ...
      # msg_oob.c:134:ex_oob_break:AF_UNIX :Resource temporarily unavailable
      # msg_oob.c:135:ex_oob_break:Expected:ld
      # msg_oob.c:137:ex_oob_break:Expected ret[0] (-1) == expected_len (2)
      # ex_oob_break: Test terminated by assertion
      #          FAIL  msg_oob.no_peek.ex_oob_break
      not ok 8 msg_oob.no_peek.ex_oob_break
    
    With fix:
    
      #  RUN           msg_oob.no_peek.ex_oob_break ...
      #            OK  msg_oob.no_peek.ex_oob_break
      ok 8 msg_oob.no_peek.ex_oob_break
    
    Fixes: 314001f0bf92 ("af_unix: Add OOB support")
    Signed-off-by: Kuniyuki Iwashima <[email protected]>
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

af_unix: Fix wrong ioctl(SIOCATMARK) when consumed OOB skb is at the head. [+ + +]
Author: Kuniyuki Iwashima <[email protected]>
Date:   Mon Jun 24 18:36:44 2024 -0700

    af_unix: Fix wrong ioctl(SIOCATMARK) when consumed OOB skb is at the head.
    
    [ Upstream commit e400cfa38bb0419cf1313e5494ea2b7d114e86d7 ]
    
    Even if OOB data is recv()ed, ioctl(SIOCATMARK) must return 1 when the
    OOB skb is at the head of the receive queue and no new OOB data is queued.
    
    Without fix:
    
      #  RUN           msg_oob.no_peek.oob ...
      # msg_oob.c:305:oob:Expected answ[0] (0) == oob_head (1)
      # oob: Test terminated by assertion
      #          FAIL  msg_oob.no_peek.oob
      not ok 2 msg_oob.no_peek.oob
    
    With fix:
    
      #  RUN           msg_oob.no_peek.oob ...
      #            OK  msg_oob.no_peek.oob
      ok 2 msg_oob.no_peek.oob
    
    Fixes: 314001f0bf92 ("af_unix: Add OOB support")
    Signed-off-by: Kuniyuki Iwashima <[email protected]>
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

af_unix: Stop recv(MSG_PEEK) at consumed OOB skb. [+ + +]
Author: Kuniyuki Iwashima <[email protected]>
Date:   Mon Jun 24 18:36:37 2024 -0700

    af_unix: Stop recv(MSG_PEEK) at consumed OOB skb.
    
    [ Upstream commit b94038d841a91d0e3f59cfe4d073e210910366ee ]
    
    After consuming OOB data, recv() reading the preceding data must break at
    the OOB skb regardless of MSG_PEEK.
    
    Currently, MSG_PEEK does not stop recv() for AF_UNIX, and the behaviour is
    not compliant with TCP.
    
      >>> from socket import *
      >>> c1, c2 = socketpair(AF_UNIX)
      >>> c1.send(b'hello', MSG_OOB)
      5
      >>> c1.send(b'world')
      5
      >>> c2.recv(1, MSG_OOB)
      b'o'
      >>> c2.recv(9, MSG_PEEK)  # This should return b'hell'
      b'hellworld'              # even with enough buffer.
    
    Let's fix it by returning NULL for consumed skb and unlinking it only if
    MSG_PEEK is not specified.
    
    This patch also adds test cases that add recv(MSG_PEEK) before each recv().
    
    Without fix:
    
      #  RUN           msg_oob.peek.oob_ahead_break ...
      # msg_oob.c:134:oob_ahead_break:AF_UNIX :hellworld
      # msg_oob.c:135:oob_ahead_break:Expected:hell
      # msg_oob.c:137:oob_ahead_break:Expected ret[0] (9) == expected_len (4)
      # oob_ahead_break: Test terminated by assertion
      #          FAIL  msg_oob.peek.oob_ahead_break
      not ok 13 msg_oob.peek.oob_ahead_break
    
    With fix:
    
      #  RUN           msg_oob.peek.oob_ahead_break ...
      #            OK  msg_oob.peek.oob_ahead_break
      ok 13 msg_oob.peek.oob_ahead_break
    
    Fixes: 314001f0bf92 ("af_unix: Add OOB support")
    Signed-off-by: Kuniyuki Iwashima <[email protected]>
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ALSA: emux: improve patch ioctl data validation [+ + +]
Author: Oswald Buddenhagen <[email protected]>
Date:   Sat Apr 6 08:48:20 2024 +0200

    ALSA: emux: improve patch ioctl data validation
    
    [ Upstream commit 89b32ccb12ae67e630c6453d778ec30a592a212f ]
    
    In load_data(), make the validation of and skipping over the main info
    block match that in load_guspatch().
    
    In load_guspatch(), add checking that the specified patch length matches
    the actually supplied data, like load_data() already did.
    
    Signed-off-by: Oswald Buddenhagen <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: hda/realtek: fix mute/micmute LEDs don't work for EliteBook 645/665 G11. [+ + +]
Author: Dirk Su <[email protected]>
Date:   Wed Jun 26 10:14:36 2024 +0800

    ALSA: hda/realtek: fix mute/micmute LEDs don't work for EliteBook 645/665 G11.
    
    commit 3cd59d8ef8df7d7a079f54d56502dae8f716b39b upstream.
    
    HP EliteBook 645/665 G11 needs ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF quirk to
    make mic-mute/audio-mute working.
    
    Signed-off-by: Dirk Su <[email protected]>
    Cc: <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: seq: Fix missing channel at encoding RPN/NRPN MIDI2 messages [+ + +]
Author: Takashi Iwai <[email protected]>
Date:   Tue Jun 25 11:51:58 2024 +0200

    ALSA: seq: Fix missing channel at encoding RPN/NRPN MIDI2 messages
    
    [ Upstream commit c5ab94ea280a9b4108723eecf0a636e22a5bb137 ]
    
    The conversion from the legacy event to MIDI2 UMP for RPN and NRPN
    missed the setup of the channel number, resulting in always the
    channel 0.  Fix it.
    
    Fixes: e9e02819a98a ("ALSA: seq: Automatic conversion of UMP events")
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: seq: Fix missing MSB in MIDI2 SPP conversion [+ + +]
Author: Takashi Iwai <[email protected]>
Date:   Wed Jun 26 16:51:13 2024 +0200

    ALSA: seq: Fix missing MSB in MIDI2 SPP conversion
    
    [ Upstream commit 9d65ab6050d25f17c13f4195aa8e160c6ac638f6 ]
    
    The conversion of SPP to MIDI2 UMP called a wrong function, and the
    secondary argument wasn't taken.  As a result, MSB of SPP was always
    zero.  Fix to call the right function.
    
    Fixes: e9e02819a98a ("ALSA: seq: Automatic conversion of UMP events")
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
arm64: Clear the initial ID map correctly before remapping [+ + +]
Author: Zenghui Yu <[email protected]>
Date:   Fri Jun 21 17:28:09 2024 +0800

    arm64: Clear the initial ID map correctly before remapping
    
    [ Upstream commit ecc54006f158ae0245a13e59026da2f0239c1b86 ]
    
    In the attempt to clear and recreate the initial ID map for LPA2, we
    wrongly use 'start - end' as the map size and make the memset() almost a
    nop.
    
    Fix it by passing the correct map size.
    
    Fixes: 9684ec186f8f ("arm64: Enable LPA2 at boot if supported by the system")
    Signed-off-by: Zenghui Yu <[email protected]>
    Reviewed-by: Ard Biesheuvel <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Will Deacon <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: dts: rockchip: Add sound-dai-cells for RK3368 [+ + +]
Author: Alex Bee <[email protected]>
Date:   Sun Jun 23 11:01:15 2024 +0200

    arm64: dts: rockchip: Add sound-dai-cells for RK3368
    
    [ Upstream commit 8d7ec44aa5d1eb94a30319074762a1740440cdc8 ]
    
    Add the missing #sound-dai-cells for RK3368's I2S and S/PDIF controllers.
    
    Fixes: f7d89dfe1e31 ("arm64: dts: rockchip: add i2s nodes support for RK3368 SoCs")
    Fixes: 0328d68ea76d ("arm64: dts: rockchip: add rk3368 spdif node")
    Signed-off-by: Alex Bee <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Heiko Stuebner <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: dts: rockchip: fix PMIC interrupt pin on ROCK Pi E [+ + +]
Author: FUKAUMI Naoki <[email protected]>
Date:   Wed Jun 19 14:00:46 2024 +0900

    arm64: dts: rockchip: fix PMIC interrupt pin on ROCK Pi E
    
    [ Upstream commit 02afd3d5b9fa4ffed284c0f7e7bec609097804fc ]
    
    use GPIO0_A2 as interrupt pin for PMIC. GPIO2_A6 was used for
    pre-production board.
    
    Fixes: b918e81f2145 ("arm64: dts: rockchip: rk3328: Add Radxa ROCK Pi E")
    Signed-off-by: FUKAUMI Naoki <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Heiko Stuebner <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: dts: rockchip: Fix SD NAND and eMMC init on rk3308-rock-pi-s [+ + +]
Author: Jonas Karlman <[email protected]>
Date:   Tue May 21 21:10:06 2024 +0000

    arm64: dts: rockchip: Fix SD NAND and eMMC init on rk3308-rock-pi-s
    
    [ Upstream commit 1fb98c855ccd7bc7f50c7a9626fbb8440454760b ]
    
    Radxa ROCK Pi S have optional onboard SD NAND on board revision v1.1,
    v1.2 and v1.3, revision v1.5 changed to use optional onboard eMMC.
    
    The optional SD NAND typically fails to initialize:
    
      mmc_host mmc0: Bus speed (slot 0) = 400000Hz (slot req 400000Hz, actual 400000HZ div = 0)
      mmc0: error -110 whilst initialising SD card
      mmc_host mmc0: Bus speed (slot 0) = 300000Hz (slot req 300000Hz, actual 300000HZ div = 0)
      mmc0: error -110 whilst initialising SD card
      mmc_host mmc0: Bus speed (slot 0) = 200000Hz (slot req 200000Hz, actual 200000HZ div = 0)
      mmc0: error -110 whilst initialising SD card
      mmc_host mmc0: Bus speed (slot 0) = 100000Hz (slot req 100000Hz, actual 100000HZ div = 0)
      mmc0: error -110 whilst initialising SD card
    
    Add pinctrl and cap-sd-highspeed to fix SD NAND initialization. Also
    drop bus-width and mmc-hs200-1_8v to fix eMMC initialization on the new
    v1.5 board revision, only 3v3 signal voltage is used.
    
    Fixes: 2e04c25b1320 ("arm64: dts: rockchip: add ROCK Pi S DTS support")
    Signed-off-by: Jonas Karlman <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Heiko Stuebner <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: dts: rockchip: Fix the i2c address of es8316 on Cool Pi 4B [+ + +]
Author: Andy Yan <[email protected]>
Date:   Sun Jun 23 19:55:26 2024 +0800

    arm64: dts: rockchip: Fix the i2c address of es8316 on Cool Pi 4B
    
    [ Upstream commit 5d101df8fc3261607bd946a222248dd193956a0a ]
    
    According to the hardware design, the i2c address of audio codec es8316
    on Cool Pi 4B is 0x10.
    
    This fix the read/write error like bellow:
    es8316 7-0011: ASoC: error at soc_component_write_no_lock on es8316.7-0011 for register: [0x0000000c] -6
    es8316 7-0011: ASoC: error at soc_component_write_no_lock on es8316.7-0011 for register: [0x00000003] -6
    es8316 7-0011: ASoC: error at soc_component_read_no_lock on es8316.7-0011 for register: [0x00000016] -6
    es8316 7-0011: ASoC: error at soc_component_read_no_lock on es8316.7-0011 for register: [0x00000016] -6
    
    Fixes: 3f5d336d64d6 ("arm64: dts: rockchip: Add support for rk3588s based board Cool Pi 4B")
    Signed-off-by: Andy Yan <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Heiko Stuebner <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: dts: rockchip: Fix the value of `dlg,jack-det-rate` mismatch on rk3399-gru [+ + +]
Author: Hsin-Te Yuan <[email protected]>
Date:   Thu Jun 13 11:58:55 2024 +0000

    arm64: dts: rockchip: Fix the value of `dlg,jack-det-rate` mismatch on rk3399-gru
    
    [ Upstream commit a500c0b4b589ae6fb79140c9d96bd5cd31393d41 ]
    
    According to Documentation/devicetree/bindings/sound/dialog,da7219.yaml,
    the value of `dlg,jack-det-rate` property should be "32_64" instead of
    "32ms_64ms".
    
    Fixes: dc0ff0fa3a9b ("ASoC: da7219: Add Jack insertion detection polarity")
    Signed-off-by: Hsin-Te Yuan <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Heiko Stuebner <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: dts: rockchip: make poweroff(8) work on Radxa ROCK 5A [+ + +]
Author: FUKAUMI Naoki <[email protected]>
Date:   Wed Jun 12 12:35:23 2024 +0900

    arm64: dts: rockchip: make poweroff(8) work on Radxa ROCK 5A
    
    [ Upstream commit d05f7aff7ac23884ed9103a876325047ff9049aa ]
    
    Designate the RK806 PMIC on the Radxa ROCK 5A as the system power
    controller, so the board shuts down properly on poweroff(8).
    
    Fixes: 75fdcbc8f4c1 ("arm64: dts: rockchip: add PMIC to rock-5a")
    Reviewed-by: Dragan Simic <[email protected]>
    Signed-off-by: FUKAUMI Naoki <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Heiko Stuebner <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: dts: rockchip: Rename LED related pinctrl nodes on rk3308-rock-pi-s [+ + +]
Author: Jonas Karlman <[email protected]>
Date:   Tue May 21 21:10:09 2024 +0000

    arm64: dts: rockchip: Rename LED related pinctrl nodes on rk3308-rock-pi-s
    
    [ Upstream commit d2a52f678883fe4bc00bca89366b1ba504750abf ]
    
    The nodename, <name>-gpio, of referenced pinctrl nodes for the two LEDs
    on the ROCK Pi S cause DT schema validation error:
    
      leds: green-led-gpio: {'rockchip,pins': [[0, 6, 0, 90]], 'phandle': [[98]]} is not of type 'array'
            from schema $id: http://devicetree.org/schemas/gpio/gpio-consumer.yaml#
      leds: heartbeat-led-gpio: {'rockchip,pins': [[0, 5, 0, 90]], 'phandle': [[99]]} is not of type 'array'
            from schema $id: http://devicetree.org/schemas/gpio/gpio-consumer.yaml#
    
    Rename the pinctrl nodes and symbols to pass DT schema validation, also
    extend LED nodes with information about color and function.
    
    Fixes: 2e04c25b1320 ("arm64: dts: rockchip: add ROCK Pi S DTS support")
    Signed-off-by: Jonas Karlman <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Heiko Stuebner <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: dts: rockchip: set correct pwm0 pinctrl on rk3588-tiger [+ + +]
Author: Heiko Stuebner <[email protected]>
Date:   Mon Jun 3 21:22:54 2024 +0200

    arm64: dts: rockchip: set correct pwm0 pinctrl on rk3588-tiger
    
    [ Upstream commit a21d2cc2f9039023105bf9f9bf1acf324d5ebf9d ]
    
    PWM0 on rk3588-tiger is connected to the BLT_CTRL pin of the Q7 connector
    meant as the name implies to control a backlight device.
    
    Therefore set the correct M1 pinctrl variant for it. The M0 variant
    cannot ever be used because that pin is routed to a connector pin on the
    Q7 connector that is reserved for CAN use and the pin reachable by the M2
    variant is reserved for the embedded MCU on the SoM.
    
    Fixes: 6173ef24b35b ("arm64: dts: rockchip: add RK3588-Q7 (Tiger) SoM")
    Signed-off-by: Heiko Stuebner <[email protected]>
    Reviewed-by: Quentin Schulz <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Heiko Stuebner <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ARM: dts: rockchip: rk3066a: add #sound-dai-cells to hdmi node [+ + +]
Author: Johan Jonker <[email protected]>
Date:   Thu Jun 13 20:08:10 2024 +0200

    ARM: dts: rockchip: rk3066a: add #sound-dai-cells to hdmi node
    
    [ Upstream commit cca46f811d0000c1522a5e18ea48c27a15e45c05 ]
    
    '#sound-dai-cells' is required to properly interpret
    the list of DAI specified in the 'sound-dai' property,
    so add them to the 'hdmi' node for 'rk3066a.dtsi'.
    
    Fixes: fadc78062477 ("ARM: dts: rockchip: add rk3066 hdmi nodes")
    Signed-off-by: Johan Jonker <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Heiko Stuebner <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ASoC: amd: acp: add a null check for chip_pdev structure [+ + +]
Author: Vijendar Mukunda <[email protected]>
Date:   Mon Jun 17 12:58:34 2024 +0530

    ASoC: amd: acp: add a null check for chip_pdev structure
    
    [ Upstream commit 98d919dfee1cc402ca29d45da642852d7c9a2301 ]
    
    When acp platform device creation is skipped, chip->chip_pdev value will
    remain NULL. Add NULL check for chip->chip_pdev structure in
    snd_acp_resume() function to avoid null pointer dereference.
    
    Fixes: 088a40980efb ("ASoC: amd: acp: add pm ops support for acp pci driver")
    Signed-off-by: Vijendar Mukunda <[email protected]>
    Link: https://msgid.link/r/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: amd: acp: move chip->flag variable assignment [+ + +]
Author: Vijendar Mukunda <[email protected]>
Date:   Mon Jun 17 12:58:36 2024 +0530

    ASoC: amd: acp: move chip->flag variable assignment
    
    [ Upstream commit 379bcd2c9197bf2c429434e8a01cea0ee1852316 ]
    
    chip->flag variable assignment will be skipped when acp platform device
    creation is skipped. In this case chip>flag value will not be set.
    chip->flag variable should be assigned along with other structure
    variables for 'chip' structure. Move chip->flag variable assignment
    prior to acp platform device creation.
    
    Fixes: 3a94c8ad0aae ("ASoC: amd: acp: add code for scanning acp pdm controller")
    Signed-off-by: Vijendar Mukunda <[email protected]>
    Link: https://msgid.link/r/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: amd: acp: remove i2s configuration check in acp_i2s_probe() [+ + +]
Author: Vijendar Mukunda <[email protected]>
Date:   Mon Jun 17 12:58:35 2024 +0530

    ASoC: amd: acp: remove i2s configuration check in acp_i2s_probe()
    
    [ Upstream commit 70fa3900c3ed92158628710e81d274e5cb52f92b ]
    
    ACP supports different pin configurations for I2S IO. Checking ACP pin
    configuration value against specific value breaks the functionality for
    other I2S pin configurations. This check is no longer required in i2s dai
    driver probe call as i2s configuration check will be verified during acp
    platform device creation sequence.
    Remove i2s_mode check in acp_i2s_probe() function.
    
    Fixes: b24484c18b10 ("ASoC: amd: acp: ACP code generic to support newer platforms")
    Signed-off-by: Vijendar Mukunda <[email protected]>
    Link: https://msgid.link/r/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: atmel: atmel-classd: Re-add dai_link->platform to fix card init [+ + +]
Author: Andrei Simion <[email protected]>
Date:   Tue Jun 4 13:10:30 2024 +0300

    ASoC: atmel: atmel-classd: Re-add dai_link->platform to fix card init
    
    [ Upstream commit 2ed22161b19b11239aa742804549f63edd7c91e3 ]
    
    The removed dai_link->platform component cause a fail which
    is exposed at runtime. (ex: when a sound tool is used)
    This patch re-adds the dai_link->platform component to have
    a full card registered.
    
    Before this patch:
    :~$ aplay -l
    **** List of PLAYBACK Hardware Devices ****
    card 0: CLASSD [CLASSD], device 0: CLASSD PCM snd-soc-dummy-dai-0 []
        Subdevices: 1/1
        Subdevice #0: subdevice #0
    
    :~$ speaker-test -t sine
    speaker-test 1.2.6
    Playback device is default
    Stream parameters are 48000Hz, S16_LE, 1 channels
    Sine wave rate is 440.0000Hz
    Playback open error: -22,Invalid argument
    
    After this patch which restores the platform component:
    :~$ aplay -l
    **** List of PLAYBACK Hardware Devices ****
    card 0: CLASSD [CLASSD], device 0: CLASSD PCM snd-soc-dummy-dai-0
                                                    [CLASSD PCM snd-soc-dummy-dai-0]
        Subdevices: 1/1
        Subdevice #0: subdevice #0
    -> Resolve the playback error.
    
    Fixes: 2f650f87c03c ("ASoC: atmel: remove unnecessary dai_link->platform")
    Signed-off-by: Andrei Simion <[email protected]>
    Acked-by: Kuninori Morimoto <[email protected]>
    Link: https://msgid.link/r/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: cs42l43: Increase default type detect time and button delay [+ + +]
Author: Maciej Strozek <[email protected]>
Date:   Tue Jun 4 14:28:43 2024 +0100

    ASoC: cs42l43: Increase default type detect time and button delay
    
    [ Upstream commit afe377286ad49e0b69071d2a767e2c6553f4094b ]
    
    Some problematic headsets have been discovered, to help with correctly
    identifying these, the detect time must be increased. Also improve the
    reliability of the impedance value from the button detect by slightly
    increasing the button detect delay.
    
    Fixes: 686b8f711b99 ("ASoC: cs42l43: Lower default type detect time")
    Signed-off-by: Maciej Strozek <[email protected]>
    Signed-off-by: Charles Keepax <[email protected]>
    Link: https://msgid.link/r/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: fsl-asoc-card: set priv->pdev before using it [+ + +]
Author: Elinor Montmasson <[email protected]>
Date:   Thu Jun 20 15:25:03 2024 +0200

    ASoC: fsl-asoc-card: set priv->pdev before using it
    
    [ Upstream commit 90f3feb24172185f1832636264943e8b5e289245 ]
    
    priv->pdev pointer was set after being used in
    fsl_asoc_card_audmux_init().
    Move this assignment at the start of the probe function, so
    sub-functions can correctly use pdev through priv.
    
    fsl_asoc_card_audmux_init() dereferences priv->pdev to get access to the
    dev struct, used with dev_err macros.
    As priv is zero-initialised, there would be a NULL pointer dereference.
    Note that if priv->dev is dereferenced before assignment but never used,
    for example if there is no error to be printed, the driver won't crash
    probably due to compiler optimisations.
    
    Fixes: 708b4351f08c ("ASoC: fsl: Add Freescale Generic ASoC Sound Card with ASRC support")
    Signed-off-by: Elinor Montmasson <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: mediatek: mt8183-da7219-max98357: Fix kcontrol name collision [+ + +]
Author: Hsin-Te Yuan <[email protected]>
Date:   Fri May 31 08:37:54 2024 +0000

    ASoC: mediatek: mt8183-da7219-max98357: Fix kcontrol name collision
    
    [ Upstream commit 97d8613679eb53bd0c07d0fbd3d8471e46ba46c1 ]
    
    Since "Headphone Switch" kcontrol name has already been used by da7219,
    rename the control name from "Headphone" to "Headphones" to prevent the
    colision. Also, this change makes kcontrol name align with the one in
    mt8186-mt6366-da7219-max98357.c.
    
    Fixes: 9c7388baa2053 ("ASoC: mediatek: mt8183-da7219-max98357: Map missing jack kcontrols")
    Change-Id: I9ae69a4673cd04786b247cc514fdd20f878ef009
    Signed-off-by: Hsin-Te Yuan <[email protected]>
    Reviewed-by: Chen-Yu Tsai <[email protected]>
    Link: https://msgid.link/r/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: mediatek: mt8195: Add platform entry for ETDM1_OUT_BE dai link [+ + +]
Author: Chen-Yu Tsai <[email protected]>
Date:   Mon Jun 24 14:12:56 2024 +0800

    ASoC: mediatek: mt8195: Add platform entry for ETDM1_OUT_BE dai link
    
    [ Upstream commit 282a4482e198e03781c152c88aac8aa382ef9a55 ]
    
    Commit e70b8dd26711 ("ASoC: mediatek: mt8195: Remove afe-dai component
    and rework codec link") removed the codec entry for the ETDM1_OUT_BE
    dai link entirely instead of replacing it with COMP_EMPTY(). This worked
    by accident as the remaining COMP_EMPTY() platform entry became the codec
    entry, and the platform entry became completely empty, effectively the
    same as COMP_DUMMY() since snd_soc_fill_dummy_dai() doesn't do anything
    for platform entries.
    
    This causes a KASAN out-of-bounds warning in mtk_soundcard_common_probe()
    in sound/soc/mediatek/common/mtk-soundcard-driver.c:
    
            for_each_card_prelinks(card, i, dai_link) {
                    if (adsp_node && !strncmp(dai_link->name, "AFE_SOF", strlen("AFE_SOF")))
                            dai_link->platforms->of_node = adsp_node;
                    else if (!dai_link->platforms->name && !dai_link->platforms->of_node)
                            dai_link->platforms->of_node = platform_node;
            }
    
    where the code expects the platforms array to have space for at least one entry.
    
    Add an COMP_EMPTY() entry so that dai_link->platforms has space.
    
    Fixes: e70b8dd26711 ("ASoC: mediatek: mt8195: Remove afe-dai component and rework codec link")
    Signed-off-by: Chen-Yu Tsai <[email protected]>
    Reviewed-by: AngeloGioacchino Del Regno <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: q6apm-lpass-dai: close graph on prepare errors [+ + +]
Author: Srinivas Kandagatla <[email protected]>
Date:   Thu Jun 13 13:13:05 2024 +0100

    ASoC: q6apm-lpass-dai: close graph on prepare errors
    
    [ Upstream commit be1fae62cf253a5b67526cee9fbc07689b97c125 ]
    
    There is an issue around with error handling and graph management with
    the exising code, none of the error paths close the graph, which result in
    leaving the loaded graph in dsp, however the driver thinks otherwise.
    
    This can have a nasty side effect specially when we try to load the same
    graph to dsp, dsp returns error which leaves the board with no sound and
    requires restart.
    
    Fix this by properly closing the graph when we hit errors between
    open and close.
    
    Fixes: 30ad723b93ad ("ASoC: qdsp6: audioreach: add q6apm lpass dai support")
    Signed-off-by: Srinivas Kandagatla <[email protected]>
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Tested-by: Dmitry Baryshkov <[email protected]> # X13s
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: rockchip: i2s-tdm: Fix trcm mode by setting clock on right mclk [+ + +]
Author: Alibek Omarov <[email protected]>
Date:   Tue Jun 4 21:47:52 2024 +0300

    ASoC: rockchip: i2s-tdm: Fix trcm mode by setting clock on right mclk
    
    [ Upstream commit ccd8d753f0fe8f16745fa2b6be5946349731d901 ]
    
    When TRCM mode is enabled, I2S RX and TX clocks are synchronized through
    selected clock source. Without this fix BCLK and LRCK might get parented
    to an uninitialized MCLK and the DAI will receive data at wrong pace.
    
    However, unlike in original i2s-tdm driver, there is no need to manually
    synchronize mclk_rx and mclk_tx, as only one gets used anyway.
    
    Tested on a board with RK3568 SoC and Silergy SY24145S codec with enabled and
    disabled TRCM mode.
    
    Fixes: 9e2ab4b18ebd ("ASoC: rockchip: i2s-tdm: Fix inaccurate sampling rates")
    Signed-off-by: Alibek Omarov <[email protected]>
    Reviewed-by: Luca Ceresoli <[email protected]>
    Link: https://msgid.link/r/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ata,scsi: libata-core: Do not leak memory for ata_port struct members [+ + +]
Author: Niklas Cassel <[email protected]>
Date:   Sat Jun 29 14:42:12 2024 +0200

    ata,scsi: libata-core: Do not leak memory for ata_port struct members
    
    [ Upstream commit f6549f538fe0b2c389e1a7037f4e21039e25137a ]
    
    libsas is currently not freeing all the struct ata_port struct members,
    e.g. ncq_sense_buf for a driver supporting Command Duration Limits (CDL).
    
    Add a function, ata_port_free(), that is used to free a ata_port,
    including its struct members. It makes sense to keep the code related to
    freeing a ata_port in its own function, which will also free all the
    struct members of struct ata_port.
    
    Fixes: 18bd7718b5c4 ("scsi: ata: libata: Handle completion of CDL commands using policy 0xD")
    Reviewed-by: John Garry <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Niklas Cassel <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ata: ahci: Clean up sysfs file on error [+ + +]
Author: Niklas Cassel <[email protected]>
Date:   Sat Jun 29 14:42:14 2024 +0200

    ata: ahci: Clean up sysfs file on error
    
    commit eeb25a09c5e0805d92e4ebd12c4b0ad0df1b0295 upstream.
    
    .probe() (ahci_init_one()) calls sysfs_add_file_to_group(), however,
    if probe() fails after this call, we currently never call
    sysfs_remove_file_from_group().
    
    (The sysfs_remove_file_from_group() call in .remove() (ahci_remove_one())
    does not help, as .remove() is not called on .probe() error.)
    
    Thus, if probe() fails after the sysfs_add_file_to_group() call, the next
    time we insmod the module we will get:
    
    sysfs: cannot create duplicate filename '/devices/pci0000:00/0000:00:04.0/remapped_nvme'
    CPU: 11 PID: 954 Comm: modprobe Not tainted 6.10.0-rc5 #43
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.3-2.fc40 04/01/2014
    Call Trace:
     <TASK>
     dump_stack_lvl+0x5d/0x80
     sysfs_warn_dup.cold+0x17/0x23
     sysfs_add_file_mode_ns+0x11a/0x130
     sysfs_add_file_to_group+0x7e/0xc0
     ahci_init_one+0x31f/0xd40 [ahci]
    
    Fixes: 894fba7f434a ("ata: ahci: Add sysfs attribute to show remapped NVMe device count")
    Cc: [email protected]
    Reviewed-by: Damien Le Moal <[email protected]>
    Reviewed-by: Hannes Reinecke <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Niklas Cassel <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ata: libata-core: Add ATA_HORKAGE_NOLPM for all Crucial BX SSD1 models [+ + +]
Author: Niklas Cassel <[email protected]>
Date:   Thu Jun 27 12:55:52 2024 +0200

    ata: libata-core: Add ATA_HORKAGE_NOLPM for all Crucial BX SSD1 models
    
    commit 1066fe825987da007669d7c25306b4dbb50bd7dd upstream.
    
    We got another report that CT1000BX500SSD1 does not work with LPM.
    
    If you look in libata-core.c, we have six different Crucial devices that
    are marked with ATA_HORKAGE_NOLPM. This model would have been the seventh.
    (This quirk is used on Crucial models starting with both CT* and
    Crucial_CT*)
    
    It is obvious that this vendor does not have a great history of supporting
    LPM properly, therefore, add the ATA_HORKAGE_NOLPM quirk for all Crucial
    BX SSD1 models.
    
    Fixes: 7627a0edef54 ("ata: ahci: Drop low power policy board type")
    Cc: [email protected]
    Reported-by: Alessandro Maggio <[email protected]>
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=218832
    Reviewed-by: Damien Le Moal <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Niklas Cassel <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ata: libata-core: Fix double free on error [+ + +]
Author: Niklas Cassel <[email protected]>
Date:   Sat Jun 29 14:42:13 2024 +0200

    ata: libata-core: Fix double free on error
    
    commit ab9e0c529eb7cafebdd31fe1644524e80a48b05d upstream.
    
    If e.g. the ata_port_alloc() call in ata_host_alloc() fails, we will jump
    to the err_out label, which will call devres_release_group().
    devres_release_group() will trigger a call to ata_host_release().
    ata_host_release() calls kfree(host), so executing the kfree(host) in
    ata_host_alloc() will lead to a double free:
    
    kernel BUG at mm/slub.c:553!
    Oops: invalid opcode: 0000 [#1] PREEMPT SMP NOPTI
    CPU: 11 PID: 599 Comm: (udev-worker) Not tainted 6.10.0-rc5 #47
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.3-2.fc40 04/01/2014
    RIP: 0010:kfree+0x2cf/0x2f0
    Code: 5d 41 5e 41 5f 5d e9 80 d6 ff ff 4d 89 f1 41 b8 01 00 00 00 48 89 d9 48 89 da
    RSP: 0018:ffffc90000f377f0 EFLAGS: 00010246
    RAX: ffff888112b1f2c0 RBX: ffff888112b1f2c0 RCX: ffff888112b1f320
    RDX: 000000000000400b RSI: ffffffffc02c9de5 RDI: ffff888112b1f2c0
    RBP: ffffc90000f37830 R08: 0000000000000000 R09: 0000000000000000
    R10: ffffc90000f37610 R11: 617461203a736b6e R12: ffffea00044ac780
    R13: ffff888100046400 R14: ffffffffc02c9de5 R15: 0000000000000006
    FS:  00007f2f1cabe980(0000) GS:ffff88813b380000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00007f2f1c3acf75 CR3: 0000000111724000 CR4: 0000000000750ef0
    PKRU: 55555554
    Call Trace:
     <TASK>
     ? __die_body.cold+0x19/0x27
     ? die+0x2e/0x50
     ? do_trap+0xca/0x110
     ? do_error_trap+0x6a/0x90
     ? kfree+0x2cf/0x2f0
     ? exc_invalid_op+0x50/0x70
     ? kfree+0x2cf/0x2f0
     ? asm_exc_invalid_op+0x1a/0x20
     ? ata_host_alloc+0xf5/0x120 [libata]
     ? ata_host_alloc+0xf5/0x120 [libata]
     ? kfree+0x2cf/0x2f0
     ata_host_alloc+0xf5/0x120 [libata]
     ata_host_alloc_pinfo+0x14/0xa0 [libata]
     ahci_init_one+0x6c9/0xd20 [ahci]
    
    Ensure that we will not call kfree(host) twice, by performing the kfree()
    only if the devres_open_group() call failed.
    
    Fixes: dafd6c496381 ("libata: ensure host is free'd on error exit paths")
    Cc: [email protected]
    Reviewed-by: Damien Le Moal <[email protected]>
    Reviewed-by: Hannes Reinecke <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Niklas Cassel <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ata: libata-core: Fix null pointer dereference on error [+ + +]
Author: Niklas Cassel <[email protected]>
Date:   Sat Jun 29 14:42:11 2024 +0200

    ata: libata-core: Fix null pointer dereference on error
    
    [ Upstream commit 5d92c7c566dc76d96e0e19e481d926bbe6631c1e ]
    
    If the ata_port_alloc() call in ata_host_alloc() fails,
    ata_host_release() will get called.
    
    However, the code in ata_host_release() tries to free ata_port struct
    members unconditionally, which can lead to the following:
    
    BUG: unable to handle page fault for address: 0000000000003990
    PGD 0 P4D 0
    Oops: Oops: 0000 [#1] PREEMPT SMP NOPTI
    CPU: 10 PID: 594 Comm: (udev-worker) Not tainted 6.10.0-rc5 #44
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.3-2.fc40 04/01/2014
    RIP: 0010:ata_host_release.cold+0x2f/0x6e [libata]
    Code: e4 4d 63 f4 44 89 e2 48 c7 c6 90 ad 32 c0 48 c7 c7 d0 70 33 c0 49 83 c6 0e 41
    RSP: 0018:ffffc90000ebb968 EFLAGS: 00010246
    RAX: 0000000000000041 RBX: ffff88810fb52e78 RCX: 0000000000000000
    RDX: 0000000000000000 RSI: ffff88813b3218c0 RDI: ffff88813b3218c0
    RBP: ffff88810fb52e40 R08: 0000000000000000 R09: 6c65725f74736f68
    R10: ffffc90000ebb738 R11: 73692033203a746e R12: 0000000000000004
    R13: 0000000000000000 R14: 0000000000000011 R15: 0000000000000006
    FS:  00007f6cc55b9980(0000) GS:ffff88813b300000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 0000000000003990 CR3: 00000001122a2000 CR4: 0000000000750ef0
    PKRU: 55555554
    Call Trace:
     <TASK>
     ? __die_body.cold+0x19/0x27
     ? page_fault_oops+0x15a/0x2f0
     ? exc_page_fault+0x7e/0x180
     ? asm_exc_page_fault+0x26/0x30
     ? ata_host_release.cold+0x2f/0x6e [libata]
     ? ata_host_release.cold+0x2f/0x6e [libata]
     release_nodes+0x35/0xb0
     devres_release_group+0x113/0x140
     ata_host_alloc+0xed/0x120 [libata]
     ata_host_alloc_pinfo+0x14/0xa0 [libata]
     ahci_init_one+0x6c9/0xd20 [ahci]
    
    Do not access ata_port struct members unconditionally.
    
    Fixes: 633273a3ed1c ("libata-pmp: hook PMP support and enable it")
    Cc: [email protected]
    Reviewed-by: Damien Le Moal <[email protected]>
    Reviewed-by: Hannes Reinecke <[email protected]>
    Reviewed-by: John Garry <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Niklas Cassel <[email protected]>
    Stable-dep-of: f6549f538fe0 ("ata,scsi: libata-core: Do not leak memory for ata_port struct members")
    Signed-off-by: Sasha Levin <[email protected]>

 
batman-adv: Don't accept TT entries for out-of-spec VIDs [+ + +]
Author: Sven Eckelmann <[email protected]>
Date:   Sat May 4 21:57:30 2024 +0200

    batman-adv: Don't accept TT entries for out-of-spec VIDs
    
    commit 537a350d14321c8cca5efbf0a33a404fec3a9f9e upstream.
    
    The internal handling of VLAN IDs in batman-adv is only specified for
    following encodings:
    
    * VLAN is used
      - bit 15 is 1
      - bit 11 - bit 0 is the VLAN ID (0-4095)
      - remaining bits are 0
    * No VLAN is used
      - bit 15 is 0
      - remaining bits are 0
    
    batman-adv was only preparing new translation table entries (based on its
    soft interface information) using this encoding format. But the receive
    path was never checking if entries in the roam or TT TVLVs were also
    following this encoding.
    
    It was therefore possible to create more than the expected maximum of 4096
    + 1 entries in the originator VLAN list. Simply by setting the "remaining
    bits" to "random" values in corresponding TVLV.
    
    Cc: [email protected]
    Fixes: 7ea7b4a14275 ("batman-adv: make the TT CRC logic VLAN specific")
    Reported-by: Linus Lüssing <[email protected]>
    Signed-off-by: Sven Eckelmann <[email protected]>
    Signed-off-by: Simon Wunderlich <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
bcachefs: btree_gc can now handle unknown btrees [+ + +]
Author: Kent Overstreet <[email protected]>
Date:   Mon May 27 18:40:50 2024 -0400

    bcachefs: btree_gc can now handle unknown btrees
    
    commit 088d0de81220a74d7d553febb81656927f10bb16 upstream.
    
    Compatibility fix - we no longer have a separate table for which order
    gc walks btrees in, and special case the stripes btree directly.
    
    Signed-off-by: Kent Overstreet <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

bcachefs: Fix bch2_sb_downgrade_update() [+ + +]
Author: Kent Overstreet <[email protected]>
Date:   Mon Jun 17 11:31:00 2024 -0400

    bcachefs: Fix bch2_sb_downgrade_update()
    
    commit ddd118ab45e848b1956ef8c8ef84963a554b5b58 upstream.
    
    Missing enum conversion
    
    Signed-off-by: Kent Overstreet <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

bcachefs: Fix sb-downgrade validation [+ + +]
Author: Kent Overstreet <[email protected]>
Date:   Sat May 25 12:38:53 2024 -0400

    bcachefs: Fix sb-downgrade validation
    
    commit 9242a34b760648b722f4958749ad83ef7d0f7525 upstream.
    
    Superblock downgrade entries are only two byte aligned, but section
    sizes are 8 byte aligned, which means we have to be careful about
    overrun checks; an entry that crosses the end of the section is allowed
    (and ignored) as long as it has zero errors.
    
    Signed-off-by: Kent Overstreet <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

bcachefs: Fix sb_field_downgrade validation [+ + +]
Author: Kent Overstreet <[email protected]>
Date:   Mon May 6 09:16:33 2024 -0400

    bcachefs: Fix sb_field_downgrade validation
    
    commit 692aa7a54b2b28d59f24b3bf8250837805484b99 upstream.
    
    - bch2_sb_downgrade_validate() wasn't checking for a downgrade entry
      extending past the end of the superblock section
    
    - for_each_downgrade_entry() is used in to_text() and needs to work on
      malformed input; it also was missing a check for a field extending
      past the end of the section
    
    Reported-by: [email protected]
    Fixes: 84f1638795da ("bcachefs: bch_sb_field_downgrade")
    Signed-off-by: Kent Overstreet <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

bcachefs: Fix setting of downgrade recovery passes/errors [+ + +]
Author: Kent Overstreet <[email protected]>
Date:   Mon May 27 16:30:19 2024 -0400

    bcachefs: Fix setting of downgrade recovery passes/errors
    
    commit 247c056bde2ebc9fad2fc62332dc7cc99b58d720 upstream.
    
    bch2_check_version_downgrade() was setting c->sb.version, which
    bch2_sb_set_downgrade() expects to be at the previous version; and it
    shouldn't even have been set directly because c->sb.version is updated
    by write_super().
    
    Signed-off-by: Kent Overstreet <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
bonding: fix incorrect software timestamping report [+ + +]
Author: Hangbin Liu <[email protected]>
Date:   Thu Jun 20 16:56:26 2024 +0800

    bonding: fix incorrect software timestamping report
    
    [ Upstream commit a95b031c6796bf9972da2d4b4b524a57734f3a0a ]
    
    The __ethtool_get_ts_info function returns directly if the device has a
    get_ts_info() method. For bonding with an active slave, this works correctly
    as we simply return the real device's timestamping information. However,
    when there is no active slave, we only check the slave's TX software
    timestamp information. We still need to set the phc index and RX timestamp
    information manually. Otherwise, the result will be look like:
    
      Time stamping parameters for bond0:
      Capabilities:
              software-transmit
      PTP Hardware Clock: 0
      Hardware Transmit Timestamp Modes: none
      Hardware Receive Filter Modes: none
    
    This issue does not affect VLAN or MACVLAN devices, as they only have one
    downlink and can directly use the downlink's timestamping information.
    
    Fixes: b8768dc40777 ("net: ethtool: Refactor identical get_ts_info implementations.")
    Reported-by: Liang Li <[email protected]>
    Closes: https://issues.redhat.com/browse/RHEL-42409
    Signed-off-by: Hangbin Liu <[email protected]>
    Acked-by: Kory Maincent <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
bpf: Add a check for struct bpf_fib_lookup size [+ + +]
Author: Anton Protopopov <[email protected]>
Date:   Tue Mar 26 10:17:42 2024 +0000

    bpf: Add a check for struct bpf_fib_lookup size
    
    [ Upstream commit 59b418c7063d30e0a3e1f592d47df096db83185c ]
    
    The struct bpf_fib_lookup should not grow outside of its 64 bytes.
    Add a static assert to validate this.
    
    Suggested-by: David Ahern <[email protected]>
    Signed-off-by: Anton Protopopov <[email protected]>
    Signed-off-by: Daniel Borkmann <[email protected]>
    Link: https://lore.kernel.org/bpf/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

bpf: Add missed var_off setting in coerce_subreg_to_size_sx() [+ + +]
Author: Yonghong Song <[email protected]>
Date:   Sat Jun 15 10:46:32 2024 -0700

    bpf: Add missed var_off setting in coerce_subreg_to_size_sx()
    
    [ Upstream commit 44b7f7151dfc2e0947f39ed4b9bc4b0c2ccd46fc ]
    
    In coerce_subreg_to_size_sx(), for the case where upper
    sign extension bits are the same for smax32 and smin32
    values, we missed to setup properly. This is especially
    problematic if both smax32 and smin32's sign extension
    bits are 1.
    
    The following is a simple example illustrating the inconsistent
    verifier states due to missed var_off:
    
      0: (85) call bpf_get_prandom_u32#7    ; R0_w=scalar()
      1: (bf) r3 = r0                       ; R0_w=scalar(id=1) R3_w=scalar(id=1)
      2: (57) r3 &= 15                      ; R3_w=scalar(smin=smin32=0,smax=umax=smax32=umax32=15,var_off=(0x0; 0xf))
      3: (47) r3 |= 128                     ; R3_w=scalar(smin=umin=smin32=umin32=128,smax=umax=smax32=umax32=143,var_off=(0x80; 0xf))
      4: (bc) w7 = (s8)w3
      REG INVARIANTS VIOLATION (alu): range bounds violation u64=[0xffffff80, 0x8f] s64=[0xffffff80, 0x8f]
        u32=[0xffffff80, 0x8f] s32=[0x80, 0xffffff8f] var_off=(0x80, 0xf)
    
    The var_off=(0x80, 0xf) is not correct, and the correct one should
    be var_off=(0xffffff80; 0xf) since from insn 3, we know that at
    insn 4, the sign extension bits will be 1. This patch fixed this
    issue by setting var_off properly.
    
    Fixes: 8100928c8814 ("bpf: Support new sign-extension mov insns")
    Signed-off-by: Yonghong Song <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

bpf: Add missed var_off setting in set_sext32_default_val() [+ + +]
Author: Yonghong Song <[email protected]>
Date:   Sat Jun 15 10:46:26 2024 -0700

    bpf: Add missed var_off setting in set_sext32_default_val()
    
    [ Upstream commit 380d5f89a4815ff88461a45de2fb6f28533df708 ]
    
    Zac reported a verification failure and Alexei reproduced the issue
    with a simple reproducer ([1]). The verification failure is due to missed
    setting for var_off.
    
    The following is the reproducer in [1]:
      0: R1=ctx() R10=fp0
      0: (71) r3 = *(u8 *)(r10 -387)        ;
         R3_w=scalar(smin=smin32=0,smax=umax=smax32=umax32=255,var_off=(0x0; 0xff)) R10=fp0
      1: (bc) w7 = (s8)w3                   ;
         R3_w=scalar(smin=smin32=0,smax=umax=smax32=umax32=255,var_off=(0x0; 0xff))
         R7_w=scalar(smin=smin32=0,smax=umax=smax32=umax32=127,var_off=(0x0; 0x7f))
      2: (36) if w7 >= 0x2533823b goto pc-3
         mark_precise: frame0: last_idx 2 first_idx 0 subseq_idx -1
         mark_precise: frame0: regs=r7 stack= before 1: (bc) w7 = (s8)w3
         mark_precise: frame0: regs=r3 stack= before 0: (71) r3 = *(u8 *)(r10 -387)
      2: R7_w=scalar(smin=smin32=0,smax=umax=smax32=umax32=127,var_off=(0x0; 0x7f))
      3: (b4) w0 = 0                        ; R0_w=0
      4: (95) exit
    
    Note that after insn 1, the var_off for R7 is (0x0; 0x7f). This is not correct
    since upper 24 bits of w7 could be 0 or 1. So correct var_off should be
    (0x0; 0xffffffff). Missing var_off setting in set_sext32_default_val() caused later
    incorrect analysis in zext_32_to_64(dst_reg) and reg_bounds_sync(dst_reg).
    
    To fix the issue, set var_off correctly in set_sext32_default_val(). The correct
    reg state after insn 1 becomes:
      1: (bc) w7 = (s8)w3                   ;
         R3_w=scalar(smin=smin32=0,smax=umax=smax32=umax32=255,var_off=(0x0; 0xff))
         R7_w=scalar(smin=0,smax=umax=0xffffffff,smin32=-128,smax32=127,var_off=(0x0; 0xffffffff))
    and at insn 2, the verifier correctly determines either branch is possible.
    
      [1] https://lore.kernel.org/bpf/CAADnVQLPU0Shz7dWV4bn2BgtGdxN3uFHPeobGBA72tpg5Xoykw@mail.gmail.com/
    
    Fixes: 8100928c8814 ("bpf: Support new sign-extension mov insns")
    Reported-by: Zac Ecob <[email protected]>
    Signed-off-by: Yonghong Song <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

bpf: Fix may_goto with negative offset. [+ + +]
Author: Alexei Starovoitov <[email protected]>
Date:   Wed Jun 19 16:53:54 2024 -0700

    bpf: Fix may_goto with negative offset.
    
    [ Upstream commit 2b2efe1937ca9f8815884bd4dcd5b32733025103 ]
    
    Zac's syzbot crafted a bpf prog that exposed two bugs in may_goto.
    The 1st bug is the way may_goto is patched. When offset is negative
    it should be patched differently.
    The 2nd bug is in the verifier:
    when current state may_goto_depth is equal to visited state may_goto_depth
    it means there is an actual infinite loop. It's not correct to prune
    exploration of the program at this point.
    Note, that this check doesn't limit the program to only one may_goto insn,
    since 2nd and any further may_goto will increment may_goto_depth only
    in the queued state pushed for future exploration. The current state
    will have may_goto_depth == 0 regardless of number of may_goto insns
    and the verifier has to explore the program until bpf_exit.
    
    Fixes: 011832b97b31 ("bpf: Introduce may_goto instruction")
    Reported-by: Zac Ecob <[email protected]>
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Andrii Nakryiko <[email protected]>
    Signed-off-by: Daniel Borkmann <[email protected]>
    Acked-by: Eduard Zingerman <[email protected]>
    Closes: https://lore.kernel.org/bpf/CAADnVQL-15aNp04-cyHRn47Yv61NXfYyhopyZtUyxNojUZUXpA@mail.gmail.com/
    Link: https://lore.kernel.org/bpf/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

bpf: Fix overrunning reservations in ringbuf [+ + +]
Author: Daniel Borkmann <[email protected]>
Date:   Fri Jun 21 16:08:27 2024 +0200

    bpf: Fix overrunning reservations in ringbuf
    
    [ Upstream commit cfa1a2329a691ffd991fcf7248a57d752e712881 ]
    
    The BPF ring buffer internally is implemented as a power-of-2 sized circular
    buffer, with two logical and ever-increasing counters: consumer_pos is the
    consumer counter to show which logical position the consumer consumed the
    data, and producer_pos which is the producer counter denoting the amount of
    data reserved by all producers.
    
    Each time a record is reserved, the producer that "owns" the record will
    successfully advance producer counter. In user space each time a record is
    read, the consumer of the data advanced the consumer counter once it finished
    processing. Both counters are stored in separate pages so that from user
    space, the producer counter is read-only and the consumer counter is read-write.
    
    One aspect that simplifies and thus speeds up the implementation of both
    producers and consumers is how the data area is mapped twice contiguously
    back-to-back in the virtual memory, allowing to not take any special measures
    for samples that have to wrap around at the end of the circular buffer data
    area, because the next page after the last data page would be first data page
    again, and thus the sample will still appear completely contiguous in virtual
    memory.
    
    Each record has a struct bpf_ringbuf_hdr { u32 len; u32 pg_off; } header for
    book-keeping the length and offset, and is inaccessible to the BPF program.
    Helpers like bpf_ringbuf_reserve() return `(void *)hdr + BPF_RINGBUF_HDR_SZ`
    for the BPF program to use. Bing-Jhong and Muhammad reported that it is however
    possible to make a second allocated memory chunk overlapping with the first
    chunk and as a result, the BPF program is now able to edit first chunk's
    header.
    
    For example, consider the creation of a BPF_MAP_TYPE_RINGBUF map with size
    of 0x4000. Next, the consumer_pos is modified to 0x3000 /before/ a call to
    bpf_ringbuf_reserve() is made. This will allocate a chunk A, which is in
    [0x0,0x3008], and the BPF program is able to edit [0x8,0x3008]. Now, lets
    allocate a chunk B with size 0x3000. This will succeed because consumer_pos
    was edited ahead of time to pass the `new_prod_pos - cons_pos > rb->mask`
    check. Chunk B will be in range [0x3008,0x6010], and the BPF program is able
    to edit [0x3010,0x6010]. Due to the ring buffer memory layout mentioned
    earlier, the ranges [0x0,0x4000] and [0x4000,0x8000] point to the same data
    pages. This means that chunk B at [0x4000,0x4008] is chunk A's header.
    bpf_ringbuf_submit() / bpf_ringbuf_discard() use the header's pg_off to then
    locate the bpf_ringbuf itself via bpf_ringbuf_restore_from_rec(). Once chunk
    B modified chunk A's header, then bpf_ringbuf_commit() refers to the wrong
    page and could cause a crash.
    
    Fix it by calculating the oldest pending_pos and check whether the range
    from the oldest outstanding record to the newest would span beyond the ring
    buffer size. If that is the case, then reject the request. We've tested with
    the ring buffer benchmark in BPF selftests (./benchs/run_bench_ringbufs.sh)
    before/after the fix and while it seems a bit slower on some benchmarks, it
    is still not significantly enough to matter.
    
    Fixes: 457f44363a88 ("bpf: Implement BPF ring buffer and verifier support for it")
    Reported-by: Bing-Jhong Billy Jheng <[email protected]>
    Reported-by: Muhammad Ramdhan <[email protected]>
    Co-developed-by: Bing-Jhong Billy Jheng <[email protected]>
    Co-developed-by: Andrii Nakryiko <[email protected]>
    Signed-off-by: Bing-Jhong Billy Jheng <[email protected]>
    Signed-off-by: Andrii Nakryiko <[email protected]>
    Signed-off-by: Daniel Borkmann <[email protected]>
    Signed-off-by: Andrii Nakryiko <[email protected]>
    Link: https://lore.kernel.org/bpf/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

bpf: Fix remap of arena. [+ + +]
Author: Alexei Starovoitov <[email protected]>
Date:   Mon Jun 17 10:18:12 2024 -0700

    bpf: Fix remap of arena.
    
    [ Upstream commit b90d77e5fd784ada62ddd714d15ee2400c28e1cf ]
    
    The bpf arena logic didn't account for mremap operation. Add a refcnt for
    multiple mmap events to prevent use-after-free in arena_vm_close.
    
    Fixes: 317460317a02 ("bpf: Introduce bpf_arena.")
    Reported-by: Pengfei Xu <[email protected]>
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Daniel Borkmann <[email protected]>
    Reviewed-by: Barret Rhoden <[email protected]>
    Tested-by: Pengfei Xu <[email protected]>
    Closes: https://lore.kernel.org/bpf/[email protected]
    Link: https://lore.kernel.org/bpf/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

bpf: Fix the corner case with may_goto and jump to the 1st insn. [+ + +]
Author: Alexei Starovoitov <[email protected]>
Date:   Tue Jun 18 18:18:58 2024 -0700

    bpf: Fix the corner case with may_goto and jump to the 1st insn.
    
    [ Upstream commit 5337ac4c9b807bc46baa0713121a0afa8beacd70 ]
    
    When the following program is processed by the verifier:
    L1: may_goto L2
        goto L1
    L2: w0 = 0
        exit
    
    the may_goto insn is first converted to:
    L1: r11 = *(u64 *)(r10 -8)
        if r11 == 0x0 goto L2
        r11 -= 1
        *(u64 *)(r10 -8) = r11
        goto L1
    L2: w0 = 0
        exit
    
    then later as the last step the verifier inserts:
      *(u64 *)(r10 -8) = BPF_MAX_LOOPS
    as the first insn of the program to initialize loop count.
    
    When the first insn happens to be a branch target of some jmp the
    bpf_patch_insn_data() logic will produce:
    L1: *(u64 *)(r10 -8) = BPF_MAX_LOOPS
        r11 = *(u64 *)(r10 -8)
        if r11 == 0x0 goto L2
        r11 -= 1
        *(u64 *)(r10 -8) = r11
        goto L1
    L2: w0 = 0
        exit
    
    because instruction patching adjusts all jmps and calls, but for this
    particular corner case it's incorrect and the L1 label should be one
    instruction down, like:
        *(u64 *)(r10 -8) = BPF_MAX_LOOPS
    L1: r11 = *(u64 *)(r10 -8)
        if r11 == 0x0 goto L2
        r11 -= 1
        *(u64 *)(r10 -8) = r11
        goto L1
    L2: w0 = 0
        exit
    
    and that's what this patch is fixing.
    After bpf_patch_insn_data() call adjust_jmp_off() to adjust all jmps
    that point to newly insert BPF_ST insn to point to insn after.
    
    Note that bpf_patch_insn_data() cannot easily be changed to accommodate
    this logic, since jumps that point before or after a sequence of patched
    instructions have to be adjusted with the full length of the patch.
    
    Conceptually it's somewhat similar to "insert" of instructions between other
    instructions with weird semantics. Like "insert" before 1st insn would require
    adjustment of CALL insns to point to newly inserted 1st insn, but not an
    adjustment JMP insns that point to 1st, yet still adjusting JMP insns that
    cross over 1st insn (point to insn before or insn after), hence use simple
    adjust_jmp_off() logic to fix this corner case. Ideally bpf_patch_insn_data()
    would have an auxiliary info to say where 'the start of newly inserted patch
    is', but it would be too complex for backport.
    
    Fixes: 011832b97b31 ("bpf: Introduce may_goto instruction")
    Reported-by: Zac Ecob <[email protected]>
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Daniel Borkmann <[email protected]>
    Acked-by: Eduard Zingerman <[email protected]>
    Closes: https://lore.kernel.org/bpf/CAADnVQJ_WWx8w4b=6Gc2EpzAjgv+6A0ridnMz2TvS2egj4r3Gw@mail.gmail.com/
    Link: https://lore.kernel.org/bpf/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

bpf: Mark bpf prog stack with kmsan_unposion_memory in interpreter mode [+ + +]
Author: Martin KaFai Lau <[email protected]>
Date:   Thu Mar 28 11:58:01 2024 -0700

    bpf: Mark bpf prog stack with kmsan_unposion_memory in interpreter mode
    
    [ Upstream commit e8742081db7d01f980c6161ae1e8a1dbc1e30979 ]
    
    syzbot reported uninit memory usages during map_{lookup,delete}_elem.
    
    ==========
    BUG: KMSAN: uninit-value in __dev_map_lookup_elem kernel/bpf/devmap.c:441 [inline]
    BUG: KMSAN: uninit-value in dev_map_lookup_elem+0xf3/0x170 kernel/bpf/devmap.c:796
    __dev_map_lookup_elem kernel/bpf/devmap.c:441 [inline]
    dev_map_lookup_elem+0xf3/0x170 kernel/bpf/devmap.c:796
    ____bpf_map_lookup_elem kernel/bpf/helpers.c:42 [inline]
    bpf_map_lookup_elem+0x5c/0x80 kernel/bpf/helpers.c:38
    ___bpf_prog_run+0x13fe/0xe0f0 kernel/bpf/core.c:1997
    __bpf_prog_run256+0xb5/0xe0 kernel/bpf/core.c:2237
    ==========
    
    The reproducer should be in the interpreter mode.
    
    The C reproducer is trying to run the following bpf prog:
    
        0: (18) r0 = 0x0
        2: (18) r1 = map[id:49]
        4: (b7) r8 = 16777216
        5: (7b) *(u64 *)(r10 -8) = r8
        6: (bf) r2 = r10
        7: (07) r2 += -229
                ^^^^^^^^^^
    
        8: (b7) r3 = 8
        9: (b7) r4 = 0
       10: (85) call dev_map_lookup_elem#1543472
       11: (95) exit
    
    It is due to the "void *key" (r2) passed to the helper. bpf allows uninit
    stack memory access for bpf prog with the right privileges. This patch
    uses kmsan_unpoison_memory() to mark the stack as initialized.
    
    This should address different syzbot reports on the uninit "void *key"
    argument during map_{lookup,delete}_elem.
    
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/bpf/[email protected]/
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/bpf/[email protected]/
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/bpf/[email protected]/
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/bpf/[email protected]/
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/bpf/[email protected]/
    Tested-by: [email protected]
    Suggested-by: Yonghong Song <[email protected]>
    Suggested-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Martin KaFai Lau <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

bpf: Take return from set_memory_ro() into account with bpf_prog_lock_ro() [+ + +]
Author: Christophe Leroy <[email protected]>
Date:   Fri Mar 8 06:38:07 2024 +0100

    bpf: Take return from set_memory_ro() into account with bpf_prog_lock_ro()
    
    [ Upstream commit 7d2cc63eca0c993c99d18893214abf8f85d566d8 ]
    
    set_memory_ro() can fail, leaving memory unprotected.
    
    Check its return and take it into account as an error.
    
    Link: https://github.com/KSPP/linux/issues/7
    Signed-off-by: Christophe Leroy <[email protected]>
    Cc: [email protected] <[email protected]>
    Reviewed-by: Kees Cook <[email protected]>
    Message-ID: <286def78955e04382b227cb3e4b6ba272a7442e3.1709850515.git.christophe.leroy@csgroup.eu>
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

bpf: Take return from set_memory_rox() into account with bpf_jit_binary_lock_ro() [+ + +]
Author: Christophe Leroy <[email protected]>
Date:   Fri Mar 8 06:38:08 2024 +0100

    bpf: Take return from set_memory_rox() into account with bpf_jit_binary_lock_ro()
    
    [ Upstream commit e60adf513275c3a38e5cb67f7fd12387e43a3ff5 ]
    
    set_memory_rox() can fail, leaving memory unprotected.
    
    Check return and bail out when bpf_jit_binary_lock_ro() returns
    an error.
    
    Link: https://github.com/KSPP/linux/issues/7
    Signed-off-by: Christophe Leroy <[email protected]>
    Cc: [email protected] <[email protected]>
    Reviewed-by: Kees Cook <[email protected]>
    Reviewed-by: Puranjay Mohan <[email protected]>
    Reviewed-by: Ilya Leoshkevich <[email protected]>  # s390x
    Acked-by: Tiezhu Yang <[email protected]>  # LoongArch
    Reviewed-by: Johan Almbladh <[email protected]> # MIPS Part
    Message-ID: <036b6393f23a2032ce75a1c92220b2afcb798d5d.1709850515.git.christophe.leroy@csgroup.eu>
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
btrfs: use NOFS context when getting inodes during logging and log replay [+ + +]
Author: Filipe Manana <[email protected]>
Date:   Thu Jun 13 11:16:19 2024 +0100

    btrfs: use NOFS context when getting inodes during logging and log replay
    
    [ Upstream commit d1825752e3074b5ff8d7f6016160e2b7c5c367ca ]
    
    During inode logging (and log replay too), we are holding a transaction
    handle and we often need to call btrfs_iget(), which will read an inode
    from its subvolume btree if it's not loaded in memory and that results in
    allocating an inode with GFP_KERNEL semantics at the btrfs_alloc_inode()
    callback - and this may recurse into the filesystem in case we are under
    memory pressure and attempt to commit the current transaction, resulting
    in a deadlock since the logging (or log replay) task is holding a
    transaction handle open.
    
    Syzbot reported this with the following stack traces:
    
      WARNING: possible circular locking dependency detected
      6.10.0-rc2-syzkaller-00361-g061d1af7b030 #0 Not tainted
      ------------------------------------------------------
      syz-executor.1/9919 is trying to acquire lock:
      ffffffff8dd3aac0 (fs_reclaim){+.+.}-{0:0}, at: might_alloc include/linux/sched/mm.h:334 [inline]
      ffffffff8dd3aac0 (fs_reclaim){+.+.}-{0:0}, at: slab_pre_alloc_hook mm/slub.c:3891 [inline]
      ffffffff8dd3aac0 (fs_reclaim){+.+.}-{0:0}, at: slab_alloc_node mm/slub.c:3981 [inline]
      ffffffff8dd3aac0 (fs_reclaim){+.+.}-{0:0}, at: kmem_cache_alloc_lru_noprof+0x58/0x2f0 mm/slub.c:4020
    
      but task is already holding lock:
      ffff88804b569358 (&ei->log_mutex){+.+.}-{3:3}, at: btrfs_log_inode+0x39c/0x4660 fs/btrfs/tree-log.c:6481
    
      which lock already depends on the new lock.
    
      the existing dependency chain (in reverse order) is:
    
      -> #3 (&ei->log_mutex){+.+.}-{3:3}:
             __mutex_lock_common kernel/locking/mutex.c:608 [inline]
             __mutex_lock+0x175/0x9c0 kernel/locking/mutex.c:752
             btrfs_log_inode+0x39c/0x4660 fs/btrfs/tree-log.c:6481
             btrfs_log_inode_parent+0x8cb/0x2a90 fs/btrfs/tree-log.c:7079
             btrfs_log_dentry_safe+0x59/0x80 fs/btrfs/tree-log.c:7180
             btrfs_sync_file+0x9c1/0xe10 fs/btrfs/file.c:1959
             vfs_fsync_range+0x141/0x230 fs/sync.c:188
             generic_write_sync include/linux/fs.h:2794 [inline]
             btrfs_do_write_iter+0x584/0x10c0 fs/btrfs/file.c:1705
             new_sync_write fs/read_write.c:497 [inline]
             vfs_write+0x6b6/0x1140 fs/read_write.c:590
             ksys_write+0x12f/0x260 fs/read_write.c:643
             do_syscall_32_irqs_on arch/x86/entry/common.c:165 [inline]
             __do_fast_syscall_32+0x73/0x120 arch/x86/entry/common.c:386
             do_fast_syscall_32+0x32/0x80 arch/x86/entry/common.c:411
             entry_SYSENTER_compat_after_hwframe+0x84/0x8e
    
      -> #2 (btrfs_trans_num_extwriters){++++}-{0:0}:
             join_transaction+0x164/0xf40 fs/btrfs/transaction.c:315
             start_transaction+0x427/0x1a70 fs/btrfs/transaction.c:700
             btrfs_commit_super+0xa1/0x110 fs/btrfs/disk-io.c:4170
             close_ctree+0xcb0/0xf90 fs/btrfs/disk-io.c:4324
             generic_shutdown_super+0x159/0x3d0 fs/super.c:642
             kill_anon_super+0x3a/0x60 fs/super.c:1226
             btrfs_kill_super+0x3b/0x50 fs/btrfs/super.c:2096
             deactivate_locked_super+0xbe/0x1a0 fs/super.c:473
             deactivate_super+0xde/0x100 fs/super.c:506
             cleanup_mnt+0x222/0x450 fs/namespace.c:1267
             task_work_run+0x14e/0x250 kernel/task_work.c:180
             resume_user_mode_work include/linux/resume_user_mode.h:50 [inline]
             exit_to_user_mode_loop kernel/entry/common.c:114 [inline]
             exit_to_user_mode_prepare include/linux/entry-common.h:328 [inline]
             __syscall_exit_to_user_mode_work kernel/entry/common.c:207 [inline]
             syscall_exit_to_user_mode+0x278/0x2a0 kernel/entry/common.c:218
             __do_fast_syscall_32+0x80/0x120 arch/x86/entry/common.c:389
             do_fast_syscall_32+0x32/0x80 arch/x86/entry/common.c:411
             entry_SYSENTER_compat_after_hwframe+0x84/0x8e
    
      -> #1 (btrfs_trans_num_writers){++++}-{0:0}:
             __lock_release kernel/locking/lockdep.c:5468 [inline]
             lock_release+0x33e/0x6c0 kernel/locking/lockdep.c:5774
             percpu_up_read include/linux/percpu-rwsem.h:99 [inline]
             __sb_end_write include/linux/fs.h:1650 [inline]
             sb_end_intwrite include/linux/fs.h:1767 [inline]
             __btrfs_end_transaction+0x5ca/0x920 fs/btrfs/transaction.c:1071
             btrfs_commit_inode_delayed_inode+0x228/0x330 fs/btrfs/delayed-inode.c:1301
             btrfs_evict_inode+0x960/0xe80 fs/btrfs/inode.c:5291
             evict+0x2ed/0x6c0 fs/inode.c:667
             iput_final fs/inode.c:1741 [inline]
             iput.part.0+0x5a8/0x7f0 fs/inode.c:1767
             iput+0x5c/0x80 fs/inode.c:1757
             dentry_unlink_inode+0x295/0x480 fs/dcache.c:400
             __dentry_kill+0x1d0/0x600 fs/dcache.c:603
             dput.part.0+0x4b1/0x9b0 fs/dcache.c:845
             dput+0x1f/0x30 fs/dcache.c:835
             ovl_stack_put+0x60/0x90 fs/overlayfs/util.c:132
             ovl_destroy_inode+0xc6/0x190 fs/overlayfs/super.c:182
             destroy_inode+0xc4/0x1b0 fs/inode.c:311
             iput_final fs/inode.c:1741 [inline]
             iput.part.0+0x5a8/0x7f0 fs/inode.c:1767
             iput+0x5c/0x80 fs/inode.c:1757
             dentry_unlink_inode+0x295/0x480 fs/dcache.c:400
             __dentry_kill+0x1d0/0x600 fs/dcache.c:603
             shrink_kill fs/dcache.c:1048 [inline]
             shrink_dentry_list+0x140/0x5d0 fs/dcache.c:1075
             prune_dcache_sb+0xeb/0x150 fs/dcache.c:1156
             super_cache_scan+0x32a/0x550 fs/super.c:221
             do_shrink_slab+0x44f/0x11c0 mm/shrinker.c:435
             shrink_slab_memcg mm/shrinker.c:548 [inline]
             shrink_slab+0xa87/0x1310 mm/shrinker.c:626
             shrink_one+0x493/0x7c0 mm/vmscan.c:4790
             shrink_many mm/vmscan.c:4851 [inline]
             lru_gen_shrink_node+0x89f/0x1750 mm/vmscan.c:4951
             shrink_node mm/vmscan.c:5910 [inline]
             kswapd_shrink_node mm/vmscan.c:6720 [inline]
             balance_pgdat+0x1105/0x1970 mm/vmscan.c:6911
             kswapd+0x5ea/0xbf0 mm/vmscan.c:7180
             kthread+0x2c1/0x3a0 kernel/kthread.c:389
             ret_from_fork+0x45/0x80 arch/x86/kernel/process.c:147
             ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:244
    
      -> #0 (fs_reclaim){+.+.}-{0:0}:
             check_prev_add kernel/locking/lockdep.c:3134 [inline]
             check_prevs_add kernel/locking/lockdep.c:3253 [inline]
             validate_chain kernel/locking/lockdep.c:3869 [inline]
             __lock_acquire+0x2478/0x3b30 kernel/locking/lockdep.c:5137
             lock_acquire kernel/locking/lockdep.c:5754 [inline]
             lock_acquire+0x1b1/0x560 kernel/locking/lockdep.c:5719
             __fs_reclaim_acquire mm/page_alloc.c:3801 [inline]
             fs_reclaim_acquire+0x102/0x160 mm/page_alloc.c:3815
             might_alloc include/linux/sched/mm.h:334 [inline]
             slab_pre_alloc_hook mm/slub.c:3891 [inline]
             slab_alloc_node mm/slub.c:3981 [inline]
             kmem_cache_alloc_lru_noprof+0x58/0x2f0 mm/slub.c:4020
             btrfs_alloc_inode+0x118/0xb20 fs/btrfs/inode.c:8411
             alloc_inode+0x5d/0x230 fs/inode.c:261
             iget5_locked fs/inode.c:1235 [inline]
             iget5_locked+0x1c9/0x2c0 fs/inode.c:1228
             btrfs_iget_locked fs/btrfs/inode.c:5590 [inline]
             btrfs_iget_path fs/btrfs/inode.c:5607 [inline]
             btrfs_iget+0xfb/0x230 fs/btrfs/inode.c:5636
             add_conflicting_inode fs/btrfs/tree-log.c:5657 [inline]
             copy_inode_items_to_log+0x1039/0x1e30 fs/btrfs/tree-log.c:5928
             btrfs_log_inode+0xa48/0x4660 fs/btrfs/tree-log.c:6592
             log_new_delayed_dentries fs/btrfs/tree-log.c:6363 [inline]
             btrfs_log_inode+0x27dd/0x4660 fs/btrfs/tree-log.c:6718
             btrfs_log_all_parents fs/btrfs/tree-log.c:6833 [inline]
             btrfs_log_inode_parent+0x22ba/0x2a90 fs/btrfs/tree-log.c:7141
             btrfs_log_dentry_safe+0x59/0x80 fs/btrfs/tree-log.c:7180
             btrfs_sync_file+0x9c1/0xe10 fs/btrfs/file.c:1959
             vfs_fsync_range+0x141/0x230 fs/sync.c:188
             generic_write_sync include/linux/fs.h:2794 [inline]
             btrfs_do_write_iter+0x584/0x10c0 fs/btrfs/file.c:1705
             do_iter_readv_writev+0x504/0x780 fs/read_write.c:741
             vfs_writev+0x36f/0xde0 fs/read_write.c:971
             do_pwritev+0x1b2/0x260 fs/read_write.c:1072
             __do_compat_sys_pwritev2 fs/read_write.c:1218 [inline]
             __se_compat_sys_pwritev2 fs/read_write.c:1210 [inline]
             __ia32_compat_sys_pwritev2+0x121/0x1b0 fs/read_write.c:1210
             do_syscall_32_irqs_on arch/x86/entry/common.c:165 [inline]
             __do_fast_syscall_32+0x73/0x120 arch/x86/entry/common.c:386
             do_fast_syscall_32+0x32/0x80 arch/x86/entry/common.c:411
             entry_SYSENTER_compat_after_hwframe+0x84/0x8e
    
      other info that might help us debug this:
    
      Chain exists of:
        fs_reclaim --> btrfs_trans_num_extwriters --> &ei->log_mutex
    
       Possible unsafe locking scenario:
    
             CPU0                    CPU1
             ----                    ----
        lock(&ei->log_mutex);
                                     lock(btrfs_trans_num_extwriters);
                                     lock(&ei->log_mutex);
        lock(fs_reclaim);
    
       *** DEADLOCK ***
    
      7 locks held by syz-executor.1/9919:
       #0: ffff88802be20420 (sb_writers#23){.+.+}-{0:0}, at: do_pwritev+0x1b2/0x260 fs/read_write.c:1072
       #1: ffff888065c0f8f0 (&sb->s_type->i_mutex_key#33){++++}-{3:3}, at: inode_lock include/linux/fs.h:791 [inline]
       #1: ffff888065c0f8f0 (&sb->s_type->i_mutex_key#33){++++}-{3:3}, at: btrfs_inode_lock+0xc8/0x110 fs/btrfs/inode.c:385
       #2: ffff888065c0f778 (&ei->i_mmap_lock){++++}-{3:3}, at: btrfs_inode_lock+0xee/0x110 fs/btrfs/inode.c:388
       #3: ffff88802be20610 (sb_internal#4){.+.+}-{0:0}, at: btrfs_sync_file+0x95b/0xe10 fs/btrfs/file.c:1952
       #4: ffff8880546323f0 (btrfs_trans_num_writers){++++}-{0:0}, at: join_transaction+0x430/0xf40 fs/btrfs/transaction.c:290
       #5: ffff888054632418 (btrfs_trans_num_extwriters){++++}-{0:0}, at: join_transaction+0x430/0xf40 fs/btrfs/transaction.c:290
       #6: ffff88804b569358 (&ei->log_mutex){+.+.}-{3:3}, at: btrfs_log_inode+0x39c/0x4660 fs/btrfs/tree-log.c:6481
    
      stack backtrace:
      CPU: 2 PID: 9919 Comm: syz-executor.1 Not tainted 6.10.0-rc2-syzkaller-00361-g061d1af7b030 #0
      Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.2-debian-1.16.2-1 04/01/2014
      Call Trace:
       <TASK>
       __dump_stack lib/dump_stack.c:88 [inline]
       dump_stack_lvl+0x116/0x1f0 lib/dump_stack.c:114
       check_noncircular+0x31a/0x400 kernel/locking/lockdep.c:2187
       check_prev_add kernel/locking/lockdep.c:3134 [inline]
       check_prevs_add kernel/locking/lockdep.c:3253 [inline]
       validate_chain kernel/locking/lockdep.c:3869 [inline]
       __lock_acquire+0x2478/0x3b30 kernel/locking/lockdep.c:5137
       lock_acquire kernel/locking/lockdep.c:5754 [inline]
       lock_acquire+0x1b1/0x560 kernel/locking/lockdep.c:5719
       __fs_reclaim_acquire mm/page_alloc.c:3801 [inline]
       fs_reclaim_acquire+0x102/0x160 mm/page_alloc.c:3815
       might_alloc include/linux/sched/mm.h:334 [inline]
       slab_pre_alloc_hook mm/slub.c:3891 [inline]
       slab_alloc_node mm/slub.c:3981 [inline]
       kmem_cache_alloc_lru_noprof+0x58/0x2f0 mm/slub.c:4020
       btrfs_alloc_inode+0x118/0xb20 fs/btrfs/inode.c:8411
       alloc_inode+0x5d/0x230 fs/inode.c:261
       iget5_locked fs/inode.c:1235 [inline]
       iget5_locked+0x1c9/0x2c0 fs/inode.c:1228
       btrfs_iget_locked fs/btrfs/inode.c:5590 [inline]
       btrfs_iget_path fs/btrfs/inode.c:5607 [inline]
       btrfs_iget+0xfb/0x230 fs/btrfs/inode.c:5636
       add_conflicting_inode fs/btrfs/tree-log.c:5657 [inline]
       copy_inode_items_to_log+0x1039/0x1e30 fs/btrfs/tree-log.c:5928
       btrfs_log_inode+0xa48/0x4660 fs/btrfs/tree-log.c:6592
       log_new_delayed_dentries fs/btrfs/tree-log.c:6363 [inline]
       btrfs_log_inode+0x27dd/0x4660 fs/btrfs/tree-log.c:6718
       btrfs_log_all_parents fs/btrfs/tree-log.c:6833 [inline]
       btrfs_log_inode_parent+0x22ba/0x2a90 fs/btrfs/tree-log.c:7141
       btrfs_log_dentry_safe+0x59/0x80 fs/btrfs/tree-log.c:7180
       btrfs_sync_file+0x9c1/0xe10 fs/btrfs/file.c:1959
       vfs_fsync_range+0x141/0x230 fs/sync.c:188
       generic_write_sync include/linux/fs.h:2794 [inline]
       btrfs_do_write_iter+0x584/0x10c0 fs/btrfs/file.c:1705
       do_iter_readv_writev+0x504/0x780 fs/read_write.c:741
       vfs_writev+0x36f/0xde0 fs/read_write.c:971
       do_pwritev+0x1b2/0x260 fs/read_write.c:1072
       __do_compat_sys_pwritev2 fs/read_write.c:1218 [inline]
       __se_compat_sys_pwritev2 fs/read_write.c:1210 [inline]
       __ia32_compat_sys_pwritev2+0x121/0x1b0 fs/read_write.c:1210
       do_syscall_32_irqs_on arch/x86/entry/common.c:165 [inline]
       __do_fast_syscall_32+0x73/0x120 arch/x86/entry/common.c:386
       do_fast_syscall_32+0x32/0x80 arch/x86/entry/common.c:411
       entry_SYSENTER_compat_after_hwframe+0x84/0x8e
      RIP: 0023:0xf7334579
      Code: b8 01 10 06 03 (...)
      RSP: 002b:00000000f5f265ac EFLAGS: 00000292 ORIG_RAX: 000000000000017b
      RAX: ffffffffffffffda RBX: 0000000000000004 RCX: 00000000200002c0
      RDX: 0000000000000001 RSI: 0000000000000000 RDI: 0000000000000000
      RBP: 0000000000000000 R08: 0000000000000000 R09: 0000000000000000
      R10: 0000000000000000 R11: 0000000000000292 R12: 0000000000000000
      R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
    
    Fix this by ensuring we are under a NOFS scope whenever we call
    btrfs_iget() during inode logging and log replay.
    
    Reported-by: [email protected]
    Link: https://lore.kernel.org/linux-btrfs/[email protected]/
    Fixes: 712e36c5f2a7 ("btrfs: use GFP_KERNEL in btrfs_alloc_inode")
    Reviewed-by: Johannes Thumshirn <[email protected]>
    Reviewed-by: Josef Bacik <[email protected]>
    Reviewed-by: Qu Wenruo <[email protected]>
    Signed-off-by: Filipe Manana <[email protected]>
    Reviewed-by: David Sterba <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

btrfs: zoned: fix initial free space detection [+ + +]
Author: Naohiro Aota <[email protected]>
Date:   Tue Jun 11 17:17:30 2024 +0900

    btrfs: zoned: fix initial free space detection
    
    commit b9fd2affe4aa99a4ca14ee87e1f38fea22ece52a upstream.
    
    When creating a new block group, it calls btrfs_add_new_free_space() to add
    the entire block group range into the free space accounting.
    __btrfs_add_free_space_zoned() checks if size == block_group->length to
    detect the initial free space adding, and proceed that case properly.
    
    However, if the zone_capacity == zone_size and the over-write speed is fast
    enough, the entire zone can be over-written within one transaction. That
    confuses __btrfs_add_free_space_zoned() to handle it as an initial free
    space accounting. As a result, that block group becomes a strange state: 0
    used bytes, 0 zone_unusable bytes, but alloc_offset == zone_capacity (no
    allocation anymore).
    
    The initial free space accounting can properly be checked by checking
    alloc_offset too.
    
    Fixes: 98173255bddd ("btrfs: zoned: calculate free space from zone capacity")
    CC: [email protected] # 6.1+
    Reviewed-by: Johannes Thumshirn <[email protected]>
    Signed-off-by: Naohiro Aota <[email protected]>
    Reviewed-by: David Sterba <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
can: mcp251xfd: fix infinite loop when xmit fails [+ + +]
Author: Vitor Soares <[email protected]>
Date:   Fri May 17 14:43:55 2024 +0100

    can: mcp251xfd: fix infinite loop when xmit fails
    
    commit d8fb63e46c884c898a38f061c2330f7729e75510 upstream.
    
    When the mcp251xfd_start_xmit() function fails, the driver stops
    processing messages, and the interrupt routine does not return,
    running indefinitely even after killing the running application.
    
    Error messages:
    [  441.298819] mcp251xfd spi2.0 can0: ERROR in mcp251xfd_start_xmit: -16
    [  441.306498] mcp251xfd spi2.0 can0: Transmit Event FIFO buffer not empty. (seq=0x000017c7, tef_tail=0x000017cf, tef_head=0x000017d0, tx_head=0x000017d3).
    ... and repeat forever.
    
    The issue can be triggered when multiple devices share the same SPI
    interface. And there is concurrent access to the bus.
    
    The problem occurs because tx_ring->head increments even if
    mcp251xfd_start_xmit() fails. Consequently, the driver skips one TX
    package while still expecting a response in
    mcp251xfd_handle_tefif_one().
    
    Resolve the issue by starting a workqueue to write the tx obj
    synchronously if err = -EBUSY. In case of another error, decrement
    tx_ring->head, remove skb from the echo stack, and drop the message.
    
    Fixes: 55e5b97f003e ("can: mcp25xxfd: add driver for Microchip MCP25xxFD SPI CAN")
    Cc: [email protected]
    Signed-off-by: Vitor Soares <[email protected]>
    Link: https://lore.kernel.org/all/[email protected]
    [mkl: use more imperative wording in patch description]
    Signed-off-by: Marc Kleine-Budde <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
counter: ti-eqep: enable clock at probe [+ + +]
Author: David Lechner <[email protected]>
Date:   Fri Jun 21 17:22:40 2024 -0500

    counter: ti-eqep: enable clock at probe
    
    [ Upstream commit 0cf81c73e4c6a4861128a8f27861176ec312af4e ]
    
    The TI eQEP clock is both a functional and interface clock. Since it is
    required for the device to function, we should be enabling it at probe.
    
    Up to now, we've just been lucky that the clock was enabled by something
    else on the system already.
    
    Fixes: f213729f6796 ("counter: new TI eQEP driver")
    Reviewed-by: Judith Mendez <[email protected]>
    Signed-off-by: David Lechner <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: William Breathitt Gray <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
cpu/hotplug: Fix dynstate assignment in __cpuhp_setup_state_cpuslocked() [+ + +]
Author: Yuntao Wang <[email protected]>
Date:   Wed May 15 21:45:54 2024 +0800

    cpu/hotplug: Fix dynstate assignment in __cpuhp_setup_state_cpuslocked()
    
    commit 932d8476399f622aa0767a4a0a9e78e5341dc0e1 upstream.
    
    Commit 4205e4786d0b ("cpu/hotplug: Provide dynamic range for prepare
    stage") added a dynamic range for the prepare states, but did not handle
    the assignment of the dynstate variable in __cpuhp_setup_state_cpuslocked().
    
    This causes the corresponding startup callback not to be invoked when
    calling __cpuhp_setup_state_cpuslocked() with the CPUHP_BP_PREPARE_DYN
    parameter, even though it should be.
    
    Currently, the users of __cpuhp_setup_state_cpuslocked(), for one reason or
    another, have not triggered this bug.
    
    Fixes: 4205e4786d0b ("cpu/hotplug: Provide dynamic range for prepare stage")
    Signed-off-by: Yuntao Wang <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
cpu: Fix broken cmdline "nosmp" and "maxcpus=0" [+ + +]
Author: Huacai Chen <[email protected]>
Date:   Tue Jun 18 16:13:36 2024 +0800

    cpu: Fix broken cmdline "nosmp" and "maxcpus=0"
    
    commit 6ef8eb5125722c241fd60d7b0c872d5c2e5dd4ca upstream.
    
    After the rework of "Parallel CPU bringup", the cmdline "nosmp" and
    "maxcpus=0" parameters are not working anymore. These parameters set
    setup_max_cpus to zero and that's handed to bringup_nonboot_cpus().
    
    The code there does a decrement before checking for zero, which brings it
    into the negative space and brings up all CPUs.
    
    Add a zero check at the beginning of the function to prevent this.
    
    [ tglx: Massaged change log ]
    
    Fixes: 18415f33e2ac4ab382 ("cpu/hotplug: Allow "parallel" bringup up to CPUHP_BP_KICK_AP_STATE")
    Fixes: 06c6796e0304234da6 ("cpu/hotplug: Fix off by one in cpuhp_bringup_mask()")
    Signed-off-by: Huacai Chen <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
cpufreq: intel_pstate: Use HWP to initialize ITMT if CPPC is missing [+ + +]
Author: Rafael J. Wysocki <[email protected]>
Date:   Thu Jun 20 18:14:53 2024 +0200

    cpufreq: intel_pstate: Use HWP to initialize ITMT if CPPC is missing
    
    commit a1ff59784b277795a613beaa5d3dd9c5595c69a7 upstream.
    
    It is reported that single-thread performance on some hybrid systems
    dropped significantly after commit 7feec7430edd ("ACPI: CPPC: Only probe
    for _CPC if CPPC v2 is acked") which prevented _CPC from being used if
    the support for it had not been confirmed by the platform firmware.
    
    The problem is that if the platform firmware does not confirm CPPC v2
    support, cppc_get_perf_caps() returns an error which prevents the
    intel_pstate driver from enabling ITMT.  Consequently, the scheduler
    does not get any hints on CPU performance differences, so in a hybrid
    system some tasks may run on CPUs with lower capacity even though they
    should be running on high-capacity CPUs.
    
    To address this, modify intel_pstate to use the information from
    MSR_HWP_CAPABILITIES to enable ITMT if CPPC is not available (which is
    done already if the highest performance number coming from CPPC is not
    realistic).
    
    Fixes: 7feec7430edd ("ACPI: CPPC: Only probe for _CPC if CPPC v2 is acked")
    Closes: https://lore.kernel.org/linux-acpi/[email protected]
    Link: https://lore.kernel.org/linux-acpi/ZnD22b3Br1ng7alf@kf-XE
    Reported-by: Aaron Rainbolt <[email protected]>
    Tested-by: Aaron Rainbolt <[email protected]>
    Cc: 5.19+ <[email protected]> # 5.19+
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Reviewed-by: Mario Limonciello <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
crypto: ecdh - explicitly zeroize private_key [+ + +]
Author: Joachim Vandersmissen <[email protected]>
Date:   Thu Mar 28 11:24:30 2024 -0500

    crypto: ecdh - explicitly zeroize private_key
    
    [ Upstream commit 73e5984e540a76a2ee1868b91590c922da8c24c9 ]
    
    private_key is overwritten with the key parameter passed in by the
    caller (if present), or alternatively a newly generated private key.
    However, it is possible that the caller provides a key (or the newly
    generated key) which is shorter than the previous key. In that
    scenario, some key material from the previous key would not be
    overwritten. The easiest solution is to explicitly zeroize the entire
    private_key array first.
    
    Note that this patch slightly changes the behavior of this function:
    previously, if the ecc_gen_privkey failed, the old private_key would
    remain. Now, the private_key is always zeroized. This behavior is
    consistent with the case where params.key is set and ecc_is_key_valid
    fails.
    
    Signed-off-by: Joachim Vandersmissen <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
csky, hexagon: fix broken sys_sync_file_range [+ + +]
Author: Arnd Bergmann <[email protected]>
Date:   Fri Jun 14 09:54:20 2024 +0200

    csky, hexagon: fix broken sys_sync_file_range
    
    commit 3339b99ef6fe38dac43b534cba3a8a0e29fb2eff upstream.
    
    Both of these architectures require u64 function arguments to be
    passed in even/odd pairs of registers or stack slots, which in case of
    sync_file_range would result in a seven-argument system call that is
    not currently possible. The system call is therefore incompatible with
    all existing binaries.
    
    While it would be possible to implement support for seven arguments
    like on mips, it seems better to use a six-argument version, either
    with the normal argument order but misaligned as on most architectures
    or with the reordered sync_file_range2() calling conventions as on
    arm and powerpc.
    
    Cc: [email protected]
    Acked-by: Guo Ren <[email protected]>
    Signed-off-by: Arnd Bergmann <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
cxl/mem: Fix no cxl_nvd during pmem region auto-assembling [+ + +]
Author: Li Ming <[email protected]>
Date:   Wed Jun 12 14:44:23 2024 +0800

    cxl/mem: Fix no cxl_nvd during pmem region auto-assembling
    
    [ Upstream commit 84ec985944ef34a34a1605b93ce401aa8737af96 ]
    
    When CXL subsystem is auto-assembling a pmem region during cxl
    endpoint port probing, always hit below calltrace.
    
     BUG: kernel NULL pointer dereference, address: 0000000000000078
     #PF: supervisor read access in kernel mode
     #PF: error_code(0x0000) - not-present page
     RIP: 0010:cxl_pmem_region_probe+0x22e/0x360 [cxl_pmem]
     Call Trace:
      <TASK>
      ? __die+0x24/0x70
      ? page_fault_oops+0x82/0x160
      ? do_user_addr_fault+0x65/0x6b0
      ? exc_page_fault+0x7d/0x170
      ? asm_exc_page_fault+0x26/0x30
      ? cxl_pmem_region_probe+0x22e/0x360 [cxl_pmem]
      ? cxl_pmem_region_probe+0x1ac/0x360 [cxl_pmem]
      cxl_bus_probe+0x1b/0x60 [cxl_core]
      really_probe+0x173/0x410
      ? __pfx___device_attach_driver+0x10/0x10
      __driver_probe_device+0x80/0x170
      driver_probe_device+0x1e/0x90
      __device_attach_driver+0x90/0x120
      bus_for_each_drv+0x84/0xe0
      __device_attach+0xbc/0x1f0
      bus_probe_device+0x90/0xa0
      device_add+0x51c/0x710
      devm_cxl_add_pmem_region+0x1b5/0x380 [cxl_core]
      cxl_bus_probe+0x1b/0x60 [cxl_core]
    
    The cxl_nvd of the memdev needs to be available during the pmem region
    probe. Currently the cxl_nvd is registered after the endpoint port probe.
    The endpoint probe, in the case of autoassembly of regions, can cause a
    pmem region probe requiring the not yet available cxl_nvd. Adjust the
    sequence so this dependency is met.
    
    This requires adding a port parameter to cxl_find_nvdimm_bridge() that
    can be used to query the ancestor root port. The endpoint port is not
    yet available, but will share a common ancestor with its parent, so
    start the query from there instead.
    
    Fixes: f17b558d6663 ("cxl/pmem: Refactor nvdimm device registration, delete the workqueue")
    Co-developed-by: Dan Williams <[email protected]>
    Signed-off-by: Dan Williams <[email protected]>
    Signed-off-by: Li Ming <[email protected]>
    Tested-by: Alison Schofield <[email protected]>
    Reviewed-by: Jonathan Cameron <[email protected]>
    Reviewed-by: Alison Schofield <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Dave Jiang <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
cxl/region: Avoid null pointer dereference in region lookup [+ + +]
Author: Alison Schofield <[email protected]>
Date:   Mon Jun 3 17:36:09 2024 -0700

    cxl/region: Avoid null pointer dereference in region lookup
    
    [ Upstream commit 285f2a08841432fc3e498b1cd00cce5216cdf189 ]
    
    cxl_dpa_to_region() looks up a region based on a memdev and DPA.
    It wrongly assumes an endpoint found mapping the DPA is also of
    a fully assembled region. When not true it leads to a null pointer
    dereference looking up the region name.
    
    This appears during testing of region lookup after a failure to
    assemble a BIOS defined region or if the lookup raced with the
    assembly of the BIOS defined region.
    
    Failure to clean up BIOS defined regions that fail assembly is an
    issue in itself and a fix to that problem will alleviate some of
    the impact. It will not alleviate the race condition so let's harden
    this path.
    
    The behavior change is that the kernel oops due to a null pointer
    dereference is replaced with a dev_dbg() message noting that an
    endpoint was mapped.
    
    Additional comments are added so that future users of this function
    can more clearly understand what it provides.
    
    Fixes: 0a105ab28a4d ("cxl/memdev: Warn of poison inject or clear to a mapped region")
    Signed-off-by: Alison Schofield <[email protected]>
    Reviewed-by: Jonathan Cameron <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Dave Jiang <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

cxl/region: check interleave capability [+ + +]
Author: Yao Xingtao <[email protected]>
Date:   Fri Jun 14 04:47:54 2024 -0400

    cxl/region: check interleave capability
    
    [ Upstream commit 84328c5acebc10c8cdcf17283ab6c6d548885bfc ]
    
    Since interleave capability is not verified, if the interleave
    capability of a target does not match the region need, committing decoder
    should have failed at the device end.
    
    In order to checkout this error as quickly as possible, driver needs
    to check the interleave capability of target during attaching it to
    region.
    
    Per CXL specification r3.1(8.2.4.20.1 CXL HDM Decoder Capability Register),
    bits 11 and 12 indicate the capability to establish interleaving in 3, 6,
    12 and 16 ways. If these bits are not set, the target cannot be attached to
    a region utilizing such interleave ways.
    
    Additionally, bits 8 and 9 represent the capability of the bits used for
    interleaving in the address, Linux tracks this in the cxl_port
    interleave_mask.
    
    Per CXL specification r3.1(8.2.4.20.13 Decoder Protection):
      eIW means encoded Interleave Ways.
      eIG means encoded Interleave Granularity.
    
      in HPA:
      if eIW is 0 or 8 (interleave ways: 1, 3), all the bits of HPA are used,
      the interleave bits are none, the following check is ignored.
    
      if eIW is less than 8 (interleave ways: 2, 4, 8, 16), the interleave bits
      start at bit position eIG + 8 and end at eIG + eIW + 8 - 1.
    
      if eIW is greater than 8 (interleave ways: 6, 12), the interleave bits
      start at bit position eIG + 8 and end at eIG + eIW - 1.
    
      if the interleave mask is insufficient to cover the required interleave
      bits, the target cannot be attached to the region.
    
    Fixes: 384e624bb211 ("cxl/region: Attach endpoint decoders")
    Signed-off-by: Yao Xingtao <[email protected]>
    Reviewed-by: Dan Williams <[email protected]>
    Reviewed-by: Jonathan Cameron <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Dave Jiang <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

cxl/region: Convert cxl_pmem_region_alloc to scope-based resource management [+ + +]
Author: Dan Williams <[email protected]>
Date:   Tue Apr 30 14:59:00 2024 -0700

    cxl/region: Convert cxl_pmem_region_alloc to scope-based resource management
    
    [ Upstream commit d357dd8ad2f154376e5cb930284e7bf4fe21ffaa ]
    
    A recent bugfix to cxl_pmem_region_alloc() to fix an
    error-unwind-memleak [1], highlighted a use case for scope-based resource
    management.
    
    Delete the goto for releasing @cxl_region_rwsem, and return error codes
    directly from error condition paths.
    
    The caller, devm_cxl_add_pmem_region(), is no longer given @cxlr_pmem
    directly it must retrieve it from @cxlr->cxlr_pmem. This retrieval from
    @cxlr was already in place for @cxlr->cxl_nvb, and converting
    cxl_pmem_region_alloc() to return an int makes it less awkward to handle
    no_free_ptr().
    
    Cc: Li Zhijian <[email protected]>
    Reported-by: Jonathan Cameron <[email protected]>
    Closes: http://lore.kernel.org/r/[email protected]
    Link: http://lore.kernel.org/r/[email protected]
    Signed-off-by: Dan Williams <[email protected]>
    Reviewed-by: Jonathan Cameron <[email protected]>
    Link: https://lore.kernel.org/r/171451430965.1147997.15782562063090960666.stgit@dwillia2-xfh.jf.intel.com
    Signed-off-by: Dave Jiang <[email protected]>
    Stable-dep-of: 84ec985944ef ("cxl/mem: Fix no cxl_nvd during pmem region auto-assembling")
    Signed-off-by: Sasha Levin <[email protected]>

cxl/region: Move cxl_dpa_to_region() work to the region driver [+ + +]
Author: Alison Schofield <[email protected]>
Date:   Tue Apr 30 10:28:04 2024 -0700

    cxl/region: Move cxl_dpa_to_region() work to the region driver
    
    [ Upstream commit b98d042698a32518c93e47730e9ad86b387a9c21 ]
    
    This helper belongs in the region driver as it is only useful
    with CONFIG_CXL_REGION. Add a stub in core.h for when the region
    driver is not built.
    
    Signed-off-by: Alison Schofield <[email protected]>
    Reviewed-by: Jonathan Cameron <[email protected]>
    Reviewed-by: Ira Weiny <[email protected]>
    Link: https://lore.kernel.org/r/05e30f788d62b3dd398aff2d2ea50a6aaa7c3313.1714496730.git.alison.schofield@intel.com
    Signed-off-by: Dave Jiang <[email protected]>
    Stable-dep-of: 285f2a088414 ("cxl/region: Avoid null pointer dereference in region lookup")
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/amd/display: correct hostvm flag [+ + +]
Author: Sherry Wang <[email protected]>
Date:   Wed Sep 7 00:12:44 2022 +0800

    drm/amd/display: correct hostvm flag
    
    [ Upstream commit 3a13d1fddaf51b98cdba20b486cb8fd6080b71b7 ]
    
    [Why]
    Hostvm should be enabled/disabled accordding to the status of
    riommu_active, but hostvm always be disabled on DCN31 which causes
    underflow
    
    [How]
    Set correct hostvm flag on DCN31
    
    Acked-by: Wayne Lin <[email protected]>
    Signed-off-by: Sherry Wang <[email protected]>
    Tested-by: Daniel Wheeler <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/amd/display: Send DP_TOTAL_LTTPR_CNT during detection if LTTPR is present [+ + +]
Author: Michael Strauss <[email protected]>
Date:   Tue Nov 28 10:31:12 2023 -0500

    drm/amd/display: Send DP_TOTAL_LTTPR_CNT during detection if LTTPR is present
    
    commit 2ec6c7f802332d1eff16f03e7c757f1543ee1183 upstream.
    
    [WHY]
    New register field added in DP2.1 SCR, needed for auxless ALPM
    
    [HOW]
    Echo value read from 0xF0007 back to sink
    
    Reviewed-by: Wenjing Liu <[email protected]>
    Cc: Mario Limonciello <[email protected]>
    Cc: Alex Deucher <[email protected]>
    Cc: [email protected]
    Signed-off-by: Alex Hung <[email protected]>
    Signed-off-by: Michael Strauss <[email protected]>
    Tested-by: Daniel Wheeler <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/amd/display: Skip pipe if the pipe idx not set properly [+ + +]
Author: Muhammad Ahmed <[email protected]>
Date:   Fri Mar 15 18:30:26 2024 -0400

    drm/amd/display: Skip pipe if the pipe idx not set properly
    
    [ Upstream commit af114efe8d24b5711cfbedf7180f2ac1a296c24b ]
    
    [why]
    Driver crashes when pipe idx not set properly
    
    [how]
    Add code to skip the pipe that idx not set properly
    
    Reviewed-by: Charlene Liu <[email protected]>
    Acked-by: Tom Chung <[email protected]>
    Signed-off-by: Muhammad Ahmed <[email protected]>
    Tested-by: Daniel Wheeler <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/amdgpu/atomfirmware: fix parsing of vram_info [+ + +]
Author: Alex Deucher <[email protected]>
Date:   Fri Jun 14 13:48:26 2024 -0400

    drm/amdgpu/atomfirmware: fix parsing of vram_info
    
    commit f6f49dda49db72e7a0b4ca32c77391d5ff5ce232 upstream.
    
    v3.x changed the how vram width was encoded.  The previous
    implementation actually worked correctly for most boards.
    Fix the implementation to work correctly everywhere.
    
    This fixes the vram width reported in the kernel log on
    some boards.
    
    Reviewed-by: Hawking Zhang <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/amdgpu: avoid using null object of framebuffer [+ + +]
Author: Julia Zhang <[email protected]>
Date:   Mon Jun 3 19:31:09 2024 +0800

    drm/amdgpu: avoid using null object of framebuffer
    
    commit bcfa48ff785bd121316592b131ff6531e3e696bb upstream.
    
    Instead of using state->fb->obj[0] directly, get object from framebuffer
    by calling drm_gem_fb_get_obj() and return error code when object is
    null to avoid using null object of framebuffer.
    
    Reported-by: Fusheng Huang <[email protected]>
    Signed-off-by: Julia Zhang <[email protected]>
    Reviewed-by: Huang Rui <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/amdgpu: Fix pci state save during mode-1 reset [+ + +]
Author: Lijo Lazar <[email protected]>
Date:   Tue Jun 18 14:04:38 2024 +0530

    drm/amdgpu: Fix pci state save during mode-1 reset
    
    [ Upstream commit 74fa02c4a5ea1ade5156a6ce494d3ea83881c2d8 ]
    
    Cache the PCI state before bus master is disabled. The saved state is
    later used for other cases like restoring config space after mode-2
    reset.
    
    Fixes: 5c03e5843e6b ("drm/amdgpu:add smu mode1/2 support for aldebaran")
    Signed-off-by: Lijo Lazar <[email protected]>
    Reviewed-by: Feifei Xu <[email protected]>
    Reviewed-by: Hawking Zhang <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/drm_file: Fix pid refcounting race [+ + +]
Author: Jann Horn <[email protected]>
Date:   Thu Jun 27 11:26:00 2024 +1000

    drm/drm_file: Fix pid refcounting race
    
    commit 4f2a129b33a2054e62273edd5a051c34c08d96e9 upstream.
    
    <[email protected]>, Maxime Ripard
    <[email protected]>, Thomas Zimmermann <[email protected]>
    
    filp->pid is supposed to be a refcounted pointer; however, before this
    patch, drm_file_update_pid() only increments the refcount of a struct
    pid after storing a pointer to it in filp->pid and dropping the
    dev->filelist_mutex, making the following race possible:
    
    process A               process B
    =========               =========
                            begin drm_file_update_pid
                            mutex_lock(&dev->filelist_mutex)
                            rcu_replace_pointer(filp->pid, <pid B>, 1)
                            mutex_unlock(&dev->filelist_mutex)
    begin drm_file_update_pid
    mutex_lock(&dev->filelist_mutex)
    rcu_replace_pointer(filp->pid, <pid A>, 1)
    mutex_unlock(&dev->filelist_mutex)
    get_pid(<pid A>)
    synchronize_rcu()
    put_pid(<pid B>)   *** pid B reaches refcount 0 and is freed here ***
                            get_pid(<pid B>)   *** UAF ***
                            synchronize_rcu()
                            put_pid(<pid A>)
    
    As far as I know, this race can only occur with CONFIG_PREEMPT_RCU=y
    because it requires RCU to detect a quiescent state in code that is not
    explicitly calling into the scheduler.
    
    This race leads to use-after-free of a "struct pid".
    It is probably somewhat hard to hit because process A has to pass
    through a synchronize_rcu() operation while process B is between
    mutex_unlock() and get_pid().
    
    Fix it by ensuring that by the time a pointer to the current task's pid
    is stored in the file, an extra reference to the pid has been taken.
    
    This fix also removes the condition for synchronize_rcu(); I think
    that optimization is unnecessary complexity, since in that case we
    would usually have bailed out on the lockless check above.
    
    Fixes: 1c7a387ffef8 ("drm: Update file owner during use")
    Cc: <[email protected]>
    Signed-off-by: Jann Horn <[email protected]>
    Signed-off-by: Dave Airlie <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/fbdev-dma: Only set smem_start is enable per module option [+ + +]
Author: Thomas Zimmermann <[email protected]>
Date:   Mon Jun 17 17:26:37 2024 +0200

    drm/fbdev-dma: Only set smem_start is enable per module option
    
    commit d92a7580392ad4681b1d4f9275d00b95375ebe01 upstream.
    
    Only export struct fb_info.fix.smem_start if that is required by the
    user and the memory does not come from vmalloc().
    
    Setting struct fb_info.fix.smem_start breaks systems where DMA
    memory is backed by vmalloc address space. An example error is
    shown below.
    
    [    3.536043] ------------[ cut here ]------------
    [    3.540716] virt_to_phys used for non-linear address: 000000007fc4f540 (0xffff800086001000)
    [    3.552628] WARNING: CPU: 4 PID: 61 at arch/arm64/mm/physaddr.c:12 __virt_to_phys+0x68/0x98
    [    3.565455] Modules linked in:
    [    3.568525] CPU: 4 PID: 61 Comm: kworker/u12:5 Not tainted 6.6.23-06226-g4986cc3e1b75-dirty #250
    [    3.577310] Hardware name: NXP i.MX95 19X19 board (DT)
    [    3.582452] Workqueue: events_unbound deferred_probe_work_func
    [    3.588291] pstate: 60400009 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
    [    3.595233] pc : __virt_to_phys+0x68/0x98
    [    3.599246] lr : __virt_to_phys+0x68/0x98
    [    3.603276] sp : ffff800083603990
    [    3.677939] Call trace:
    [    3.680393]  __virt_to_phys+0x68/0x98
    [    3.684067]  drm_fbdev_dma_helper_fb_probe+0x138/0x238
    [    3.689214]  __drm_fb_helper_initial_config_and_unlock+0x2b0/0x4c0
    [    3.695385]  drm_fb_helper_initial_config+0x4c/0x68
    [    3.700264]  drm_fbdev_dma_client_hotplug+0x8c/0xe0
    [    3.705161]  drm_client_register+0x60/0xb0
    [    3.709269]  drm_fbdev_dma_setup+0x94/0x148
    
    Additionally, DMA memory is assumed to by contiguous in physical
    address space, which is not guaranteed by vmalloc().
    
    Resolve this by checking the module flag drm_leak_fbdev_smem when
    DRM allocated the instance of struct fb_info. Fbdev-dma then only
    sets smem_start only if required (via FBINFO_HIDE_SMEM_START). Also
    guarantee that the framebuffer is not located in vmalloc address
    space.
    
    Signed-off-by: Thomas Zimmermann <[email protected]>
    Reported-by: Peng Fan (OSS) <[email protected]>
    Closes: https://lore.kernel.org/dri-devel/[email protected]/
    Reported-by: Geert Uytterhoeven <[email protected]>
    Closes: https://lore.kernel.org/dri-devel/CAMuHMdX3N0szUvt1VTbroa2zrT1Nye_VzPb5qqCZ7z5gSm7HGw@mail.gmail.com/
    Fixes: a51c7663f144 ("drm/fb-helper: Consolidate CONFIG_DRM_FBDEV_LEAK_PHYS_SMEM")
    Tested-by: Geert Uytterhoeven <[email protected]>
    Reviewed-by: Daniel Vetter <[email protected]>
    Cc: <[email protected]> # v6.4+
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/i915/gt: Fix potential UAF by revoke of fence registers [+ + +]
Author: Janusz Krzysztofik <[email protected]>
Date:   Mon Jun 3 21:54:45 2024 +0200

    drm/i915/gt: Fix potential UAF by revoke of fence registers
    
    commit 996c3412a06578e9d779a16b9e79ace18125ab50 upstream.
    
    CI has been sporadically reporting the following issue triggered by
    igt@i915_selftest@live@hangcheck on ADL-P and similar machines:
    
    <6> [414.049203] i915: Running intel_hangcheck_live_selftests/igt_reset_evict_fence
    ...
    <6> [414.068804] i915 0000:00:02.0: [drm] GT0: GUC: submission enabled
    <6> [414.068812] i915 0000:00:02.0: [drm] GT0: GUC: SLPC enabled
    <3> [414.070354] Unable to pin Y-tiled fence; err:-4
    <3> [414.071282] i915_vma_revoke_fence:301 GEM_BUG_ON(!i915_active_is_idle(&fence->active))
    ...
    <4>[  609.603992] ------------[ cut here ]------------
    <2>[  609.603995] kernel BUG at drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c:301!
    <4>[  609.604003] invalid opcode: 0000 [#1] PREEMPT SMP NOPTI
    <4>[  609.604006] CPU: 0 PID: 268 Comm: kworker/u64:3 Tainted: G     U  W          6.9.0-CI_DRM_14785-g1ba62f8cea9c+ #1
    <4>[  609.604008] Hardware name: Intel Corporation Alder Lake Client Platform/AlderLake-P DDR4 RVP, BIOS RPLPFWI1.R00.4035.A00.2301200723 01/20/2023
    <4>[  609.604010] Workqueue: i915 __i915_gem_free_work [i915]
    <4>[  609.604149] RIP: 0010:i915_vma_revoke_fence+0x187/0x1f0 [i915]
    ...
    <4>[  609.604271] Call Trace:
    <4>[  609.604273]  <TASK>
    ...
    <4>[  609.604716]  __i915_vma_evict+0x2e9/0x550 [i915]
    <4>[  609.604852]  __i915_vma_unbind+0x7c/0x160 [i915]
    <4>[  609.604977]  force_unbind+0x24/0xa0 [i915]
    <4>[  609.605098]  i915_vma_destroy+0x2f/0xa0 [i915]
    <4>[  609.605210]  __i915_gem_object_pages_fini+0x51/0x2f0 [i915]
    <4>[  609.605330]  __i915_gem_free_objects.isra.0+0x6a/0xc0 [i915]
    <4>[  609.605440]  process_scheduled_works+0x351/0x690
    ...
    
    In the past, there were similar failures reported by CI from other IGT
    tests, observed on other platforms.
    
    Before commit 63baf4f3d587 ("drm/i915/gt: Only wait for GPU activity
    before unbinding a GGTT fence"), i915_vma_revoke_fence() was waiting for
    idleness of vma->active via fence_update().   That commit introduced
    vma->fence->active in order for the fence_update() to be able to wait
    selectively on that one instead of vma->active since only idleness of
    fence registers was needed.  But then, another commit 0d86ee35097a
    ("drm/i915/gt: Make fence revocation unequivocal") replaced the call to
    fence_update() in i915_vma_revoke_fence() with only fence_write(), and
    also added that GEM_BUG_ON(!i915_active_is_idle(&fence->active)) in front.
    No justification was provided on why we might then expect idleness of
    vma->fence->active without first waiting on it.
    
    The issue can be potentially caused by a race among revocation of fence
    registers on one side and sequential execution of signal callbacks invoked
    on completion of a request that was using them on the other, still
    processed in parallel to revocation of those fence registers.  Fix it by
    waiting for idleness of vma->fence->active in i915_vma_revoke_fence().
    
    Fixes: 0d86ee35097a ("drm/i915/gt: Make fence revocation unequivocal")
    Closes: https://gitlab.freedesktop.org/drm/intel/issues/10021
    Signed-off-by: Janusz Krzysztofik <[email protected]>
    Cc: [email protected] # v5.8+
    Reviewed-by: Andi Shyti <[email protected]>
    Signed-off-by: Andi Shyti <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    (cherry picked from commit 24bb052d3dd499c5956abad5f7d8e4fd07da7fb1)
    Signed-off-by: Jani Nikula <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/nouveau/dispnv04: fix null pointer dereference in nv17_tv_get_hd_modes [+ + +]
Author: Ma Ke <[email protected]>
Date:   Tue Jun 25 16:10:29 2024 +0800

    drm/nouveau/dispnv04: fix null pointer dereference in nv17_tv_get_hd_modes
    
    commit 6d411c8ccc0137a612e0044489030a194ff5c843 upstream.
    
    In nv17_tv_get_hd_modes(), the return value of drm_mode_duplicate() is
    assigned to mode, which will lead to a possible NULL pointer dereference
    on failure of drm_mode_duplicate(). The same applies to drm_cvt_mode().
    Add a check to avoid null pointer dereference.
    
    Cc: [email protected]
    Signed-off-by: Ma Ke <[email protected]>
    Signed-off-by: Lyude Paul <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/nouveau/dispnv04: fix null pointer dereference in nv17_tv_get_ld_modes [+ + +]
Author: Ma Ke <[email protected]>
Date:   Tue Jun 25 16:18:28 2024 +0800

    drm/nouveau/dispnv04: fix null pointer dereference in nv17_tv_get_ld_modes
    
    commit 66edf3fb331b6c55439b10f9862987b0916b3726 upstream.
    
    In nv17_tv_get_ld_modes(), the return value of drm_mode_duplicate() is
    assigned to mode, which will lead to a possible NULL pointer dereference
    on failure of drm_mode_duplicate(). Add a check to avoid npd.
    
    Cc: [email protected]
    Signed-off-by: Ma Ke <[email protected]>
    Signed-off-by: Lyude Paul <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/panel: ilitek-ili9881c: Fix warning with GPIO controllers that sleep [+ + +]
Author: Laurent Pinchart <[email protected]>
Date:   Sun Mar 17 17:48:39 2024 +0200

    drm/panel: ilitek-ili9881c: Fix warning with GPIO controllers that sleep
    
    [ Upstream commit ee7860cd8b5763017f8dc785c2851fecb7a0c565 ]
    
    The ilitek-ili9881c controls the reset GPIO using the non-sleeping
    gpiod_set_value() function. This complains loudly when the GPIO
    controller needs to sleep. As the caller can sleep, use
    gpiod_set_value_cansleep() to fix the issue.
    
    Signed-off-by: Laurent Pinchart <[email protected]>
    Reviewed-by: Neil Armstrong <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Neil Armstrong <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

drm/panel: simple: Add missing display timing flags for KOE TX26D202VM0BWA [+ + +]
Author: Liu Ying <[email protected]>
Date:   Mon Jun 24 09:56:12 2024 +0800

    drm/panel: simple: Add missing display timing flags for KOE TX26D202VM0BWA
    
    [ Upstream commit 37ce99b77762256ec9fda58d58fd613230151456 ]
    
    KOE TX26D202VM0BWA panel spec indicates the DE signal is active high in
    timing chart, so add DISPLAY_FLAGS_DE_HIGH flag in display timing flags.
    This aligns display_timing with panel_desc.
    
    Fixes: 8a07052440c2 ("drm/panel: simple: Add support for KOE TX26D202VM0BWA panel")
    Signed-off-by: Liu Ying <[email protected]>
    Reviewed-by: Neil Armstrong <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Neil Armstrong <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/radeon/radeon_display: Decrease the size of allocated memory [+ + +]
Author: Erick Archer <[email protected]>
Date:   Sat Mar 30 17:34:47 2024 +0100

    drm/radeon/radeon_display: Decrease the size of allocated memory
    
    [ Upstream commit ae6a233092747e9652eb793d92f79d0820e01c6a ]
    
    This is an effort to get rid of all multiplications from allocation
    functions in order to prevent integer overflows [1] [2].
    
    In this case, the memory allocated to store RADEONFB_CONN_LIMIT pointers
    to "drm_connector" structures can be avoided. This is because this
    memory area is never accessed.
    
    Also, in the kzalloc function, it is preferred to use sizeof(*pointer)
    instead of sizeof(type) due to the type of the variable can change and
    one needs not change the former (unlike the latter).
    
    At the same time take advantage to remove the "#if 0" block, the code
    where the removed memory area was accessed, and the RADEONFB_CONN_LIMIT
    constant due to now is never used.
    
    Link: https://www.kernel.org/doc/html/latest/process/deprecated.html#open-coded-arithmetic-in-allocator-arguments [1]
    Link: https://github.com/KSPP/linux/issues/160 [2]
    Acked-by: Christian König <[email protected]>
    Signed-off-by: Erick Archer <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/xe/xe_devcoredump: Check NULL before assignments [+ + +]
Author: Himal Prasad Ghimiray <[email protected]>
Date:   Thu Mar 28 18:07:39 2024 +0530

    drm/xe/xe_devcoredump: Check NULL before assignments
    
    [ Upstream commit b15e65349553b1689d15fbdebea874ca5ae2274a ]
    
    Assign 'xe_devcoredump_snapshot *' and 'xe_device *' only if
    'coredump' is not NULL.
    
    v2
    - Fix commit messages.
    
    v3
    - Define variables before code.(Ashutosh/Jose)
    
    v4
    - Drop return check for coredump_to_xe. (Jose/Rodrigo)
    
    v5
    - Modify misleading commit message. (Matt)
    
    Cc: Matt Roper <[email protected]>
    Cc: Ashutosh Dixit <[email protected]>
    Cc: José Roberto de Souza <[email protected]>
    Cc: Rodrigo Vivi <[email protected]>
    Signed-off-by: Himal Prasad Ghimiray <[email protected]>
    Reviewed-by: Rodrigo Vivi <[email protected]>
    Reviewed-by: José Roberto de Souza <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Signed-off-by: Rodrigo Vivi <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/xe: Add a NULL check in xe_ttm_stolen_mgr_init [+ + +]
Author: Nirmoy Das <[email protected]>
Date:   Tue Mar 19 14:09:25 2024 +0100

    drm/xe: Add a NULL check in xe_ttm_stolen_mgr_init
    
    [ Upstream commit a6eff8f9c7e844cb24ccb188ca24abcd59734e74 ]
    
    Add an explicit check to ensure that the mgr is not NULL.
    
    Cc: Matthew Auld <[email protected]>
    Signed-off-by: Nirmoy Das <[email protected]>
    Reviewed-by: Matthew Auld <[email protected]>
    Signed-off-by: Matthew Auld <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

drm/xe: Check pat.ops before dumping PAT settings [+ + +]
Author: Michal Wajdeczko <[email protected]>
Date:   Tue Apr 9 12:51:06 2024 +0200

    drm/xe: Check pat.ops before dumping PAT settings
    
    [ Upstream commit a918e771e6fbe1fa68932af5b0cdf473e23090cc ]
    
    We may leave pat.ops unset when running on brand new platform or
    when running as a VF.  While the former is unlikely, the latter
    is valid (future) use case and will cause NPD when someone will
    try to dump PAT settings by debugfs.
    
    It's better to check pointer to pat.ops instead of specific .dump
    hook, as we have this hook always defined for every .ops variant.
    
    Signed-off-by: Michal Wajdeczko <[email protected]>
    Reviewed-by: Piotr Piórkowski <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

drm/xe: Fix potential integer overflow in page size calculation [+ + +]
Author: Nirmoy Das <[email protected]>
Date:   Mon Mar 18 17:43:41 2024 +0100

    drm/xe: Fix potential integer overflow in page size calculation
    
    [ Upstream commit 4f4fcafde343a54465f85a2909fc684918507a4b ]
    
    Explicitly cast tbo->page_alignment to u64 before bit-shifting to
    prevent overflow when assigning to min_page_size.
    
    Cc: Matthew Auld <[email protected]>
    Cc: Matthew Brost <[email protected]>
    Signed-off-by: Nirmoy Das <[email protected]>
    Reviewed-by: Matthew Auld <[email protected]>
    Signed-off-by: Matthew Auld <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
evm: Enforce signatures on unsupported filesystem for EVM_INIT_X509 [+ + +]
Author: Stefan Berger <[email protected]>
Date:   Fri Feb 23 12:25:11 2024 -0500

    evm: Enforce signatures on unsupported filesystem for EVM_INIT_X509
    
    [ Upstream commit 47add87ad181473e5ef2438918669540ba5016a6 ]
    
    Unsupported filesystems currently do not enforce any signatures. Add
    support for signature enforcement of the "original" and "portable &
    immutable" signatures when EVM_INIT_X509 is enabled.
    
    The "original" signature type contains filesystem specific metadata.
    Thus it cannot be copied up and verified. However with EVM_INIT_X509
    and EVM_ALLOW_METADATA_WRITES enabled, the "original" file signature
    may be written.
    
    When EVM_ALLOW_METADATA_WRITES is not set or once it is removed from
    /sys/kernel/security/evm by setting EVM_INIT_HMAC for example, it is not
    possible to write or remove xattrs on the overlay filesystem.
    
    This change still prevents EVM from writing HMAC signatures on
    unsupported filesystem when EVM_INIT_HMAC is enabled.
    
    Co-developed-by: Mimi Zohar <[email protected]>
    Signed-off-by: Stefan Berger <[email protected]>
    Signed-off-by: Mimi Zohar <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
Linux: Fix race for duplicate reqsk on identical SYN [+ + +]
Author: luoxuanqiang <[email protected]>
Date:   Fri Jun 21 09:39:29 2024 +0800

    Fix race for duplicate reqsk on identical SYN
    
    [ Upstream commit ff46e3b4421923937b7f6e44ffcd3549a074f321 ]
    
    When bonding is configured in BOND_MODE_BROADCAST mode, if two identical
    SYN packets are received at the same time and processed on different CPUs,
    it can potentially create the same sk (sock) but two different reqsk
    (request_sock) in tcp_conn_request().
    
    These two different reqsk will respond with two SYNACK packets, and since
    the generation of the seq (ISN) incorporates a timestamp, the final two
    SYNACK packets will have different seq values.
    
    The consequence is that when the Client receives and replies with an ACK
    to the earlier SYNACK packet, we will reset(RST) it.
    
    ========================================================================
    
    This behavior is consistently reproducible in my local setup,
    which comprises:
    
                      | NETA1 ------ NETB1 |
    PC_A --- bond --- |                    | --- bond --- PC_B
                      | NETA2 ------ NETB2 |
    
    - PC_A is the Server and has two network cards, NETA1 and NETA2. I have
      bonded these two cards using BOND_MODE_BROADCAST mode and configured
      them to be handled by different CPU.
    
    - PC_B is the Client, also equipped with two network cards, NETB1 and
      NETB2, which are also bonded and configured in BOND_MODE_BROADCAST mode.
    
    If the client attempts a TCP connection to the server, it might encounter
    a failure. Capturing packets from the server side reveals:
    
    10.10.10.10.45182 > localhost: Flags [S], seq 320236027,
    10.10.10.10.45182 > localhost: Flags [S], seq 320236027,
    localhost > 10.10.10.10.45182: Flags [S.], seq 2967855116,
    localhost > 10.10.10.10.45182: Flags [S.], seq 2967855123, <==
    10.10.10.10.45182 > localhost: Flags [.], ack 4294967290,
    10.10.10.10.45182 > localhost: Flags [.], ack 4294967290,
    localhost > 10.10.10.10.45182: Flags [R], seq 2967855117, <==
    localhost > 10.10.10.10.45182: Flags [R], seq 2967855117,
    
    Two SYNACKs with different seq numbers are sent by localhost,
    resulting in an anomaly.
    
    ========================================================================
    
    The attempted solution is as follows:
    Add a return value to inet_csk_reqsk_queue_hash_add() to confirm if the
    ehash insertion is successful (Up to now, the reason for unsuccessful
    insertion is that a reqsk for the same connection has already been
    inserted). If the insertion fails, release the reqsk.
    
    Due to the refcnt, Kuniyuki suggests also adding a return value check
    for the DCCP module; if ehash insertion fails, indicating a successful
    insertion of the same connection, simply release the reqsk as well.
    
    Simultaneously, In the reqsk_queue_hash_req(), the start of the
    req->rsk_timer is adjusted to be after successful insertion.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: luoxuanqiang <[email protected]>
    Reviewed-by: Kuniyuki Iwashima <[email protected]>
    Reviewed-by: Eric Dumazet <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ftruncate: pass a signed offset [+ + +]
Author: Arnd Bergmann <[email protected]>
Date:   Wed Jun 19 11:34:09 2024 +0200

    ftruncate: pass a signed offset
    
    commit 4b8e88e563b5f666446d002ad0dc1e6e8e7102b0 upstream.
    
    The old ftruncate() syscall, using the 32-bit off_t misses a sign
    extension when called in compat mode on 64-bit architectures.  As a
    result, passing a negative length accidentally succeeds in truncating
    to file size between 2GiB and 4GiB.
    
    Changing the type of the compat syscall to the signed compat_off_t
    changes the behavior so it instead returns -EINVAL.
    
    The native entry point, the truncate() syscall and the corresponding
    loff_t based variants are all correct already and do not suffer
    from this mistake.
    
    Fixes: 3f6d078d4acc ("fix compat truncate/ftruncate")
    Reviewed-by: Christian Brauner <[email protected]>
    Cc: [email protected]
    Signed-off-by: Arnd Bergmann <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
gfs2: Fix NULL pointer dereference in gfs2_log_flush [+ + +]
Author: Andreas Gruenbacher <[email protected]>
Date:   Mon Mar 11 15:51:59 2024 +0100

    gfs2: Fix NULL pointer dereference in gfs2_log_flush
    
    [ Upstream commit 35264909e9d1973ab9aaa2a1b07cda70f12bb828 ]
    
    In gfs2_jindex_free(), set sdp->sd_jdesc to NULL under the log flush
    lock to provide exclusion against gfs2_log_flush().
    
    In gfs2_log_flush(), check if sdp->sd_jdesc is non-NULL before
    dereferencing it.  Otherwise, we could run into a NULL pointer
    dereference when outstanding glock work races with an unmount
    (glock_work_func -> run_queue -> do_xmote -> inode_go_sync ->
    gfs2_log_flush).
    
    Signed-off-by: Andreas Gruenbacher <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
gpio: davinci: Validate the obtained number of IRQs [+ + +]
Author: Aleksandr Mishin <[email protected]>
Date:   Tue Jun 18 17:43:44 2024 +0300

    gpio: davinci: Validate the obtained number of IRQs
    
    [ Upstream commit 7aa9b96e9a73e4ec1771492d0527bd5fc5ef9164 ]
    
    Value of pdata->gpio_unbanked is taken from Device Tree. In case of broken
    DT due to any error this value can be any. Without this value validation
    there can be out of chips->irqs array boundaries access in
    davinci_gpio_probe().
    
    Validate the obtained nirq value so that it won't exceed the maximum
    number of IRQs per bank.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: eb3744a2dd01 ("gpio: davinci: Do not assume continuous IRQ numbering")
    Signed-off-by: Aleksandr Mishin <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
gpiolib: cdev: Disallow reconfiguration without direction (uAPI v1) [+ + +]
Author: Kent Gibson <[email protected]>
Date:   Wed Jun 26 13:29:22 2024 +0800

    gpiolib: cdev: Disallow reconfiguration without direction (uAPI v1)
    
    [ Upstream commit 9919cce62f68e6ab68dc2a975b5dc670f8ca7d40 ]
    
    linehandle_set_config() behaves badly when direction is not set.
    The configuration validation is borrowed from linehandle_create(), where,
    to verify the intent of the user, the direction must be set to in order
    to effect a change to the electrical configuration of a line. But, when
    applied to reconfiguration, that validation does not allow for the unset
    direction case, making it possible to clear flags set previously without
    specifying the line direction.
    
    Adding to the inconsistency, those changes are not immediately applied by
    linehandle_set_config(), but will take effect when the line value is next
    get or set.
    
    For example, by requesting a configuration with no flags set, an output
    line with GPIOHANDLE_REQUEST_ACTIVE_LOW and GPIOHANDLE_REQUEST_OPEN_DRAIN
    requested could have those flags cleared, inverting the sense of the line
    and changing the line drive to push-pull on the next line value set.
    
    Ensure the intent of the user by disallowing configurations which do not
    have direction set, returning an error to userspace to indicate that the
    configuration is invalid.
    
    And, for clarity, use lflags, a local copy of gcnf.flags, throughout when
    dealing with the requested flags, rather than a mixture of both.
    
    Fixes: e588bb1eae31 ("gpio: add new SET_CONFIG ioctl() to gpio chardev")
    Signed-off-by: Kent Gibson <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

gpiolib: cdev: Ignore reconfiguration without direction [+ + +]
Author: Kent Gibson <[email protected]>
Date:   Wed Jun 26 13:29:23 2024 +0800

    gpiolib: cdev: Ignore reconfiguration without direction
    
    [ Upstream commit b440396387418fe2feaacd41ca16080e7a8bc9ad ]
    
    linereq_set_config() behaves badly when direction is not set.
    The configuration validation is borrowed from linereq_create(), where,
    to verify the intent of the user, the direction must be set to in order to
    effect a change to the electrical configuration of a line. But, when
    applied to reconfiguration, that validation does not allow for the unset
    direction case, making it possible to clear flags set previously without
    specifying the line direction.
    
    Adding to the inconsistency, those changes are not immediately applied by
    linereq_set_config(), but will take effect when the line value is next get
    or set.
    
    For example, by requesting a configuration with no flags set, an output
    line with GPIO_V2_LINE_FLAG_ACTIVE_LOW and GPIO_V2_LINE_FLAG_OPEN_DRAIN
    set could have those flags cleared, inverting the sense of the line and
    changing the line drive to push-pull on the next line value set.
    
    Skip the reconfiguration of lines for which the direction is not set, and
    only reconfigure the lines for which direction is set.
    
    Fixes: a54756cb24ea ("gpiolib: cdev: support GPIO_V2_LINE_SET_CONFIG_IOCTL")
    Signed-off-by: Kent Gibson <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
hexagon: fix fadvise64_64 calling conventions [+ + +]
Author: Arnd Bergmann <[email protected]>
Date:   Thu Jun 20 15:24:11 2024 +0200

    hexagon: fix fadvise64_64 calling conventions
    
    commit 896842284c6ccba25ec9d78b7b6e62cdd507c083 upstream.
    
    fadvise64_64() has two 64-bit arguments at the wrong alignment
    for hexagon, which turns them into a 7-argument syscall that is
    not supported by Linux.
    
    The downstream musl port for hexagon actually asks for a 6-argument
    version the same way we do it on arm, csky, powerpc, so make the
    kernel do it the same way to avoid having to change both.
    
    Link: https://github.com/quic/musl/blob/hexagon/arch/hexagon/syscall_arch.h#L78
    Cc: [email protected]
    Signed-off-by: Arnd Bergmann <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
i2c: testunit: discard write requests while old command is running [+ + +]
Author: Wolfram Sang <[email protected]>
Date:   Thu Jun 27 13:14:48 2024 +0200

    i2c: testunit: discard write requests while old command is running
    
    [ Upstream commit c116deafd1a5cc1e9739099eb32114e90623209c ]
    
    When clearing registers on new write requests was added, the protection
    for currently running commands was missed leading to concurrent access
    to the testunit registers. Check the flag beforehand.
    
    Fixes: b39ab96aa894 ("i2c: testunit: add support for block process calls")
    Signed-off-by: Wolfram Sang <[email protected]>
    Reviewed-by: Andi Shyti <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

i2c: testunit: don't erase registers after STOP [+ + +]
Author: Wolfram Sang <[email protected]>
Date:   Thu Jun 27 13:14:47 2024 +0200

    i2c: testunit: don't erase registers after STOP
    
    [ Upstream commit c422b6a630240f706063e0ecbb894aa8491b1fa1 ]
    
    STOP fallsthrough to WRITE_REQUESTED but this became problematic when
    clearing the testunit registers was added to the latter. Actually, there
    is no reason to clear the testunit state after STOP. Doing it when a new
    WRITE_REQUESTED arrives is enough. So, no need to fallthrough, at all.
    
    Fixes: b39ab96aa894 ("i2c: testunit: add support for block process calls")
    Signed-off-by: Wolfram Sang <[email protected]>
    Reviewed-by: Andi Shyti <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ibmvnic: Free any outstanding tx skbs during scrq reset [+ + +]
Author: Nick Child <[email protected]>
Date:   Thu Jun 20 10:23:12 2024 -0500

    ibmvnic: Free any outstanding tx skbs during scrq reset
    
    [ Upstream commit 49bbeb5719c2f56907d3a9623b47c6c15c2c431d ]
    
    There are 2 types of outstanding tx skb's:
    Type 1: Packets that are sitting in the drivers ind_buff that are
    waiting to be batch sent to the NIC. During a device reset, these are
    freed with a call to ibmvnic_tx_scrq_clean_buffer()
    Type 2: Packets that have been sent to the NIC and are awaiting a TX
    completion IRQ. These are free'd during a reset with a call to
    clean_tx_pools()
    
    During any reset which requires us to free the tx irq, ensure that the
    Type 2 skb references are freed. Since the irq is released, it is
    impossible for the NIC to inform of any completions.
    
    Furthermore, later in the reset process is a call to init_tx_pools()
    which marks every entry in the tx pool as free (ie not outstanding).
    So if the driver is to make a call to init_tx_pools(), it must first
    be sure that the tx pool is empty of skb references.
    
    This issue was discovered by observing the following in the logs during
    EEH testing:
            TX free map points to untracked skb (tso_pool 0 idx=4)
            TX free map points to untracked skb (tso_pool 0 idx=5)
            TX free map points to untracked skb (tso_pool 1 idx=36)
    
    Fixes: 65d6470d139a ("ibmvnic: clean pending indirect buffs during reset")
    Signed-off-by: Nick Child <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ice: Rebuild TC queues on VSI queue reconfiguration [+ + +]
Author: Jan Sokolowski <[email protected]>
Date:   Fri Jun 21 10:54:19 2024 -0700

    ice: Rebuild TC queues on VSI queue reconfiguration
    
    [ Upstream commit f4b91c1d17c676b8ad4c6bd674da874f3f7d5701 ]
    
    TC queues needs to be correctly updated when the number of queues on
    a VSI is reconfigured, so netdev's queue and TC settings will be
    dynamically adjusted and could accurately represent the underlying
    hardware state after changes to the VSI queue counts.
    
    Fixes: 0754d65bd4be ("ice: Add infrastructure for mqprio support via ndo_setup_tc")
    Reviewed-by: Wojciech Drewek <[email protected]>
    Signed-off-by: Jan Sokolowski <[email protected]>
    Signed-off-by: Karen Ostrowska <[email protected]>
    Tested-by: Pucha Himasekhar Reddy <[email protected]> (A Contingent worker at Intel)
    Signed-off-by: Tony Nguyen <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
iio: accel: fxls8962af: select IIO_BUFFER & IIO_KFIFO_BUF [+ + +]
Author: Alexander Sverdlin <[email protected]>
Date:   Wed Jun 5 22:38:06 2024 +0200

    iio: accel: fxls8962af: select IIO_BUFFER & IIO_KFIFO_BUF
    
    commit a821d7111e3f7c8869961b606714a299bfe20014 upstream.
    
    Provide missing symbols to the module:
    ERROR: modpost: iio_push_to_buffers [drivers/iio/accel/fxls8962af-core.ko] undefined!
    ERROR: modpost: devm_iio_kfifo_buffer_setup_ext [drivers/iio/accel/fxls8962af-core.ko] undefined!
    
    Cc: [email protected]
    Fixes: 79e3a5bdd9ef ("iio: accel: fxls8962af: add hw buffered sampling")
    Signed-off-by: Alexander Sverdlin <[email protected]>
    Reviewed-by: Sean Nyekjaer <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: adc: ad7266: Fix variable checking bug [+ + +]
Author: Fernando Yang <[email protected]>
Date:   Mon Jun 3 15:07:54 2024 -0300

    iio: adc: ad7266: Fix variable checking bug
    
    commit a2b86132955268b2a1703082fbc2d4832fc001b8 upstream.
    
    The ret variable was not checked after iio_device_release_direct_mode(),
    which could possibly cause errors
    
    Fixes: c70df20e3159 ("iio: adc: ad7266: claim direct mode during sensor read")
    Signed-off-by: Fernando Yang <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Cc: <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: chemical: bme680: Fix calibration data variable [+ + +]
Author: Vasileios Amoiridis <[email protected]>
Date:   Thu Jun 6 23:22:54 2024 +0200

    iio: chemical: bme680: Fix calibration data variable
    
    commit b47c0fee73a810c4503c4a94ea34858a1d865bba upstream.
    
    According to the BME68x Sensor API [1], the h6 calibration
    data variable should be an unsigned integer of size 8.
    
    [1]: https://github.com/boschsensortec/BME68x_SensorAPI/blob/v4.4.8/bme68x_defs.h#L789
    
    Fixes: 1b3bd8592780 ("iio: chemical: Add support for Bosch BME680 sensor")
    Signed-off-by: Vasileios Amoiridis <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Cc: <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: chemical: bme680: Fix overflows in compensate() functions [+ + +]
Author: Vasileios Amoiridis <[email protected]>
Date:   Thu Jun 6 23:22:55 2024 +0200

    iio: chemical: bme680: Fix overflows in compensate() functions
    
    commit fdd478c3ae98c3f13628e110dce9b6cfb0d9b3c8 upstream.
    
    There are cases in the compensate functions of the driver that
    there could be overflows of variables due to bit shifting ops.
    These implications were initially discussed here [1] and they
    were mentioned in log message of Commit 1b3bd8592780 ("iio:
    chemical: Add support for Bosch BME680 sensor").
    
    [1]: https://lore.kernel.org/linux-iio/20180728114028.3c1bbe81@archlinux/
    
    Fixes: 1b3bd8592780 ("iio: chemical: Add support for Bosch BME680 sensor")
    Signed-off-by: Vasileios Amoiridis <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Cc: <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: chemical: bme680: Fix pressure value output [+ + +]
Author: Vasileios Amoiridis <[email protected]>
Date:   Thu Jun 6 23:22:53 2024 +0200

    iio: chemical: bme680: Fix pressure value output
    
    commit ae1f7b93b52095be6776d0f34957b4f35dda44d9 upstream.
    
    The IIO standard units are measured in kPa while the driver
    is using hPa.
    
    Apart from checking the userspace value itself, it is mentioned also
    in the Bosch API [1] that the pressure value is in Pascal.
    
    [1]: https://github.com/boschsensortec/BME68x_SensorAPI/blob/v4.4.8/bme68x_defs.h#L742
    
    Fixes: 1b3bd8592780 ("iio: chemical: Add support for Bosch BME680 sensor")
    Signed-off-by: Vasileios Amoiridis <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Cc: <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: chemical: bme680: Fix sensor data read operation [+ + +]
Author: Vasileios Amoiridis <[email protected]>
Date:   Thu Jun 6 23:22:56 2024 +0200

    iio: chemical: bme680: Fix sensor data read operation
    
    commit 4241665e6ea063a9c1d734de790121a71db763fc upstream.
    
    A read operation is happening as follows:
    
    a) Set sensor to forced mode
    b) Sensor measures values and update data registers and sleeps again
    c) Read data registers
    
    In the current implementation the read operation happens immediately
    after the sensor is set to forced mode so the sensor does not have
    the time to update properly the registers. This leads to the following
    2 problems:
    
    1) The first ever value which is read by the register is always wrong
    2) Every read operation, puts the register into forced mode and reads
    the data that were calculated in the previous conversion.
    
    This behaviour was tested in 2 ways:
    
    1) The internal meas_status_0 register was read before and after every
    read operation in order to verify that the data were ready even before
    the register was set to forced mode and also to check that after the
    forced mode was set the new data were not yet ready.
    
    2) Physically changing the temperature and measuring the temperature
    
    This commit adds the waiting time in between the set of the forced mode
    and the read of the data. The function is taken from the Bosch BME68x
    Sensor API [1].
    
    [1]: https://github.com/boschsensortec/BME68x_SensorAPI/blob/v4.4.8/bme68x.c#L490
    
    Fixes: 1b3bd8592780 ("iio: chemical: Add support for Bosch BME680 sensor")
    Signed-off-by: Vasileios Amoiridis <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Cc: <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: humidity: hdc3020: fix hysteresis representation [+ + +]
Author: Dimitri Fedrau <[email protected]>
Date:   Wed Jun 5 21:21:35 2024 +0200

    iio: humidity: hdc3020: fix hysteresis representation
    
    commit 9547d6a4c65e975e40e203900322342ef7379c52 upstream.
    
    According to the ABI docs hysteresis values are represented as offsets to
    threshold values. Current implementation represents hysteresis values as
    absolute values which is wrong. Nevertheless the device stores them as
    absolute values and the datasheet refers to them as clear thresholds. Fix
    the reading and writing of hysteresis values by including thresholds into
    calculations. Hysteresis values that result in threshold clear values
    that are out of limits will be truncated.
    
    To check that the threshold clear values are correct, registers are read
    out using i2ctransfer and the corresponding temperature and relative
    humidity thresholds are calculated using the formulas in the datasheet.
    
    Fixes: 3ad0e7e5f0cb ("iio: humidity: hdc3020: add threshold events support")
    Signed-off-by: Dimitri Fedrau <[email protected]>
    Reviewed-by: Javier Carrasco <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Cc: <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: xilinx-ams: Don't include ams_ctrl_channels in scan_mask [+ + +]
Author: Sean Anderson <[email protected]>
Date:   Mon Mar 11 12:28:00 2024 -0400

    iio: xilinx-ams: Don't include ams_ctrl_channels in scan_mask
    
    [ Upstream commit 89b898c627a49b978a4c323ea6856eacfc21f6ba ]
    
    ams_enable_channel_sequence constructs a "scan_mask" for all the PS and
    PL channels. This works out fine, since scan_index for these channels is
    less than 64. However, it also includes the ams_ctrl_channels, where
    scan_index is greater than 64, triggering undefined behavior. Since we
    don't need these channels anyway, just exclude them.
    
    Fixes: d5c70627a794 ("iio: adc: Add Xilinx AMS driver")
    Signed-off-by: Sean Anderson <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
Input: ili210x - fix ili251x_read_touch_data() return value [+ + +]
Author: John Keeping <[email protected]>
Date:   Thu May 23 09:56:24 2024 +0100

    Input: ili210x - fix ili251x_read_touch_data() return value
    
    [ Upstream commit 9f0fad0382124e7e23b3c730fa78818c22c89c0a ]
    
    The caller of this function treats all non-zero values as an error, so
    the return value of i2c_master_recv() cannot be returned directly.
    
    This fixes touch reporting when there are more than 6 active touches.
    
    Fixes: ef536abd3afd1 ("Input: ili210x - define and use chip operations structure")
    Signed-off-by: John Keeping <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
io_uring: signal SQPOLL task_work with TWA_SIGNAL_NO_IPI [+ + +]
Author: Jens Axboe <[email protected]>
Date:   Mon Jun 24 19:07:18 2024 -0600

    io_uring: signal SQPOLL task_work with TWA_SIGNAL_NO_IPI
    
    commit dbcabac138fdfc730ba458ed2199ff1f29a271fc upstream.
    
    Before SQPOLL was transitioned to managing its own task_work, the core
    used TWA_SIGNAL_NO_IPI to ensure that task_work was processed. If not,
    we can't be sure that all task_work is processed at SQPOLL thread exit
    time.
    
    Fixes: af5d68f8892f ("io_uring/sqpoll: manage task_work privately")
    Cc: [email protected]
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
iommu/amd: Fix GT feature enablement again [+ + +]
Author: Vasant Hegde <[email protected]>
Date:   Fri Jun 21 10:15:33 2024 +0000

    iommu/amd: Fix GT feature enablement again
    
    [ Upstream commit 150bdf5f8d8f805d70bebbbfd07697bd2416771a ]
    
    Current code configures GCR3 even when device is attached to identity
    domain. So that we can support SVA with identity domain. This means in
    attach device path it updates Guest Translation related bits in DTE.
    
    Commit de111f6b4f6a ("iommu/amd: Enable Guest Translation after reading
    IOMMU feature register") missed to enable Control[GT] bit in resume
    path. Its causing certain laptop to fail to resume after suspend.
    
    This is because we have inconsistency between between control register
    (GT is disabled) and DTE (where we have enabled guest translation related
    bits) in resume path. And IOMMU hardware throws ILLEGAL_DEV_TABLE_ENTRY.
    
    Fix it by enabling GT bit in resume path.
    
    Reported-by: Błażej Szczygieł <[email protected]>
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=218975
    Fixes: de111f6b4f6a ("iommu/amd: Enable Guest Translation after reading IOMMU feature register")
    Tested-by: Błażej Szczygieł <[email protected]>
    Signed-off-by: Vasant Hegde <[email protected]>
    Reviewed-by: Jerry Snitselaar <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Joerg Roedel <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

iommu/amd: Introduce per device DTE update function [+ + +]
Author: Vasant Hegde <[email protected]>
Date:   Thu Apr 18 10:33:47 2024 +0000

    iommu/amd: Introduce per device DTE update function
    
    [ Upstream commit c5ebd09625391000026b0860952e05d0f7fc4519 ]
    
    Consolidate per device update and flush logic into separate function.
    Also make it as global function as it will be used in subsequent series
    to update the DTE.
    
    Signed-off-by: Vasant Hegde <[email protected]>
    Reviewed-by: Jason Gunthorpe <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Joerg Roedel <[email protected]>
    Stable-dep-of: c362f32a59a8 ("iommu/amd: Invalidate cache before removing device from domain list")
    Signed-off-by: Sasha Levin <[email protected]>

iommu/amd: Invalidate cache before removing device from domain list [+ + +]
Author: Vasant Hegde <[email protected]>
Date:   Thu Jun 20 06:05:52 2024 +0000

    iommu/amd: Invalidate cache before removing device from domain list
    
    [ Upstream commit c362f32a59a84fe4453abecc6b53f5f70894a6d5 ]
    
    Commit 87a6f1f22c97 ("iommu/amd: Introduce per-device domain ID to fix
    potential TLB aliasing issue") introduced per device domain ID when
    domain is configured with v2 page table. And in invalidation path, it
    uses per device structure (dev_data->gcr3_info.domid) to get the domain ID.
    
    In detach_device() path, current code tries to invalidate IOMMU cache
    after removing dev_data from domain device list. This means when domain
    is configured with v2 page table, amd_iommu_domain_flush_all() will not be
    able to invalidate cache as device is already removed from domain device
    list.
    
    This is causing change domain tests (changing domain type from identity to DMA)
    to fail with IO_PAGE_FAULT issue.
    
    Hence invalidate cache and update DTE before updating data structures.
    
    Reported-by: FahHean Lee <[email protected]>
    Reported-by: Dheeraj Kumar Srivastava <[email protected]>
    Fixes: 87a6f1f22c97 ("iommu/amd: Introduce per-device domain ID to fix potential TLB aliasing issue")
    Tested-by: Dheeraj Kumar Srivastava <[email protected]>
    Tested-by: Sairaj Arun Kodilkar <[email protected]>
    Tested-by: FahHean Lee <[email protected]>
    Signed-off-by: Vasant Hegde <[email protected]>
    Reviewed-by: Jerry Snitselaar <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Joerg Roedel <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
iommu/arm-smmu-v3: Do not allow a SVA domain to be set on the wrong PASID [+ + +]
Author: Jason Gunthorpe <[email protected]>
Date:   Wed Mar 27 15:07:49 2024 -0300

    iommu/arm-smmu-v3: Do not allow a SVA domain to be set on the wrong PASID
    
    [ Upstream commit fdc69d39e77f88264ee6e8174ff9aaf0953aecd9 ]
    
    The SVA code is wired to assume that the SVA is programmed onto the
    mm->pasid. The current core code always does this, so it is fine.
    
    Add a check for clarity.
    
    Tested-by: Nicolin Chen <[email protected]>
    Tested-by: Shameer Kolothum <[email protected]>
    Signed-off-by: Jason Gunthorpe <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Will Deacon <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ionic: fix kernel panic due to multi-buffer handling [+ + +]
Author: Taehee Yoo <[email protected]>
Date:   Thu Jun 20 10:58:08 2024 +0000

    ionic: fix kernel panic due to multi-buffer handling
    
    [ Upstream commit e3f02f32a05009a688a87f5799e049ed6b55bab5 ]
    
    Currently, the ionic_run_xdp() doesn't handle multi-buffer packets
    properly for XDP_TX and XDP_REDIRECT.
    When a jumbo frame is received, the ionic_run_xdp() first makes xdp
    frame with all necessary pages in the rx descriptor.
    And if the action is either XDP_TX or XDP_REDIRECT, it should unmap
    dma-mapping and reset page pointer to NULL for all pages, not only the
    first page.
    But it doesn't for SG pages. So, SG pages unexpectedly will be reused.
    It eventually causes kernel panic.
    
    Oops: general protection fault, probably for non-canonical address 0x504f4e4dbebc64ff: 0000 [#1] PREEMPT SMP NOPTI
    CPU: 3 PID: 0 Comm: swapper/3 Not tainted 6.10.0-rc3+ #25
    RIP: 0010:xdp_return_frame+0x42/0x90
    Code: 01 75 12 5b 4c 89 e6 5d 31 c9 41 5c 31 d2 41 5d e9 73 fd ff ff 44 8b 6b 20 0f b7 43 0a 49 81 ed 68 01 00 00 49 29 c5 49 01 fd <41> 80 7d0
    RSP: 0018:ffff99d00122ce08 EFLAGS: 00010202
    RAX: 0000000000005453 RBX: ffff8d325f904000 RCX: 0000000000000001
    RDX: 00000000670e1000 RSI: 000000011f90d000 RDI: 504f4e4d4c4b4a49
    RBP: ffff99d003907740 R08: 0000000000000000 R09: 0000000000000000
    R10: 000000011f90d000 R11: 0000000000000000 R12: ffff8d325f904010
    R13: 504f4e4dbebc64fd R14: ffff8d3242b070c8 R15: ffff99d0039077c0
    FS:  0000000000000000(0000) GS:ffff8d399f780000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00007f41f6c85e38 CR3: 000000037ac30000 CR4: 00000000007506f0
    PKRU: 55555554
    Call Trace:
     <IRQ>
     ? die_addr+0x33/0x90
     ? exc_general_protection+0x251/0x2f0
     ? asm_exc_general_protection+0x22/0x30
     ? xdp_return_frame+0x42/0x90
     ionic_tx_clean+0x211/0x280 [ionic 15881354510e6a9c655c59c54812b319ed2cd015]
     ionic_tx_cq_service+0xd3/0x210 [ionic 15881354510e6a9c655c59c54812b319ed2cd015]
     ionic_txrx_napi+0x41/0x1b0 [ionic 15881354510e6a9c655c59c54812b319ed2cd015]
     __napi_poll.constprop.0+0x29/0x1b0
     net_rx_action+0x2c4/0x350
     handle_softirqs+0xf4/0x320
     irq_exit_rcu+0x78/0xa0
     common_interrupt+0x77/0x90
    
    Fixes: 5377805dc1c0 ("ionic: implement xdp frags support")
    Signed-off-by: Taehee Yoo <[email protected]>
    Reviewed-by: Shannon Nelson <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ionic: use dev_consume_skb_any outside of napi [+ + +]
Author: Shannon Nelson <[email protected]>
Date:   Mon Jun 24 10:50:15 2024 -0700

    ionic: use dev_consume_skb_any outside of napi
    
    [ Upstream commit 84b767f9e34fdb143c09e66a2a20722fc2921821 ]
    
    If we're not in a NAPI softirq context, we need to be careful
    about how we call napi_consume_skb(), specifically we need to
    call it with budget==0 to signal to it that we're not in a
    safe context.
    
    This was found while running some configuration stress testing
    of traffic and a change queue config loop running, and this
    curious note popped out:
    
    [ 4371.402645] BUG: using smp_processor_id() in preemptible [00000000] code: ethtool/20545
    [ 4371.402897] caller is napi_skb_cache_put+0x16/0x80
    [ 4371.403120] CPU: 25 PID: 20545 Comm: ethtool Kdump: loaded Tainted: G           OE      6.10.0-rc3-netnext+ #8
    [ 4371.403302] Hardware name: HPE ProLiant DL360 Gen10/ProLiant DL360 Gen10, BIOS U32 01/23/2021
    [ 4371.403460] Call Trace:
    [ 4371.403613]  <TASK>
    [ 4371.403758]  dump_stack_lvl+0x4f/0x70
    [ 4371.403904]  check_preemption_disabled+0xc1/0xe0
    [ 4371.404051]  napi_skb_cache_put+0x16/0x80
    [ 4371.404199]  ionic_tx_clean+0x18a/0x240 [ionic]
    [ 4371.404354]  ionic_tx_cq_service+0xc4/0x200 [ionic]
    [ 4371.404505]  ionic_tx_flush+0x15/0x70 [ionic]
    [ 4371.404653]  ? ionic_lif_qcq_deinit.isra.23+0x5b/0x70 [ionic]
    [ 4371.404805]  ionic_txrx_deinit+0x71/0x190 [ionic]
    [ 4371.404956]  ionic_reconfigure_queues+0x5f5/0xff0 [ionic]
    [ 4371.405111]  ionic_set_ringparam+0x2e8/0x3e0 [ionic]
    [ 4371.405265]  ethnl_set_rings+0x1f1/0x300
    [ 4371.405418]  ethnl_default_set_doit+0xbb/0x160
    [ 4371.405571]  genl_family_rcv_msg_doit+0xff/0x130
            [...]
    
    I found that ionic_tx_clean() calls napi_consume_skb() which calls
    napi_skb_cache_put(), but before that last call is the note
        /* Zero budget indicate non-NAPI context called us, like netpoll */
    and
        DEBUG_NET_WARN_ON_ONCE(!in_softirq());
    
    Those are pretty big hints that we're doing it wrong.  We can pass a
    context hint down through the calls to let ionic_tx_clean() know what
    we're doing so it can call napi_consume_skb() correctly.
    
    Fixes: 386e69865311 ("ionic: Make use napi_consume_skb")
    Signed-off-by: Shannon Nelson <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
irqchip/loongson-eiointc: Use early_cpu_to_node() instead of cpu_to_node() [+ + +]
Author: Huacai Chen <[email protected]>
Date:   Sun Jun 23 11:41:13 2024 +0800

    irqchip/loongson-eiointc: Use early_cpu_to_node() instead of cpu_to_node()
    
    commit 2d64eaeeeda5659d52da1af79d237269ba3c2d2c upstream.
    
    Multi-bridge machines required that all eiointc controllers in the system
    are initialized, otherwise the system does not boot.
    
    The initialization happens on the boot CPU during early boot and relies on
    cpu_to_node() for identifying the individual nodes.
    
    That works when the number of possible CPUs is large enough, but with a
    command line limit, e.g. "nr_cpus=$N" for kdump, but fails when the CPUs
    of the secondary nodes are not covered.
    
    During early ACPI enumeration all CPU to node mappings are recorded up to
    CONFIG_NR_CPUS. These are accessible via early_cpu_to_node() even in the
    case that "nr_cpus=N" truncates the number of possible CPUs and only
    provides the possible CPUs via cpu_to_node() translation.
    
    Change the node lookup in the driver to use early_cpu_to_node() so that
    even with a limitation on the number of possible CPUs all eointc instances
    are initialized.
    
    This can't obviously cure the case where CONFIG_NR_CPUS is too small.
    
    [ tglx: Massaged changelog ]
    
    Fixes: 64cc451e45e1 ("irqchip/loongson-eiointc: Fix incorrect use of acpi_get_vec_parent")
    Signed-off-by: Huacai Chen <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
irqchip/loongson-liointc: Set different ISRs for different cores [+ + +]
Author: Huacai Chen <[email protected]>
Date:   Sat Jun 22 12:33:38 2024 +0800

    irqchip/loongson-liointc: Set different ISRs for different cores
    
    commit a9c3ee5d0fdb069b54902300df6ac822027f3b0a upstream.
    
    The liointc hardware provides separate Interrupt Status Registers (ISR) for
    each core. The current code uses always the ISR of core #0, which works
    during boot because by default all interrupts are routed to core #0.
    
    When the interrupt routing changes in the firmware configuration then this
    causes interrupts to be lost because they are not configured in the
    corresponding core.
    
    Use the core index to access the correct ISR instead of a hardcoded 0.
    
    [ tglx: Massaged changelog ]
    
    Fixes: 0858ed035a85 ("irqchip/loongson-liointc: Add ACPI init support")
    Co-developed-by: Tianli Xiong <[email protected]>
    Signed-off-by: Tianli Xiong <[email protected]>
    Signed-off-by: Huacai Chen <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Cc: <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
irqchip/loongson: Select GENERIC_IRQ_EFFECTIVE_AFF_MASK if SMP for IRQ_LOONGARCH_CPU [+ + +]
Author: Tiezhu Yang <[email protected]>
Date:   Tue Mar 26 20:11:29 2024 +0800

    irqchip/loongson: Select GENERIC_IRQ_EFFECTIVE_AFF_MASK if SMP for IRQ_LOONGARCH_CPU
    
    [ Upstream commit 42a7d887664b02a747ef5d479f6fd01081564af8 ]
    
    An interrupt's effective affinity can only be different from its configured
    affinity if there are multiple CPUs. Make it clear that this option is only
    meaningful when SMP is enabled. Otherwise, there exists "WARNING: unmet
    direct dependencies detected for GENERIC_IRQ_EFFECTIVE_AFF_MASK" when make
    menuconfig if CONFIG_SMP is not set on LoongArch.
    
    Signed-off-by: Tiezhu Yang <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
kasan: fix bad call to unpoison_slab_object [+ + +]
Author: Andrey Konovalov <[email protected]>
Date:   Fri Jun 14 16:32:38 2024 +0200

    kasan: fix bad call to unpoison_slab_object
    
    commit 1c61990d3762a020817daa353da0a0af6794140b upstream.
    
    Commit 29d7355a9d05 ("kasan: save alloc stack traces for mempool") messed
    up one of the calls to unpoison_slab_object: the last two arguments are
    supposed to be GFP flags and whether to init the object memory.
    
    Fix the call.
    
    Without this fix, __kasan_mempool_unpoison_object provides the object's
    size as GFP flags to unpoison_slab_object, which can cause LOCKDEP reports
    (and probably other issues).
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 29d7355a9d05 ("kasan: save alloc stack traces for mempool")
    Signed-off-by: Andrey Konovalov <[email protected]>
    Reported-by: Brad Spengler <[email protected]>
    Acked-by: Marco Elver <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
kbuild: doc: Update default INSTALL_MOD_DIR from extra to updates [+ + +]
Author: Mark-PK Tsai <[email protected]>
Date:   Fri Jun 14 15:15:02 2024 +0800

    kbuild: doc: Update default INSTALL_MOD_DIR from extra to updates
    
    [ Upstream commit 07d4cc2e7444356faac6552d0688a1670cc9d749 ]
    
    The default INSTALL_MOD_DIR was changed from 'extra' to
    'updates' in commit b74d7bb7ca24 ("kbuild: Modify default
    INSTALL_MOD_DIR from extra to updates").
    
    This commit updates the documentation to align with the
    latest kernel.
    
    Fixes: b74d7bb7ca24 ("kbuild: Modify default INSTALL_MOD_DIR from extra to updates")
    Signed-off-by: Mark-PK Tsai <[email protected]>
    Signed-off-by: Masahiro Yamada <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

kbuild: Fix build target deb-pkg: ln: failed to create hard link [+ + +]
Author: Thayne Harbaugh <[email protected]>
Date:   Sat Jun 15 23:34:54 2024 -0600

    kbuild: Fix build target deb-pkg: ln: failed to create hard link
    
    [ Upstream commit c61566538968ffb040acc411246fd7ad38c7e8c9 ]
    
    The make deb-pkg target calls debian-orig which attempts to either
    hard link the source .tar to the build-output location or copy the
    source .tar to the build-output location.  The test to determine
    whether to ln or cp is incorrectly expanded by Make and consequently
    always attempts to ln the source .tar.  This fix corrects the escaping
    of '$' so that the test is expanded by the shell rather than by Make
    and appropriately selects between ln and cp.
    
    Fixes: b44aa8c96e9e ("kbuild: deb-pkg: make .orig tarball a hard link if possible")
    Signed-off-by: Thayne Harbaugh <[email protected]>
    Signed-off-by: Masahiro Yamada <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

kbuild: Install dtb files as 0644 in Makefile.dtbinst [+ + +]
Author: Dragan Simic <[email protected]>
Date:   Mon Jun 10 07:21:12 2024 +0200

    kbuild: Install dtb files as 0644 in Makefile.dtbinst
    
    commit 9cc5f3bf63aa98bd7cc7ce8a8599077fde13283e upstream.
    
    The compiled dtb files aren't executable, so install them with 0644 as their
    permission mode, instead of defaulting to 0755 for the permission mode and
    installing them with the executable bits set.
    
    Some Linux distributions, including Debian, [1][2][3] already include fixes
    in their kernel package build recipes to change the dtb file permissions to
    0644 in their kernel packages.  These changes, when additionally propagated
    into the long-term kernel versions, will allow such distributions to remove
    their downstream fixes.
    
    [1] https://salsa.debian.org/kernel-team/linux/-/merge_requests/642
    [2] https://salsa.debian.org/kernel-team/linux/-/merge_requests/749
    [3] https://salsa.debian.org/kernel-team/linux/-/blob/debian/6.8.12-1/debian/rules.real#L193
    
    Cc: Diederik de Haas <[email protected]>
    Cc: <[email protected]>
    Fixes: aefd80307a05 ("kbuild: refactor Makefile.dtbinst more")
    Signed-off-by: Dragan Simic <[email protected]>
    Reviewed-by: Nicolas Schier <[email protected]>
    Signed-off-by: Masahiro Yamada <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

kbuild: rpm-pkg: fix build error with CONFIG_MODULES=n [+ + +]
Author: Masahiro Yamada <[email protected]>
Date:   Tue Jun 18 20:08:43 2024 +0900

    kbuild: rpm-pkg: fix build error with CONFIG_MODULES=n
    
    [ Upstream commit 8d1001f7bdd0553a796998f4fff07ee13e1c1cad ]
    
    When CONFIG_MODULES is disabled, 'make (bin)rpm-pkg' fails:
    
      $ make allnoconfig binrpm-pkg
        [ snip ]
      error: File not found: .../linux/rpmbuild/BUILDROOT/kernel-6.10.0_rc3-1.i386/lib/modules/6.10.0-rc3/kernel
      error: File not found: .../linux/rpmbuild/BUILDROOT/kernel-6.10.0_rc3-1.i386/lib/modules/6.10.0-rc3/modules.order
    
    To make it work irrespective of CONFIG_MODULES, this commit specifies
    the directory path, /lib/modules/%{KERNELRELEASE}, instead of individual
    files.
    
    However, doing so would cause new warnings:
    
      warning: File listed twice: /lib/modules/6.10.0-rc3-dirty/modules.alias
      warning: File listed twice: /lib/modules/6.10.0-rc3-dirty/modules.alias.bin
      warning: File listed twice: /lib/modules/6.10.0-rc3-dirty/modules.builtin.alias.bin
      warning: File listed twice: /lib/modules/6.10.0-rc3-dirty/modules.builtin.bin
      warning: File listed twice: /lib/modules/6.10.0-rc3-dirty/modules.dep
      warning: File listed twice: /lib/modules/6.10.0-rc3-dirty/modules.dep.bin
      warning: File listed twice: /lib/modules/6.10.0-rc3-dirty/modules.devname
      warning: File listed twice: /lib/modules/6.10.0-rc3-dirty/modules.softdep
      warning: File listed twice: /lib/modules/6.10.0-rc3-dirty/modules.symbols
      warning: File listed twice: /lib/modules/6.10.0-rc3-dirty/modules.symbols.bin
    
    These files exist in /lib/modules/%{KERNELRELEASE} and are also explicitly
    marked as %ghost.
    
    Suppress depmod because depmod-generated files are not packaged.
    
    Fixes: 615b3a3d2d41 ("kbuild: rpm-pkg: do not include depmod-generated files")
    Signed-off-by: Masahiro Yamada <[email protected]>
    Reviewed-by: Nathan Chancellor <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
Linux: Linux 6.9.8 [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Fri Jul 5 09:38:21 2024 +0200

    Linux 6.9.8
    
    Link: https://lore.kernel.org/r/[email protected]
    Tested-by: Ronald Warsow <[email protected]>
    Tested-by: SeongJae Park <[email protected]>
    Tested-by: Mark Brown <[email protected]>
    Tested-by: Christian Heusel <[email protected]>
    Tested-by: Shuah Khan <[email protected]>
    Tested-by: Bagas Sanjaya <[email protected]>
    Tested-by: Jon Hunter <[email protected]>
    Tested-by: Salvatore Bonaccorso <[email protected]>
    Tested-by: Justin M. Forbes <[email protected]>
    Tested-by: Pavel Machek (CIP) <[email protected]>
    Tested-by: Peter Schneider <[email protected]>
    Tested-by: Kelsey Steele <[email protected]>
    Tested-by: Ron Economos <[email protected]>
    Tested-by: Linux Kernel Functional Testing <[email protected]>
    Tested-by: Florian Fainelli <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
media: dvbdev: Initialize sbuf [+ + +]
Author: Ricardo Ribalda <[email protected]>
Date:   Mon Mar 25 14:50:25 2024 +0000

    media: dvbdev: Initialize sbuf
    
    [ Upstream commit 17d1316de0d7dc1bdc5d6e3ad4efd30a9bf1a381 ]
    
    Because the size passed to copy_from_user() cannot be known beforehand,
    it needs to be checked during runtime with check_object_size. That makes
    gcc believe that the content of sbuf can be used before init.
    
    Fix:
    ./include/linux/thread_info.h:215:17: warning: ‘sbuf’ may be used uninitialized [-Wmaybe-uninitialized]
    
    Signed-off-by: Ricardo Ribalda <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
MIPS: pci: lantiq: restore reset gpio polarity [+ + +]
Author: Martin Schiller <[email protected]>
Date:   Fri Jun 7 11:04:00 2024 +0200

    MIPS: pci: lantiq: restore reset gpio polarity
    
    [ Upstream commit 277a0363120276645ae598d8d5fea7265e076ae9 ]
    
    Commit 90c2d2eb7ab5 ("MIPS: pci: lantiq: switch to using gpiod API") not
    only switched to the gpiod API, but also inverted / changed the polarity
    of the GPIO.
    
    According to the PCI specification, the RST# pin is an active-low
    signal. However, most of the device trees that have been widely used for
    a long time (mainly in the openWrt project) define this GPIO as
    active-high and the old driver code inverted the signal internally.
    
    Apparently there are actually boards where the reset gpio must be
    operated inverted. For this reason, we cannot use the GPIOD_OUT_LOW/HIGH
    flag for initialization. Instead, we must explicitly set the gpio to
    value 1 in order to take into account any "GPIO_ACTIVE_LOW" flag that
    may have been set.
    
    In order to remain compatible with all these existing device trees, we
    should therefore keep the logic as it was before the commit.
    
    Fixes: 90c2d2eb7ab5 ("MIPS: pci: lantiq: switch to using gpiod API")
    Cc: [email protected]
    Signed-off-by: Martin Schiller <[email protected]>
    Signed-off-by: Thomas Bogendoerfer <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
mlxsw: pci: Fix driver initialization with Spectrum-4 [+ + +]
Author: Ido Schimmel <[email protected]>
Date:   Fri Jun 21 09:19:13 2024 +0200

    mlxsw: pci: Fix driver initialization with Spectrum-4
    
    [ Upstream commit 0602697d6f4d72b0bc5edbc76afabf6aaa029a69 ]
    
    Cited commit added support for a new reset flow ("all reset") which is
    deeper than the existing reset flow ("software reset") and allows the
    device's PCI firmware to be upgraded.
    
    In the new flow the driver first tells the firmware that "all reset" is
    required by issuing a new reset command (i.e., MRSR.command=6) and then
    triggers the reset by having the PCI core issue a secondary bus reset
    (SBR).
    
    However, due to a race condition in the device's firmware the device is
    not always able to recover from this reset, resulting in initialization
    failures [1].
    
    New firmware versions include a fix for the bug and advertise it using a
    new capability bit in the Management Capabilities Mask (MCAM) register.
    
    Avoid initialization failures by reading the new capability bit and
    triggering the new reset flow only if the bit is set. If the bit is not
    set, trigger a normal PCI hot reset by skipping the call to the
    Management Reset and Shutdown Register (MRSR).
    
    Normal PCI hot reset is weaker than "all reset", but it results in a
    fully operational driver and allows users to flash a new firmware, if
    they want to.
    
    [1]
    mlxsw_spectrum4 0000:01:00.0: not ready 1023ms after bus reset; waiting
    mlxsw_spectrum4 0000:01:00.0: not ready 2047ms after bus reset; waiting
    mlxsw_spectrum4 0000:01:00.0: not ready 4095ms after bus reset; waiting
    mlxsw_spectrum4 0000:01:00.0: not ready 8191ms after bus reset; waiting
    mlxsw_spectrum4 0000:01:00.0: not ready 16383ms after bus reset; waiting
    mlxsw_spectrum4 0000:01:00.0: not ready 32767ms after bus reset; waiting
    mlxsw_spectrum4 0000:01:00.0: not ready 65535ms after bus reset; giving up
    mlxsw_spectrum4 0000:01:00.0: PCI function reset failed with -25
    mlxsw_spectrum4 0000:01:00.0: cannot register bus device
    mlxsw_spectrum4: probe of 0000:01:00.0 failed with error -25
    
    Fixes: f257c73e5356 ("mlxsw: pci: Add support for new reset flow")
    Reported-by: Maksym Yaremchuk <[email protected]>
    Signed-off-by: Ido Schimmel <[email protected]>
    Tested-by: Maksym Yaremchuk <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Signed-off-by: Petr Machata <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

mlxsw: spectrum_buffers: Fix memory corruptions on Spectrum-4 systems [+ + +]
Author: Ido Schimmel <[email protected]>
Date:   Fri Jun 21 09:19:14 2024 +0200

    mlxsw: spectrum_buffers: Fix memory corruptions on Spectrum-4 systems
    
    [ Upstream commit c28947de2bed40217cf256c5d0d16880054fcf13 ]
    
    The following two shared buffer operations make use of the Shared Buffer
    Status Register (SBSR):
    
     # devlink sb occupancy snapshot pci/0000:01:00.0
     # devlink sb occupancy clearmax pci/0000:01:00.0
    
    The register has two masks of 256 bits to denote on which ingress /
    egress ports the register should operate on. Spectrum-4 has more than
    256 ports, so the register was extended by cited commit with a new
    'port_page' field.
    
    However, when filling the register's payload, the driver specifies the
    ports as absolute numbers and not relative to the first port of the port
    page, resulting in memory corruptions [1].
    
    Fix by specifying the ports relative to the first port of the port page.
    
    [1]
    BUG: KASAN: slab-use-after-free in mlxsw_sp_sb_occ_snapshot+0xb6d/0xbc0
    Read of size 1 at addr ffff8881068cb00f by task devlink/1566
    [...]
    Call Trace:
     <TASK>
     dump_stack_lvl+0xc6/0x120
     print_report+0xce/0x670
     kasan_report+0xd7/0x110
     mlxsw_sp_sb_occ_snapshot+0xb6d/0xbc0
     mlxsw_devlink_sb_occ_snapshot+0x75/0xb0
     devlink_nl_sb_occ_snapshot_doit+0x1f9/0x2a0
     genl_family_rcv_msg_doit+0x20c/0x300
     genl_rcv_msg+0x567/0x800
     netlink_rcv_skb+0x170/0x450
     genl_rcv+0x2d/0x40
     netlink_unicast+0x547/0x830
     netlink_sendmsg+0x8d4/0xdb0
     __sys_sendto+0x49b/0x510
     __x64_sys_sendto+0xe5/0x1c0
     do_syscall_64+0xc1/0x1d0
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    [...]
    Allocated by task 1:
     kasan_save_stack+0x33/0x60
     kasan_save_track+0x14/0x30
     __kasan_kmalloc+0x8f/0xa0
     copy_verifier_state+0xbc2/0xfb0
     do_check_common+0x2c51/0xc7e0
     bpf_check+0x5107/0x9960
     bpf_prog_load+0xf0e/0x2690
     __sys_bpf+0x1a61/0x49d0
     __x64_sys_bpf+0x7d/0xc0
     do_syscall_64+0xc1/0x1d0
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Freed by task 1:
     kasan_save_stack+0x33/0x60
     kasan_save_track+0x14/0x30
     kasan_save_free_info+0x3b/0x60
     poison_slab_object+0x109/0x170
     __kasan_slab_free+0x14/0x30
     kfree+0xca/0x2b0
     free_verifier_state+0xce/0x270
     do_check_common+0x4828/0xc7e0
     bpf_check+0x5107/0x9960
     bpf_prog_load+0xf0e/0x2690
     __sys_bpf+0x1a61/0x49d0
     __x64_sys_bpf+0x7d/0xc0
     do_syscall_64+0xc1/0x1d0
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Fixes: f8538aec88b4 ("mlxsw: Add support for more than 256 ports in SBSR register")
    Signed-off-by: Ido Schimmel <[email protected]>
    Reviewed-by: Petr Machata <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Signed-off-by: Petr Machata <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
mm/memory: don't require head page for do_set_pmd() [+ + +]
Author: Andrew Bresticker <[email protected]>
Date:   Tue Jun 11 08:32:16 2024 -0700

    mm/memory: don't require head page for do_set_pmd()
    
    commit ab1ffc86cb5bec1c92387b9811d9036512f8f4eb upstream.
    
    The requirement that the head page be passed to do_set_pmd() was added in
    commit ef37b2ea08ac ("mm/memory: page_add_file_rmap() ->
    folio_add_file_rmap_[pte|pmd]()") and prevents pmd-mapping in the
    finish_fault() and filemap_map_pages() paths if the page to be inserted is
    anything but the head page for an otherwise suitable vma and pmd-sized
    page.
    
    Matthew said:
    
    : We're going to stop using PMDs to map large folios unless the fault is
    : within the first 4KiB of the PMD.  No idea how many workloads that
    : affects, but it only needs to be backported as far as v6.8, so we may
    : as well backport it.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: ef37b2ea08ac ("mm/memory: page_add_file_rmap() -> folio_add_file_rmap_[pte|pmd]()")
    Signed-off-by: Andrew Bresticker <[email protected]>
    Acked-by: David Hildenbrand <[email protected]>
    Acked-by: Hugh Dickins <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mm/page_alloc: Separate THP PCP into movable and non-movable categories [+ + +]
Author: yangge <[email protected]>
Date:   Thu Jun 20 08:59:50 2024 +0800

    mm/page_alloc: Separate THP PCP into movable and non-movable categories
    
    commit bf14ed81f571f8dba31cd72ab2e50fbcc877cc31 upstream.
    
    Since commit 5d0a661d808f ("mm/page_alloc: use only one PCP list for
    THP-sized allocations") no longer differentiates the migration type of
    pages in THP-sized PCP list, it's possible that non-movable allocation
    requests may get a CMA page from the list, in some cases, it's not
    acceptable.
    
    If a large number of CMA memory are configured in system (for example, the
    CMA memory accounts for 50% of the system memory), starting a virtual
    machine with device passthrough will get stuck.  During starting the
    virtual machine, it will call pin_user_pages_remote(..., FOLL_LONGTERM,
    ...) to pin memory.  Normally if a page is present and in CMA area,
    pin_user_pages_remote() will migrate the page from CMA area to non-CMA
    area because of FOLL_LONGTERM flag.  But if non-movable allocation
    requests return CMA memory, migrate_longterm_unpinnable_pages() will
    migrate a CMA page to another CMA page, which will fail to pass the check
    in check_and_migrate_movable_pages() and cause migration endless.
    
    Call trace:
    pin_user_pages_remote
    --__gup_longterm_locked // endless loops in this function
    ----_get_user_pages_locked
    ----check_and_migrate_movable_pages
    ------migrate_longterm_unpinnable_pages
    --------alloc_migration_target
    
    This problem will also have a negative impact on CMA itself.  For example,
    when CMA is borrowed by THP, and we need to reclaim it through cma_alloc()
    or dma_alloc_coherent(), we must move those pages out to ensure CMA's
    users can retrieve that contigous memory.  Currently, CMA's memory is
    occupied by non-movable pages, meaning we can't relocate them.  As a
    result, cma_alloc() is more likely to fail.
    
    To fix the problem above, we add one PCP list for THP, which will not
    introduce a new cacheline for struct per_cpu_pages.  THP will have 2 PCP
    lists, one PCP list is used by MOVABLE allocation, and the other PCP list
    is used by UNMOVABLE allocation.  MOVABLE allocation contains GPF_MOVABLE,
    and UNMOVABLE allocation contains GFP_UNMOVABLE and GFP_RECLAIMABLE.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 5d0a661d808f ("mm/page_alloc: use only one PCP list for THP-sized allocations")
    Signed-off-by: yangge <[email protected]>
    Cc: Baolin Wang <[email protected]>
    Cc: Barry Song <[email protected]>
    Cc: Mel Gorman <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mm: fix incorrect vbq reference in purge_fragmented_block [+ + +]
Author: Zhaoyang Huang <[email protected]>
Date:   Fri Jun 7 10:31:16 2024 +0800

    mm: fix incorrect vbq reference in purge_fragmented_block
    
    commit 8c61291fd8500e3b35c7ec0c781b273d8cc96cde upstream.
    
    xa_for_each() in _vm_unmap_aliases() loops through all vbs.  However,
    since commit 062eacf57ad9 ("mm: vmalloc: remove a global vmap_blocks
    xarray") the vb from xarray may not be on the corresponding CPU
    vmap_block_queue.  Consequently, purge_fragmented_block() might use the
    wrong vbq->lock to protect the free list, leading to vbq->free breakage.
    
    Incorrect lock protection can exhaust all vmalloc space as follows:
    CPU0                                            CPU1
    +--------------------------------------------+
    |    +--------------------+     +-----+      |
    +--> |                    |---->|     |------+
         | CPU1:vbq free_list |     | vb1 |
    +--- |                    |<----|     |<-----+
    |    +--------------------+     +-----+      |
    +--------------------------------------------+
    
    _vm_unmap_aliases()                             vb_alloc()
                                                    new_vmap_block()
    xa_for_each(&vbq->vmap_blocks, idx, vb)
    --> vb in CPU1:vbq->freelist
    
    purge_fragmented_block(vb)
    spin_lock(&vbq->lock)                           spin_lock(&vbq->lock)
    --> use CPU0:vbq->lock                          --> use CPU1:vbq->lock
    
    list_del_rcu(&vb->free_list)                    list_add_tail_rcu(&vb->free_list, &vbq->free)
        __list_del(vb->prev, vb->next)
            next->prev = prev
        +--------------------+
        |                    |
        | CPU1:vbq free_list |
    +---|                    |<--+
    |   +--------------------+   |
    +----------------------------+
                                                    __list_add(new, head->prev, head)
    +--------------------------------------------+
    |    +--------------------+     +-----+      |
    +--> |                    |---->|     |------+
         | CPU1:vbq free_list |     | vb2 |
    +--- |                    |<----|     |<-----+
    |    +--------------------+     +-----+      |
    +--------------------------------------------+
    
            prev->next = next
    +--------------------------------------------+
    |----------------------------+               |
    |    +--------------------+  |  +-----+      |
    +--> |                    |--+  |     |------+
         | CPU1:vbq free_list |     | vb2 |
    +--- |                    |<----|     |<-----+
    |    +--------------------+     +-----+      |
    +--------------------------------------------+
    Here’s a list breakdown. All vbs, which were to be added to
    ‘prev’, cannot be used by list_for_each_entry_rcu(vb, &vbq->free,
    free_list) in vb_alloc(). Thus, vmalloc space is exhausted.
    
    This issue affects both erofs and f2fs, the stacktrace is as follows:
    erofs:
    [<ffffffd4ffb93ad4>] __switch_to+0x174
    [<ffffffd4ffb942f0>] __schedule+0x624
    [<ffffffd4ffb946f4>] schedule+0x7c
    [<ffffffd4ffb947cc>] schedule_preempt_disabled+0x24
    [<ffffffd4ffb962ec>] __mutex_lock+0x374
    [<ffffffd4ffb95998>] __mutex_lock_slowpath+0x14
    [<ffffffd4ffb95954>] mutex_lock+0x24
    [<ffffffd4fef2900c>] reclaim_and_purge_vmap_areas+0x44
    [<ffffffd4fef25908>] alloc_vmap_area+0x2e0
    [<ffffffd4fef24ea0>] vm_map_ram+0x1b0
    [<ffffffd4ff1b46f4>] z_erofs_lz4_decompress+0x278
    [<ffffffd4ff1b8ac4>] z_erofs_decompress_queue+0x650
    [<ffffffd4ff1b8328>] z_erofs_runqueue+0x7f4
    [<ffffffd4ff1b66a8>] z_erofs_read_folio+0x104
    [<ffffffd4feeb6fec>] filemap_read_folio+0x6c
    [<ffffffd4feeb68c4>] filemap_fault+0x300
    [<ffffffd4fef0ecac>] __do_fault+0xc8
    [<ffffffd4fef0c908>] handle_mm_fault+0xb38
    [<ffffffd4ffb9f008>] do_page_fault+0x288
    [<ffffffd4ffb9ed64>] do_translation_fault[jt]+0x40
    [<ffffffd4fec39c78>] do_mem_abort+0x58
    [<ffffffd4ffb8c3e4>] el0_ia+0x70
    [<ffffffd4ffb8c260>] el0t_64_sync_handler[jt]+0xb0
    [<ffffffd4fec11588>] ret_to_user[jt]+0x0
    
    f2fs:
    [<ffffffd4ffb93ad4>] __switch_to+0x174
    [<ffffffd4ffb942f0>] __schedule+0x624
    [<ffffffd4ffb946f4>] schedule+0x7c
    [<ffffffd4ffb947cc>] schedule_preempt_disabled+0x24
    [<ffffffd4ffb962ec>] __mutex_lock+0x374
    [<ffffffd4ffb95998>] __mutex_lock_slowpath+0x14
    [<ffffffd4ffb95954>] mutex_lock+0x24
    [<ffffffd4fef2900c>] reclaim_and_purge_vmap_areas+0x44
    [<ffffffd4fef25908>] alloc_vmap_area+0x2e0
    [<ffffffd4fef24ea0>] vm_map_ram+0x1b0
    [<ffffffd4ff1a3b60>] f2fs_prepare_decomp_mem+0x144
    [<ffffffd4ff1a6c24>] f2fs_alloc_dic+0x264
    [<ffffffd4ff175468>] f2fs_read_multi_pages+0x428
    [<ffffffd4ff17b46c>] f2fs_mpage_readpages+0x314
    [<ffffffd4ff1785c4>] f2fs_readahead+0x50
    [<ffffffd4feec3384>] read_pages+0x80
    [<ffffffd4feec32c0>] page_cache_ra_unbounded+0x1a0
    [<ffffffd4feec39e8>] page_cache_ra_order+0x274
    [<ffffffd4feeb6cec>] do_sync_mmap_readahead+0x11c
    [<ffffffd4feeb6764>] filemap_fault+0x1a0
    [<ffffffd4ff1423bc>] f2fs_filemap_fault+0x28
    [<ffffffd4fef0ecac>] __do_fault+0xc8
    [<ffffffd4fef0c908>] handle_mm_fault+0xb38
    [<ffffffd4ffb9f008>] do_page_fault+0x288
    [<ffffffd4ffb9ed64>] do_translation_fault[jt]+0x40
    [<ffffffd4fec39c78>] do_mem_abort+0x58
    [<ffffffd4ffb8c3e4>] el0_ia+0x70
    [<ffffffd4ffb8c260>] el0t_64_sync_handler[jt]+0xb0
    [<ffffffd4fec11588>] ret_to_user[jt]+0x0
    
    To fix this, introducee cpu within vmap_block to record which this vb
    belongs to.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: fc1e0d980037 ("mm/vmalloc: prevent stale TLBs in fully utilized blocks")
    Signed-off-by: Zhaoyang Huang <[email protected]>
    Suggested-by: Hailong.Liu <[email protected]>
    Reviewed-by: Uladzislau Rezki (Sony) <[email protected]>
    Cc: Baoquan He <[email protected]>
    Cc: Christoph Hellwig <[email protected]>
    Cc: Lorenzo Stoakes <[email protected]>
    Cc: Thomas Gleixner <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mmc: sdhci-brcmstb: check R1_STATUS for erase/trim/discard [+ + +]
Author: Kamal Dasu <[email protected]>
Date:   Mon Jun 3 18:08:34 2024 -0400

    mmc: sdhci-brcmstb: check R1_STATUS for erase/trim/discard
    
    commit d77dc388cd61dfdafe30b98025fa827498378199 upstream.
    
    When erase/trim/discard completion was converted to mmc_poll_for_busy(),
    optional support to poll with the host_ops->card_busy() callback was also
    added.
    
    The common sdhci's ->card_busy() turns out not to be working as expected
    for the sdhci-brcmstb variant, as it keeps returning busy beyond the card's
    busy period. In particular, this leads to the below splat for
    mmc_do_erase() when running a discard (BLKSECDISCARD) operation during
    mkfs.f2fs:
    
        Info: [/dev/mmcblk1p9] Discarding device
        [   39.597258] sysrq: Show Blocked State
        [   39.601183] task:mkfs.f2fs       state:D stack:0     pid:1561  tgid:1561  ppid:1542   flags:0x0000000d
        [   39.610609] Call trace:
        [   39.613098]  __switch_to+0xd8/0xf4
        [   39.616582]  __schedule+0x440/0x4f4
        [   39.620137]  schedule+0x2c/0x48
        [   39.623341]  schedule_hrtimeout_range_clock+0xe0/0x114
        [   39.628562]  schedule_hrtimeout_range+0x10/0x18
        [   39.633169]  usleep_range_state+0x5c/0x90
        [   39.637253]  __mmc_poll_for_busy+0xec/0x128
        [   39.641514]  mmc_poll_for_busy+0x48/0x70
        [   39.645511]  mmc_do_erase+0x1ec/0x210
        [   39.649237]  mmc_erase+0x1b4/0x1d4
        [   39.652701]  mmc_blk_mq_issue_rq+0x35c/0x6ac
        [   39.657037]  mmc_mq_queue_rq+0x18c/0x214
        [   39.661022]  blk_mq_dispatch_rq_list+0x3a8/0x528
        [   39.665722]  __blk_mq_sched_dispatch_requests+0x3a0/0x4ac
        [   39.671198]  blk_mq_sched_dispatch_requests+0x28/0x5c
        [   39.676322]  blk_mq_run_hw_queue+0x11c/0x12c
        [   39.680668]  blk_mq_flush_plug_list+0x200/0x33c
        [   39.685278]  blk_add_rq_to_plug+0x68/0xd8
        [   39.689365]  blk_mq_submit_bio+0x3a4/0x458
        [   39.693539]  __submit_bio+0x1c/0x80
        [   39.697096]  submit_bio_noacct_nocheck+0x94/0x174
        [   39.701875]  submit_bio_noacct+0x1b0/0x22c
        [   39.706042]  submit_bio+0xac/0xe8
        [   39.709424]  blk_next_bio+0x4c/0x5c
        [   39.712973]  blkdev_issue_secure_erase+0x118/0x170
        [   39.717835]  blkdev_common_ioctl+0x374/0x728
        [   39.722175]  blkdev_ioctl+0x8c/0x2b0
        [   39.725816]  vfs_ioctl+0x24/0x40
        [   39.729117]  __arm64_sys_ioctl+0x5c/0x8c
        [   39.733114]  invoke_syscall+0x68/0xec
        [   39.736839]  el0_svc_common.constprop.0+0x70/0xd8
        [   39.741609]  do_el0_svc+0x18/0x20
        [   39.744981]  el0_svc+0x68/0x94
        [   39.748107]  el0t_64_sync_handler+0x88/0x124
        [   39.752455]  el0t_64_sync+0x168/0x16c
    
    To fix the problem let's override the host_ops->card_busy() callback by
    setting it to NULL, which forces the mmc core to poll with a CMD13 and
    checking the R1_STATUS in the mmc_busy_cb() function.
    
    Signed-off-by: Kamal Dasu <[email protected]>
    Fixes: 0d84c3e6a5b2 ("mmc: core: Convert to mmc_poll_for_busy() for erase/trim/discard")
    Cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    [Ulf: Clarified the commit message]
    Signed-off-by: Ulf Hansson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mmc: sdhci-pci-o2micro: Convert PCIBIOS_* return codes to errnos [+ + +]
Author: Ilpo Järvinen <[email protected]>
Date:   Mon May 27 16:24:42 2024 +0300

    mmc: sdhci-pci-o2micro: Convert PCIBIOS_* return codes to errnos
    
    commit a91bf3b3beadbb4f8b3bbc7969fb2ae1615e25c8 upstream.
    
    sdhci_pci_o2_probe() uses pci_read_config_{byte,dword}() that return
    PCIBIOS_* codes. The return code is then returned as is but as
    sdhci_pci_o2_probe() is probe function chain, it should return normal
    errnos.
    
    Convert PCIBIOS_* returns code using pcibios_err_to_errno() into normal
    errno before returning them. Add a label for read failure so that the
    conversion can be done in one place rather than on all of the return
    statements.
    
    Fixes: 3d757ddbd68c ("mmc: sdhci-pci-o2micro: add Bayhub new chip GG8 support for UHS-I")
    Fixes: d599005afde8 ("mmc: sdhci-pci-o2micro: Add missing checks in sdhci_pci_o2_probe")
    Fixes: 706adf6bc31c ("mmc: sdhci-pci-o2micro: Add SeaBird SeaEagle SD3 support")
    Fixes: 01acf6917aed ("mmc: sdhci-pci: add support of O2Micro/BayHubTech SD hosts")
    Fixes: 26daa1ed40c6 ("mmc: sdhci: Disable ADMA on some O2Micro SD/MMC parts.")
    Cc: [email protected]
    Signed-off-by: Ilpo Järvinen <[email protected]>
    Acked-by: Adrian Hunter <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Ulf Hansson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mmc: sdhci-pci: Convert PCIBIOS_* return codes to errnos [+ + +]
Author: Ilpo Järvinen <[email protected]>
Date:   Mon May 27 16:24:41 2024 +0300

    mmc: sdhci-pci: Convert PCIBIOS_* return codes to errnos
    
    commit ebc4fc34eae8ddfbef49f2bdaced1bf4167ef80d upstream.
    
    jmicron_pmos() and sdhci_pci_probe() use pci_{read,write}_config_byte()
    that return PCIBIOS_* codes. The return code is then returned as is by
    jmicron_probe() and sdhci_pci_probe(). Similarly, the return code is
    also returned as is from jmicron_resume(). Both probe and resume
    functions should return normal errnos.
    
    Convert PCIBIOS_* returns code using pcibios_err_to_errno() into normal
    errno before returning them the fix these issues.
    
    Fixes: 7582041ff3d4 ("mmc: sdhci-pci: fix simple_return.cocci warnings")
    Fixes: 45211e215984 ("sdhci: toggle JMicron PMOS setting")
    Cc: [email protected]
    Signed-off-by: Ilpo Järvinen <[email protected]>
    Acked-by: Adrian Hunter <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Ulf Hansson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mmc: sdhci: Do not invert write-protect twice [+ + +]
Author: Adrian Hunter <[email protected]>
Date:   Fri Jun 14 11:00:49 2024 +0300

    mmc: sdhci: Do not invert write-protect twice
    
    commit fbd64f902b93fe9658b855b9892ae59ef6ea22b9 upstream.
    
    mmc_of_parse() reads device property "wp-inverted" and sets
    MMC_CAP2_RO_ACTIVE_HIGH if it is true. MMC_CAP2_RO_ACTIVE_HIGH is used
    to invert a write-protect (AKA read-only) GPIO value.
    
    sdhci_get_property() also reads "wp-inverted" and sets
    SDHCI_QUIRK_INVERTED_WRITE_PROTECT which is used to invert the
    write-protect value as well but also acts upon a value read out from the
    SDHCI_PRESENT_STATE register.
    
    Many drivers call both mmc_of_parse() and sdhci_get_property(),
    so that both MMC_CAP2_RO_ACTIVE_HIGH and
    SDHCI_QUIRK_INVERTED_WRITE_PROTECT will be set if the controller has
    device property "wp-inverted".
    
    Amend the logic in sdhci_check_ro() to allow for that possibility,
    so that the write-protect value is not inverted twice.
    
    Also do not invert the value if it is a negative error value. Note that
    callers treat an error the same as not-write-protected, so the result is
    functionally the same in that case.
    
    Also do not invert the value if sdhci host operation ->get_ro() is used.
    None of the users of that callback set SDHCI_QUIRK_INVERTED_WRITE_PROTECT
    directly or indirectly, but two do call mmc_gpio_get_ro(), so leave it to
    them to deal with that if they ever set SDHCI_QUIRK_INVERTED_WRITE_PROTECT
    in the future.
    
    Fixes: 6d5cd068ee59 ("mmc: sdhci: use WP GPIO in sdhci_check_ro()")
    Signed-off-by: Adrian Hunter <[email protected]>
    Cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Ulf Hansson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mmc: sdhci: Do not lock spinlock around mmc_gpio_get_ro() [+ + +]
Author: Adrian Hunter <[email protected]>
Date:   Fri Jun 14 11:00:50 2024 +0300

    mmc: sdhci: Do not lock spinlock around mmc_gpio_get_ro()
    
    commit ab069ce125965a5e282f7b53b86aee76ab32975c upstream.
    
    sdhci_check_ro() can call mmc_gpio_get_ro() while holding the sdhci
    host->lock spinlock. That would be a problem if the GPIO access done by
    mmc_gpio_get_ro() needed to sleep.
    
    However, host->lock is not needed anyway. The mmc core ensures that host
    operations do not race with each other, and asynchronous callbacks like the
    interrupt handler, software timeouts, completion work etc, cannot affect
    sdhci_check_ro().
    
    So remove the locking.
    
    Fixes: 6d5cd068ee59 ("mmc: sdhci: use WP GPIO in sdhci_check_ro()")
    Signed-off-by: Adrian Hunter <[email protected]>
    Cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Ulf Hansson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mtd: partitions: redboot: Added conversion of operands to a larger type [+ + +]
Author: Denis Arefev <[email protected]>
Date:   Fri Mar 15 12:37:58 2024 +0300

    mtd: partitions: redboot: Added conversion of operands to a larger type
    
    [ Upstream commit 1162bc2f8f5de7da23d18aa4b7fbd4e93c369c50 ]
    
    The value of an arithmetic expression directory * master->erasesize is
    subject to overflow due to a failure to cast operands to a larger data
    type before perfroming arithmetic
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Signed-off-by: Denis Arefev <[email protected]>
    Signed-off-by: Miquel Raynal <[email protected]>
    Link: https://lore.kernel.org/linux-mtd/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
net/dpaa2: Avoid explicit cpumask var allocation on stack [+ + +]
Author: Dawei Li <[email protected]>
Date:   Sun Mar 31 13:34:41 2024 +0800

    net/dpaa2: Avoid explicit cpumask var allocation on stack
    
    [ Upstream commit d33fe1714a44ff540629b149d8fab4ac6967585c ]
    
    For CONFIG_CPUMASK_OFFSTACK=y kernel, explicit allocation of cpumask
    variable on stack is not recommended since it can cause potential stack
    overflow.
    
    Instead, kernel code should always use *cpumask_var API(s) to allocate
    cpumask var in config-neutral way, leaving allocation strategy to
    CONFIG_CPUMASK_OFFSTACK.
    
    Use *cpumask_var API(s) to address it.
    
    Signed-off-by: Dawei Li <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
net/iucv: Avoid explicit cpumask var allocation on stack [+ + +]
Author: Dawei Li <[email protected]>
Date:   Sun Mar 31 13:34:40 2024 +0800

    net/iucv: Avoid explicit cpumask var allocation on stack
    
    [ Upstream commit be4e1304419c99a164b4c0e101c7c2a756b635b9 ]
    
    For CONFIG_CPUMASK_OFFSTACK=y kernel, explicit allocation of cpumask
    variable on stack is not recommended since it can cause potential stack
    overflow.
    
    Instead, kernel code should always use *cpumask_var API(s) to allocate
    cpumask var in config-neutral way, leaving allocation strategy to
    CONFIG_CPUMASK_OFFSTACK.
    
    Use *cpumask_var API(s) to address it.
    
    Signed-off-by: Dawei Li <[email protected]>
    Reviewed-by: Alexandra Winter <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
net: can: j1939: enhanced error handling for tightly received RTS messages in xtp_rx_rts_session_new [+ + +]
Author: Oleksij Rempel <[email protected]>
Date:   Fri Nov 17 13:49:59 2023 +0100

    net: can: j1939: enhanced error handling for tightly received RTS messages in xtp_rx_rts_session_new
    
    commit d3e2904f71ea0fe7eaff1d68a2b0363c888ea0fb upstream.
    
    This patch enhances error handling in scenarios with RTS (Request to
    Send) messages arriving closely. It replaces the less informative WARN_ON_ONCE
    backtraces with a new error handling method. This provides clearer error
    messages and allows for the early termination of problematic sessions.
    Previously, sessions were only released at the end of j1939_xtp_rx_rts().
    
    Potentially this could be reproduced with something like:
    testj1939 -r vcan0:0x80 &
    while true; do
            # send first RTS
            cansend vcan0 18EC8090#1014000303002301;
            # send second RTS
            cansend vcan0 18EC8090#1014000303002301;
            # send abort
            cansend vcan0 18EC8090#ff00000000002301;
    done
    
    Fixes: 9d71dd0c7009 ("can: add support of SAE J1939 protocol")
    Reported-by: [email protected]
    Cc: [email protected]
    Signed-off-by: Oleksij Rempel <[email protected]>
    Link: https://lore.kernel.org/all/[email protected]
    Signed-off-by: Marc Kleine-Budde <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: can: j1939: Initialize unused data in j1939_send_one() [+ + +]
Author: Shigeru Yoshida <[email protected]>
Date:   Fri May 17 12:59:53 2024 +0900

    net: can: j1939: Initialize unused data in j1939_send_one()
    
    commit b7cdf1dd5d2a2d8200efd98d1893684db48fe134 upstream.
    
    syzbot reported kernel-infoleak in raw_recvmsg() [1]. j1939_send_one()
    creates full frame including unused data, but it doesn't initialize
    it. This causes the kernel-infoleak issue. Fix this by initializing
    unused data.
    
    [1]
    BUG: KMSAN: kernel-infoleak in instrument_copy_to_user include/linux/instrumented.h:114 [inline]
    BUG: KMSAN: kernel-infoleak in copy_to_user_iter lib/iov_iter.c:24 [inline]
    BUG: KMSAN: kernel-infoleak in iterate_ubuf include/linux/iov_iter.h:29 [inline]
    BUG: KMSAN: kernel-infoleak in iterate_and_advance2 include/linux/iov_iter.h:245 [inline]
    BUG: KMSAN: kernel-infoleak in iterate_and_advance include/linux/iov_iter.h:271 [inline]
    BUG: KMSAN: kernel-infoleak in _copy_to_iter+0x366/0x2520 lib/iov_iter.c:185
     instrument_copy_to_user include/linux/instrumented.h:114 [inline]
     copy_to_user_iter lib/iov_iter.c:24 [inline]
     iterate_ubuf include/linux/iov_iter.h:29 [inline]
     iterate_and_advance2 include/linux/iov_iter.h:245 [inline]
     iterate_and_advance include/linux/iov_iter.h:271 [inline]
     _copy_to_iter+0x366/0x2520 lib/iov_iter.c:185
     copy_to_iter include/linux/uio.h:196 [inline]
     memcpy_to_msg include/linux/skbuff.h:4113 [inline]
     raw_recvmsg+0x2b8/0x9e0 net/can/raw.c:1008
     sock_recvmsg_nosec net/socket.c:1046 [inline]
     sock_recvmsg+0x2c4/0x340 net/socket.c:1068
     ____sys_recvmsg+0x18a/0x620 net/socket.c:2803
     ___sys_recvmsg+0x223/0x840 net/socket.c:2845
     do_recvmmsg+0x4fc/0xfd0 net/socket.c:2939
     __sys_recvmmsg net/socket.c:3018 [inline]
     __do_sys_recvmmsg net/socket.c:3041 [inline]
     __se_sys_recvmmsg net/socket.c:3034 [inline]
     __x64_sys_recvmmsg+0x397/0x490 net/socket.c:3034
     x64_sys_call+0xf6c/0x3b50 arch/x86/include/generated/asm/syscalls_64.h:300
     do_syscall_x64 arch/x86/entry/common.c:52 [inline]
     do_syscall_64+0xcf/0x1e0 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Uninit was created at:
     slab_post_alloc_hook mm/slub.c:3804 [inline]
     slab_alloc_node mm/slub.c:3845 [inline]
     kmem_cache_alloc_node+0x613/0xc50 mm/slub.c:3888
     kmalloc_reserve+0x13d/0x4a0 net/core/skbuff.c:577
     __alloc_skb+0x35b/0x7a0 net/core/skbuff.c:668
     alloc_skb include/linux/skbuff.h:1313 [inline]
     alloc_skb_with_frags+0xc8/0xbf0 net/core/skbuff.c:6504
     sock_alloc_send_pskb+0xa81/0xbf0 net/core/sock.c:2795
     sock_alloc_send_skb include/net/sock.h:1842 [inline]
     j1939_sk_alloc_skb net/can/j1939/socket.c:878 [inline]
     j1939_sk_send_loop net/can/j1939/socket.c:1142 [inline]
     j1939_sk_sendmsg+0xc0a/0x2730 net/can/j1939/socket.c:1277
     sock_sendmsg_nosec net/socket.c:730 [inline]
     __sock_sendmsg+0x30f/0x380 net/socket.c:745
     ____sys_sendmsg+0x877/0xb60 net/socket.c:2584
     ___sys_sendmsg+0x28d/0x3c0 net/socket.c:2638
     __sys_sendmsg net/socket.c:2667 [inline]
     __do_sys_sendmsg net/socket.c:2676 [inline]
     __se_sys_sendmsg net/socket.c:2674 [inline]
     __x64_sys_sendmsg+0x307/0x4a0 net/socket.c:2674
     x64_sys_call+0xc4b/0x3b50 arch/x86/include/generated/asm/syscalls_64.h:47
     do_syscall_x64 arch/x86/entry/common.c:52 [inline]
     do_syscall_64+0xcf/0x1e0 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Bytes 12-15 of 16 are uninitialized
    Memory access of size 16 starts at ffff888120969690
    Data copied to user address 00000000200017c0
    
    CPU: 1 PID: 5050 Comm: syz-executor198 Not tainted 6.9.0-rc5-syzkaller-00031-g71b1543c83d6 #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 03/27/2024
    
    Fixes: 9d71dd0c7009 ("can: add support of SAE J1939 protocol")
    Reported-and-tested-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=5681e40d297b30f5b513
    Acked-by: Oleksij Rempel <[email protected]>
    Signed-off-by: Shigeru Yoshida <[email protected]>
    Link: https://lore.kernel.org/all/[email protected]
    Cc: [email protected]
    Signed-off-by: Marc Kleine-Budde <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: can: j1939: recover socket queue on CAN bus error during BAM transmission [+ + +]
Author: Oleksij Rempel <[email protected]>
Date:   Tue May 28 09:06:48 2024 +0200

    net: can: j1939: recover socket queue on CAN bus error during BAM transmission
    
    commit 9ad1da14ab3bf23087ae45fe399d84a109ddb81a upstream.
    
    Addresses an issue where a CAN bus error during a BAM transmission
    could stall the socket queue, preventing further transmissions even
    after the bus error is resolved. The fix activates the next queued
    session after the error recovery, allowing communication to continue.
    
    Fixes: 9d71dd0c70099 ("can: add support of SAE J1939 protocol")
    Cc: [email protected]
    Reported-by: Alexander Hölzl <[email protected]>
    Tested-by: Alexander Hölzl <[email protected]>
    Signed-off-by: Oleksij Rempel <[email protected]>
    Link: https://lore.kernel.org/all/[email protected]
    Cc: [email protected]
    Signed-off-by: Marc Kleine-Budde <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: dsa: microchip: fix initial port flush problem [+ + +]
Author: Tristram Ha <[email protected]>
Date:   Tue Jun 18 17:16:42 2024 -0700

    net: dsa: microchip: fix initial port flush problem
    
    [ Upstream commit ad53f5f54f351e967128edbc431f0f26427172cf ]
    
    The very first flush in any port will flush all learned addresses in all
    ports.  This can be observed by unplugging the cable from one port while
    additional ports are connected and dumping the fdb entries.
    
    This problem is caused by the initially wrong value programmed to the
    REG_SW_LUE_CTRL_1 register.  Setting SW_FLUSH_STP_TABLE and
    SW_FLUSH_MSTP_TABLE bits does not have an immediate effect.  It is when
    ksz9477_flush_dyn_mac_table() is called then the SW_FLUSH_STP_TABLE bit
    takes effect and flushes all learned entries.  After that call both bits
    are reset and so the next port flush will not cause such problem again.
    
    Fixes: b987e98e50ab ("dsa: add DSA switch driver for Microchip KSZ9477")
    Signed-off-by: Tristram Ha <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: dsa: microchip: fix wrong register write when masking interrupt [+ + +]
Author: Tristram Ha <[email protected]>
Date:   Fri Jun 21 15:34:22 2024 -0700

    net: dsa: microchip: fix wrong register write when masking interrupt
    
    [ Upstream commit b1c4b4d45263241ec6c2405a8df8265d4b58e707 ]
    
    The switch global port interrupt mask, REG_SW_PORT_INT_MASK__4, is
    defined as 0x001C in ksz9477_reg.h.  The designers used 32-bit value in
    anticipation for increase of port count in future product but currently
    the maximum port count is 7 and the effective value is 0x7F in register
    0x001F.  Each port has its own interrupt mask and is defined as 0x#01F.
    It uses only 4 bits for different interrupts.
    
    The developer who implemented the current interrupt mechanism in the
    switch driver noticed there are similarities between the mechanism to
    mask port interrupts in global interrupt and individual interrupts in
    each port and so used the same code to handle these interrupts.  He
    updated the code to use the new macro REG_SW_PORT_INT_MASK__1 which is
    defined as 0x1F in ksz_common.h but he forgot to update the 32-bit write
    to 8-bit as now the mask registers are 0x1F and 0x#01F.
    
    In addition all KSZ switches other than the KSZ9897/KSZ9893 and LAN937X
    families use only 8-bit access and so this common code will eventually
    be changed to accommodate them.
    
    Fixes: e1add7dd6183 ("net: dsa: microchip: use common irq routines for girq and pirq")
    Signed-off-by: Tristram Ha <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: dsa: microchip: use collision based back pressure mode [+ + +]
Author: Enguerrand de Ribaucourt <[email protected]>
Date:   Fri Jun 21 16:43:21 2024 +0200

    net: dsa: microchip: use collision based back pressure mode
    
    [ Upstream commit d963c95bc9840d070a788c35e41b715a648717f7 ]
    
    Errata DS80000758 states that carrier sense back pressure mode can cause
    link down issues in 100BASE-TX half duplex mode. The datasheet also
    recommends to always use the collision based back pressure mode.
    
    Fixes: b987e98e50ab ("dsa: add DSA switch driver for Microchip KSZ9477")
    Signed-off-by: Enguerrand de Ribaucourt <[email protected]>
    Reviewed-by: Woojung Huh <[email protected]>
    Acked-by: Arun Ramadoss <[email protected]>
    Reviewed-by: Andrew Lunn <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: mana: Fix possible double free in error handling path [+ + +]
Author: Ma Ke <[email protected]>
Date:   Tue Jun 25 21:03:14 2024 +0800

    net: mana: Fix possible double free in error handling path
    
    [ Upstream commit 1864b8224195d0e43ddb92a8151f54f6562090cc ]
    
    When auxiliary_device_add() returns error and then calls
    auxiliary_device_uninit(), callback function adev_release
    calls kfree(madev). We shouldn't call kfree(madev) again
    in the error handling path. Set 'madev' to NULL.
    
    Fixes: a69839d4327d ("net: mana: Add support for auxiliary device")
    Signed-off-by: Ma Ke <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: phy: micrel: add Microchip KSZ 9477 to the device table [+ + +]
Author: Enguerrand de Ribaucourt <[email protected]>
Date:   Fri Jun 21 16:43:20 2024 +0200

    net: phy: micrel: add Microchip KSZ 9477 to the device table
    
    [ Upstream commit 54a4e5c16382e871c01dd82b47e930fdce30406b ]
    
    PHY_ID_KSZ9477 was supported but not added to the device table passed to
    MODULE_DEVICE_TABLE.
    
    Fixes: fc3973a1fa09 ("phy: micrel: add Microchip KSZ 9477 Switch PHY support")
    Signed-off-by: Enguerrand de Ribaucourt <[email protected]>
    Reviewed-by: Andrew Lunn <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: usb: ax88179_178a: improve link status logs [+ + +]
Author: Jose Ignacio Tornos Martinez <[email protected]>
Date:   Thu Jun 20 15:34:31 2024 +0200

    net: usb: ax88179_178a: improve link status logs
    
    commit 058722ee350c0bdd664e467156feb2bf5d9cc271 upstream.
    
    Avoid spurious link status logs that may ultimately be wrong; for example,
    if the link is set to down with the cable plugged, then the cable is
    unplugged and after this the link is set to up, the last new log that is
    appearing is incorrectly telling that the link is up.
    
    In order to avoid errors, show link status logs after link_reset
    processing, and in order to avoid spurious as much as possible, only show
    the link loss when some link status change is detected.
    
    cc: [email protected]
    Fixes: e2ca90c276e1 ("ax88179_178a: ASIX AX88179_178A USB 3.0/2.0 to gigabit ethernet adapter driver")
    Signed-off-by: Jose Ignacio Tornos Martinez <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
netfilter: fix undefined reference to 'netfilter_lwtunnel_*' when CONFIG_SYSCTL=n [+ + +]
Author: Jianguo Wu <[email protected]>
Date:   Fri Jun 21 10:41:13 2024 +0800

    netfilter: fix undefined reference to 'netfilter_lwtunnel_*' when CONFIG_SYSCTL=n
    
    [ Upstream commit aef5daa2c49d510436b733827d4f0bab79fcc4a0 ]
    
    if CONFIG_SYSFS is not enabled in config, we get the below compile error,
    
    All errors (new ones prefixed by >>):
    
       csky-linux-ld: net/netfilter/core.o: in function `netfilter_init':
       core.c:(.init.text+0x42): undefined reference to `netfilter_lwtunnel_init'
    >> csky-linux-ld: core.c:(.init.text+0x56): undefined reference to `netfilter_lwtunnel_fini'
    >> csky-linux-ld: core.c:(.init.text+0x70): undefined reference to `netfilter_lwtunnel_init'
       csky-linux-ld: core.c:(.init.text+0x78): undefined reference to `netfilter_lwtunnel_fini'
    
    Fixes: a2225e0250c5 ("netfilter: move the sysctl nf_hooks_lwtunnel into the netfilter core")
    Reported-by: Mirsad Todorovac <[email protected]>
    Reported-by: kernel test robot <[email protected]>
    Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
    Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
    Signed-off-by: Jianguo Wu <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: nf_tables: fully validate NFT_DATA_VALUE on store to data registers [+ + +]
Author: Pablo Neira Ayuso <[email protected]>
Date:   Wed Jun 26 23:15:38 2024 +0200

    netfilter: nf_tables: fully validate NFT_DATA_VALUE on store to data registers
    
    [ Upstream commit 7931d32955e09d0a11b1fe0b6aac1bfa061c005c ]
    
    register store validation for NFT_DATA_VALUE is conditional, however,
    the datatype is always either NFT_DATA_VALUE or NFT_DATA_VERDICT. This
    only requires a new helper function to infer the register type from the
    set datatype so this conditional check can be removed. Otherwise,
    pointer to chain object can be leaked through the registers.
    
    Fixes: 96518518cc41 ("netfilter: add nftables")
    Reported-by: Linus Torvalds <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
netfs: Fix netfs_page_mkwrite() to check folio->mapping is valid [+ + +]
Author: David Howells <[email protected]>
Date:   Tue Jun 25 13:29:06 2024 +0100

    netfs: Fix netfs_page_mkwrite() to check folio->mapping is valid
    
    [ Upstream commit a81c98bfa40c11f8ea79b5a9b3f5fda73bfbb4d2 ]
    
    Fix netfs_page_mkwrite() to check that folio->mapping is valid once it has
    taken the folio lock (as filemap_page_mkwrite() does).  Without this,
    generic/247 occasionally oopses with something like the following:
    
        BUG: kernel NULL pointer dereference, address: 0000000000000000
        #PF: supervisor read access in kernel mode
        #PF: error_code(0x0000) - not-present page
    
        RIP: 0010:trace_event_raw_event_netfs_folio+0x61/0xc0
        ...
        Call Trace:
         <TASK>
         ? __die_body+0x1a/0x60
         ? page_fault_oops+0x6e/0xa0
         ? exc_page_fault+0xc2/0xe0
         ? asm_exc_page_fault+0x22/0x30
         ? trace_event_raw_event_netfs_folio+0x61/0xc0
         trace_netfs_folio+0x39/0x40
         netfs_page_mkwrite+0x14c/0x1d0
         do_page_mkwrite+0x50/0x90
         do_pte_missing+0x184/0x200
         __handle_mm_fault+0x42d/0x500
         handle_mm_fault+0x121/0x1f0
         do_user_addr_fault+0x23e/0x3c0
         exc_page_fault+0xc2/0xe0
         asm_exc_page_fault+0x22/0x30
    
    This is due to the invalidate_inode_pages2_range() issued at the end of the
    DIO write interfering with the mmap'd writes.
    
    Fixes: 102a7e2c598c ("netfs: Allow buffered shared-writeable mmap through netfs_page_mkwrite()")
    Signed-off-by: David Howells <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Reviewed-by: Jeff Layton <[email protected]>
    cc: Matthew Wilcox <[email protected]>
    cc: Jeff Layton <[email protected]>
    cc: [email protected]
    cc: [email protected]
    cc: [email protected]
    cc: [email protected]
    cc: [email protected]
    cc: [email protected]
    Signed-off-by: Christian Brauner <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfs: Fix netfs_page_mkwrite() to flush conflicting data, not wait [+ + +]
Author: David Howells <[email protected]>
Date:   Mon Jun 24 12:24:03 2024 +0100

    netfs: Fix netfs_page_mkwrite() to flush conflicting data, not wait
    
    [ Upstream commit 9d66154f73b7c7007c3be1113dfb50b99b791f8f ]
    
    Fix netfs_page_mkwrite() to use filemap_fdatawrite_range(), not
    filemap_fdatawait_range() to flush conflicting data.
    
    Fixes: 102a7e2c598c ("netfs: Allow buffered shared-writeable mmap through netfs_page_mkwrite()")
    Signed-off-by: David Howells <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    cc: Matthew Wilcox <[email protected]>
    cc: Jeff Layton <[email protected]>
    cc: [email protected]
    cc: [email protected]
    cc: [email protected]
    cc: [email protected]
    cc: [email protected]
    cc: [email protected]
    Signed-off-by: Christian Brauner <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
nfs: drop the incorrect assertion in nfs_swap_rw() [+ + +]
Author: Christoph Hellwig <[email protected]>
Date:   Tue Jun 18 18:56:47 2024 +1200

    nfs: drop the incorrect assertion in nfs_swap_rw()
    
    commit 54e7d59841dab977f6cb1183d658b1b82c9f4e94 upstream.
    
    Since commit 2282679fb20b ("mm: submit multipage write for SWP_FS_OPS
    swap-space"), we can plug multiple pages then unplug them all together.
    That means iov_iter_count(iter) could be way bigger than PAGE_SIZE, it
    actually equals the size of iov_iter_npages(iter, INT_MAX).
    
    Note this issue has nothing to do with large folios as we don't support
    THP_SWPOUT to non-block devices.
    
    [[email protected]: figure out the cause and correct the commit message]
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 2282679fb20b ("mm: submit multipage write for SWP_FS_OPS swap-space")
    Signed-off-by: Christoph Hellwig <[email protected]>
    Signed-off-by: Barry Song <[email protected]>
    Closes: https://lore.kernel.org/linux-mm/[email protected]/
    Reviewed-by: Martin Wege <[email protected]>
    Cc: NeilBrown <[email protected]>
    Cc: Anna Schumaker <[email protected]>
    Cc: Steve French <[email protected]>
    Cc: Trond Myklebust <[email protected]>
    Cc: Chuanhua Han <[email protected]>
    Cc: Ryan Roberts <[email protected]>
    Cc: Chris Li <[email protected]>
    Cc: "Huang, Ying" <[email protected]>
    Cc: Jeff Layton <[email protected]>
    Cc: Matthew Wilcox <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
nfsd: initialise nfsd_info.mutex early. [+ + +]
Author: NeilBrown <[email protected]>
Date:   Tue Jun 25 09:04:56 2024 +1000

    nfsd: initialise nfsd_info.mutex early.
    
    [ Upstream commit e0011bca603c101f2a3c007bdb77f7006fa78fb1 ]
    
    nfsd_info.mutex can be dereferenced by svc_pool_stats_start()
    immediately after the new netns is created.  Currently this can
    trigger an oops.
    
    Move the initialisation earlier before it can possibly be dereferenced.
    
    Fixes: 7b207ccd9833 ("svc: don't hold reference for poolstats, only mutex.")
    Reported-by: Sourabh Jain <[email protected]>
    Closes: https://lore.kernel.org/all/[email protected]/
    Signed-off-by: NeilBrown <[email protected]>
    Reviewed-by: Jeff Layton <[email protected]>
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
nvme: fixup comment for nvme RDMA Provider Type [+ + +]
Author: Hannes Reinecke <[email protected]>
Date:   Mon Jun 17 09:27:27 2024 +0200

    nvme: fixup comment for nvme RDMA Provider Type
    
    [ Upstream commit f80a55fa90fa76d01e3fffaa5d0413e522ab9a00 ]
    
    PRTYPE is the provider type, not the QP service type.
    
    Fixes: eb793e2c9286 ("nvme.h: add NVMe over Fabrics definitions")
    Signed-off-by: Hannes Reinecke <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Signed-off-by: Keith Busch <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
nvmet-fc: Remove __counted_by from nvmet_fc_tgt_queue.fod[] [+ + +]
Author: Nathan Chancellor <[email protected]>
Date:   Wed May 29 14:42:40 2024 -0700

    nvmet-fc: Remove __counted_by from nvmet_fc_tgt_queue.fod[]
    
    commit 440e2051c577896275c0e0513ec26964e04c7810 upstream.
    
    Work for __counted_by on generic pointers in structures (not just
    flexible array members) has started landing in Clang 19 (current tip of
    tree). During the development of this feature, a restriction was added
    to __counted_by to prevent the flexible array member's element type from
    including a flexible array member itself such as:
    
      struct foo {
        int count;
        char buf[];
      };
    
      struct bar {
        int count;
        struct foo data[] __counted_by(count);
      };
    
    because the size of data cannot be calculated with the standard array
    size formula:
    
      sizeof(struct foo) * count
    
    This restriction was downgraded to a warning but due to CONFIG_WERROR,
    it can still break the build. The application of __counted_by on the fod
    member of 'struct nvmet_fc_tgt_queue' triggers this restriction,
    resulting in:
    
      drivers/nvme/target/fc.c:151:2: error: 'counted_by' should not be applied to an array with element of unknown size because 'struct nvmet_fc_fcp_iod' is a struct type with a flexible array member. This will be an error in a future compiler version [-Werror,-Wbounds-safety-counted-by-elt-type-unknown-size]
        151 |         struct nvmet_fc_fcp_iod         fod[] __counted_by(sqsize);
            |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      1 error generated.
    
    Remove this use of __counted_by to fix the warning/error. However,
    rather than remove it altogether, leave it commented, as it may be
    possible to support this in future compiler releases.
    
    Cc: [email protected]
    Closes: https://github.com/ClangBuiltLinux/linux/issues/2027
    Fixes: ccd3129aca28 ("nvmet-fc: Annotate struct nvmet_fc_tgt_queue with __counted_by")
    Signed-off-by: Nathan Chancellor <[email protected]>
    Signed-off-by: Keith Busch <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
nvmet: do not return 'reserved' for empty TSAS values [+ + +]
Author: Hannes Reinecke <[email protected]>
Date:   Mon Jun 17 09:27:26 2024 +0200

    nvmet: do not return 'reserved' for empty TSAS values
    
    [ Upstream commit f31e85a4d7c6ac4a3e014129c9cdc31592ea29f3 ]
    
    The 'TSAS' value is only defined for TCP and RDMA, but returning
    'reserved' for undefined values tricked nvmetcli to try to write
    'reserved' when restoring from a config file. This caused an error
    and the configuration would not be applied.
    
    Fixes: 3f123494db72 ("nvmet: make TCP sectype settable via configfs")
    Signed-off-by: Hannes Reinecke <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Reviewed-by: Chaitanya Kulkarni <[email protected]>
    Signed-off-by: Keith Busch <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

nvmet: make 'tsas' attribute idempotent for RDMA [+ + +]
Author: Hannes Reinecke <[email protected]>
Date:   Mon Jun 17 09:27:28 2024 +0200

    nvmet: make 'tsas' attribute idempotent for RDMA
    
    [ Upstream commit 0f1f5803920d2a6b88bee950914fd37421e17170 ]
    
    The RDMA transport defines values for TSAS, but it cannot be changed as
    we only support the 'connected' mode.
    So to avoid errors during reconfiguration we should allow to write the
    current value.
    
    Fixes: 3f123494db72 ("nvmet: make TCP sectype settable via configfs")
    Signed-off-by: Hannes Reinecke <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Signed-off-by: Keith Busch <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ocfs2: fix DIO failure due to insufficient transaction credits [+ + +]
Author: Jan Kara <[email protected]>
Date:   Fri Jun 14 16:52:43 2024 +0200

    ocfs2: fix DIO failure due to insufficient transaction credits
    
    commit be346c1a6eeb49d8fda827d2a9522124c2f72f36 upstream.
    
    The code in ocfs2_dio_end_io_write() estimates number of necessary
    transaction credits using ocfs2_calc_extend_credits().  This however does
    not take into account that the IO could be arbitrarily large and can
    contain arbitrary number of extents.
    
    Extent tree manipulations do often extend the current transaction but not
    in all of the cases.  For example if we have only single block extents in
    the tree, ocfs2_mark_extent_written() will end up calling
    ocfs2_replace_extent_rec() all the time and we will never extend the
    current transaction and eventually exhaust all the transaction credits if
    the IO contains many single block extents.  Once that happens a
    WARN_ON(jbd2_handle_buffer_credits(handle) <= 0) is triggered in
    jbd2_journal_dirty_metadata() and subsequently OCFS2 aborts in response to
    this error.  This was actually triggered by one of our customers on a
    heavily fragmented OCFS2 filesystem.
    
    To fix the issue make sure the transaction always has enough credits for
    one extent insert before each call of ocfs2_mark_extent_written().
    
    Heming Zhao said:
    
    ------
    PANIC: "Kernel panic - not syncing: OCFS2: (device dm-1): panic forced after error"
    
    PID: xxx  TASK: xxxx  CPU: 5  COMMAND: "SubmitThread-CA"
      #0 machine_kexec at ffffffff8c069932
      #1 __crash_kexec at ffffffff8c1338fa
      #2 panic at ffffffff8c1d69b9
      #3 ocfs2_handle_error at ffffffffc0c86c0c [ocfs2]
      #4 __ocfs2_abort at ffffffffc0c88387 [ocfs2]
      #5 ocfs2_journal_dirty at ffffffffc0c51e98 [ocfs2]
      #6 ocfs2_split_extent at ffffffffc0c27ea3 [ocfs2]
      #7 ocfs2_change_extent_flag at ffffffffc0c28053 [ocfs2]
      #8 ocfs2_mark_extent_written at ffffffffc0c28347 [ocfs2]
      #9 ocfs2_dio_end_io_write at ffffffffc0c2bef9 [ocfs2]
    #10 ocfs2_dio_end_io at ffffffffc0c2c0f5 [ocfs2]
    #11 dio_complete at ffffffff8c2b9fa7
    #12 do_blockdev_direct_IO at ffffffff8c2bc09f
    #13 ocfs2_direct_IO at ffffffffc0c2b653 [ocfs2]
    #14 generic_file_direct_write at ffffffff8c1dcf14
    #15 __generic_file_write_iter at ffffffff8c1dd07b
    #16 ocfs2_file_write_iter at ffffffffc0c49f1f [ocfs2]
    #17 aio_write at ffffffff8c2cc72e
    #18 kmem_cache_alloc at ffffffff8c248dde
    #19 do_io_submit at ffffffff8c2ccada
    #20 do_syscall_64 at ffffffff8c004984
    #21 entry_SYSCALL_64_after_hwframe at ffffffff8c8000ba
    
    Link: https://lkml.kernel.org/r/[email protected]
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: c15471f79506 ("ocfs2: fix sparse file & data ordering issue in direct io")
    Signed-off-by: Jan Kara <[email protected]>
    Reviewed-by: Joseph Qi <[email protected]>
    Reviewed-by: Heming Zhao <[email protected]>
    Cc: Mark Fasheh <[email protected]>
    Cc: Joel Becker <[email protected]>
    Cc: Junxiao Bi <[email protected]>
    Cc: Changwei Ge <[email protected]>
    Cc: Gang He <[email protected]>
    Cc: Jun Piao <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
openvswitch: get related ct labels from its master if it is not confirmed [+ + +]
Author: Xin Long <[email protected]>
Date:   Wed Jun 19 18:08:56 2024 -0400

    openvswitch: get related ct labels from its master if it is not confirmed
    
    [ Upstream commit a23ac973f67f37e77b3c634e8b1ad5b0164fcc1f ]
    
    Ilya found a failure in running check-kernel tests with at_groups=144
    (144: conntrack - FTP SNAT orig tuple) in OVS repo. After his further
    investigation, the root cause is that the labels sent to userspace
    for related ct are incorrect.
    
    The labels for unconfirmed related ct should use its master's labels.
    However, the changes made in commit 8c8b73320805 ("openvswitch: set
    IPS_CONFIRMED in tmpl status only when commit is set in conntrack")
    led to getting labels from this related ct.
    
    So fix it in ovs_ct_get_labels() by changing to copy labels from its
    master ct if it is a unconfirmed related ct. Note that there is no
    fix needed for ct->mark, as it was already copied from its master
    ct for related ct in init_conntrack().
    
    Fixes: 8c8b73320805 ("openvswitch: set IPS_CONFIRMED in tmpl status only when commit is set in conntrack")
    Reported-by: Ilya Maximets <[email protected]>
    Signed-off-by: Xin Long <[email protected]>
    Reviewed-by: Ilya Maximets <[email protected]>
    Tested-by: Ilya Maximets <[email protected]>
    Reviewed-by: Aaron Conole <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
parisc: use correct compat recv/recvfrom syscalls [+ + +]
Author: Arnd Bergmann <[email protected]>
Date:   Wed Jun 19 14:27:55 2024 +0200

    parisc: use correct compat recv/recvfrom syscalls
    
    [ Upstream commit 20a50787349fadf66ac5c48f62e58d753878d2bb ]
    
    Johannes missed parisc back when he introduced the compat version
    of these syscalls, so receiving cmsg messages that require a compat
    conversion is still broken.
    
    Use the correct calls like the other architectures do.
    
    Fixes: 1dacc76d0014 ("net/compat/wext: send different messages to compat tasks")
    Acked-by: Helge Deller <[email protected]>
    Signed-off-by: Arnd Bergmann <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

parisc: use generic sys_fanotify_mark implementation [+ + +]
Author: Arnd Bergmann <[email protected]>
Date:   Fri Jun 7 13:40:45 2024 +0200

    parisc: use generic sys_fanotify_mark implementation
    
    [ Upstream commit 403f17a330732a666ae793f3b15bc75bb5540524 ]
    
    The sys_fanotify_mark() syscall on parisc uses the reverse word order
    for the two halves of the 64-bit argument compared to all syscalls on
    all 32-bit architectures. As far as I can tell, the problem is that
    the function arguments on parisc are sorted backwards (26, 25, 24, 23,
    ...) compared to everyone else, so the calling conventions of using an
    even/odd register pair in native word order result in the lower word
    coming first in function arguments, matching the expected behavior
    on little-endian architectures. The system call conventions however
    ended up matching what the other 32-bit architectures do.
    
    A glibc cleanup in 2020 changed the userspace behavior in a way that
    handles all architectures consistently, but this inadvertently broke
    parisc32 by changing to the same method as everyone else.
    
    The change made it into glibc-2.35 and subsequently into debian 12
    (bookworm), which is the latest stable release. This means we
    need to choose between reverting the glibc change or changing the
    kernel to match it again, but either hange will leave some systems
    broken.
    
    Pick the option that is more likely to help current and future
    users and change the kernel to match current glibc. This also
    means the behavior is now consistent across architectures, but
    it breaks running new kernels with old glibc builds before 2.35.
    
    Link: https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=d150181d73d9
    Link: https://git.kernel.org/pub/scm/linux/kernel/git/history/history.git/commit/arch/parisc/kernel/sys_parisc.c?h=57b1dfbd5b4a39d
    Cc: Adhemerval Zanella <[email protected]>
    Tested-by: Helge Deller <[email protected]>
    Acked-by: Helge Deller <[email protected]>
    Signed-off-by: Arnd Bergmann <[email protected]>

 
PCI/MSI: Fix UAF in msi_capability_init [+ + +]
Author: Mostafa Saleh <[email protected]>
Date:   Mon Jun 24 20:37:28 2024 +0000

    PCI/MSI: Fix UAF in msi_capability_init
    
    commit 9eee5330656bf92f51cb1f09b2dc9f8cf975b3d1 upstream.
    
    KFENCE reports the following UAF:
    
     BUG: KFENCE: use-after-free read in __pci_enable_msi_range+0x2c0/0x488
    
     Use-after-free read at 0x0000000024629571 (in kfence-#12):
      __pci_enable_msi_range+0x2c0/0x488
      pci_alloc_irq_vectors_affinity+0xec/0x14c
      pci_alloc_irq_vectors+0x18/0x28
    
     kfence-#12: 0x0000000008614900-0x00000000e06c228d, size=104, cache=kmalloc-128
    
     allocated by task 81 on cpu 7 at 10.808142s:
      __kmem_cache_alloc_node+0x1f0/0x2bc
      kmalloc_trace+0x44/0x138
      msi_alloc_desc+0x3c/0x9c
      msi_domain_insert_msi_desc+0x30/0x78
      msi_setup_msi_desc+0x13c/0x184
      __pci_enable_msi_range+0x258/0x488
      pci_alloc_irq_vectors_affinity+0xec/0x14c
      pci_alloc_irq_vectors+0x18/0x28
    
     freed by task 81 on cpu 7 at 10.811436s:
      msi_domain_free_descs+0xd4/0x10c
      msi_domain_free_locked.part.0+0xc0/0x1d8
      msi_domain_alloc_irqs_all_locked+0xb4/0xbc
      pci_msi_setup_msi_irqs+0x30/0x4c
      __pci_enable_msi_range+0x2a8/0x488
      pci_alloc_irq_vectors_affinity+0xec/0x14c
      pci_alloc_irq_vectors+0x18/0x28
    
    Descriptor allocation done in:
    __pci_enable_msi_range
        msi_capability_init
            msi_setup_msi_desc
                msi_insert_msi_desc
                    msi_domain_insert_msi_desc
                        msi_alloc_desc
                            ...
    
    Freed in case of failure in __msi_domain_alloc_locked()
    __pci_enable_msi_range
        msi_capability_init
            pci_msi_setup_msi_irqs
                msi_domain_alloc_irqs_all_locked
                    msi_domain_alloc_locked
                        __msi_domain_alloc_locked => fails
                        msi_domain_free_locked
                            ...
    
    That failure propagates back to pci_msi_setup_msi_irqs() in
    msi_capability_init() which accesses the descriptor for unmasking in the
    error exit path.
    
    Cure it by copying the descriptor and using the copy for the error exit path
    unmask operation.
    
    [ tglx: Massaged change log ]
    
    Fixes: bf6e054e0e3f ("genirq/msi: Provide msi_device_populate/destroy_sysfs()")
    Suggested-by: Thomas Gleixner <[email protected]>
    Signed-off-by: Mostafa Saleh <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Cc: Bjorn Heelgas <[email protected]>
    Cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
pinctrl: fix deadlock in create_pinctrl() when handling -EPROBE_DEFER [+ + +]
Author: Hagar Hemdan <[email protected]>
Date:   Tue Jun 4 08:58:38 2024 +0000

    pinctrl: fix deadlock in create_pinctrl() when handling -EPROBE_DEFER
    
    [ Upstream commit adec57ff8e66aee632f3dd1f93787c13d112b7a1 ]
    
    In create_pinctrl(), pinctrl_maps_mutex is acquired before calling
    add_setting(). If add_setting() returns -EPROBE_DEFER, create_pinctrl()
    calls pinctrl_free(). However, pinctrl_free() attempts to acquire
    pinctrl_maps_mutex, which is already held by create_pinctrl(), leading to
    a potential deadlock.
    
    This patch resolves the issue by releasing pinctrl_maps_mutex before
    calling pinctrl_free(), preventing the deadlock.
    
    This bug was discovered and resolved using Coverity Static Analysis
    Security Testing (SAST) by Synopsys, Inc.
    
    Fixes: 42fed7ba44e4 ("pinctrl: move subsystem mutex to pinctrl_dev struct")
    Suggested-by: Maximilian Heyne <[email protected]>
    Signed-off-by: Hagar Hemdan <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Linus Walleij <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

pinctrl: qcom: spmi-gpio: drop broken pm8008 support [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Wed May 29 18:29:52 2024 +0200

    pinctrl: qcom: spmi-gpio: drop broken pm8008 support
    
    commit 8da86499d4cd125a9561f9cd1de7fba99b0aecbf upstream.
    
    The SPMI GPIO driver assumes that the parent device is an SPMI device
    and accesses random data when backcasting the parent struct device
    pointer for non-SPMI devices.
    
    Fortunately this does not seem to cause any issues currently when the
    parent device is an I2C client like the PM8008, but this could change if
    the structures are reorganised (e.g. using structure randomisation).
    
    Notably the interrupt implementation is also broken for non-SPMI devices.
    
    Also note that the two GPIO pins on PM8008 are used for interrupts and
    reset so their practical use should be limited.
    
    Drop the broken GPIO support for PM8008 for now.
    
    Fixes: ea119e5a482a ("pinctrl: qcom-pmic-gpio: Add support for pm8008")
    Cc: [email protected]      # 5.13
    Reviewed-by: Bryan O'Donoghue <[email protected]>
    Reviewed-by: Stephen Boyd <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Linus Walleij <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

pinctrl: renesas: rzg2l: Use spin_{lock,unlock}_irq{save,restore} [+ + +]
Author: Claudiu Beznea <[email protected]>
Date:   Wed May 22 08:54:21 2024 +0300

    pinctrl: renesas: rzg2l: Use spin_{lock,unlock}_irq{save,restore}
    
    [ Upstream commit a39741d38c048a48ae0d65226d9548005a088f5f ]
    
    On PREEMPT_RT kernels the spinlock_t maps to an rtmutex. Using
    raw_spin_lock_irqsave()/raw_spin_unlock_irqrestore() on
    &pctrl->lock.rlock breaks the PREEMPT_RT builds. To fix this use
    spin_lock_irqsave()/spin_unlock_irqrestore() on &pctrl->lock.
    
    Fixes: 02cd2d3be1c3 ("pinctrl: renesas: rzg2l: Configure the interrupt type on resume")
    Reported-by: Diederik de Haas <[email protected]>
    Closes: https://lore.kernel.org/all/131999629.KQPSlr0Zke@bagend
    Signed-off-by: Claudiu Beznea <[email protected]>
    Reviewed-by: Geert Uytterhoeven <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Geert Uytterhoeven <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

pinctrl: rockchip: fix pinmux bits for RK3328 GPIO2-B pins [+ + +]
Author: Huang-Huang Bao <[email protected]>
Date:   Thu Jun 6 20:57:52 2024 +0800

    pinctrl: rockchip: fix pinmux bits for RK3328 GPIO2-B pins
    
    [ Upstream commit e8448a6c817c2aa6c6af785b1d45678bd5977e8d ]
    
    The pinmux bits for GPIO2-B0 to GPIO2-B6 actually have 2 bits width,
    correct the bank flag for GPIO2-B. The pinmux bits for GPIO2-B7 is
    recalculated so it remain unchanged.
    
    The pinmux bits for those pins are not explicitly specified in RK3328
    TRM, however we can get hint from pad name and its correspinding IOMUX
    setting for pins in interface descriptions. The correspinding IOMIX
    settings for GPIO2-B0 to GPIO2-B6 can be found in the same row next to
    occurrences of following pad names in RK3328 TRM.
    
    GPIO2-B0: IO_SPIclkm0_GPIO2B0vccio5
    GPIO2-B1: IO_SPItxdm0_GPIO2B1vccio5
    GPIO2-B2: IO_SPIrxdm0_GPIO2B2vccio5
    GPIO2-B3: IO_SPIcsn0m0_GPIO2B3vccio5
    GPIO2-B4: IO_SPIcsn1m0_FLASHvol_sel_GPIO2B4vccio5
    GPIO2-B5: IO_ I2C2sda_TSADCshut_GPIO2B5vccio5
    GPIO2-B6: IO_ I2C2scl_GPIO2B6vccio5
    
    This fix has been tested on NanoPi R2S for fixing confliting pinmux bits
    between GPIO2-B7 with GPIO2-B5.
    
    Signed-off-by: Huang-Huang Bao <[email protected]>
    Reviewed-by: Heiko Stuebner <[email protected]>
    Fixes: 3818e4a7678e ("pinctrl: rockchip: Add rk3328 pinctrl support")
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Linus Walleij <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

pinctrl: rockchip: fix pinmux bits for RK3328 GPIO3-B pins [+ + +]
Author: Huang-Huang Bao <[email protected]>
Date:   Thu Jun 6 20:57:53 2024 +0800

    pinctrl: rockchip: fix pinmux bits for RK3328 GPIO3-B pins
    
    [ Upstream commit 5ef6914e0bf578357b4c906ffe6b26e7eedb8ccf ]
    
    The pinmux bits for GPIO3-B1 to GPIO3-B6 pins are not explicitly
    specified in RK3328 TRM, however we can get hint from pad name and its
    correspinding IOMUX setting for pins in interface descriptions. The
    correspinding IOMIX settings for these pins can be found in the same
    row next to occurrences of following pad names in RK3328 TRM.
    
    GPIO3-B1:  IO_TSPd5m0_CIFdata5m0_GPIO3B1vccio6
    GPIO3-B2: IO_TSPd6m0_CIFdata6m0_GPIO3B2vccio6
    GPIO3-B3: IO_TSPd7m0_CIFdata7m0_GPIO3B3vccio6
    GPIO3-B4: IO_CARDclkm0_GPIO3B4vccio6
    GPIO3-B5: IO_CARDrstm0_GPIO3B5vccio6
    GPIO3-B6: IO_CARDdetm0_GPIO3B6vccio6
    
    Add pinmux data to rk3328_mux_recalced_data as mux register offset for
    these pins does not follow rockchip convention.
    
    Signed-off-by: Huang-Huang Bao <[email protected]>
    Reviewed-by: Heiko Stuebner <[email protected]>
    Fixes: 3818e4a7678e ("pinctrl: rockchip: Add rk3328 pinctrl support")
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Linus Walleij <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

pinctrl: rockchip: fix pinmux reset in rockchip_pmx_set [+ + +]
Author: Huang-Huang Bao <[email protected]>
Date:   Thu Jun 6 20:57:55 2024 +0800

    pinctrl: rockchip: fix pinmux reset in rockchip_pmx_set
    
    [ Upstream commit 4ea4d4808e342ddf89ba24b93ffa2057005aaced ]
    
    rockchip_pmx_set reset all pinmuxs in group to 0 in the case of error,
    add missing bank data retrieval in that code to avoid setting mux on
    unexpected pins.
    
    Fixes: 14797189b35e ("pinctrl: rockchip: add return value to rockchip_set_mux")
    Reviewed-by: Heiko Stuebner <[email protected]>
    Signed-off-by: Huang-Huang Bao <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Linus Walleij <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

pinctrl: rockchip: use dedicated pinctrl type for RK3328 [+ + +]
Author: Huang-Huang Bao <[email protected]>
Date:   Thu Jun 6 20:57:54 2024 +0800

    pinctrl: rockchip: use dedicated pinctrl type for RK3328
    
    [ Upstream commit 01b4b1d1cec48ef4c26616c2fc4600b2c9fec05a ]
    
    rk3328_pin_ctrl uses type of RK3288 which has a hack in
    rockchip_pinctrl_suspend and rockchip_pinctrl_resume to restore GPIO6-C6
    at assume, the hack is not applicable to RK3328 as GPIO6 is not even
    exist in it. So use a dedicated pinctrl type to skip this hack.
    
    Fixes: 3818e4a7678e ("pinctrl: rockchip: Add rk3328 pinctrl support")
    Reviewed-by: Heiko Stuebner <[email protected]>
    Signed-off-by: Huang-Huang Bao <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Linus Walleij <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
powerpc: restore some missing spu syscalls [+ + +]
Author: Arnd Bergmann <[email protected]>
Date:   Wed Apr 24 16:36:13 2024 +0200

    powerpc: restore some missing spu syscalls
    
    [ Upstream commit b1e31c134a8ab2e8f5fd62323b6b45a950ac704d ]
    
    A couple of system calls were inadventently removed from the table during
    a bugfix for 32-bit powerpc entry. Restore the original behavior.
    
    Fixes: e23750623835 ("powerpc/32: fix syscall wrappers with 64-bit arguments of unaligned register-pairs")
    Acked-by: Michael Ellerman <[email protected]>
    Signed-off-by: Arnd Bergmann <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
pwm: stm32: Calculate prescaler with a division instead of a loop [+ + +]
Author: Uwe Kleine-König <[email protected]>
Date:   Sun Mar 17 22:52:16 2024 +0100

    pwm: stm32: Calculate prescaler with a division instead of a loop
    
    [ Upstream commit 8002fbeef1e469b2c397d5cd2940e37b32a17849 ]
    
    Instead of looping over increasing values for the prescaler and testing
    if it's big enough, calculate the value using a single division.
    
    Link: https://lore.kernel.org/r/498a44b313a6c0a84ccddd03cd67aadaaaf7daf2.1710711976.git.u.kleine-koenig@pengutronix.de
    Signed-off-by: Uwe Kleine-König <[email protected]>
    Stable-dep-of: c45fcf46ca23 ("pwm: stm32: Refuse too small period requests")
    Signed-off-by: Sasha Levin <[email protected]>

pwm: stm32: Fix calculation of prescaler [+ + +]
Author: Uwe Kleine-König <[email protected]>
Date:   Fri Jun 21 16:37:13 2024 +0200

    pwm: stm32: Fix calculation of prescaler
    
    commit dab8f9f0fe3aada61c0eb013dcf7d3ff75a2c336 upstream.
    
    A small prescaler is beneficial, as this improves the resolution of the
    duty_cycle configuration. However if the prescaler is too small, the
    maximal possible period becomes considerably smaller than the requested
    value.
    
    One situation where this goes wrong is the following: With a parent
    clock rate of 208877930 Hz and max_arr = 0xffff = 65535, a request for
    period = 941243 ns currently results in PSC = 1. The value for ARR is
    then calculated to
    
            ARR = 941243 * 208877930 / (1000000000 * 2) - 1 = 98301
    
    This value is bigger than 65535 however and so doesn't fit into the
    respective register field. In this particular case the PWM was
    configured for a period of 313733.4806027616 ns (with ARR = 98301 &
    0xffff). Even if ARR was configured to its maximal value, only period =
    627495.6861167669 ns would be achievable.
    
    Fix the calculation accordingly and adapt the comment to match the new
    algorithm.
    
    With the calculation fixed the above case results in PSC = 2 and so an
    actual period of 941229.1667195285 ns.
    
    Fixes: 8002fbeef1e4 ("pwm: stm32: Calculate prescaler with a division instead of a loop")
    Signed-off-by: Uwe Kleine-König <[email protected]>
    Link: https://lore.kernel.org/r/b4d96b79917617434a540df45f20cb5de4142f88.1718979150.git.u.kleine-koenig@baylibre.com
    Signed-off-by: Uwe Kleine-König <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

pwm: stm32: Fix error message to not describe the previous error path [+ + +]
Author: Uwe Kleine-König <[email protected]>
Date:   Fri Jun 21 16:37:14 2024 +0200

    pwm: stm32: Fix error message to not describe the previous error path
    
    commit f01af3022d4a46362c5dda3d35dea939f3246d10 upstream.
    
    "Failed to lock the clock" is an appropriate error message for
    clk_rate_exclusive_get() failing, but not for the clock running too
    fast for the driver's calculations.
    
    Adapt the error message accordingly.
    
    Fixes: d44d635635a7 ("pwm: stm32: Fix for settings using period > UINT32_MAX")
    Signed-off-by: Uwe Kleine-König <[email protected]>
    Link: https://lore.kernel.org/r/285182163211203fc823a65b180761f46e828dcb.1718979150.git.u.kleine-koenig@baylibre.com
    Signed-off-by: Uwe Kleine-König <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

pwm: stm32: Fix for settings using period > UINT32_MAX [+ + +]
Author: Uwe Kleine-König <[email protected]>
Date:   Sun Mar 17 22:52:15 2024 +0100

    pwm: stm32: Fix for settings using period > UINT32_MAX
    
    [ Upstream commit d44d635635a7192c773a75e674a8590a163e879e ]
    
    stm32_pwm_config() took the duty_cycle and period values with the type
    int, however stm32_pwm_apply() passed u64 values there. Expand the
    function parameters to u64 to not discard relevant bits and adapt the
    calculations to the wider type.
    
    To ensure the calculations won't overflow, check in .probe() the input
    clk doesn't run faster than 1 GHz.
    
    Link: https://lore.kernel.org/r/06b4a650a608d0887d934c1b2b8919e0f78e4db2.1710711976.git.u.kleine-koenig@pengutronix.de
    Signed-off-by: Uwe Kleine-König <[email protected]>
    Stable-dep-of: c45fcf46ca23 ("pwm: stm32: Refuse too small period requests")
    Signed-off-by: Sasha Levin <[email protected]>

pwm: stm32: Improve precision of calculation in .apply() [+ + +]
Author: Uwe Kleine-König <[email protected]>
Date:   Sun Mar 17 22:52:14 2024 +0100

    pwm: stm32: Improve precision of calculation in .apply()
    
    [ Upstream commit e419617847b688799a91126eb6c94b936bfb35ff ]
    
    While mathematically it's ok to calculate the number of cyles for the
    duty cycle as:
    
            duty_cycles = period_cycles * duty_ns / period_ns
    
    this doesn't always give the right result when doing integer math. This
    is best demonstrated using an example: With the input clock running at
    208877930 Hz a request for duty_cycle = 383 ns and period = 49996 ns
    results in
    
            period_cycles = clkrate * period_ns / NSEC_PER_SEC = 10443.06098828
    
    Now calculating duty_cycles with the above formula gives:
    
            duty_cycles = 10443.06098828 * 383 / 49996 = 80.00024719
    
    However with period_cycle truncated to an integer results in:
    
            duty_cycles = 10443 * 383 / 49996 = 79.99977998239859
    
    So while a value of (a little more than) 80 would be the right result,
    only 79 is used here. The problem here is that 14443 is a rounded result
    that should better not be used to do further math. So to fix that use
    the exact formular similar to how period_cycles is calculated.
    
    Link: https://lore.kernel.org/r/7628ecd8a7538aa5a7397f0fc4199a077168e8a6.1710711976.git.u.kleine-koenig@pengutronix.de
    Signed-off-by: Uwe Kleine-König <[email protected]>
    Stable-dep-of: c45fcf46ca23 ("pwm: stm32: Refuse too small period requests")
    Signed-off-by: Sasha Levin <[email protected]>

pwm: stm32: Refuse too small period requests [+ + +]
Author: Uwe Kleine-König <[email protected]>
Date:   Fri Jun 21 16:37:12 2024 +0200

    pwm: stm32: Refuse too small period requests
    
    [ Upstream commit c45fcf46ca2368dafe7e5c513a711a6f0f974308 ]
    
    If period_ns is small, prd might well become 0. Catch that case because
    otherwise with
    
            regmap_write(priv->regmap, TIM_ARR, prd - 1);
    
    a few lines down quite a big period is configured.
    
    Fixes: 7edf7369205b ("pwm: Add driver for STM32 plaftorm")
    Cc: [email protected]
    Reviewed-by: Trevor Gamblin <[email protected]>
    Signed-off-by: Uwe Kleine-König <[email protected]>
    Link: https://lore.kernel.org/r/b86f62f099983646f97eeb6bfc0117bb2d0c340d.1718979150.git.u.kleine-koenig@baylibre.com
    Signed-off-by: Uwe Kleine-König <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
randomize_kstack: Remove non-functional per-arch entropy filtering [+ + +]
Author: Kees Cook <[email protected]>
Date:   Wed Jun 19 14:47:15 2024 -0700

    randomize_kstack: Remove non-functional per-arch entropy filtering
    
    [ Upstream commit 6db1208bf95b4c091897b597c415e11edeab2e2d ]
    
    An unintended consequence of commit 9c573cd31343 ("randomize_kstack:
    Improve entropy diffusion") was that the per-architecture entropy size
    filtering reduced how many bits were being added to the mix, rather than
    how many bits were being used during the offsetting. All architectures
    fell back to the existing default of 0x3FF (10 bits), which will consume
    at most 1KiB of stack space. It seems that this is working just fine,
    so let's avoid the confusion and update everything to use the default.
    
    The prior intent of the per-architecture limits were:
    
      arm64: capped at 0x1FF (9 bits), 5 bits effective
      powerpc: uncapped (10 bits), 6 or 7 bits effective
      riscv: uncapped (10 bits), 6 bits effective
      x86: capped at 0xFF (8 bits), 5 (x86_64) or 6 (ia32) bits effective
      s390: capped at 0xFF (8 bits), undocumented effective entropy
    
    Current discussion has led to just dropping the original per-architecture
    filters. The additional entropy appears to be safe for arm64, x86,
    and s390. Quoting Arnd, "There is no point pretending that 15.75KB is
    somehow safe to use while 15.00KB is not."
    
    Co-developed-by: Yuntao Liu <[email protected]>
    Signed-off-by: Yuntao Liu <[email protected]>
    Fixes: 9c573cd31343 ("randomize_kstack: Improve entropy diffusion")
    Link: https://lore.kernel.org/r/[email protected]
    Reviewed-by: Arnd Bergmann <[email protected]>
    Acked-by: Mark Rutland <[email protected]>
    Acked-by: Heiko Carstens <[email protected]> # s390
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Kees Cook <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
RDMA/restrack: Fix potential invalid address access [+ + +]
Author: Wenchao Hao <[email protected]>
Date:   Mon Mar 18 17:23:20 2024 +0800

    RDMA/restrack: Fix potential invalid address access
    
    [ Upstream commit ca537a34775c103f7b14d7bbd976403f1d1525d8 ]
    
    struct rdma_restrack_entry's kern_name was set to KBUILD_MODNAME
    in ib_create_cq(), while if the module exited but forgot del this
    rdma_restrack_entry, it would cause a invalid address access in
    rdma_restrack_clean() when print the owner of this rdma_restrack_entry.
    
    These code is used to help find one forgotten PD release in one of the
    ULPs. But it is not needed anymore, so delete them.
    
    Signed-off-by: Wenchao Hao <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Leon Romanovsky <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
reset: gpio: Fix missing gpiolib dependency for GPIO reset controller [+ + +]
Author: Mark Brown <[email protected]>
Date:   Mon Mar 25 16:51:03 2024 +0000

    reset: gpio: Fix missing gpiolib dependency for GPIO reset controller
    
    [ Upstream commit 01f6a84c7a3eaabafd787608d630db31c6904f5c ]
    
    The GPIO reset controller uses gpiolib but there is no Kconfig
    dependency reflecting this fact, add one.
    
    With the addition of the controller to the arm64 defconfig this is
    causing build breaks for arm64 virtconfig in -next:
    
    aarch64-linux-gnu-ld: drivers/reset/core.o: in function `__reset_add_reset_gpio_lookup':
    /build/stage/linux/drivers/reset/core.c:861:(.text+0xccc): undefined reference to `gpio_device_find_by_fwnode'
    
    Fixes: cee544a40e44 ("reset: gpio: Add GPIO-based reset controller")
    Reviewed-by: Krzysztof Kozlowski <[email protected]>
    Signed-off-by: Mark Brown <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Philipp Zabel <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
Revert "arm64: dts: rockchip: remove redundant cd-gpios from rk3588 sdmmc nodes" [+ + +]
Author: FUKAUMI Naoki <[email protected]>
Date:   Thu Jun 13 09:17:57 2024 +0900

    Revert "arm64: dts: rockchip: remove redundant cd-gpios from rk3588 sdmmc nodes"
    
    [ Upstream commit b56aed4a613e2d2cb3bfe05fd222dbf480f6b5d8 ]
    
    This reverts commit d859ad305ed19d9a77d8c8ecd22459b73da36ba6.
    
    Inserting and removing microSD card is not detected since above commit.
    Reverting it fixes this problem.
    
    This is probably the same thing as 5 years ago on rk3399
    https://lore.kernel.org/all/0608599d485117a9d99f5fb274fbb1b55f6ba9f7.1547466003.git.robin.murphy@arm.com/
    
    So we'll go back to cd-gpios for now.
    
    this patch is tested on Radxa ROCK 5A and 5B.
    
    Fixes: d859ad305ed1 ("arm64: dts: rockchip: remove redundant cd-gpios from rk3588 sdmmc nodes")
    Signed-off-by: FUKAUMI Naoki <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Heiko Stuebner <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
Revert "MIPS: pci: lantiq: restore reset gpio polarity" [+ + +]
Author: Thomas Bogendoerfer <[email protected]>
Date:   Thu Jun 13 10:17:09 2024 +0200

    Revert "MIPS: pci: lantiq: restore reset gpio polarity"
    
    commit 6e5aee08bd2517397c9572243a816664f2ead547 upstream.
    
    This reverts commit 277a0363120276645ae598d8d5fea7265e076ae9.
    
    While fixing old boards with broken DTs, this change will break
    newer ones with correct gpio polarity annotation.
    
    Signed-off-by: Thomas Bogendoerfer <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Revert "mmc: moxart-mmc: Use sg_miter for PIO" [+ + +]
Author: Linus Walleij <[email protected]>
Date:   Thu Jun 6 20:17:20 2024 +0200

    Revert "mmc: moxart-mmc: Use sg_miter for PIO"
    
    commit 84bb8d8bbd8384081c3fc5c4f20b223524af529d upstream.
    
    This reverts commit 3ee0e7c3e67cab83ffbbe7707b43df8d41c9fe47.
    
    The patch is not working for unknown reasons and I would
    need access to the hardware to fix the bug.
    
    This shouldn't matter anyway: the Moxa Art is not expected
    to use highmem, and sg_miter() is only necessary to have
    to properly deal with highmem.
    
    Reported-by: Sergei Antonov <[email protected]>
    Signed-off-by: Linus Walleij <[email protected]>
    Fixes: 3ee0e7c3e67c ("mmc: moxart-mmc: Use sg_miter for PIO")
    Cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Ulf Hansson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Revert "net: sfp: enhance quirk for Fibrestore 2.5G copper SFP module" [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Tue Jul 2 10:41:01 2024 +0200

    Revert "net: sfp: enhance quirk for Fibrestore 2.5G copper SFP module"
    
    This reverts commit b3dcad0bfd62fcc9367d8092a71918db53804f53 which is
    commit cd4a32e60061789676f7f018a94fcc9ec56732a0 upstream.
    
    Turned out that this should not have been applied to the stable tree.
    
    Link: https://lore.kernel.org/r/20240628172211.17ccefe9@dellmb
    Reported-by: Marek Behún <[email protected]>
    Cc: Jiri Pirko <[email protected]>
    Cc: Jakub Kicinski <[email protected]>
    Cc: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Revert "serial: core: only stop transmit when HW fifo is empty" [+ + +]
Author: Doug Brown <[email protected]>
Date:   Thu Jun 6 12:56:31 2024 -0700

    Revert "serial: core: only stop transmit when HW fifo is empty"
    
    commit c5603e2a621dac10c5e21cc430848ebcfa6c7e01 upstream.
    
    This reverts commit 7bfb915a597a301abb892f620fe5c283a9fdbd77.
    
    This commit broke pxa and omap-serial, because it inhibited them from
    calling stop_tx() if their TX FIFOs weren't completely empty. This
    resulted in these two drivers hanging during transmits because the TX
    interrupt would stay enabled, and a new TX interrupt would never fire.
    
    Cc: [email protected]
    Fixes: 7bfb915a597a ("serial: core: only stop transmit when HW fifo is empty")
    Signed-off-by: Doug Brown <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Revert "usb: gadget: u_ether: Re-attach netif device to mirror detachment" [+ + +]
Author: Ferry Toth <[email protected]>
Date:   Thu Jun 20 22:46:41 2024 +0200

    Revert "usb: gadget: u_ether: Re-attach netif device to mirror detachment"
    
    commit 24bf27b92b1c6a322faa88977de2207aa8c26509 upstream.
    
    This reverts commit 76c945730cdffb572c7767073cc6515fd3f646b4.
    
    Prerequisite revert for the reverting of the original commit f49449fbc21e.
    
    Fixes: 76c945730cdf ("usb: gadget: u_ether: Re-attach netif device to mirror detachment")
    Fixes: f49449fbc21e ("usb: gadget: u_ether: Replace netif_stop_queue with netif_device_detach")
    Reported-by: Ferry Toth <[email protected]>
    Cc: [email protected]
    Signed-off-by: Ferry Toth <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Revert "usb: gadget: u_ether: Replace netif_stop_queue with netif_device_detach" [+ + +]
Author: Ferry Toth <[email protected]>
Date:   Thu Jun 20 22:46:42 2024 +0200

    Revert "usb: gadget: u_ether: Replace netif_stop_queue with netif_device_detach"
    
    commit c50814a288dcee687285abc0cf935e9fe8928e59 upstream.
    
    This reverts commit f49449fbc21e7e9550a5203902d69c8ae7dfd918.
    
    This commit breaks u_ether on some setups (at least Merrifield). The fix
    "usb: gadget: u_ether: Re-attach netif device to mirror detachment" party
    restores u-ether. However the netif usb: remains up even usb is switched
    from device to host mode. This creates problems for user space as the
    interface remains in the routing table while not realy present and network
    managers (connman) not detecting a network change.
    
    Various attempts to find the root cause were unsuccesful up to now. Therefore
    revert until a solution is found.
    
    Link: https://lore.kernel.org/linux-usb/[email protected]/
    Reported-by: Andy Shevchenko <[email protected]>
    Reported-by: Ferry Toth <[email protected]>
    Fixes: f49449fbc21e ("usb: gadget: u_ether: Replace netif_stop_queue with netif_device_detach")
    Cc: [email protected]
    Signed-off-by: Ferry Toth <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
RISC-V: fix vector insn load/store width mask [+ + +]
Author: Jesse Taube <[email protected]>
Date:   Thu Jun 6 14:28:00 2024 -0400

    RISC-V: fix vector insn load/store width mask
    
    [ Upstream commit 04a2aef59cfe192aa99020601d922359978cc72a ]
    
    RVFDQ_FL_FS_WIDTH_MASK should be 3 bits [14-12], shifted down by 12 bits.
    Replace GENMASK(3, 0) with GENMASK(2, 0).
    
    Fixes: cd054837243b ("riscv: Allocate user's vector context in the first-use trap")
    Signed-off-by: Jesse Taube <[email protected]>
    Reviewed-by: Charlie Jenkins <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Palmer Dabbelt <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
riscv: stacktrace: convert arch_stack_walk() to noinstr [+ + +]
Author: Andy Chiu <[email protected]>
Date:   Thu Jun 13 15:11:06 2024 +0800

    riscv: stacktrace: convert arch_stack_walk() to noinstr
    
    [ Upstream commit 23b2188920a25e88d447dd7d819a0b0f62fb4455 ]
    
    arch_stack_walk() is called intensively in function_graph when the
    kernel is compiled with CONFIG_TRACE_IRQFLAGS. As a result, the kernel
    logs a lot of arch_stack_walk and its sub-functions into the ftrace
    buffer. However, these functions should not appear on the trace log
    because they are part of the ftrace itself. This patch references what
    arm64 does for the smae function. So it further prevent the re-enter
    kprobe issue, which is also possible on riscv.
    
    Related-to: commit 0fbcd8abf337 ("arm64: Prohibit instrumentation on arch_stack_walk()")
    Fixes: 680341382da5 ("riscv: add CALLER_ADDRx support")
    Signed-off-by: Andy Chiu <[email protected]>
    Reviewed-by: Alexandre Ghiti <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Palmer Dabbelt <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
s390/pci: Add missing virt_to_phys() for directed DIBV [+ + +]
Author: Niklas Schnelle <[email protected]>
Date:   Tue Jun 11 14:06:31 2024 +0200

    s390/pci: Add missing virt_to_phys() for directed DIBV
    
    [ Upstream commit 4181b51c38875de9f6f11248fa0bcf3246c19c82 ]
    
    In commit 4e4dc65ab578 ("s390/pci: use phys_to_virt() for AIBVs/DIBVs")
    the setting of dibv_addr was missed when adding virt_to_phys(). This
    only affects systems with directed interrupt delivery enabled which are
    not generally available.
    
    Fixes: 4e4dc65ab578 ("s390/pci: use phys_to_virt() for AIBVs/DIBVs")
    Reviewed-by: Heiko Carstens <[email protected]>
    Signed-off-by: Niklas Schnelle <[email protected]>
    Signed-off-by: Vasily Gorbik <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
s390/virtio_ccw: Fix config change notifications [+ + +]
Author: Halil Pasic <[email protected]>
Date:   Tue Jun 11 23:47:16 2024 +0200

    s390/virtio_ccw: Fix config change notifications
    
    [ Upstream commit d8354a1de2c4cc693812f6130fc922537a59217d ]
    
    Commit e3e9bda38e6d ("s390/virtio_ccw: use DMA handle from DMA API")
    broke configuration change notifications for virtio-ccw by putting the
    DMA address of *indicatorp directly into ccw->cda disregarding the fact
    that if !!(vcdev->is_thinint) then the function
    virtio_ccw_register_adapter_ind() will overwrite that ccw->cda value
    with the address of the virtio_thinint_area so it can actually set up
    the adapter interrupts via CCW_CMD_SET_IND_ADAPTER.  Thus we end up
    pointing to the wrong object for both CCW_CMD_SET_IND if setting up the
    adapter interrupts fails, and for CCW_CMD_SET_CONF_IND regardless
    whether it succeeds or fails.
    
    To fix this, let us save away the dma address of *indicatorp in a local
    variable, and copy it to ccw->cda after the "vcdev->is_thinint" branch.
    
    Fixes: e3e9bda38e6d ("s390/virtio_ccw: use DMA handle from DMA API")
    Reported-by: Boqiao Fu <[email protected]>
    Reported-by: Sebastian Mitterle <[email protected]>
    Closes: https://issues.redhat.com/browse/RHEL-39983
    Tested-by: Thomas Huth <[email protected]>
    Reviewed-by: Eric Farman <[email protected]>
    Signed-off-by: Halil Pasic <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Vasily Gorbik <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
serial: 8250_omap: Fix Errata i2310 with RX FIFO level check [+ + +]
Author: Udit Kumar <[email protected]>
Date:   Tue Jun 25 21:37:25 2024 +0530

    serial: 8250_omap: Fix Errata i2310 with RX FIFO level check
    
    commit c128a1b0523b685c8856ddc0ac0e1caef1fdeee5 upstream.
    
    Errata i2310[0] says, Erroneous timeout can be triggered,
    if this Erroneous interrupt is not cleared then it may leads
    to storm of interrupts.
    
    Commit 9d141c1e6157 ("serial: 8250_omap: Implementation of Errata i2310")
    which added the workaround but missed ensuring RX FIFO is really empty
    before applying the errata workaround as recommended in the errata text.
    Fix this by adding back check for UART_OMAP_RX_LVL to be 0 for
    workaround to take effect.
    
    [0] https://www.ti.com/lit/pdf/sprz536 page 23
    
    Fixes: 9d141c1e6157 ("serial: 8250_omap: Implementation of Errata i2310")
    Cc: [email protected]
    Reported-by: Vignesh Raghavendra <[email protected]>
    Closes: https://lore.kernel.org/all/[email protected]/
    Signed-off-by: Udit Kumar <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

serial: 8250_omap: Implementation of Errata i2310 [+ + +]
Author: Udit Kumar <[email protected]>
Date:   Wed Jun 19 16:29:03 2024 +0530

    serial: 8250_omap: Implementation of Errata i2310
    
    commit 9d141c1e615795eeb93cd35501ad144ee997a826 upstream.
    
    As per Errata i2310[0], Erroneous timeout can be triggered,
    if this Erroneous interrupt is not cleared then it may leads
    to storm of interrupts, therefore apply Errata i2310 solution.
    
    [0] https://www.ti.com/lit/pdf/sprz536 page 23
    
    Fixes: b67e830d38fa ("serial: 8250: 8250_omap: Fix possible interrupt storm on K3 SoCs")
    Cc: [email protected]
    Signed-off-by: Udit Kumar <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

serial: bcm63xx-uart: fix tx after conversion to uart_port_tx_limited() [+ + +]
Author: Jonas Gorski <[email protected]>
Date:   Thu Jun 6 12:56:33 2024 -0700

    serial: bcm63xx-uart: fix tx after conversion to uart_port_tx_limited()
    
    commit ea55c65dedf40e9c1911dc1e63e26bc9a59692b9 upstream.
    
    When bcm63xx-uart was converted to uart_port_tx_limited(), it implicitly
    added a call to stop_tx(). This causes garbage to be put out on the
    serial console. To fix this, pass UART_TX_NOSTOP in flags, and manually
    call stop_tx() ourselves analogue to how a similar issue was fixed in
    commit 7be50f2e8f20 ("serial: mxs-auart: fix tx").
    
    Fixes: d11cc8c3c4b6 ("tty: serial: use uart_port_tx_limited()")
    Cc: [email protected]
    Signed-off-by: Jonas Gorski <[email protected]>
    Signed-off-by: Doug Brown <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

serial: core: introduce uart_port_tx_limited_flags() [+ + +]
Author: Jonas Gorski <[email protected]>
Date:   Thu Jun 6 12:56:32 2024 -0700

    serial: core: introduce uart_port_tx_limited_flags()
    
    commit 9bb43b9e8d9a288a214e9b17acc9e46fda3977cf upstream.
    
    Analogue to uart_port_tx_flags() introduced in commit 3ee07964d407
    ("serial: core: introduce uart_port_tx_flags()"), add a _flags variant
    for uart_port_tx_limited().
    
    Fixes: d11cc8c3c4b6 ("tty: serial: use uart_port_tx_limited()")
    Cc: [email protected]
    Signed-off-by: Jonas Gorski <[email protected]>
    Signed-off-by: Doug Brown <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

serial: imx: only set receiver level if it is zero [+ + +]
Author: Stefan Eichenberger <[email protected]>
Date:   Wed Jul 3 13:25:40 2024 +0200

    serial: imx: only set receiver level if it is zero
    
    commit 9706fc87b4cff0ac4f5d5d62327be83fe72e3108 upstream.
    
    With commit a81dbd0463ec ("serial: imx: set receiver level before
    starting uart") we set the receiver level to its default value. This
    caused a regression when using SDMA, where the receiver level is 9
    instead of 8 (default). This change will first check if the receiver
    level is zero and only then set it to the default. This still avoids the
    interrupt storm when the receiver level is zero.
    
    Fixes: a81dbd0463ec ("serial: imx: set receiver level before starting uart")
    Cc: stable <[email protected]>
    Signed-off-by: Stefan Eichenberger <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

serial: imx: set receiver level before starting uart [+ + +]
Author: Stefan Eichenberger <[email protected]>
Date:   Fri Jun 21 17:37:49 2024 +0200

    serial: imx: set receiver level before starting uart
    
    commit a81dbd0463eca317eee44985a66aa6cc2ce5c101 upstream.
    
    Set the receiver level to something > 0 before calling imx_uart_start_rx
    in rs485_config. This is necessary to avoid an interrupt storm that
    might prevent the system from booting. This was seen on an i.MX7 device
    when the rs485-rts-active-low property was active in the device tree.
    
    Fixes: 6d215f83e5fc ("serial: imx: warn user when using unsupported configuration")
    Cc: stable <[email protected]>
    Signed-off-by: Stefan Eichenberger <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
sh: rework sync_file_range ABI [+ + +]
Author: Arnd Bergmann <[email protected]>
Date:   Tue Jun 11 22:12:43 2024 +0200

    sh: rework sync_file_range ABI
    
    commit 30766f1105d6d2459c3b9fe34a3e52b637a72950 upstream.
    
    The unusual function calling conventions on SuperH ended up causing
    sync_file_range to have the wrong argument order, with the 'flags'
    argument getting sorted before 'nbytes' by the compiler.
    
    In userspace, I found that musl, glibc, uclibc and strace all expect the
    normal calling conventions with 'nbytes' last, so changing the kernel
    to match them should make all of those work.
    
    In order to be able to also fix libc implementations to work with existing
    kernels, they need to be able to tell which ABI is used. An easy way
    to do this is to add yet another system call using the sync_file_range2
    ABI that works the same on all architectures.
    
    Old user binaries can now work on new kernels, and new binaries can
    try the new sync_file_range2() to work with new kernels or fall back
    to the old sync_file_range() version if that doesn't exist.
    
    Cc: [email protected]
    Fixes: 75c92acdd5b1 ("sh: Wire up new syscalls.")
    Acked-by: John Paul Adrian Glaubitz <[email protected]>
    Signed-off-by: Arnd Bergmann <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
soc: ti: wkup_m3_ipc: Send NULL dummy message instead of pointer message [+ + +]
Author: Andrew Davis <[email protected]>
Date:   Mon Mar 25 11:55:07 2024 -0500

    soc: ti: wkup_m3_ipc: Send NULL dummy message instead of pointer message
    
    [ Upstream commit ddbf3204f600a4d1f153498f618369fca352ae00 ]
    
    mbox_send_message() sends a u32 bit message, not a pointer to a message.
    We only convert to a pointer type as a generic type. If we want to send
    a dummy message of 0, then simply send 0 (NULL).
    
    Signed-off-by: Andrew Davis <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Nishanth Menon <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
sparc: fix compat recv/recvfrom syscalls [+ + +]
Author: Arnd Bergmann <[email protected]>
Date:   Wed Jun 19 12:49:39 2024 +0200

    sparc: fix compat recv/recvfrom syscalls
    
    [ Upstream commit d6fbd26fb872ec518d25433a12e8ce8163e20909 ]
    
    sparc has the wrong compat version of recv() and recvfrom() for both the
    direct syscalls and socketcall().
    
    The direct syscalls just need to use the compat version. For socketcall,
    the same thing could be done, but it seems better to completely remove
    the custom assembler code for it and just use the same implementation that
    everyone else has.
    
    Fixes: 1dacc76d0014 ("net/compat/wext: send different messages to compat tasks")
    Signed-off-by: Arnd Bergmann <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

sparc: fix old compat_sys_select() [+ + +]
Author: Arnd Bergmann <[email protected]>
Date:   Wed Jun 19 14:07:30 2024 +0200

    sparc: fix old compat_sys_select()
    
    [ Upstream commit bae6428a9fffb2023191b0723e276cf1377a7c9f ]
    
    sparc has two identical select syscalls at numbers 93 and 230, respectively.
    During the conversion to the modern syscall.tbl format, the older one of the
    two broke in compat mode, and now refers to the native 64-bit syscall.
    
    Restore the correct behavior. This has very little effect, as glibc has
    been using the newer number anyway.
    
    Fixes: 6ff645dd683a ("sparc: add system call table generation support")
    Signed-off-by: Arnd Bergmann <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
SUNRPC: Fix backchannel reply, again [+ + +]
Author: Chuck Lever <[email protected]>
Date:   Wed Jun 19 09:51:08 2024 -0400

    SUNRPC: Fix backchannel reply, again
    
    [ Upstream commit 6ddc9deacc1312762c2edd9de00ce76b00f69f7c ]
    
    I still see "RPC: Could not send backchannel reply error: -110"
    quite often, along with slow-running tests. Debugging shows that the
    backchannel is still stumbling when it has to queue a callback reply
    on a busy transport.
    
    Note that every one of these timeouts causes a connection loss by
    virtue of the xprt_conditional_disconnect() call in that arm of
    call_cb_transmit_status().
    
    I found that setting to_maxval is necessary to get the RPC timeout
    logic to behave whenever to_exponential is not set.
    
    Fixes: 57331a59ac0d ("NFSv4.1: Use the nfs_client's rpc timeouts for backchannel")
    Signed-off-by: Chuck Lever <[email protected]>
    Reviewed-by: Benjamin Coddington <[email protected]>
    Signed-off-by: Trond Myklebust <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
syscalls: fix compat_sys_io_pgetevents_time64 usage [+ + +]
Author: Arnd Bergmann <[email protected]>
Date:   Thu Jun 20 14:16:37 2024 +0200

    syscalls: fix compat_sys_io_pgetevents_time64 usage
    
    commit d3882564a77c21eb746ba5364f3fa89b88de3d61 upstream.
    
    Using sys_io_pgetevents() as the entry point for compat mode tasks
    works almost correctly, but misses the sign extension for the min_nr
    and nr arguments.
    
    This was addressed on parisc by switching to
    compat_sys_io_pgetevents_time64() in commit 6431e92fc827 ("parisc:
    io_pgetevents_time64() needs compat syscall in 32-bit compat mode"),
    as well as by using more sophisticated system call wrappers on x86 and
    s390. However, arm64, mips, powerpc, sparc and riscv still have the
    same bug.
    
    Change all of them over to use compat_sys_io_pgetevents_time64()
    like parisc already does. This was clearly the intention when the
    function was originally added, but it got hooked up incorrectly in
    the tables.
    
    Cc: [email protected]
    Fixes: 48166e6ea47d ("y2038: add 64-bit time_t syscalls to all 32-bit architectures")
    Acked-by: Heiko Carstens <[email protected]> # s390
    Signed-off-by: Arnd Bergmann <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

syscalls: fix sys_fanotify_mark prototype [+ + +]
Author: Arnd Bergmann <[email protected]>
Date:   Sat Jun 29 21:48:41 2024 +0200

    syscalls: fix sys_fanotify_mark prototype
    
    [ Upstream commit 63e2f40c9e3187641afacde4153f54b3ee4dbc8c ]
    
    My earlier fix missed an incorrect function prototype that shows up on
    native 32-bit builds:
    
    In file included from fs/notify/fanotify/fanotify_user.c:14:
    include/linux/syscalls.h:248:25: error: conflicting types for 'sys_fanotify_mark'; have 'long int(int,  unsigned int,  u32,  u32,  int,  const char *)' {aka 'long int(int,  unsigned int,  unsigned int,  unsigned int,  int,  const char *)'}
     1924 | SYSCALL32_DEFINE6(fanotify_mark,
          | ^~~~~~~~~~~~~~~~~
    include/linux/syscalls.h:862:17: note: previous declaration of 'sys_fanotify_mark' with type 'long int(int,  unsigned int,  u64,  int, const char *)' {aka 'long int(int,  unsigned int,  long long unsigned int,  int,  const char *)'}
    
    On x86 and powerpc, the prototype is also wrong but hidden in an #ifdef,
    so it never caused problems.
    
    Add another alternative declaration that matches the conditional function
    definition.
    
    Fixes: 403f17a33073 ("parisc: use generic sys_fanotify_mark implementation")
    Cc: [email protected]
    Reported-by: Guenter Roeck <[email protected]>
    Reported-by: Geert Uytterhoeven <[email protected]>
    Reported-by: kernel test robot <[email protected]>
    Signed-off-by: Arnd Bergmann <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
tcp: fix tcp_rcv_fastopen_synack() to enter TCP_CA_Loss for failed TFO [+ + +]
Author: Neal Cardwell <[email protected]>
Date:   Mon Jun 24 14:43:23 2024 +0000

    tcp: fix tcp_rcv_fastopen_synack() to enter TCP_CA_Loss for failed TFO
    
    [ Upstream commit 5dfe9d273932c647bdc9d664f939af9a5a398cbc ]
    
    Testing determined that the recent commit 9e046bb111f1 ("tcp: clear
    tp->retrans_stamp in tcp_rcv_fastopen_synack()") has a race, and does
    not always ensure retrans_stamp is 0 after a TFO payload retransmit.
    
    If transmit completion for the SYN+data skb happens after the client
    TCP stack receives the SYNACK (which sometimes happens), then
    retrans_stamp can erroneously remain non-zero for the lifetime of the
    connection, causing a premature ETIMEDOUT later.
    
    Testing and tracing showed that the buggy scenario is the following
    somewhat tricky sequence:
    
    + Client attempts a TFO handshake. tcp_send_syn_data() sends SYN + TFO
      cookie + data in a single packet in the syn_data skb. It hands the
      syn_data skb to tcp_transmit_skb(), which makes a clone. Crucially,
      it then reuses the same original (non-clone) syn_data skb,
      transforming it by advancing the seq by one byte and removing the
      FIN bit, and enques the resulting payload-only skb in the
      sk->tcp_rtx_queue.
    
    + Client sets retrans_stamp to the start time of the three-way
      handshake.
    
    + Cookie mismatches or server has TFO disabled, and server only ACKs
      SYN.
    
    + tcp_ack() sees SYN is acked, tcp_clean_rtx_queue() clears
      retrans_stamp.
    
    + Since the client SYN was acked but not the payload, the TFO failure
      code path in tcp_rcv_fastopen_synack() tries to retransmit the
      payload skb.  However, in some cases the transmit completion for the
      clone of the syn_data (which had SYN + TFO cookie + data) hasn't
      happened.  In those cases, skb_still_in_host_queue() returns true
      for the retransmitted TFO payload, because the clone of the syn_data
      skb has not had its tx completetion.
    
    + Because skb_still_in_host_queue() finds skb_fclone_busy() is true,
      it sets the TSQ_THROTTLED bit and the retransmit does not happen in
      the tcp_rcv_fastopen_synack() call chain.
    
    + The tcp_rcv_fastopen_synack() code next implicitly assumes the
      retransmit process is finished, and sets retrans_stamp to 0 to clear
      it, but this is later overwritten (see below).
    
    + Later, upon tx completion, tcp_tsq_write() calls
      tcp_xmit_retransmit_queue(), which puts the retransmit in flight and
      sets retrans_stamp to a non-zero value.
    
    + The client receives an ACK for the retransmitted TFO payload data.
    
    + Since we're in CA_Open and there are no dupacks/SACKs/DSACKs/ECN to
      make tcp_ack_is_dubious() true and make us call
      tcp_fastretrans_alert() and reach a code path that clears
      retrans_stamp, retrans_stamp stays nonzero.
    
    + Later, if there is a TLP, RTO, RTO sequence, then the connection
      will suffer an early ETIMEDOUT due to the erroneously ancient
      retrans_stamp.
    
    The fix: this commit refactors the code to have
    tcp_rcv_fastopen_synack() retransmit by reusing the relevant parts of
    tcp_simple_retransmit() that enter CA_Loss (without changing cwnd) and
    call tcp_xmit_retransmit_queue(). We have tcp_simple_retransmit() and
    tcp_rcv_fastopen_synack() share code in this way because in both cases
    we get a packet indicating non-congestion loss (MTU reduction or TFO
    failure) and thus in both cases we want to retransmit as many packets
    as cwnd allows, without reducing cwnd. And given that retransmits will
    set retrans_stamp to a non-zero value (and may do so in a later
    calling context due to TSQ), we also want to enter CA_Loss so that we
    track when all retransmitted packets are ACked and clear retrans_stamp
    when that happens (to ensure later recurring RTOs are using the
    correct retrans_stamp and don't declare ETIMEDOUT prematurely).
    
    Fixes: 9e046bb111f1 ("tcp: clear tp->retrans_stamp in tcp_rcv_fastopen_synack()")
    Fixes: a7abf3cd76e1 ("tcp: consider using standard rtx logic in tcp_rcv_fastopen_synack()")
    Signed-off-by: Neal Cardwell <[email protected]>
    Signed-off-by: Eric Dumazet <[email protected]>
    Cc: Yuchung Cheng <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
tools/power turbostat: option '-n' is ambiguous [+ + +]
Author: David Arcari <[email protected]>
Date:   Mon May 20 14:57:49 2024 -0400

    tools/power turbostat: option '-n' is ambiguous
    
    [ Upstream commit ebb5b260af67c677700cd51be6845c2cab3edfbd ]
    
    In some cases specifying the '-n' command line argument will cause
    turbostat to fail.  For instance 'turbostat -n 1' works fine; however,
    'turbostat -n 1 -d' will fail.  This is the result of the first call
    to getopt_long_only() where "MP" is specified as the optstring.  This can
    be easily fixed by changing the optstring from "MP" to "MPn:" to remove
    ambiguity between the arguments.
    
    tools/power turbostat: option '-n' is ambiguous; possibilities: '-num_iterations' '-no-msr' '-no-perf'
    
    Fixes: a0e86c90b83c ("tools/power turbostat: Add --no-perf option")
    
    Signed-off-by: David Arcari <[email protected]>
    Signed-off-by: Len Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
tracing/net_sched: NULL pointer dereference in perf_trace_qdisc_reset() [+ + +]
Author: Yunseong Kim <[email protected]>
Date:   Tue Jun 25 02:33:23 2024 +0900

    tracing/net_sched: NULL pointer dereference in perf_trace_qdisc_reset()
    
    commit bab4923132feb3e439ae45962979c5d9d5c7c1f1 upstream.
    
    In the TRACE_EVENT(qdisc_reset) NULL dereference occurred from
    
     qdisc->dev_queue->dev <NULL> ->name
    
    This situation simulated from bunch of veths and Bluetooth disconnection
    and reconnection.
    
    During qdisc initialization, qdisc was being set to noop_queue.
    In veth_init_queue, the initial tx_num was reduced back to one,
    causing the qdisc reset to be called with noop, which led to the kernel
    panic.
    
    I've attached the GitHub gist link that C converted syz-execprogram
    source code and 3 log of reproduced vmcore-dmesg.
    
     https://gist.github.com/yskelg/cc64562873ce249cdd0d5a358b77d740
    
    Yeoreum and I use two fuzzing tool simultaneously.
    
    One process with syz-executor : https://github.com/google/syzkaller
    
     $ ./syz-execprog -executor=./syz-executor -repeat=1 -sandbox=setuid \
        -enable=none -collide=false log1
    
    The other process with perf fuzzer:
     https://github.com/deater/perf_event_tests/tree/master/fuzzer
    
     $ perf_event_tests/fuzzer/perf_fuzzer
    
    I think this will happen on the kernel version.
    
     Linux kernel version +v6.7.10, +v6.8, +v6.9 and it could happen in v6.10.
    
    This occurred from 51270d573a8d. I think this patch is absolutely
    necessary. Previously, It was showing not intended string value of name.
    
    I've reproduced 3 time from my fedora 40 Debug Kernel with any other module
    or patched.
    
     version: 6.10.0-0.rc2.20240608gitdc772f8237f9.29.fc41.aarch64+debug
    
    [ 5287.164555] veth0_vlan: left promiscuous mode
    [ 5287.164929] veth1_macvtap: left promiscuous mode
    [ 5287.164950] veth0_macvtap: left promiscuous mode
    [ 5287.164983] veth1_vlan: left promiscuous mode
    [ 5287.165008] veth0_vlan: left promiscuous mode
    [ 5287.165450] veth1_macvtap: left promiscuous mode
    [ 5287.165472] veth0_macvtap: left promiscuous mode
    [ 5287.165502] veth1_vlan: left promiscuous mode
    …
    [ 5297.598240] bridge0: port 2(bridge_slave_1) entered blocking state
    [ 5297.598262] bridge0: port 2(bridge_slave_1) entered forwarding state
    [ 5297.598296] bridge0: port 1(bridge_slave_0) entered blocking state
    [ 5297.598313] bridge0: port 1(bridge_slave_0) entered forwarding state
    [ 5297.616090] 8021q: adding VLAN 0 to HW filter on device bond0
    [ 5297.620405] bridge0: port 1(bridge_slave_0) entered disabled state
    [ 5297.620730] bridge0: port 2(bridge_slave_1) entered disabled state
    [ 5297.627247] 8021q: adding VLAN 0 to HW filter on device team0
    [ 5297.629636] bridge0: port 1(bridge_slave_0) entered blocking state
    …
    [ 5298.002798] bridge_slave_0: left promiscuous mode
    [ 5298.002869] bridge0: port 1(bridge_slave_0) entered disabled state
    [ 5298.309444] bond0 (unregistering): (slave bond_slave_0): Releasing backup interface
    [ 5298.315206] bond0 (unregistering): (slave bond_slave_1): Releasing backup interface
    [ 5298.320207] bond0 (unregistering): Released all slaves
    [ 5298.354296] hsr_slave_0: left promiscuous mode
    [ 5298.360750] hsr_slave_1: left promiscuous mode
    [ 5298.374889] veth1_macvtap: left promiscuous mode
    [ 5298.374931] veth0_macvtap: left promiscuous mode
    [ 5298.374988] veth1_vlan: left promiscuous mode
    [ 5298.375024] veth0_vlan: left promiscuous mode
    [ 5299.109741] team0 (unregistering): Port device team_slave_1 removed
    [ 5299.185870] team0 (unregistering): Port device team_slave_0 removed
    …
    [ 5300.155443] Bluetooth: hci3: unexpected cc 0x0c03 length: 249 > 1
    [ 5300.155724] Bluetooth: hci3: unexpected cc 0x1003 length: 249 > 9
    [ 5300.155988] Bluetooth: hci3: unexpected cc 0x1001 length: 249 > 9
    ….
    [ 5301.075531] team0: Port device team_slave_1 added
    [ 5301.085515] bridge0: port 1(bridge_slave_0) entered blocking state
    [ 5301.085531] bridge0: port 1(bridge_slave_0) entered disabled state
    [ 5301.085588] bridge_slave_0: entered allmulticast mode
    [ 5301.085800] bridge_slave_0: entered promiscuous mode
    [ 5301.095617] bridge0: port 1(bridge_slave_0) entered blocking state
    [ 5301.095633] bridge0: port 1(bridge_slave_0) entered disabled state
    …
    [ 5301.149734] bond0: (slave bond_slave_0): Enslaving as an active interface with an up link
    [ 5301.173234] bond0: (slave bond_slave_0): Enslaving as an active interface with an up link
    [ 5301.180517] bond0: (slave bond_slave_1): Enslaving as an active interface with an up link
    [ 5301.193481] hsr_slave_0: entered promiscuous mode
    [ 5301.204425] hsr_slave_1: entered promiscuous mode
    [ 5301.210172] debugfs: Directory 'hsr0' with parent 'hsr' already present!
    [ 5301.210185] Cannot create hsr debugfs directory
    [ 5301.224061] bond0: (slave bond_slave_1): Enslaving as an active interface with an up link
    [ 5301.246901] bond0: (slave bond_slave_0): Enslaving as an active interface with an up link
    [ 5301.255934] team0: Port device team_slave_0 added
    [ 5301.256480] team0: Port device team_slave_1 added
    [ 5301.256948] team0: Port device team_slave_0 added
    …
    [ 5301.435928] hsr_slave_0: entered promiscuous mode
    [ 5301.446029] hsr_slave_1: entered promiscuous mode
    [ 5301.455872] debugfs: Directory 'hsr0' with parent 'hsr' already present!
    [ 5301.455884] Cannot create hsr debugfs directory
    [ 5301.502664] hsr_slave_0: entered promiscuous mode
    [ 5301.513675] hsr_slave_1: entered promiscuous mode
    [ 5301.526155] debugfs: Directory 'hsr0' with parent 'hsr' already present!
    [ 5301.526164] Cannot create hsr debugfs directory
    [ 5301.563662] hsr_slave_0: entered promiscuous mode
    [ 5301.576129] hsr_slave_1: entered promiscuous mode
    [ 5301.580259] debugfs: Directory 'hsr0' with parent 'hsr' already present!
    [ 5301.580270] Cannot create hsr debugfs directory
    [ 5301.590269] 8021q: adding VLAN 0 to HW filter on device bond0
    
    [ 5301.595872] KASAN: null-ptr-deref in range [0x0000000000000130-0x0000000000000137]
    [ 5301.595877] Mem abort info:
    [ 5301.595881]   ESR = 0x0000000096000006
    [ 5301.595885]   EC = 0x25: DABT (current EL), IL = 32 bits
    [ 5301.595889]   SET = 0, FnV = 0
    [ 5301.595893]   EA = 0, S1PTW = 0
    [ 5301.595896]   FSC = 0x06: level 2 translation fault
    [ 5301.595900] Data abort info:
    [ 5301.595903]   ISV = 0, ISS = 0x00000006, ISS2 = 0x00000000
    [ 5301.595907]   CM = 0, WnR = 0, TnD = 0, TagAccess = 0
    [ 5301.595911]   GCS = 0, Overlay = 0, DirtyBit = 0, Xs = 0
    [ 5301.595915] [dfff800000000026] address between user and kernel address ranges
    [ 5301.595971] Internal error: Oops: 0000000096000006 [#1] SMP
    …
    [ 5301.596076] CPU: 2 PID: 102769 Comm:
    syz-executor.3 Kdump: loaded Tainted:
     G        W         -------  ---  6.10.0-0.rc2.20240608gitdc772f8237f9.29.fc41.aarch64+debug #1
    [ 5301.596080] Hardware name: VMware, Inc. VMware20,1/VBSA,
     BIOS VMW201.00V.21805430.BA64.2305221830 05/22/2023
    [ 5301.596082] pstate: 01400005 (nzcv daif +PAN -UAO -TCO +DIT -SSBS BTYPE=--)
    [ 5301.596085] pc : strnlen+0x40/0x88
    [ 5301.596114] lr : trace_event_get_offsets_qdisc_reset+0x6c/0x2b0
    [ 5301.596124] sp : ffff8000beef6b40
    [ 5301.596126] x29: ffff8000beef6b40 x28: dfff800000000000 x27: 0000000000000001
    [ 5301.596131] x26: 6de1800082c62bd0 x25: 1ffff000110aa9e0 x24: ffff800088554f00
    [ 5301.596136] x23: ffff800088554ec0 x22: 0000000000000130 x21: 0000000000000140
    [ 5301.596140] x20: dfff800000000000 x19: ffff8000beef6c60 x18: ffff7000115106d8
    [ 5301.596143] x17: ffff800121bad000 x16: ffff800080020000 x15: 0000000000000006
    [ 5301.596147] x14: 0000000000000002 x13: ffff0001f3ed8d14 x12: ffff700017ddeda5
    [ 5301.596151] x11: 1ffff00017ddeda4 x10: ffff700017ddeda4 x9 : ffff800082cc5eec
    [ 5301.596155] x8 : 0000000000000004 x7 : 00000000f1f1f1f1 x6 : 00000000f2f2f200
    [ 5301.596158] x5 : 00000000f3f3f3f3 x4 : ffff700017dded80 x3 : 00000000f204f1f1
    [ 5301.596162] x2 : 0000000000000026 x1 : 0000000000000000 x0 : 0000000000000130
    [ 5301.596166] Call trace:
    [ 5301.596175]  strnlen+0x40/0x88
    [ 5301.596179]  trace_event_get_offsets_qdisc_reset+0x6c/0x2b0
    [ 5301.596182]  perf_trace_qdisc_reset+0xb0/0x538
    [ 5301.596184]  __traceiter_qdisc_reset+0x68/0xc0
    [ 5301.596188]  qdisc_reset+0x43c/0x5e8
    [ 5301.596190]  netif_set_real_num_tx_queues+0x288/0x770
    [ 5301.596194]  veth_init_queues+0xfc/0x130 [veth]
    [ 5301.596198]  veth_newlink+0x45c/0x850 [veth]
    [ 5301.596202]  rtnl_newlink_create+0x2c8/0x798
    [ 5301.596205]  __rtnl_newlink+0x92c/0xb60
    [ 5301.596208]  rtnl_newlink+0xd8/0x130
    [ 5301.596211]  rtnetlink_rcv_msg+0x2e0/0x890
    [ 5301.596214]  netlink_rcv_skb+0x1c4/0x380
    [ 5301.596225]  rtnetlink_rcv+0x20/0x38
    [ 5301.596227]  netlink_unicast+0x3c8/0x640
    [ 5301.596231]  netlink_sendmsg+0x658/0xa60
    [ 5301.596234]  __sock_sendmsg+0xd0/0x180
    [ 5301.596243]  __sys_sendto+0x1c0/0x280
    [ 5301.596246]  __arm64_sys_sendto+0xc8/0x150
    [ 5301.596249]  invoke_syscall+0xdc/0x268
    [ 5301.596256]  el0_svc_common.constprop.0+0x16c/0x240
    [ 5301.596259]  do_el0_svc+0x48/0x68
    [ 5301.596261]  el0_svc+0x50/0x188
    [ 5301.596265]  el0t_64_sync_handler+0x120/0x130
    [ 5301.596268]  el0t_64_sync+0x194/0x198
    [ 5301.596272] Code: eb15001f 54000120 d343fc02 12000801 (38f46842)
    [ 5301.596285] SMP: stopping secondary CPUs
    [ 5301.597053] Starting crashdump kernel...
    [ 5301.597057] Bye!
    
    After applying our patch, I didn't find any kernel panic errors.
    
    We've found a simple reproducer
    
     # echo 1 > /sys/kernel/debug/tracing/events/qdisc/qdisc_reset/enable
    
     # ip link add veth0 type veth peer name veth1
    
     Error: Unknown device type.
    
    However, without our patch applied, I tested upstream 6.10.0-rc3 kernel
    using the qdisc_reset event and the ip command on my qemu virtual machine.
    
    This 2 commands makes always kernel panic.
    
    Linux version: 6.10.0-rc3
    
    [    0.000000] Linux version 6.10.0-rc3-00164-g44ef20baed8e-dirty
    (paran@fedora) (gcc (GCC) 14.1.1 20240522 (Red Hat 14.1.1-4), GNU ld
    version 2.41-34.fc40) #20 SMP PREEMPT Sat Jun 15 16:51:25 KST 2024
    
    Kernel panic message:
    
    [  615.236484] Internal error: Oops: 0000000096000005 [#1] PREEMPT SMP
    [  615.237250] Dumping ftrace buffer:
    [  615.237679]    (ftrace buffer empty)
    [  615.238097] Modules linked in: veth crct10dif_ce virtio_gpu
    virtio_dma_buf drm_shmem_helper drm_kms_helper zynqmp_fpga xilinx_can
    xilinx_spi xilinx_selectmap xilinx_core xilinx_pr_decoupler versal_fpga
    uvcvideo uvc videobuf2_vmalloc videobuf2_memops videobuf2_v4l2 videodev
    videobuf2_common mc usbnet deflate zstd ubifs ubi rcar_canfd rcar_can
    omap_mailbox ntb_msi_test ntb_hw_epf lattice_sysconfig_spi
    lattice_sysconfig ice40_spi gpio_xilinx dwmac_altr_socfpga mdio_regmap
    stmmac_platform stmmac pcs_xpcs dfl_fme_region dfl_fme_mgr dfl_fme_br
    dfl_afu dfl fpga_region fpga_bridge can can_dev br_netfilter bridge stp
    llc atl1c ath11k_pci mhi ath11k_ahb ath11k qmi_helpers ath10k_sdio
    ath10k_pci ath10k_core ath mac80211 libarc4 cfg80211 drm fuse backlight ipv6
    Jun 22 02:36:5[3   6k152.62-4sm98k4-0k]v  kCePUr:n e1l :P IUDn:a b4le6
    8t oC ohmma: nidpl eN oketr nteali nptaedg i6n.g1 0re.0q-urecs3t- 0at0
    1v6i4r-tgu4a4le fa2d0dbraeeds0se-dir tyd f#f2f08
      615.252376] Hardware name: linux,dummy-virt (DT)
    [  615.253220] pstate: 80400005 (Nzcv daif +PAN -UAO -TCO -DIT -SSBS
    BTYPE=--)
    [  615.254433] pc : strnlen+0x6c/0xe0
    [  615.255096] lr : trace_event_get_offsets_qdisc_reset+0x94/0x3d0
    [  615.256088] sp : ffff800080b269a0
    [  615.256615] x29: ffff800080b269a0 x28: ffffc070f3f98500 x27:
    0000000000000001
    [  615.257831] x26: 0000000000000010 x25: ffffc070f3f98540 x24:
    ffffc070f619cf60
    [  615.259020] x23: 0000000000000128 x22: 0000000000000138 x21:
    dfff800000000000
    [  615.260241] x20: ffffc070f631ad00 x19: 0000000000000128 x18:
    ffffc070f448b800
    [  615.261454] x17: 0000000000000000 x16: 0000000000000001 x15:
    ffffc070f4ba2a90
    [  615.262635] x14: ffff700010164d73 x13: 1ffff80e1e8d5eb3 x12:
    1ffff00010164d72
    [  615.263877] x11: ffff700010164d72 x10: dfff800000000000 x9 :
    ffffc070e85d6184
    [  615.265047] x8 : ffffc070e4402070 x7 : 000000000000f1f1 x6 :
    000000001504a6d3
    [  615.266336] x5 : ffff28ca21122140 x4 : ffffc070f5043ea8 x3 :
    0000000000000000
    [  615.267528] x2 : 0000000000000025 x1 : 0000000000000000 x0 :
    0000000000000000
    [  615.268747] Call trace:
    [  615.269180]  strnlen+0x6c/0xe0
    [  615.269767]  trace_event_get_offsets_qdisc_reset+0x94/0x3d0
    [  615.270716]  trace_event_raw_event_qdisc_reset+0xe8/0x4e8
    [  615.271667]  __traceiter_qdisc_reset+0xa0/0x140
    [  615.272499]  qdisc_reset+0x554/0x848
    [  615.273134]  netif_set_real_num_tx_queues+0x360/0x9a8
    [  615.274050]  veth_init_queues+0x110/0x220 [veth]
    [  615.275110]  veth_newlink+0x538/0xa50 [veth]
    [  615.276172]  __rtnl_newlink+0x11e4/0x1bc8
    [  615.276944]  rtnl_newlink+0xac/0x120
    [  615.277657]  rtnetlink_rcv_msg+0x4e4/0x1370
    [  615.278409]  netlink_rcv_skb+0x25c/0x4f0
    [  615.279122]  rtnetlink_rcv+0x48/0x70
    [  615.279769]  netlink_unicast+0x5a8/0x7b8
    [  615.280462]  netlink_sendmsg+0xa70/0x1190
    
    Yeoreum and I don't know if the patch we wrote will fix the underlying
    cause, but we think that priority is to prevent kernel panic happening.
    So, we're sending this patch.
    
    Fixes: 51270d573a8d ("tracing/net_sched: Fix tracepoints that save qdisc_dev() as a string")
    Link: https://lore.kernel.org/lkml/[email protected]/t/
    Cc: [email protected]
    Tested-by: Yunseong Kim <[email protected]>
    Signed-off-by: Yunseong Kim <[email protected]>
    Signed-off-by: Yeoreum Yun <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
tty: mcf: MCF54418 has 10 UARTS [+ + +]
Author: Jean-Michel Hautbois <[email protected]>
Date:   Thu Jun 20 18:29:59 2024 +0200

    tty: mcf: MCF54418 has 10 UARTS
    
    commit 7c92a8bd53f24d50c8cf4aba53bb75505b382fed upstream.
    
    Most of the colfires have up to 5 UARTs but MCF54418 has up-to 10 !
    Change the maximum value authorized.
    
    Signed-off-by: Jean-Michel Hautbois <[email protected]>
    Cc: stable <[email protected]>
    Fixes: 2545cf6e94b4 ("m68knommu: allow 4 coldfire serial ports")
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

tty: mxser: Remove __counted_by from mxser_board.ports[] [+ + +]
Author: Nathan Chancellor <[email protected]>
Date:   Wed May 29 14:29:42 2024 -0700

    tty: mxser: Remove __counted_by from mxser_board.ports[]
    
    commit 1c07c9be87dd3dd0634033bf08728b32465f08fb upstream.
    
    Work for __counted_by on generic pointers in structures (not just
    flexible array members) has started landing in Clang 19 (current tip of
    tree). During the development of this feature, a restriction was added
    to __counted_by to prevent the flexible array member's element type from
    including a flexible array member itself such as:
    
      struct foo {
        int count;
        char buf[];
      };
    
      struct bar {
        int count;
        struct foo data[] __counted_by(count);
      };
    
    because the size of data cannot be calculated with the standard array
    size formula:
    
      sizeof(struct foo) * count
    
    This restriction was downgraded to a warning but due to CONFIG_WERROR,
    it can still break the build. The application of __counted_by on the
    ports member of 'struct mxser_board' triggers this restriction,
    resulting in:
    
      drivers/tty/mxser.c:291:2: error: 'counted_by' should not be applied to an array with element of unknown size because 'struct mxser_port' is a struct type with a flexible array member. This will be an error in a future compiler version [-Werror,-Wbounds-safety-counted-by-elt-type-unknown-size]
        291 |         struct mxser_port ports[] __counted_by(nports);
            |         ^~~~~~~~~~~~~~~~~~~~~~~~~
      1 error generated.
    
    Remove this use of __counted_by to fix the warning/error. However,
    rather than remove it altogether, leave it commented, as it may be
    possible to support this in future compiler releases.
    
    Cc:  <[email protected]>
    Closes: https://github.com/ClangBuiltLinux/linux/issues/2026
    Fixes: f34907ecca71 ("mxser: Annotate struct mxser_board with __counted_by")
    Signed-off-by: Nathan Chancellor <[email protected]>
    Link: https://lore.kernel.org/r/20240529-drop-counted-by-ports-mxser-board-v1-1-0ab217f4da6d@kernel.org
    Signed-off-by: Kees Cook <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

tty: serial: 8250: Fix port count mismatch with the device [+ + +]
Author: Crescent Hsieh <[email protected]>
Date:   Mon Jun 17 14:30:58 2024 +0800

    tty: serial: 8250: Fix port count mismatch with the device
    
    commit 0ac18dac43103ab1df6d26ec9a781c0126f83ced upstream.
    
    Normally, the number of ports is indicated by the third digit of the
    device ID on Moxa PCI serial boards. For example, `0x1121` indicates a
    device with 2 ports.
    
    However, `CP116E_A_A` and `CP116E_A_B` are exceptions; they have 8
    ports, but the third digit of the device ID is `6`.
    
    This patch introduces a function to retrieve the number of ports on Moxa
    PCI serial boards, addressing the issue described above.
    
    Fixes: 37058fd5d239 ("tty: serial: 8250: Add support for MOXA Mini PCIe boards")
    Cc: stable <[email protected]>
    Signed-off-by: Crescent Hsieh <[email protected]>
    Reviewed-by: Andy Shevchenko <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
usb: atm: cxacru: fix endpoint checking in cxacru_bind() [+ + +]
Author: Nikita Zhandarovich <[email protected]>
Date:   Sun Jun 9 06:15:46 2024 -0700

    usb: atm: cxacru: fix endpoint checking in cxacru_bind()
    
    commit 2eabb655a968b862bc0c31629a09f0fbf3c80d51 upstream.
    
    Syzbot is still reporting quite an old issue [1] that occurs due to
    incomplete checking of present usb endpoints. As such, wrong
    endpoints types may be used at urb sumbitting stage which in turn
    triggers a warning in usb_submit_urb().
    
    Fix the issue by verifying that required endpoint types are present
    for both in and out endpoints, taking into account cmd endpoint type.
    
    Unfortunately, this patch has not been tested on real hardware.
    
    [1] Syzbot report:
    usb 1-1: BOGUS urb xfer, pipe 1 != type 3
    WARNING: CPU: 0 PID: 8667 at drivers/usb/core/urb.c:502 usb_submit_urb+0xed2/0x18a0 drivers/usb/core/urb.c:502
    Modules linked in:
    CPU: 0 PID: 8667 Comm: kworker/0:4 Not tainted 5.14.0-rc4-syzkaller #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
    Workqueue: usb_hub_wq hub_event
    RIP: 0010:usb_submit_urb+0xed2/0x18a0 drivers/usb/core/urb.c:502
    ...
    Call Trace:
     cxacru_cm+0x3c0/0x8e0 drivers/usb/atm/cxacru.c:649
     cxacru_card_status+0x22/0xd0 drivers/usb/atm/cxacru.c:760
     cxacru_bind+0x7ac/0x11a0 drivers/usb/atm/cxacru.c:1209
     usbatm_usb_probe+0x321/0x1ae0 drivers/usb/atm/usbatm.c:1055
     cxacru_usb_probe+0xdf/0x1e0 drivers/usb/atm/cxacru.c:1363
     usb_probe_interface+0x315/0x7f0 drivers/usb/core/driver.c:396
     call_driver_probe drivers/base/dd.c:517 [inline]
     really_probe+0x23c/0xcd0 drivers/base/dd.c:595
     __driver_probe_device+0x338/0x4d0 drivers/base/dd.c:747
     driver_probe_device+0x4c/0x1a0 drivers/base/dd.c:777
     __device_attach_driver+0x20b/0x2f0 drivers/base/dd.c:894
     bus_for_each_drv+0x15f/0x1e0 drivers/base/bus.c:427
     __device_attach+0x228/0x4a0 drivers/base/dd.c:965
     bus_probe_device+0x1e4/0x290 drivers/base/bus.c:487
     device_add+0xc2f/0x2180 drivers/base/core.c:3354
     usb_set_configuration+0x113a/0x1910 drivers/usb/core/message.c:2170
     usb_generic_driver_probe+0xba/0x100 drivers/usb/core/generic.c:238
     usb_probe_device+0xd9/0x2c0 drivers/usb/core/driver.c:293
    
    Reported-and-tested-by: [email protected]
    Fixes: 902ffc3c707c ("USB: cxacru: Use a bulk/int URB to access the command endpoint")
    Cc: stable <[email protected]>
    Signed-off-by: Nikita Zhandarovich <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: dwc3: core: remove lock of otg mode during gadget suspend/resume to avoid deadlock [+ + +]
Author: Meng Li <[email protected]>
Date:   Tue Jun 18 11:19:18 2024 +0800

    usb: dwc3: core: remove lock of otg mode during gadget suspend/resume to avoid deadlock
    
    commit 7838de15bb700c2898a7d741db9b1f3cbc86c136 upstream.
    
    When config CONFIG_USB_DWC3_DUAL_ROLE is selected, and trigger system
    to enter suspend status with below command:
    echo mem > /sys/power/state
    There will be a deadlock issue occurring. Detailed invoking path as
    below:
    dwc3_suspend_common()
        spin_lock_irqsave(&dwc->lock, flags);              <-- 1st
        dwc3_gadget_suspend(dwc);
            dwc3_gadget_soft_disconnect(dwc);
                spin_lock_irqsave(&dwc->lock, flags);      <-- 2nd
    This issue is exposed by commit c7ebd8149ee5 ("usb: dwc3: gadget: Fix
    NULL pointer dereference in dwc3_gadget_suspend") that removes the code
    of checking whether dwc->gadget_driver is NULL or not. It causes the
    following code is executed and deadlock occurs when trying to get the
    spinlock. In fact, the root cause is the commit 5265397f9442("usb: dwc3:
    Remove DWC3 locking during gadget suspend/resume") that forgot to remove
    the lock of otg mode. So, remove the redundant lock of otg mode during
    gadget suspend/resume.
    
    Fixes: 5265397f9442 ("usb: dwc3: Remove DWC3 locking during gadget suspend/resume")
    Cc: Xu Yang <[email protected]>
    Cc: [email protected]
    Signed-off-by: Meng Li <[email protected]>
    Acked-by: Thinh Nguyen <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: dwc3: core: Workaround for CSR read timeout [+ + +]
Author: Jos Wang <[email protected]>
Date:   Wed Jun 19 19:45:29 2024 +0800

    usb: dwc3: core: Workaround for CSR read timeout
    
    commit fc1d1a712b517bbcb383b1f1f7ef478e7d0579f2 upstream.
    
    This is a workaround for STAR 4846132, which only affects
    DWC_usb31 version2.00a operating in host mode.
    
    There is a problem in DWC_usb31 version 2.00a operating
    in host mode that would cause a CSR read timeout When CSR
    read coincides with RAM Clock Gating Entry. By disable
    Clock Gating, sacrificing power consumption for normal
    operation.
    
    Cc: stable <[email protected]> # 5.10.x: 1e43c86d: usb: dwc3: core: Add DWC31 version 2.00a controller
    Signed-off-by: Jos Wang <[email protected]>
    Acked-by: Thinh Nguyen <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: gadget: aspeed_udc: fix device address configuration [+ + +]
Author: Jeremy Kerr <[email protected]>
Date:   Thu Jun 13 12:20:47 2024 +0800

    usb: gadget: aspeed_udc: fix device address configuration
    
    commit dba7567c2fbbf10a4de2471cdb0e16e5572dc007 upstream.
    
    In the aspeed UDC setup, we configure the UDC hardware with the assigned
    USB device address.
    
    However, we have an off-by-one in the bitmask, so we're only setting the
    lower 6 bits of the address (USB addresses being 7 bits, and the
    hardware bitmask being bits 0:6).
    
    This means that device enumeration fails if the assigned address is
    greater than 64:
    
    [  344.607255] usb 1-1: new high-speed USB device number 63 using ehci-platform
    [  344.808459] usb 1-1: New USB device found, idVendor=cc00, idProduct=cc00, bcdDevice= 6.10
    [  344.817684] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
    [  344.825671] usb 1-1: Product: Test device
    [  344.831075] usb 1-1: Manufacturer: Test vendor
    [  344.836335] usb 1-1: SerialNumber: 00
    [  349.917181] usb 1-1: USB disconnect, device number 63
    [  352.036775] usb 1-1: new high-speed USB device number 64 using ehci-platform
    [  352.249432] usb 1-1: device descriptor read/all, error -71
    [  352.696740] usb 1-1: new high-speed USB device number 65 using ehci-platform
    [  352.909431] usb 1-1: device descriptor read/all, error -71
    
    Use the correct mask of 0x7f (rather than 0x3f), and generate this
    through the GENMASK macro, so we have numbers that correspond exactly
    to the hardware register definition.
    
    Fixes: 055276c13205 ("usb: gadget: add Aspeed ast2600 udc driver")
    Cc: [email protected]
    Reviewed-by: Neal Liu <[email protected]>
    Reviewed-by: Andrew Jeffery <[email protected]>
    Signed-off-by: Jeremy Kerr <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: gadget: printer: fix races against disable [+ + +]
Author: Oliver Neukum <[email protected]>
Date:   Thu Jun 20 13:40:26 2024 +0200

    usb: gadget: printer: fix races against disable
    
    commit e587a7633dfee8987a999cf253f7c52a8e09276c upstream.
    
    printer_read() and printer_write() guard against the race
    against disable() by checking the dev->interface flag,
    which in turn is guarded by a spinlock.
    These functions, however, drop the lock on multiple occasions.
    This means that the test has to be redone after reacquiring
    the lock and before doing IO.
    
    Add the tests.
    
    This also addresses CVE-2024-25741
    
    Fixes: 7f2ca14d2f9b9 ("usb: gadget: function: printer: Interface is disabled and returns error")
    Cc: stable <[email protected]>
    Signed-off-by: Oliver Neukum <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: gadget: printer: SS+ support [+ + +]
Author: Oliver Neukum <[email protected]>
Date:   Thu Jun 20 11:37:39 2024 +0200

    usb: gadget: printer: SS+ support
    
    commit fd80731e5e9d1402cb2f85022a6abf9b1982ec5f upstream.
    
    We need to treat super speed plus as super speed, not the default,
    which is full speed.
    
    Signed-off-by: Oliver Neukum <[email protected]>
    Cc: stable <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: musb: da8xx: fix a resource leak in probe() [+ + +]
Author: Dan Carpenter <[email protected]>
Date:   Mon Jun 17 12:31:30 2024 +0300

    usb: musb: da8xx: fix a resource leak in probe()
    
    commit de644a4a86be04ed8a43ef8267d0f7d021941c5e upstream.
    
    Call usb_phy_generic_unregister() if of_platform_populate() fails.
    
    Fixes: d6299b6efbf6 ("usb: musb: Add support of CPPI 4.1 DMA controller to DA8xx")
    Cc: stable <[email protected]>
    Signed-off-by: Dan Carpenter <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: typec: ucsi: Ack also failed Get Error commands [+ + +]
Author: Heikki Krogerus <[email protected]>
Date:   Fri May 31 13:46:52 2024 +0300

    usb: typec: ucsi: Ack also failed Get Error commands
    
    [ Upstream commit 8bdf8a42bca4f47646fd105a387ab6926948c7f1 ]
    
    It is possible that also the GET_ERROR command fails. If
    that happens, the command completion still needs to be
    acknowledged. Otherwise the interface will be stuck until
    it's reset.
    
    Reported-by: Ammy Yi <[email protected]>
    Fixes: bdc62f2bae8f ("usb: typec: ucsi: Simplified registration and I/O API")
    Cc: [email protected]
    Signed-off-by: Heikki Krogerus <[email protected]>
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

usb: typec: ucsi: glink: fix child node release in probe function [+ + +]
Author: Javier Carrasco <[email protected]>
Date:   Thu Jun 13 14:14:48 2024 +0200

    usb: typec: ucsi: glink: fix child node release in probe function
    
    commit c68942624e254a4e8a65afcd3c17ed95acda5489 upstream.
    
    The device_for_each_child_node() macro requires explicit calls to
    fwnode_handle_put() in all early exits of the loop if the child node is
    not required outside. Otherwise, the child node's refcount is not
    decremented and the resource is not released.
    
    The current implementation of pmic_glink_ucsi_probe() makes use of the
    device_for_each_child_node(), but does not release the child node on
    early returns. Add the missing calls to fwnode_handle_put().
    
    Cc: [email protected]
    Fixes: c6165ed2f425 ("usb: ucsi: glink: use the connector orientation GPIO to provide switch events")
    Signed-off-by: Javier Carrasco <[email protected]>
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Reviewed-by: Heikki Krogerus <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: typec: ucsi: Never send a lone connector change ack [+ + +]
Author: Christian A. Ehrhardt <[email protected]>
Date:   Wed Mar 27 23:45:53 2024 +0100

    usb: typec: ucsi: Never send a lone connector change ack
    
    [ Upstream commit de52aca4d9d56c3b2f00b638d457075914b1a227 ]
    
    Some PPM implementation do not like UCSI_ACK_CONNECTOR_CHANGE
    without UCSI_ACK_COMMAND_COMPLETE. Moreover, doing this is racy
    as it requires sending two UCSI_ACK_CC_CI commands in a row and
    the second one will be started with UCSI_CCI_ACK_COMPLETE already
    set in CCI.
    
    Bundle the UCSI_ACK_CONNECTOR_CHANGE with the UCSI_ACK_COMMAND_COMPLETE
    for the UCSI_GET_CONNECTOR_STATUS command that is sent while
    handling a connector change event.
    
    Signed-off-by: Christian A. Ehrhardt <[email protected]>
    Reviewed-by: Heikki Krogerus <[email protected]>
    Tested-by: Dmitry Baryshkov <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Stable-dep-of: 8bdf8a42bca4 ("usb: typec: ucsi: Ack also failed Get Error commands")
    Signed-off-by: Sasha Levin <[email protected]>
usb: ucsi: stm32: fix command completion handling [+ + +]
Author: Fabrice Gasnier <[email protected]>
Date:   Wed Jun 12 14:46:56 2024 +0200

    usb: ucsi: stm32: fix command completion handling
    
    commit 8e1ec117efdfd4b2f59f57bd0ad16b4edf5b963f upstream.
    
    Sometimes errors are seen, when doing DR swap, like:
    [   24.672481] ucsi-stm32g0-i2c 0-0035: UCSI_GET_PDOS failed (-5)
    [   24.720188] ucsi-stm32g0-i2c 0-0035: ucsi_handle_connector_change:
     GET_CONNECTOR_STATUS failed (-5)
    
    There may be some race, which lead to read CCI, before the command complete
    flag is set, hence returning -EIO. Similar fix has been done also in
    ucsi_acpi [1].
    
    In case of a spurious or otherwise delayed notification it is
    possible that CCI still reports the previous completion. The
    UCSI spec is aware of this and provides two completion bits in
    CCI, one for normal commands and one for acks. As acks and commands
    alternate the notification handler can determine if the completion
    bit is from the current command.
    
    To fix this add the ACK_PENDING bit for ucsi_stm32g0 and only complete
    commands if the completion bit matches.
    
    [1] https://lore.kernel.org/lkml/[email protected]/
    
    Fixes: 72849d4fcee7 ("usb: typec: ucsi: stm32g0: add support for stm32g0 controller")
    Signed-off-by: Fabrice Gasnier <[email protected]>
    Link: https://lore.kernel.org/stable/20240612124656.2305603-1-fabrice.gasnier%40foss.st.com
    Cc: stable <[email protected]>
    Reviewed-by: Heikki Krogerus <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
vduse: Temporarily fail if control queue feature requested [+ + +]
Author: Maxime Coquelin <[email protected]>
Date:   Tue Jan 9 12:10:24 2024 +0100

    vduse: Temporarily fail if control queue feature requested
    
    [ Upstream commit 56e71885b0349241c07631a7b979b61e81afab6a ]
    
    Virtio-net driver control queue implementation is not safe
    when used with VDUSE. If the VDUSE application does not
    reply to control queue messages, it currently ends up
    hanging the kernel thread sending this command.
    
    Some work is on-going to make the control queue
    implementation robust with VDUSE. Until it is completed,
    let's fail features check if control-queue feature is
    requested.
    
    Signed-off-by: Maxime Coquelin <[email protected]>
    Message-Id: <[email protected]>
    Signed-off-by: Michael S. Tsirkin <[email protected]>
    Acked-by: Eugenio Pérez <[email protected]>
    Reviewed-by: Xie Yongji <[email protected]>
    Acked-by: Jason Wang <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

vduse: validate block features only with block devices [+ + +]
Author: Maxime Coquelin <[email protected]>
Date:   Tue Jan 9 12:10:23 2024 +0100

    vduse: validate block features only with block devices
    
    [ Upstream commit a115b5716fc9a64652aa9cb332070087178ffafa ]
    
    This patch is preliminary work to enable network device
    type support to VDUSE.
    
    As VIRTIO_BLK_F_CONFIG_WCE shares the same value as
    VIRTIO_NET_F_HOST_TSO4, we need to restrict its check
    to Virtio-blk device type.
    
    Acked-by: Jason Wang <[email protected]>
    Reviewed-by: Xie Yongji <[email protected]>
    Reviewed-by: Eugenio Pérez <[email protected]>
    Signed-off-by: Maxime Coquelin <[email protected]>
    Message-Id: <[email protected]>
    Signed-off-by: Michael S. Tsirkin <[email protected]>
    Stable-dep-of: 56e71885b034 ("vduse: Temporarily fail if control queue feature requested")
    Signed-off-by: Sasha Levin <[email protected]>

 
vxlan: Pull inner IP header in vxlan_xmit_one(). [+ + +]
Author: Guillaume Nault <[email protected]>
Date:   Wed Jun 19 15:34:57 2024 +0200

    vxlan: Pull inner IP header in vxlan_xmit_one().
    
    [ Upstream commit 31392048f55f98cb01ca709d32d06d926ab9760a ]
    
    Ensure the inner IP header is part of the skb's linear data before
    setting old_iph. Otherwise, on a non-linear skb, old_iph could point
    outside of the packet data.
    
    Unlike classical VXLAN, which always encapsulates Ethernet packets,
    VXLAN-GPE can transport IP packets directly. In that case, we need to
    look at skb->protocol to figure out if an Ethernet header is present.
    
    Fixes: d342894c5d2f ("vxlan: virtual extensible lan")
    Signed-off-by: Guillaume Nault <[email protected]>
    Link: https://patch.msgid.link/2aa75f6fa62ac9dbe4f16ad5ba75dd04a51d4b99.1718804000.git.gnault@redhat.com
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
wifi: ieee80211: check for NULL in ieee80211_mle_size_ok() [+ + +]
Author: Johannes Berg <[email protected]>
Date:   Mon Mar 18 18:53:17 2024 +0200

    wifi: ieee80211: check for NULL in ieee80211_mle_size_ok()
    
    [ Upstream commit b7793a1a2f370c28b17d9554b58e9dc51afcfcbd ]
    
    For simplicity, we may want to pass a NULL element, and
    while we should then pass also a zero length, just be a
    bit more careful here.
    
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Miri Korenblit <[email protected]>
    Link: https://msgid.link/20240318184907.4d983653cb8d.Ic3ea99b60c61ac2f7d38cb9fd202a03c97a05601@changeid
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: rtw89: download firmware with five times retry [+ + +]
Author: Chia-Yuan Li <[email protected]>
Date:   Fri Mar 29 09:52:48 2024 +0800

    wifi: rtw89: download firmware with five times retry
    
    [ Upstream commit a9e1b0ec5bdeedcf062416af4081aa005f8bf1e7 ]
    
    After firmware boots, it reads keys info from efuse and checks secure
    checksum, but suddenly failed to access efuse resulting in probe failure,
    and driver throws messages:
    
      rtw89_8852be 0000:03:00.0: fw security fail
      rtw89_8852be 0000:03:00.0: download firmware fail
      rtw89_8852be 0000:03:00.0: [ERR]fwdl 0x1E0 = 0xe2
      rtw89_8852be 0000:03:00.0: [ERR]fwdl 0x83F0 = 0x210090
    
    Retry five times to resolve rare abnormal hardware state.
    
    Signed-off-by: Chia-Yuan Li <[email protected]>
    Signed-off-by: Ping-Ke Shih <[email protected]>
    Link: https://msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
workqueue: Increase worker desc's length to 32 [+ + +]
Author: Wenchao Hao <[email protected]>
Date:   Thu Jun 6 16:52:15 2024 +0800

    workqueue: Increase worker desc's length to 32
    
    [ Upstream commit 231035f18d6b80e5c28732a20872398116a54ecd ]
    
    Commit 31c89007285d ("workqueue.c: Increase workqueue name length")
    increased WQ_NAME_LEN from 24 to 32, but forget to increase
    WORKER_DESC_LEN, which would cause truncation when setting kworker's
    desc from workqueue_struct's name, process_one_work() for example.
    
    Fixes: 31c89007285d ("workqueue.c: Increase workqueue name length")
    
    Signed-off-by: Wenchao Hao <[email protected]>
    CC: Audra Mitchell <[email protected]>
    Signed-off-by: Tejun Heo <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
x86/fpu: Fix AMD X86_BUG_FXSAVE_LEAK fixup [+ + +]
Author: Uros Bizjak <[email protected]>
Date:   Fri Mar 15 09:18:23 2024 +0100

    x86/fpu: Fix AMD X86_BUG_FXSAVE_LEAK fixup
    
    [ Upstream commit 5d31174f3c8c465d9dbe88f6b9d1fe5716f44981 ]
    
    The assembly snippet in restore_fpregs_from_fpstate() that implements
    X86_BUG_FXSAVE_LEAK fixup loads the value from a random variable,
    preferably the one that is already in the L1 cache.
    
    However, the access to fpinit_state via *fpstate pointer is not
    implemented correctly. The "m" asm constraint requires dereferenced
    pointer variable, otherwise the compiler just reloads the value
    via temporary stack slot. The current asm code reflects this:
    
         mov    %rdi,(%rsp)
         ...
         fildl  (%rsp)
    
    With dereferenced pointer variable, the code does what the
    comment above the asm snippet says:
    
         fildl  (%rdi)
    
    Also, remove the pointless %P operand modifier. The modifier is
    ineffective on non-symbolic references - it was used to prevent
    %rip-relative addresses in .altinstr sections, but FILDL in the
    .text section can use %rip-relative addresses without problems.
    
    Signed-off-by: Uros Bizjak <[email protected]>
    Signed-off-by: Ingo Molnar <[email protected]>
    Cc: Andy Lutomirski <[email protected]>
    Cc: H. Peter Anvin <[email protected]>
    Cc: Linus Torvalds <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
x86: stop playing stack games in profile_pc() [+ + +]
Author: Linus Torvalds <[email protected]>
Date:   Fri Jun 28 14:27:22 2024 -0700

    x86: stop playing stack games in profile_pc()
    
    [ Upstream commit 093d9603b60093a9aaae942db56107f6432a5dca ]
    
    The 'profile_pc()' function is used for timer-based profiling, which
    isn't really all that relevant any more to begin with, but it also ends
    up making assumptions based on the stack layout that aren't necessarily
    valid.
    
    Basically, the code tries to account the time spent in spinlocks to the
    caller rather than the spinlock, and while I support that as a concept,
    it's not worth the code complexity or the KASAN warnings when no serious
    profiling is done using timers anyway these days.
    
    And the code really does depend on stack layout that is only true in the
    simplest of cases.  We've lost the comment at some point (I think when
    the 32-bit and 64-bit code was unified), but it used to say:
    
            Assume the lock function has either no stack frame or a copy
            of eflags from PUSHF.
    
    which explains why it just blindly loads a word or two straight off the
    stack pointer and then takes a minimal look at the values to just check
    if they might be eflags or the return pc:
    
            Eflags always has bits 22 and up cleared unlike kernel addresses
    
    but that basic stack layout assumption assumes that there isn't any lock
    debugging etc going on that would complicate the code and cause a stack
    frame.
    
    It causes KASAN unhappiness reported for years by syzkaller [1] and
    others [2].
    
    With no real practical reason for this any more, just remove the code.
    
    Just for historical interest, here's some background commits relating to
    this code from 2006:
    
      0cb91a229364 ("i386: Account spinlocks to the caller during profiling for !FP kernels")
      31679f38d886 ("Simplify profile_pc on x86-64")
    
    and a code unification from 2009:
    
      ef4512882dbe ("x86: time_32/64.c unify profile_pc")
    
    but the basics of this thing actually goes back to before the git tree.
    
    Link: https://syzkaller.appspot.com/bug?extid=84fe685c02cd112a2ac3 [1]
    Link: https://lore.kernel.org/all/CAK55_s7Xyq=nh97=K=G1sxueOFrJDAvPOJAL4TPTCAYvmxO9_A@mail.gmail.com/ [2]
    Signed-off-by: Linus Torvalds <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
xdp: Remove WARN() from __xdp_reg_mem_model() [+ + +]
Author: Daniil Dulov <[email protected]>
Date:   Mon Jun 24 11:07:47 2024 +0300

    xdp: Remove WARN() from __xdp_reg_mem_model()
    
    [ Upstream commit 7e9f79428372c6eab92271390851be34ab26bfb4 ]
    
    syzkaller reports a warning in __xdp_reg_mem_model().
    
    The warning occurs only if __mem_id_init_hash_table() returns an error. It
    returns the error in two cases:
    
      1. memory allocation fails;
      2. rhashtable_init() fails when some fields of rhashtable_params
         struct are not initialized properly.
    
    The second case cannot happen since there is a static const rhashtable_params
    struct with valid fields. So, warning is only triggered when there is a
    problem with memory allocation.
    
    Thus, there is no sense in using WARN() to handle this error and it can be
    safely removed.
    
    WARNING: CPU: 0 PID: 5065 at net/core/xdp.c:299 __xdp_reg_mem_model+0x2d9/0x650 net/core/xdp.c:299
    
    CPU: 0 PID: 5065 Comm: syz-executor883 Not tainted 6.8.0-syzkaller-05271-gf99c5f563c17 #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 03/27/2024
    RIP: 0010:__xdp_reg_mem_model+0x2d9/0x650 net/core/xdp.c:299
    
    Call Trace:
     xdp_reg_mem_model+0x22/0x40 net/core/xdp.c:344
     xdp_test_run_setup net/bpf/test_run.c:188 [inline]
     bpf_test_run_xdp_live+0x365/0x1e90 net/bpf/test_run.c:377
     bpf_prog_test_run_xdp+0x813/0x11b0 net/bpf/test_run.c:1267
     bpf_prog_test_run+0x33a/0x3b0 kernel/bpf/syscall.c:4240
     __sys_bpf+0x48d/0x810 kernel/bpf/syscall.c:5649
     __do_sys_bpf kernel/bpf/syscall.c:5738 [inline]
     __se_sys_bpf kernel/bpf/syscall.c:5736 [inline]
     __x64_sys_bpf+0x7c/0x90 kernel/bpf/syscall.c:5736
     do_syscall_64+0xfb/0x240
     entry_SYSCALL_64_after_hwframe+0x6d/0x75
    
    Found by Linux Verification Center (linuxtesting.org) with syzkaller.
    
    Fixes: 8d5d88527587 ("xdp: rhashtable with allocator ID to pointer mapping")
    Signed-off-by: Daniil Dulov <[email protected]>
    Signed-off-by: Daniel Borkmann <[email protected]>
    Acked-by: Jesper Dangaard Brouer <[email protected]>
    Link: https://lore.kernel.org/all/[email protected]
    Link: https://lore.kernel.org/bpf/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>