Skip to content
  1. Dec 08, 2023
    • Willem de Bruijn's avatar
      selftests/net: ipsec: fix constant out of range · 249ceee9
      Willem de Bruijn authored
      [ Upstream commit 08855981 ]
      
      Fix a small compiler warning.
      
      nr_process must be a signed long: it is assigned a signed long by
      strtol() and is compared against LONG_MIN and LONG_MAX.
      
      ipsec.c:2280:65:
          error: result of comparison of constant -9223372036854775808
          with expression of type 'unsigned int' is always false
          [-Werror,-Wtautological-constant-out-of-range-compare]
      
        if ((errno == ERANGE && (nr_process == LONG_MAX || nr_process == LONG_MIN))
      
      Fixes: bc2652b7
      
       ("selftest/net/xfrm: Add test for ipsec tunnel")
      Signed-off-by: default avatarWillem de Bruijn <willemb@google.com>
      Reviewed-by: default avatarDmitry Safonov <0x7f454c46@gmail.com>
      Link: https://lore.kernel.org/r/20231124171645.1011043-2-willemdebruijn.kernel@gmail.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      249ceee9
    • Dmitry Antipov's avatar
      uapi: propagate __struct_group() attributes to the container union · e01249a8
      Dmitry Antipov authored
      [ Upstream commit 4e86f32a
      
       ]
      
      Recently the kernel test robot has reported an ARM-specific BUILD_BUG_ON()
      in an old and unmaintained wil6210 wireless driver. The problem comes from
      the structure packing rules of old ARM ABI ('-mabi=apcs-gnu'). For example,
      the following structure is packed to 18 bytes instead of 16:
      
      struct poorly_packed {
              unsigned int a;
              unsigned int b;
              unsigned short c;
              union {
                      struct {
                              unsigned short d;
                              unsigned int e;
                      } __attribute__((packed));
                      struct {
                              unsigned short d;
                              unsigned int e;
                      } __attribute__((packed)) inner;
              };
      } __attribute__((packed));
      
      To fit it into 16 bytes, it's required to add packed attribute to the
      container union as well:
      
      struct poorly_packed {
              unsigned int a;
              unsigned int b;
              unsigned short c;
              union {
                      struct {
                              unsigned short d;
                              unsigned int e;
                      } __attribute__((packed));
                      struct {
                              unsigned short d;
                              unsigned int e;
                      } __attribute__((packed)) inner;
              } __attribute__((packed));
      } __attribute__((packed));
      
      Thanks to Andrew Pinski of GCC team for sorting the things out at
      https://gcc.gnu.org/pipermail/gcc/2023-November/242888.html.
      
      Reported-by: default avatarkernel test robot <lkp@intel.com>
      Closes: https://lore.kernel.org/oe-kbuild-all/202311150821.cI4yciFE-lkp@intel.com
      Signed-off-by: default avatarDmitry Antipov <dmantipov@yandex.ru>
      Link: https://lore.kernel.org/r/20231120110607.98956-1-dmantipov@yandex.ru
      Fixes: 50d7bd38
      
       ("stddef: Introduce struct_group() helper macro")
      Signed-off-by: default avatarKees Cook <keescook@chromium.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      e01249a8
    • Ioana Ciornei's avatar
      dpaa2-eth: increase the needed headroom to account for alignment · fd91b48f
      Ioana Ciornei authored
      [ Upstream commit f422abe3 ]
      
      Increase the needed headroom to account for a 64 byte alignment
      restriction which, with this patch, we make mandatory on the Tx path.
      The case in which the amount of headroom needed is not available is
      already handled by the driver which instead sends a S/G frame with the
      first buffer only holding the SW and HW annotation areas.
      
      Without this patch, we can empirically see data corruption happening
      between Tx and Tx confirmation which sometimes leads to the SW
      annotation area being overwritten.
      
      Since this is an old IP where the hardware team cannot help to
      understand the underlying behavior, we make the Tx alignment mandatory
      for all frames to avoid the crash on Tx conf. Also, remove the comment
      that suggested that this is just an optimization.
      
      This patch also sets the needed_headroom net device field to the usual
      value that the driver would need on the Tx path:
      	- 64 bytes for the software annotation area
      	- 64 bytes to account for a 64 byte aligned buffer address
      
      Fixes: 6e2387e8
      
       ("staging: fsl-dpaa2/eth: Add Freescale DPAA2 Ethernet driver")
      Closes: https://lore.kernel.org/netdev/aa784d0c-85eb-4e5d-968b-c8f74fa86be6@gin.de/
      Signed-off-by: default avatarIoana Ciornei <ioana.ciornei@nxp.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      fd91b48f
    • Zhengchao Shao's avatar
      ipv4: igmp: fix refcnt uaf issue when receiving igmp query packet · 94445d95
      Zhengchao Shao authored
      [ Upstream commit e2b706c6 ]
      
      When I perform the following test operations:
      1.ip link add br0 type bridge
      2.brctl addif br0 eth0
      3.ip addr add 239.0.0.1/32 dev eth0
      4.ip addr add 239.0.0.1/32 dev br0
      5.ip addr add 224.0.0.1/32 dev br0
      6.while ((1))
          do
              ifconfig br0 up
              ifconfig br0 down
          done
      7.send IGMPv2 query packets to port eth0 continuously. For example,
      ./mausezahn ethX -c 0 "01 00 5e 00 00 01 00 72 19 88 aa 02 08 00 45 00 00
      1c 00 01 00 00 01 02 0e 7f c0 a8 0a b7 e0 00 00 01 11 64 ee 9b 00 00 00 00"
      
      The preceding tests may trigger the refcnt uaf issue of the mc list. The
      stack is as follows:
      	refcount_t: addition on 0; use-after-free.
      	WARNING: CPU: 21 PID: 144 at lib/refcount.c:25 refcount_warn_saturate (lib/refcount.c:25)
      	CPU: 21 PID: 144 Comm: ksoftirqd/21 Kdump: loaded Not tainted 6.7.0-rc1-next-20231117-dirty #80
      	Hardware name: Red Hat KVM, BIOS 0.5.1 01/01/2011
      	RIP: 0010:refcount_warn_saturate (lib/refcount.c:25)
      	RSP: 0018:ffffb68f00657910 EFLAGS: 00010286
      	RAX: 0000000000000000 RBX: ffff8a00c3bf96c0 RCX: ffff8a07b6160908
      	RDX: 00000000ffffffd8 RSI: 0000000000000027 RDI: ffff8a07b6160900
      	RBP: ffff8a00cba36862 R08: 0000000000000000 R09: 00000000ffff7fff
      	R10: ffffb68f006577c0 R11: ffffffffb0fdcdc8 R12: ffff8a00c3bf9680
      	R13: ffff8a00c3bf96f0 R14: 0000000000000000 R15: ffff8a00d8766e00
      	FS:  0000000000000000(0000) GS:ffff8a07b6140000(0000) knlGS:0000000000000000
      	CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      	CR2: 000055f10b520b28 CR3: 000000039741a000 CR4: 00000000000006f0
      	Call Trace:
      	<TASK>
      	igmp_heard_query (net/ipv4/igmp.c:1068)
      	igmp_rcv (net/ipv4/igmp.c:1132)
      	ip_protocol_deliver_rcu (net/ipv4/ip_input.c:205)
      	ip_local_deliver_finish (net/ipv4/ip_input.c:234)
      	__netif_receive_skb_one_core (net/core/dev.c:5529)
      	netif_receive_skb_internal (net/core/dev.c:5729)
      	netif_receive_skb (net/core/dev.c:5788)
      	br_handle_frame_finish (net/bridge/br_input.c:216)
      	nf_hook_bridge_pre (net/bridge/br_input.c:294)
      	__netif_receive_skb_core (net/core/dev.c:5423)
      	__netif_receive_skb_list_core (net/core/dev.c:5606)
      	__netif_receive_skb_list (net/core/dev.c:5674)
      	netif_receive_skb_list_internal (net/core/dev.c:5764)
      	napi_gro_receive (net/core/gro.c:609)
      	e1000_clean_rx_irq (drivers/net/ethernet/intel/e1000/e1000_main.c:4467)
      	e1000_clean (drivers/net/ethernet/intel/e1000/e1000_main.c:3805)
      	__napi_poll (net/core/dev.c:6533)
      	net_rx_action (net/core/dev.c:6735)
      	__do_softirq (kernel/softirq.c:554)
      	run_ksoftirqd (kernel/softirq.c:913)
      	smpboot_thread_fn (kernel/smpboot.c:164)
      	kthread (kernel/kthread.c:388)
      	ret_from_fork (arch/x86/kernel/process.c:153)
      	ret_from_fork_asm (arch/x86/entry/entry_64.S:250)
      	</TASK>
      
      The root causes are as follows:
      Thread A					Thread B
      ...						netif_receive_skb
      br_dev_stop					...
          br_multicast_leave_snoopers			...
              __ip_mc_dec_group			...
                  __igmp_group_dropped		igmp_rcv
                      igmp_stop_timer			    igmp_heard_query         //ref = 1
                      ip_ma_put			        igmp_mod_timer
                          refcount_dec_and_test	            igmp_start_timer //ref = 0
      			...                                     refcount_inc //ref increases from 0
      When the device receives an IGMPv2 Query message, it starts the timer
      immediately, regardless of whether the device is running. If the device is
      down and has left the multicast group, it will cause the mc list refcount
      uaf issue.
      
      Fixes: 1da177e4
      
       ("Linux-2.6.12-rc2")
      Signed-off-by: default avatarZhengchao Shao <shaozhengchao@huawei.com>
      Reviewed-by: default avatarEric Dumazet <edumazet@google.com>
      Reviewed-by: default avatarHangbin Liu <liuhangbin@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      94445d95
    • Niklas Neronin's avatar
      usb: config: fix iteration issue in 'usb_get_bos_descriptor()' · f89fef77
      Niklas Neronin authored
      [ Upstream commit 974bba5c ]
      
      The BOS descriptor defines a root descriptor and is the base descriptor for
      accessing a family of related descriptors.
      
      Function 'usb_get_bos_descriptor()' encounters an iteration issue when
      skipping the 'USB_DT_DEVICE_CAPABILITY' descriptor type. This results in
      the same descriptor being read repeatedly.
      
      To address this issue, a 'goto' statement is introduced to ensure that the
      pointer and the amount read is updated correctly. This ensures that the
      function iterates to the next descriptor instead of reading the same
      descriptor repeatedly.
      
      Cc: stable@vger.kernel.org
      Fixes: 3dd550a2
      
       ("USB: usbcore: Fix slab-out-of-bounds bug during device reset")
      Signed-off-by: default avatarNiklas Neronin <niklas.neronin@linux.intel.com>
      Acked-by: default avatarMathias Nyman <mathias.nyman@linux.intel.com>
      Reviewed-by: default avatarAlan Stern <stern@rowland.harvard.edu>
      Link: https://lore.kernel.org/r/20231115121325.471454-1-niklas.neronin@linux.intel.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      f89fef77
    • Alan Stern's avatar
      USB: core: Change configuration warnings to notices · 9aff7c51
      Alan Stern authored
      [ Upstream commit 7a09c126
      
       ]
      
      It has been pointed out that the kernel log messages warning about
      problems in USB configuration and related descriptors are vexing for
      users.  The warning log level has a fairly high priority, but the user
      can do nothing to fix the underlying errors in the device's firmware.
      
      To reduce the amount of useless information produced by tools that
      filter high-priority log messages, we can change these warnings to
      notices, i.e., change dev_warn() to dev_notice().  The same holds for
      a few messages that currently use dev_err(): Unless they indicate a
      failure that might make a device unusable (such as inability to
      transfer a config descriptor), change them to dev_notice() also.
      
      Link: https://bugzilla.kernel.org/show_bug.cgi?id=216630
      Suggested-by: default avatarArtem S. Tashkinov <aros@gmx.com>
      Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
      Link: https://lore.kernel.org/r/Y2KzPx0h6z1jXCuN@rowland.harvard.edu
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Stable-dep-of: 974bba5c
      
       ("usb: config: fix iteration issue in 'usb_get_bos_descriptor()'")
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      9aff7c51
    • Johan Hovold's avatar
      USB: xhci-plat: fix legacy PHY double init · c89b34ee
      Johan Hovold authored
      [ Upstream commit 16b7e0cc ]
      
      Commits 7b8ef22e ("usb: xhci: plat: Add USB phy support") and
      9134c1fd ("usb: xhci: plat: Add USB 3.0 phy support") added support
      for looking up legacy PHYs from the sysdev devicetree node and
      initialising them.
      
      This broke drivers such as dwc3 which manages PHYs themself as the PHYs
      would now be initialised twice, something which specifically can lead to
      resources being left enabled during suspend (e.g. with the
      usb_phy_generic PHY driver).
      
      As the dwc3 driver uses driver-name matching for the xhci platform
      device, fix this by only looking up and initialising PHYs for devices
      that have been matched using OF.
      
      Note that checking that the platform device has a devicetree node would
      currently be sufficient, but that could lead to subtle breakages in case
      anyone ever tries to reuse an ancestor's node.
      
      Fixes: 7b8ef22e ("usb: xhci: plat: Add USB phy support")
      Fixes: 9134c1fd
      
       ("usb: xhci: plat: Add USB 3.0 phy support")
      Cc: stable@vger.kernel.org      # 4.1
      Cc: Maxime Ripard <mripard@kernel.org>
      Cc: Stanley Chang <stanley_chang@realtek.com>
      Signed-off-by: default avatarJohan Hovold <johan+linaro@kernel.org>
      Tested-by: default avatarStefan Eichenberger <stefan.eichenberger@toradex.com>
      Tested-by: default avatarStanley Chang <stanley_chang@realtek.com>
      Link: https://lore.kernel.org/r/20231103164323.14294-1-johan+linaro@kernel.org
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      c89b34ee
    • Johannes Berg's avatar
      wifi: cfg80211: fix CQM for non-range use · 307a6525
      Johannes Berg authored
      commit 7e7efdda upstream.
      
      My prior race fix here broke CQM when ranges aren't used, as
      the reporting worker now requires the cqm_config to be set in
      the wdev, but isn't set when there's no range configured.
      
      Rather than continuing to special-case the range version, set
      the cqm_config always and configure accordingly, also tracking
      if range was used or not to be able to clear the configuration
      appropriately with the same API, which was actually not right
      if both were implemented by a driver for some reason, as is
      the case with mac80211 (though there the implementations are
      equivalent so it doesn't matter.)
      
      Also, the original multiple-RSSI commit lost checking for the
      callback, so might have potentially crashed if a driver had
      neither implementation, and userspace tried to use it despite
      not being advertised as supported.
      
      Cc: stable@vger.kernel.org
      Fixes: 4a4b8169 ("cfg80211: Accept multiple RSSI thresholds for CQM")
      Fixes: 37c20b2e
      
       ("wifi: cfg80211: fix cqm_config access race")
      Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      307a6525
    • Hugo Villeneuve's avatar
      serial: sc16is7xx: add missing support for rs485 devicetree properties · e8c1105c
      Hugo Villeneuve authored
      commit b4a77830
      
       upstream.
      
      Retrieve rs485 devicetree properties on registration of sc16is7xx ports in
      case they are attached to an rs485 transceiver.
      
      Signed-off-by: default avatarHugo Villeneuve <hvilleneuve@dimonoff.com>
      Reviewed-by: default avatarIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
      Reviewed-by: default avatarLech Perczak <lech.perczak@camlingroup.com>
      Tested-by: default avatarLech Perczak <lech.perczak@camlingroup.com>
      Link: https://lore.kernel.org/r/20230807214556.540627-7-hugo@hugovil.com
      Cc: Hugo Villeneuve <hugo@hugovil.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      e8c1105c
    • Hui Wang's avatar
      serial: sc16is7xx: Put IOControl register into regmap_volatile · 55061c32
      Hui Wang authored
      commit 77a82ceb
      
       upstream.
      
      According to the IOControl register bits description in the page 31 of
      the product datasheet, we know the bit 3 of IOControl register is
      softreset, this bit will self-clearing once the reset finish.
      
      In the probe, the softreset bit is set, and when we read this register
      from debugfs/regmap interface, we found the softreset bit is still
      setting, this confused us for a while. Finally we found this register
      is cached, to read the real value from register, we could put it
      into the regmap_volatile().
      
      Signed-off-by: default avatarHui Wang <hui.wang@canonical.com>
      Link: https://lore.kernel.org/r/20230724034727.17335-1-hui.wang@canonical.com
      Cc: Hugo Villeneuve <hugo@hugovil.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      55061c32
    • Hugo Villeneuve's avatar
      auxdisplay: hd44780: move cursor home after clear display command · a491c7be
      Hugo Villeneuve authored
      commit 35b464e3
      
       upstream.
      
      The DISPLAY_CLEAR command on the NewHaven NHD-0220DZW-AG5 display
      does NOT change the DDRAM address to 00h (home position) like the
      standard Hitachi HD44780 controller. As a consequence, the starting
      position of the initial string LCD_INIT_TEXT is not guaranteed to be
      at 0,0 depending on where the cursor was before the DISPLAY_CLEAR
      command.
      
      Extract of DISPLAY_CLEAR command from datasheets of:
      
          Hitachi HD44780:
              ... It then sets DDRAM address 0 into the address counter...
      
          NewHaven NHD-0220DZW-AG5 datasheet:
      	... This instruction does not change the DDRAM Address
      
      Move the cursor home after sending DISPLAY_CLEAR command to support
      non-standard LCDs.
      
      Signed-off-by: default avatarHugo Villeneuve <hvilleneuve@dimonoff.com>
      Reviewed-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
      Tested-by: default avatarDavid Reaver <me@davidreaver.com>
      Link: https://lore.kernel.org/r/20230722180925.1408885-1-hugo@hugovil.com
      Signed-off-by: default avatarMiguel Ojeda <ojeda@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      a491c7be
    • Max Nguyen's avatar
      Input: xpad - add HyperX Clutch Gladiate Support · 7f211677
      Max Nguyen authored
      commit e28a0974
      
       upstream.
      
      Add HyperX controller support to xpad_device and xpad_table.
      
      Suggested-by: default avatarChris Toledanes <chris.toledanes@hp.com>
      Reviewed-by: default avatarCarl Ng <carl.ng@hp.com>
      Signed-off-by: default avatarMax Nguyen <maxwell.nguyen@hp.com>
      Reviewed-by: default avatarRahul Rameshbabu <rrameshbabu@nvidia.com>
      Link: https://lore.kernel.org/r/20230906231514.4291-1-hphyperxdev@gmail.com
      Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      7f211677
    • David Sterba's avatar
      btrfs: fix 64bit compat send ioctl arguments not initializing version member · 7a105de2
      David Sterba authored
      commit 5de0434b upstream.
      
      When the send protocol versioning was added in 5.16 e77fbf99
      ("btrfs: send: prepare for v2 protocol"), the 32/64bit compat code was
      not updated (added by 2351f431 ("btrfs: fix send ioctl on 32bit with
      64bit kernel")), missing the version struct member. The compat code is
      probably rarely used, nobody reported any bugs.
      
      Found by tool https://github.com/jirislaby/clang-struct .
      
      Fixes: e77fbf99
      
       ("btrfs: send: prepare for v2 protocol")
      CC: stable@vger.kernel.org # 6.1+
      Reviewed-by: default avatarFilipe Manana <fdmanana@suse.com>
      Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      7a105de2
    • Filipe Manana's avatar
      btrfs: make error messages more clear when getting a chunk map · 32912ee8
      Filipe Manana authored
      commit 7d410d5e
      
       upstream.
      
      When getting a chunk map, at btrfs_get_chunk_map(), we do some sanity
      checks to verify we found a chunk map and that map found covers the
      logical address the caller passed in. However the messages aren't very
      clear in the sense that don't mention the issue is with a chunk map and
      one of them prints the 'length' argument as if it were the end offset of
      the requested range (while the in the string format we use %llu-%llu
      which suggests a range, and the second %llu-%llu is actually a range for
      the chunk map). So improve these two details in the error messages.
      
      CC: stable@vger.kernel.org # 5.4+
      Reviewed-by: default avatarJosef Bacik <josef@toxicpanda.com>
      Signed-off-by: default avatarFilipe Manana <fdmanana@suse.com>
      Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
      Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      32912ee8
    • Jann Horn's avatar
      btrfs: send: ensure send_fd is writable · 4fc9c61c
      Jann Horn authored
      commit 0ac1d13a upstream.
      
      kernel_write() requires the caller to ensure that the file is writable.
      Let's do that directly after looking up the ->send_fd.
      
      We don't need a separate bailout path because the "out" path already
      does fput() if ->send_filp is non-NULL.
      
      This has no security impact for two reasons:
      
       - the ioctl requires CAP_SYS_ADMIN
       - __kernel_write() bails out on read-only files - but only since 5.8,
         see commit a01ac27b
      
       ("fs: check FMODE_WRITE in __kernel_write")
      
      Reported-and-tested-by: default avatar <syzbot+12e098239d20385264d3@syzkaller.appspotmail.com>
      Closes: https://syzkaller.appspot.com/bug?extid=12e098239d20385264d3
      Fixes: 31db9f7c
      
       ("Btrfs: introduce BTRFS_IOC_SEND for btrfs send/receive")
      CC: stable@vger.kernel.org # 4.14+
      Signed-off-by: default avatarJann Horn <jannh@google.com>
      Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
      Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      4fc9c61c
    • Filipe Manana's avatar
      btrfs: fix off-by-one when checking chunk map includes logical address · 86742a96
      Filipe Manana authored
      commit 5fba5a57
      
       upstream.
      
      At btrfs_get_chunk_map() we get the extent map for the chunk that contains
      the given logical address stored in the 'logical' argument. Then we do
      sanity checks to verify the extent map contains the logical address. One
      of these checks verifies if the extent map covers a range with an end
      offset behind the target logical address - however this check has an
      off-by-one error since it will consider an extent map whose start offset
      plus its length matches the target logical address as inclusive, while
      the fact is that the last byte it covers is behind the target logical
      address (by 1).
      
      So fix this condition by using '<=' rather than '<' when comparing the
      extent map's "start + length" against the target logical address.
      
      CC: stable@vger.kernel.org # 4.14+
      Reviewed-by: default avatarJosef Bacik <josef@toxicpanda.com>
      Signed-off-by: default avatarFilipe Manana <fdmanana@suse.com>
      Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
      Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      86742a96
    • Bragatheswaran Manickavel's avatar
      btrfs: ref-verify: fix memory leaks in btrfs_ref_tree_mod() · 9fe447c4
      Bragatheswaran Manickavel authored
      commit f91192cd
      
       upstream.
      
      In btrfs_ref_tree_mod(), when !parent 're' was allocated through
      kmalloc(). In the following code, if an error occurs, the execution will
      be redirected to 'out' or 'out_unlock' and the function will be exited.
      However, on some of the paths, 're' are not deallocated and may lead to
      memory leaks.
      
      For example: lookup_block_entry() for 'be' returns NULL, the out label
      will be invoked. During that flow ref and 'ra' are freed but not 're',
      which can potentially lead to a memory leak.
      
      CC: stable@vger.kernel.org # 5.10+
      Reported-and-tested-by: default avatar <syzbot+d66de4cbf532749df35f@syzkaller.appspotmail.com>
      Closes: https://syzkaller.appspot.com/bug?extid=d66de4cbf532749df35f
      Signed-off-by: default avatarBragatheswaran Manickavel <bragathemanick0908@gmail.com>
      Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
      Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      9fe447c4
    • Qu Wenruo's avatar
      btrfs: add dmesg output for first mount and last unmount of a filesystem · 3f26d9b2
      Qu Wenruo authored
      commit 2db31320
      
       upstream.
      
      There is a feature request to add dmesg output when unmounting a btrfs.
      There are several alternative methods to do the same thing, but with
      their own problems:
      
      - Use eBPF to watch btrfs_put_super()/open_ctree()
        Not end user friendly, they have to dip their head into the source
        code.
      
      - Watch for directory /sys/fs/<uuid>/
        This is way more simple, but still requires some simple device -> uuid
        lookups.  And a script needs to use inotify to watch /sys/fs/.
      
      Compared to all these, directly outputting the information into dmesg
      would be the most simple one, with both device and UUID included.
      
      And since we're here, also add the output when mounting a filesystem for
      the first time for parity. A more fine grained monitoring of subvolume
      mounts should be done by another layer, like audit.
      
      Now mounting a btrfs with all default mkfs options would look like this:
      
        [81.906566] BTRFS info (device dm-8): first mount of filesystem 633b5c16-afe3-4b79-b195-138fe145e4f2
        [81.907494] BTRFS info (device dm-8): using crc32c (crc32c-intel) checksum algorithm
        [81.908258] BTRFS info (device dm-8): using free space tree
        [81.912644] BTRFS info (device dm-8): auto enabling async discard
        [81.913277] BTRFS info (device dm-8): checking UUID tree
        [91.668256] BTRFS info (device dm-8): last unmount of filesystem 633b5c16-afe3-4b79-b195-138fe145e4f2
      
      CC: stable@vger.kernel.org # 5.4+
      Link: https://github.com/kdave/btrfs-progs/issues/689
      Reviewed-by: default avatarAnand Jain <anand.jain@oracle.com>
      Signed-off-by: default avatarQu Wenruo <wqu@suse.com>
      Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
      [ update changelog ]
      Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      3f26d9b2
    • Helge Deller's avatar
      parisc: Mark altinstructions read-only and 32-bit aligned · 0ad7d59e
      Helge Deller authored
      commit 33f806da
      
       upstream.
      
      Signed-off-by: default avatarHelge Deller <deller@gmx.de>
      Cc: stable@vger.kernel.org   # v6.0+
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      0ad7d59e
    • Helge Deller's avatar
      parisc: Ensure 32-bit alignment on parisc unwind section · cf2ae649
      Helge Deller authored
      commit c9fcb2b6
      
       upstream.
      
      Make sure the .PARISC.unwind section will be 32-bit aligned.
      
      Signed-off-by: default avatarHelge Deller <deller@gmx.de>
      Cc: stable@vger.kernel.org   # v6.0+
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      cf2ae649
    • Helge Deller's avatar
      parisc: Mark jump_table naturally aligned · 2acfff57
      Helge Deller authored
      commit 07eecff8
      
       upstream.
      
      The jump_table stores two 32-bit words and one 32- (on 32-bit kernel)
      or one 64-bit word (on 64-bit kernel).
      Ensure that the last word is always 64-bit aligned on a 64-bit kernel
      by aligning the whole structure on sizeof(long).
      
      Signed-off-by: default avatarHelge Deller <deller@gmx.de>
      Cc: stable@vger.kernel.org   # v6.0+
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      2acfff57
    • Helge Deller's avatar
      parisc: Drop the HP-UX ENOSYM and EREMOTERELEASE error codes · 3793cd2d
      Helge Deller authored
      commit e5f3e299
      
       upstream.
      
      Those return codes are only defined for the parisc architecture and
      are leftovers from when we wanted to be HP-UX compatible.
      
      They are not returned by any Linux kernel syscall but do trigger
      problems with the glibc strerrorname_np() and strerror() functions as
      reported in glibc issue #31080.
      
      There is no need to keep them, so simply remove them.
      
      Signed-off-by: default avatarHelge Deller <deller@gmx.de>
      Reported-by: default avatarBruno Haible <bruno@clisp.org>
      Closes: https://sourceware.org/bugzilla/show_bug.cgi?id=31080
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      3793cd2d
    • Helge Deller's avatar
      parisc: Mark lock_aligned variables 16-byte aligned on SMP · 79a1fdf4
      Helge Deller authored
      commit b28fc0d8
      
       upstream.
      
      On parisc we need 16-byte alignment for variables which are used for
      locking. Mark the __lock_aligned attribute acordingly so that the
      .data..lock_aligned section will get that alignment in the generated
      object files.
      
      Signed-off-by: default avatarHelge Deller <deller@gmx.de>
      Cc: stable@vger.kernel.org   # v6.0+
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      79a1fdf4
    • Helge Deller's avatar
      parisc: Use natural CPU alignment for bug_table · 41d7852a
      Helge Deller authored
      commit fe76a134
      
       upstream.
      
      Make sure that the __bug_table section gets 32- or 64-bit aligned,
      depending if a 32- or 64-bit kernel is being built.
      Mark it non-writeable and use .blockz instead of the .org assembler
      directive to pad the struct.
      
      Signed-off-by: default avatarHelge Deller <deller@gmx.de>
      Cc: stable@vger.kernel.org   # v6.0+
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      41d7852a
    • Helge Deller's avatar
      parisc: Mark ex_table entries 32-bit aligned in uaccess.h · c7c78a4a
      Helge Deller authored
      commit a80aeb86
      
       upstream.
      
      Add an align statement to tell the linker that all ex_table entries and as
      such the whole ex_table section should be 32-bit aligned in vmlinux and modules.
      
      Signed-off-by: default avatarHelge Deller <deller@gmx.de>
      Cc: stable@vger.kernel.org   # v6.0+
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      c7c78a4a
    • Helge Deller's avatar
      parisc: Mark ex_table entries 32-bit aligned in assembly.h · 645e4b69
      Helge Deller authored
      commit e11d4ccc
      
       upstream.
      
      Add an align statement to tell the linker that all ex_table entries and as
      such the whole ex_table section should be 32-bit aligned in vmlinux and modules.
      
      Signed-off-by: default avatarHelge Deller <deller@gmx.de>
      Cc: stable@vger.kernel.org   # v6.0+
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      645e4b69
    • Timothy Pearson's avatar
      powerpc: Don't clobber f0/vs0 during fp|altivec register save · c23b9eac
      Timothy Pearson authored
      commit 5e1d824f upstream.
      
      During floating point and vector save to thread data f0/vs0 are
      clobbered by the FPSCR/VSCR store routine. This has been obvserved to
      lead to userspace register corruption and application data corruption
      with io-uring.
      
      Fix it by restoring f0/vs0 after FPSCR/VSCR store has completed for
      all the FP, altivec, VMX register save paths.
      
      Tested under QEMU in kvm mode, running on a Talos II workstation with
      dual POWER9 DD2.2 CPUs.
      
      Additional detail (mpe):
      
      Typically save_fpu() is called from __giveup_fpu() which saves the FP
      regs and also *turns off FP* in the tasks MSR, meaning the kernel will
      reload the FP regs from the thread struct before letting the task use FP
      again. So in that case save_fpu() is free to clobber f0 because the FP
      regs no longer hold live values for the task.
      
      There is another case though, which is the path via:
        sys_clone()
          ...
          copy_process()
            dup_task_struct()
              arch_dup_task_struct()
                flush_all_to_thread()
                  save_all()
      
      That path saves the FP regs but leaves them live. That's meant as an
      optimisation for a process that's using FP/VSX and then calls fork(),
      leaving the regs live means the parent process doesn't have to take a
      fault after the fork to get its FP regs back. The optimisation was added
      in commit 8792468d ("powerpc: Add the ability to save FPU without
      giving it up").
      
      That path does clobber f0, but f0 is volatile across function calls,
      and typically programs reach copy_process() from userspace via a syscall
      wrapper function. So in normal usage f0 being clobbered across a
      syscall doesn't cause visible data corruption.
      
      But there is now a new path, because io-uring can call copy_process()
      via create_io_thread() from the signal handling path. That's OK if the
      signal is handled as part of syscall return, but it's not OK if the
      signal is handled due to some other interrupt.
      
      That path is:
      
      interrupt_return_srr_user()
        interrupt_exit_user_prepare()
          interrupt_exit_user_prepare_main()
            do_notify_resume()
              get_signal()
                task_work_run()
                  create_worker_cb()
                    create_io_worker()
                      copy_process()
                        dup_task_struct()
                          arch_dup_task_struct()
                            flush_all_to_thread()
                              save_all()
                                if (tsk->thread.regs->msr & MSR_FP)
                                  save_fpu()
                                  # f0 is clobbered and potentially live in userspace
      
      Note the above discussion applies equally to save_altivec().
      
      Fixes: 8792468d
      
       ("powerpc: Add the ability to save FPU without giving it up")
      Cc: stable@vger.kernel.org # v4.6+
      Closes: https://lore.kernel.org/all/480932026.45576726.1699374859845.JavaMail.zimbra@raptorengineeringinc.com/
      Closes: https://lore.kernel.org/linuxppc-dev/480221078.47953493.1700206777956.JavaMail.zimbra@raptorengineeringinc.com/
      Tested-by: default avatarTimothy Pearson <tpearson@raptorengineering.com>
      Tested-by: default avatarJens Axboe <axboe@kernel.dk>
      Signed-off-by: default avatarTimothy Pearson <tpearson@raptorengineering.com>
      [mpe: Reword change log to describe exact path of corruption & other minor tweaks]
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://msgid.link/1921539696.48534988.1700407082933.JavaMail.zimbra@raptorengineeringinc.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      c23b9eac
    • Nicholas Piggin's avatar
      KVM: PPC: Book3S HV: Fix KVM_RUN clobbering FP/VEC user registers · e6bc42fa
      Nicholas Piggin authored
      commit dc158d23 upstream.
      
      Before running a guest, the host process (e.g., QEMU) FP/VEC registers
      are saved if they were being used, similarly to when the kernel uses FP
      registers. The guest values are then loaded into regs, and the host
      process registers will be restored lazily when it uses FP/VEC.
      
      KVM HV has a bug here: the host process registers do get saved, but the
      user MSR bits remain enabled, which indicates the registers are valid
      for the process. After they are clobbered by running the guest, this
      valid indication causes the host process to take on the FP/VEC register
      values of the guest.
      
      Fixes: 34e119c9
      
       ("KVM: PPC: Book3S HV P9: Reduce mtmsrd instructions required to save host SPRs")
      Cc: stable@vger.kernel.org # v5.17+
      Signed-off-by: default avatarNicholas Piggin <npiggin@gmail.com>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://msgid.link/20231122025811.2973-1-npiggin@gmail.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      e6bc42fa
    • Abdul Halim, Mohd Syazwan's avatar
      iommu/vt-d: Add MTL to quirk list to skip TE disabling · 59419ebc
      Abdul Halim, Mohd Syazwan authored
      commit 85b80fdf upstream.
      
      The VT-d spec requires (10.4.4 Global Command Register, TE field) that:
      
      Hardware implementations supporting DMA draining must drain any in-flight
      DMA read/write requests queued within the Root-Complex before switching
      address translation on or off and reflecting the status of the command
      through the TES field in the Global Status register.
      
      Unfortunately, some integrated graphic devices fail to do so after some
      kind of power state transition. As the result, the system might stuck in
      iommu_disable_translation(), waiting for the completion of TE transition.
      
      Add MTL to the quirk list for those devices and skips TE disabling if the
      qurik hits.
      
      Fixes: b1012ca8
      
       ("iommu/vt-d: Skip TE disabling on quirky gfx dedicated iommu")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarAbdul Halim, Mohd Syazwan <mohd.syazwan.abdul.halim@intel.com>
      Signed-off-by: default avatarLu Baolu <baolu.lu@linux.intel.com>
      Link: https://lore.kernel.org/r/20231116022324.30120-1-baolu.lu@linux.intel.com
      Signed-off-by: default avatarJoerg Roedel <jroedel@suse.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      59419ebc
    • Markus Weippert's avatar
      bcache: revert replacing IS_ERR_OR_NULL with IS_ERR · 0b48970c
      Markus Weippert authored
      commit bb6cc253 upstream.
      
      Commit 028ddcac ("bcache: Remove unnecessary NULL point check in
      node allocations") replaced IS_ERR_OR_NULL by IS_ERR. This leads to a
      NULL pointer dereference.
      
      BUG: kernel NULL pointer dereference, address: 0000000000000080
      Call Trace:
       ? __die_body.cold+0x1a/0x1f
       ? page_fault_oops+0xd2/0x2b0
       ? exc_page_fault+0x70/0x170
       ? asm_exc_page_fault+0x22/0x30
       ? btree_node_free+0xf/0x160 [bcache]
       ? up_write+0x32/0x60
       btree_gc_coalesce+0x2aa/0x890 [bcache]
       ? bch_extent_bad+0x70/0x170 [bcache]
       btree_gc_recurse+0x130/0x390 [bcache]
       ? btree_gc_mark_node+0x72/0x230 [bcache]
       bch_btree_gc+0x5da/0x600 [bcache]
       ? cpuusage_read+0x10/0x10
       ? bch_btree_gc+0x600/0x600 [bcache]
       bch_gc_thread+0x135/0x180 [bcache]
      
      The relevant code starts with:
      
          new_nodes[0] = NULL;
      
          for (i = 0; i < nodes; i++) {
              if (__bch_keylist_realloc(&keylist, bkey_u64s(&r[i].b->key)))
                  goto out_nocoalesce;
          // ...
      out_nocoalesce:
          // ...
          for (i = 0; i < nodes; i++)
              if (!IS_ERR(new_nodes[i])) {  // IS_ERR_OR_NULL before
      028ddcac
                  btree_node_free(new_nodes[i]);  // new_nodes[0] is NULL
                  rw_unlock(true, new_nodes[i]);
              }
      
      This patch replaces IS_ERR() by IS_ERR_OR_NULL() to fix this.
      
      Fixes: 028ddcac
      
       ("bcache: Remove unnecessary NULL point check in node allocations")
      Link: https://lore.kernel.org/all/3DF4A87A-2AC1-4893-AE5F-E921478419A9@suse.de/
      Cc: stable@vger.kernel.org
      Cc: Zheng Wang <zyytlz.wz@163.com>
      Cc: Coly Li <colyli@suse.de>
      Signed-off-by: default avatarMarkus Weippert <markus@gekmihesg.de>
      Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      0b48970c
    • Christian König's avatar
      dma-buf: fix check in dma_resv_add_fence · fc98ea26
      Christian König authored
      commit 95ba893c
      
       upstream.
      
      It's valid to add the same fence multiple times to a dma-resv object and
      we shouldn't need one extra slot for each.
      
      Signed-off-by: default avatarChristian König <christian.koenig@amd.com>
      Reviewed-by: default avatarThomas Hellström <thomas.hellstrom@linux.intel.com>
      Fixes: a3f7c10a
      
       ("dma-buf/dma-resv: check if the new fence is really later")
      Cc: stable@vger.kernel.org # v5.19+
      Link: https://patchwork.freedesktop.org/patch/msgid/20231115093035.1889-1-christian.koenig@amd.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      fc98ea26
    • Gautham R. Shenoy's avatar
      cpufreq/amd-pstate: Fix the return value of amd_pstate_fast_switch() · 4da15569
      Gautham R. Shenoy authored
      commit bb87be26 upstream.
      
      cpufreq_driver->fast_switch() callback expects a frequency as a return
      value. amd_pstate_fast_switch() was returning the return value of
      amd_pstate_update_freq(), which only indicates a success or failure.
      
      Fix this by making amd_pstate_fast_switch() return the target_freq
      when the call to amd_pstate_update_freq() is successful, and return
      the current frequency from policy->cur when the call to
      amd_pstate_update_freq() is unsuccessful.
      
      Fixes: 4badf2eb
      
       ("cpufreq: amd-pstate: Add ->fast_switch() callback")
      Acked-by: default avatarHuang Rui <ray.huang@amd.com>
      Reviewed-by: default avatarWyes Karny <wyes.karny@amd.com>
      Reviewed-by: default avatarPerry Yuan <perry.yuan@amd.com>
      Cc: 6.4+ <stable@vger.kernel.org> # v6.4+
      Signed-off-by: default avatarGautham R. Shenoy <gautham.shenoy@amd.com>
      Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      4da15569
    • Lukasz Luba's avatar
      powercap: DTPM: Fix unneeded conversions to micro-Watts · 9d4c721c
      Lukasz Luba authored
      commit b817f148 upstream.
      
      The power values coming from the Energy Model are already in uW.
      
      The PowerCap and DTPM frameworks operate on uW, so all places should
      just use the values from the EM.
      
      Fix the code by removing all of the conversion to uW still present in it.
      
      Fixes: ae6ccaa6
      
       (PM: EM: convert power field to micro-Watts precision and align drivers)
      Cc: 5.19+ <stable@vger.kernel.org> # v5.19+
      Signed-off-by: default avatarLukasz Luba <lukasz.luba@arm.com>
      [ rjw: Changelog edits ]
      Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      9d4c721c
    • Ewan D. Milne's avatar
      nvme: check for valid nvme_identify_ns() before using it · a62ca58b
      Ewan D. Milne authored
      commit d8b90d60 upstream.
      
      When scanning namespaces, it is possible to get valid data from the first
      call to nvme_identify_ns() in nvme_alloc_ns(), but not from the second
      call in nvme_update_ns_info_block().  In particular, if the NSID becomes
      inactive between the two commands, a storage device may return a buffer
      filled with zero as per 4.1.5.1.  In this case, we can get a kernel crash
      due to a divide-by-zero in blk_stack_limits() because ns->lba_shift will
      be set to zero.
      
      PID: 326      TASK: ffff95fec3cd8000  CPU: 29   COMMAND: "kworker/u98:10"
       #0 [ffffad8f8702f9e0] machine_kexec at ffffffff91c76ec7
       #1 [ffffad8f8702fa38] __crash_kexec at ffffffff91dea4fa
       #2 [ffffad8f8702faf8] crash_kexec at ffffffff91deb788
       #3 [ffffad8f8702fb00] oops_end at ffffffff91c2e4bb
       #4 [ffffad8f8702fb20] do_trap at ffffffff91c2a4ce
       #5 [ffffad8f8702fb70] do_error_trap at ffffffff91c2a595
       #6 [ffffad8f8702fbb0] exc_divide_error at ffffffff928506e6
       #7 [ffffad8f8702fbd0] asm_exc_divide_error at ffffffff92a00926
          [exception RIP: blk_stack_limits+434]
          RIP: ffffffff92191872  RSP: ffffad8f8702fc80  RFLAGS: 00010246
          RAX: 0000000000000000  RBX: ffff95efa0c91800  RCX: 0000000000000001
          RDX: 0000000000000000  RSI: 0000000000000001  RDI: 0000000000000001
          RBP: 00000000ffffffff   R8: ffff95fec7df35a8   R9: 0000000000000000
          R10: 0000000000000000  R11: 0000000000000001  R12: 0000000000000000
          R13: 0000000000000000  R14: 0000000000000000  R15: ffff95fed33c09a8
          ORIG_RAX: ffffffffffffffff  CS: 0010  SS: 0018
       #8 [ffffad8f8702fce0] nvme_update_ns_info_block at ffffffffc06d3533 [nvme_core]
       #9 [ffffad8f8702fd18] nvme_scan_ns at ffffffffc06d6fa7 [nvme_core]
      
      This happened when the check for valid data was moved out of nvme_identify_ns()
      into one of the callers.  Fix this by checking in both callers.
      
      Link: https://bugzilla.kernel.org/show_bug.cgi?id=218186
      Fixes: 0dd6fff2
      
       ("nvme: bring back auto-removal of deleted namespaces during sequential scan")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarEwan D. Milne <emilne@redhat.com>
      Signed-off-by: default avatarKeith Busch <kbusch@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      a62ca58b
    • Wu Bo's avatar
      dm verity: don't perform FEC for failed readahead IO · 82b5e603
      Wu Bo authored
      commit 0193e396 upstream.
      
      We found an issue under Android OTA scenario that many BIOs have to do
      FEC where the data under dm-verity is 100% complete and no corruption.
      
      Android OTA has many dm-block layers, from upper to lower:
      dm-verity
      dm-snapshot
      dm-origin & dm-cow
      dm-linear
      ufs
      
      DM tables have to change 2 times during Android OTA merging process.
      When doing table change, the dm-snapshot will be suspended for a while.
      During this interval, many readahead IOs are submitted to dm_verity
      from filesystem. Then the kverity works are busy doing FEC process
      which cost too much time to finish dm-verity IO. This causes needless
      delay which feels like system is hung.
      
      After adding debugging it was found that each readahead IO needed
      around 10s to finish when this situation occurred. This is due to IO
      amplification:
      
      dm-snapshot suspend
      erofs_readahead     // 300+ io is submitted
      	dm_submit_bio (dm_verity)
      		dm_submit_bio (dm_snapshot)
      		bio return EIO
      		bio got nothing, it's empty
      	verity_end_io
      	verity_verify_io
      	forloop range(0, io->n_blocks)    // each io->nblocks ~= 20
      		verity_fec_decode
      		fec_decode_rsb
      		fec_read_bufs
      		forloop range(0, v->fec->rsn) // v->fec->rsn = 253
      			new_read
      			submit_bio (dm_snapshot)
      		end loop
      	end loop
      dm-snapshot resume
      
      Readahead BIOs get nothing while dm-snapshot is suspended, so all of
      them will cause verity's FEC.
      Each readahead BIO needs to verify ~20 (io->nblocks) blocks.
      Each block needs to do FEC, and every block needs to do 253
      (v->fec->rsn) reads.
      So during the suspend interval(~200ms), 300 readahead BIOs trigger
      ~1518000 (300*20*253) IOs to dm-snapshot.
      
      As readahead IO is not required by userspace, and to fix this issue,
      it is best to pass readahead errors to upper layer to handle it.
      
      Cc: stable@vger.kernel.org
      Fixes: a739ff3f
      
       ("dm verity: add support for forward error correction")
      Signed-off-by: default avatarWu Bo <bo.wu@vivo.com>
      Reviewed-by: default avatarMikulas Patocka <mpatocka@redhat.com>
      Signed-off-by: default avatarMike Snitzer <snitzer@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      82b5e603
    • Wu Bo's avatar
      dm verity: initialize fec io before freeing it · 6f5a9fc9
      Wu Bo authored
      commit 7be05bdf upstream.
      
      If BIO error, verity_end_io() can call verity_finish_io() before
      verity_fec_init_io(). Therefore, fec_io->rs is not initialized and
      may crash when doing memory freeing in verity_fec_finish_io().
      
      Crash call stack:
       die+0x90/0x2b8
       __do_kernel_fault+0x260/0x298
       do_bad_area+0x2c/0xdc
       do_translation_fault+0x3c/0x54
       do_mem_abort+0x54/0x118
       el1_abort+0x38/0x5c
       el1h_64_sync_handler+0x50/0x90
       el1h_64_sync+0x64/0x6c
       free_rs+0x18/0xac
       fec_rs_free+0x10/0x24
       mempool_free+0x58/0x148
       verity_fec_finish_io+0x4c/0xb0
       verity_end_io+0xb8/0x150
      
      Cc: stable@vger.kernel.org      # v6.0+
      Fixes: 5721d4e5
      
       ("dm verity: Add optional "try_verify_in_tasklet" feature")
      Signed-off-by: default avatarWu Bo <bo.wu@vivo.com>
      Reviewed-by: default avatarMikulas Patocka <mpatocka@redhat.com>
      Signed-off-by: default avatarMike Snitzer <snitzer@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      6f5a9fc9
    • Hamza Mahfooz's avatar
      drm/amd/display: fix ABM disablement · 7cfc3884
      Hamza Mahfooz authored
      commit b9f46f0b
      
       upstream.
      
      On recent versions of DMUB firmware, if we want to completely disable
      ABM we have to pass ABM_LEVEL_IMMEDIATE_DISABLE as the requested ABM
      level to DMUB. Otherwise, LCD eDP displays are unable to reach their
      maximum brightness levels. So, to fix this whenever the user requests an
      ABM level of 0 pass ABM_LEVEL_IMMEDIATE_DISABLE to DMUB instead. Also,
      to keep the user's experience consistent map ABM_LEVEL_IMMEDIATE_DISABLE
      to 0 when a user tries to read the requested ABM level.
      
      Cc: stable@vger.kernel.org # 6.1+
      Reviewed-by: default avatarHarry Wentland <harry.wentland@amd.com>
      Signed-off-by: default avatarHamza Mahfooz <hamza.mahfooz@amd.com>
      Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      7cfc3884
    • Nicholas Kazlauskas's avatar
      drm/amd/display: Update min Z8 residency time to 2100 for DCN314 · 859a3a9f
      Nicholas Kazlauskas authored
      commit 4636a211
      
       upstream.
      
      [Why]
      Some panels with residency period of 2054 exhibit flickering with
      Z8 at the end of the frame.
      
      [How]
      As a workaround, increase the limit to block these panels.
      
      Cc: stable@vger.kernel.org # 6.1+
      Reviewed-by: default avatarSyed Hassan <syed.hassan@amd.com>
      Acked-by: default avatarHamza Mahfooz <hamza.mahfooz@amd.com>
      Signed-off-by: default avatarNicholas Kazlauskas <nicholas.kazlauskas@amd.com>
      Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      859a3a9f
    • Alvin Lee's avatar
      drm/amd/display: Use DRAM speed from validation for dummy p-state · 6ef7f13c
      Alvin Lee authored
      commit 9be60113
      
       upstream.
      
      [Description]
      When choosing which dummy p-state latency to use, we
      need to use the DRAM speed from validation. The DRAMSpeed
      DML variable can change because we use different input
      params to DML when populating watermarks set B.
      
      Cc: stable@vger.kernel.org # 6.1+
      Reviewed-by: default avatarSamson Tam <samson.tam@amd.com>
      Acked-by: default avatarHamza Mahfooz <hamza.mahfooz@amd.com>
      Signed-off-by: default avatarAlvin Lee <alvin.lee2@amd.com>
      Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      6ef7f13c
    • Nicholas Kazlauskas's avatar
      drm/amd/display: Remove min_dst_y_next_start check for Z8 · a67c1870
      Nicholas Kazlauskas authored
      commit 08448812
      
       upstream.
      
      [Why]
      Flickering occurs on DRR supported panels when engaged in DRR due to
      min_dst_y_next becoming larger than the frame size itself.
      
      [How]
      In general, we should be able to enter Z8 when this is engaged but it
      might be a net power loss even if the calculation wasn't bugged.
      
      Don't support enabling Z8 during the DRR region.
      
      Cc: stable@vger.kernel.org # 6.1+
      Reviewed-by: default avatarSyed Hassan <syed.hassan@amd.com>
      Acked-by: default avatarHamza Mahfooz <hamza.mahfooz@amd.com>
      Signed-off-by: default avatarNicholas Kazlauskas <nicholas.kazlauskas@amd.com>
      Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      a67c1870