Skip to content
  1. Jun 16, 2024
    • Yue Haibing's avatar
      ipvlan: Dont Use skb->sk in ipvlan_process_v{4,6}_outbound · 1abbf079
      Yue Haibing authored
      [ Upstream commit b3dc6e80 ]
      
      Raw packet from PF_PACKET socket ontop of an IPv6-backed ipvlan device will
      hit WARN_ON_ONCE() in sk_mc_loop() through sch_direct_xmit() path.
      
      WARNING: CPU: 2 PID: 0 at net/core/sock.c:775 sk_mc_loop+0x2d/0x70
      Modules linked in: sch_netem ipvlan rfkill cirrus drm_shmem_helper sg drm_kms_helper
      CPU: 2 PID: 0 Comm: swapper/2 Kdump: loaded Not tainted 6.9.0+ #279
      Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.15.0-1 04/01/2014
      RIP: 0010:sk_mc_loop+0x2d/0x70
      Code: fa 0f 1f 44 00 00 65 0f b7 15 f7 96 a3 4f 31 c0 66 85 d2 75 26 48 85 ff 74 1c
      RSP: 0018:ffffa9584015cd78 EFLAGS: 00010212
      RAX: 0000000000000011 RBX: ffff91e585793e00 RCX: 0000000002c6a001
      RDX: 0000000000000000 RSI: 0000000000000040 RDI: ffff91e589c0f000
      RBP: ffff91e5855bd100 R08: 0000000000000000 R09: 3d00545216f43d00
      R10: ffff91e584fdcc50 R11: 00000060dd8616f4 R12: ffff91e58132d000
      R13: ffff91e584fdcc68 R14: ffff91e5869ce800 R15: ffff91e589c0f000
      FS:  0000000000000000(0000) GS:ffff91e898100000(0000) knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: 00007f788f7c44c0 CR3: 0000000008e1a000 CR4: 00000000000006f0
      DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
      Call Trace:
      <IRQ>
       ? __warn (kernel/panic.c:693)
       ? sk_mc_loop (net/core/sock.c:760)
       ? report_bug (lib/bug.c:201 lib/bug.c:219)
       ? handle_bug (arch/x86/kernel/traps.c:239)
       ? exc_invalid_op (arch/x86/kernel/traps.c:260 (discriminator 1))
       ? asm_exc_invalid_op (./arch/x86/include/asm/idtentry.h:621)
       ? sk_mc_loop (net/core/sock.c:760)
       ip6_finish_output2 (net/ipv6/ip6_output.c:83 (discriminator 1))
       ? nf_hook_slow (net/netfilter/core.c:626)
       ip6_finish_output (net/ipv6/ip6_output.c:222)
       ? __pfx_ip6_finish_output (net/ipv6/ip6_output.c:215)
       ipvlan_xmit_mode_l3 (drivers/net/ipvlan/ipvlan_core.c:602) ipvlan
       ipvlan_start_xmit (drivers/net/ipvlan/ipvlan_main.c:226) ipvlan
       dev_hard_start_xmit (net/core/dev.c:3594)
       sch_direct_xmit (net/sched/sch_generic.c:343)
       __qdisc_run (net/sched/sch_generic.c:416)
       net_tx_action (net/core/dev.c:5286)
       handle_softirqs (kernel/softirq.c:555)
       __irq_exit_rcu (kernel/softirq.c:589)
       sysvec_apic_timer_interrupt (arch/x86/kernel/apic/apic.c:1043)
      
      The warning triggers as this:
      packet_sendmsg
         packet_snd //skb->sk is packet sk
            __dev_queue_xmit
               __dev_xmit_skb //q->enqueue is not NULL
                   __qdisc_run
                     sch_direct_xmit
                       dev_hard_start_xmit
                         ipvlan_start_xmit
                            ipvlan_xmit_mode_l3 //l3 mode
                              ipvlan_process_outbound //vepa flag
                                ipvlan_process_v6_outbound
                                  ip6_local_out
                                      __ip6_finish_output
                                        ip6_finish_output2 //multicast packet
                                          sk_mc_loop //sk->sk_family is AF_PACKET
      
      Call ip{6}_local_out() with NULL sk in ipvlan as other tunnels to fix this.
      
      Fixes: 2ad7bf36
      
       ("ipvlan: Initial check-in of the IPVLAN driver.")
      Suggested-by: default avatarEric Dumazet <edumazet@google.com>
      Signed-off-by: default avatarYue Haibing <yuehaibing@huawei.com>
      Reviewed-by: default avatarEric Dumazet <edumazet@google.com>
      Link: https://lore.kernel.org/r/20240529095633.613103-1-yuehaibing@huawei.com
      Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      1abbf079
    • Uwe Kleine-König's avatar
      spi: stm32: Don't warn about spurious interrupts · 3c5caaef
      Uwe Kleine-König authored
      [ Upstream commit 95d7c452 ]
      
      The dev_warn to notify about a spurious interrupt was introduced with
      the reasoning that these are unexpected. However spurious interrupts
      tend to trigger continously and the error message on the serial console
      prevents that the core's detection of spurious interrupts kicks in
      (which disables the irq) and just floods the console.
      
      Fixes: c64e7efe
      
       ("spi: stm32: make spurious and overrun interrupts visible")
      Signed-off-by: default avatarUwe Kleine-König <u.kleine-koenig@pengutronix.de>
      Link: https://msgid.link/r/20240521105241.62400-2-u.kleine-koenig@pengutronix.de
      Signed-off-by: default avatarMark Brown <broonie@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      3c5caaef
    • Masahiro Yamada's avatar
      kconfig: fix comparison to constant symbols, 'm', 'n' · 19e5a3d7
      Masahiro Yamada authored
      [ Upstream commit aabdc960 ]
      
      Currently, comparisons to 'm' or 'n' result in incorrect output.
      
      [Test Code]
      
          config MODULES
                  def_bool y
                  modules
      
          config A
                  def_tristate m
      
          config B
                  def_bool A > n
      
      CONFIG_B is unset, while CONFIG_B=y is expected.
      
      The reason for the issue is because Kconfig compares the tristate values
      as strings.
      
      Currently, the .type fields in the constant symbol definitions,
      symbol_{yes,mod,no} are unspecified, i.e., S_UNKNOWN.
      
      When expr_calc_value() evaluates 'A > n', it checks the types of 'A' and
      'n' to determine how to compare them.
      
      The left-hand side, 'A', is a tristate symbol with a value of 'm', which
      corresponds to a numeric value of 1. (Internally, 'y', 'm', and 'n' are
      represented as 2, 1, and 0, respectively.)
      
      The right-hand side, 'n', has an unknown type, so it is treated as the
      string "n" during the comparison.
      
      expr_calc_value() compares two values numerically only when both can
      have numeric values. Otherwise, they are compared as strings.
      
          symbol    numeric value    ASCII code
          -------------------------------------
            y           2             0x79
            m           1             0x6d
            n           0             0x6e
      
      'm' is greater than 'n' if compared numerically (since 1 is greater
      than 0), but smaller than 'n' if compared as strings (since the ASCII
      code 0x6d is smaller than 0x6e).
      
      Specifying .type=S_TRISTATE for symbol_{yes,mod,no} fixes the above
      test code.
      
      Doing so, however, would cause a regression to the following test code.
      
      [Test Code 2]
      
          config MODULES
                  def_bool n
                  modules
      
          config A
                  def_tristate n
      
          config B
                  def_bool A = m
      
      You would get CONFIG_B=y, while CONFIG_B should not be set.
      
      The reason is because sym_get_string_value() turns 'm' into 'n' when the
      module feature is disabled. Consequently, expr_calc_value() evaluates
      'A = n' instead of 'A = m'. This oddity has been hidden because the type
      of 'm' was previously S_UNKNOWN instead of S_TRISTATE.
      
      sym_get_string_value() should not tweak the string because the tristate
      value has already been correctly calculated. There is no reason to
      return the string "n" where its tristate value is mod.
      
      Fixes: 31847b67
      
       ("kconfig: allow use of relations other than (in)equality")
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      19e5a3d7
    • Florian Westphal's avatar
      netfilter: tproxy: bail out if IP has been disabled on the device · 07eeedaf
      Florian Westphal authored
      [ Upstream commit 21a673bd
      
       ]
      
      syzbot reports:
      general protection fault, probably for non-canonical address 0xdffffc0000000003: 0000 [#1] PREEMPT SMP KASAN PTI
      KASAN: null-ptr-deref in range [0x0000000000000018-0x000000000000001f]
      [..]
      RIP: 0010:nf_tproxy_laddr4+0xb7/0x340 net/ipv4/netfilter/nf_tproxy_ipv4.c:62
      Call Trace:
       nft_tproxy_eval_v4 net/netfilter/nft_tproxy.c:56 [inline]
       nft_tproxy_eval+0xa9a/0x1a00 net/netfilter/nft_tproxy.c:168
      
      __in_dev_get_rcu() can return NULL, so check for this.
      
      Reported-and-tested-by: default avatar <syzbot+b94a6818504ea90d7661@syzkaller.appspotmail.com>
      Fixes: cc6eb433
      
       ("tproxy: use the interface primary IP address as a default value for --on-ip")
      Signed-off-by: default avatarFlorian Westphal <fw@strlen.de>
      Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      07eeedaf
    • Xiaolei Wang's avatar
      net:fec: Add fec_enet_deinit() · ddd2912a
      Xiaolei Wang authored
      [ Upstream commit bf0497f5 ]
      
      When fec_probe() fails or fec_drv_remove() needs to release the
      fec queue and remove a NAPI context, therefore add a function
      corresponding to fec_enet_init() and call fec_enet_deinit() which
      does the opposite to release memory and remove a NAPI context.
      
      Fixes: 59d0f746
      
       ("net: fec: init multi queue date structure")
      Signed-off-by: default avatarXiaolei Wang <xiaolei.wang@windriver.com>
      Reviewed-by: default avatarWei Fang <wei.fang@nxp.com>
      Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
      Link: https://lore.kernel.org/r/20240524050528.4115581-1-xiaolei.wang@windriver.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      ddd2912a
    • Jakub Sitnicki's avatar
      bpf: Allow delete from sockmap/sockhash only if update is allowed · 29467edc
      Jakub Sitnicki authored
      [ Upstream commit 98e948fb ]
      
      We have seen an influx of syzkaller reports where a BPF program attached to
      a tracepoint triggers a locking rule violation by performing a map_delete
      on a sockmap/sockhash.
      
      We don't intend to support this artificial use scenario. Extend the
      existing verifier allowed-program-type check for updating sockmap/sockhash
      to also cover deleting from a map.
      
      From now on only BPF programs which were previously allowed to update
      sockmap/sockhash can delete from these map types.
      
      Fixes: ff910599
      
       ("bpf, sockmap: Prevent lock inversion deadlock in map delete elem")
      Reported-by: default avatarTetsuo Handa <penguin-kernel@i-love.sakura.ne.jp>
      Reported-by: default avatar <syzbot+ec941d6e24f633a59172@syzkaller.appspotmail.com>
      Signed-off-by: default avatarJakub Sitnicki <jakub@cloudflare.com>
      Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
      Tested-by: default avatar <syzbot+ec941d6e24f633a59172@syzkaller.appspotmail.com>
      Acked-by: default avatarJohn Fastabend <john.fastabend@gmail.com>
      Closes: https://syzkaller.appspot.com/bug?extid=ec941d6e24f633a59172
      Link: https://lore.kernel.org/bpf/20240527-sockmap-verify-deletes-v1-1-944b372f2101@cloudflare.com
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      29467edc
    • Parthiban Veerasooran's avatar
      net: usb: smsc95xx: fix changing LED_SEL bit value updated from EEPROM · 117cacd7
      Parthiban Veerasooran authored
      [ Upstream commit 52a2f060 ]
      
      LED Select (LED_SEL) bit in the LED General Purpose IO Configuration
      register is used to determine the functionality of external LED pins
      (Speed Indicator, Link and Activity Indicator, Full Duplex Link
      Indicator). The default value for this bit is 0 when no EEPROM is
      present. If a EEPROM is present, the default value is the value of the
      LED Select bit in the Configuration Flags of the EEPROM. A USB Reset or
      Lite Reset (LRST) will cause this bit to be restored to the image value
      last loaded from EEPROM, or to be set to 0 if no EEPROM is present.
      
      While configuring the dual purpose GPIO/LED pins to LED outputs in the
      LED General Purpose IO Configuration register, the LED_SEL bit is changed
      as 0 and resulting the configured value from the EEPROM is cleared. The
      issue is fixed by using read-modify-write approach.
      
      Fixes: f293501c
      
       ("smsc95xx: configure LED outputs")
      Signed-off-by: default avatarParthiban Veerasooran <Parthiban.Veerasooran@microchip.com>
      Reviewed-by: default avatarSimon Horman <horms@kernel.org>
      Reviewed-by: default avatarWoojung Huh <woojung.huh@microchip.com>
      Link: https://lore.kernel.org/r/20240523085314.167650-1-Parthiban.Veerasooran@microchip.com
      Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      117cacd7
    • Roded Zats's avatar
      enic: Validate length of nl attributes in enic_set_vf_port · 3c0d3697
      Roded Zats authored
      [ Upstream commit e8021b94 ]
      
      enic_set_vf_port assumes that the nl attribute IFLA_PORT_PROFILE
      is of length PORT_PROFILE_MAX and that the nl attributes
      IFLA_PORT_INSTANCE_UUID, IFLA_PORT_HOST_UUID are of length PORT_UUID_MAX.
      These attributes are validated (in the function do_setlink in rtnetlink.c)
      using the nla_policy ifla_port_policy. The policy defines IFLA_PORT_PROFILE
      as NLA_STRING, IFLA_PORT_INSTANCE_UUID as NLA_BINARY and
      IFLA_PORT_HOST_UUID as NLA_STRING. That means that the length validation
      using the policy is for the max size of the attributes and not on exact
      size so the length of these attributes might be less than the sizes that
      enic_set_vf_port expects. This might cause an out of bands
      read access in the memcpys of the data of these
      attributes in enic_set_vf_port.
      
      Fixes: f8bd9091
      
       ("net: Add ndo_{set|get}_vf_port support for enic dynamic vnics")
      Signed-off-by: default avatarRoded Zats <rzats@paloaltonetworks.com>
      Link: https://lore.kernel.org/r/20240522073044.33519-1-rzats@paloaltonetworks.com
      Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      3c0d3697
    • Friedrich Vock's avatar
      bpf: Fix potential integer overflow in resolve_btfids · 540d73a5
      Friedrich Vock authored
      [ Upstream commit 44382b3e ]
      
      err is a 32-bit integer, but elf_update returns an off_t, which is 64-bit
      at least on 64-bit platforms. If symbols_patch is called on a binary between
      2-4GB in size, the result will be negative when cast to a 32-bit integer,
      which the code assumes means an error occurred. This can wrongly trigger
      build failures when building very large kernel images.
      
      Fixes: fbbb68de
      
       ("bpf: Add resolve_btfids tool to resolve BTF IDs in ELF object")
      Signed-off-by: default avatarFriedrich Vock <friedrich.vock@gmx.de>
      Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
      Acked-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
      Link: https://lore.kernel.org/bpf/20240514070931.199694-1-friedrich.vock@gmx.de
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      540d73a5
    • Tetsuo Handa's avatar
      dma-buf/sw-sync: don't enable IRQ from sync_print_obj() · ae6fc4e6
      Tetsuo Handa authored
      [ Upstream commit b7949189 ]
      
      Since commit a6aa8fca
      
       ("dma-buf/sw-sync: Reduce irqsave/irqrestore from
      known context") by error replaced spin_unlock_irqrestore() with
      spin_unlock_irq() for both sync_debugfs_show() and sync_print_obj() despite
      sync_print_obj() is called from sync_debugfs_show(), lockdep complains
      inconsistent lock state warning.
      
      Use plain spin_{lock,unlock}() for sync_print_obj(), for
      sync_debugfs_show() is already using spin_{lock,unlock}_irq().
      
      Reported-by: default avatarsyzbot <syzbot+a225ee3df7e7f9372dbe@syzkaller.appspotmail.com>
      Closes: https://syzkaller.appspot.com/bug?extid=a225ee3df7e7f9372dbe
      Fixes: a6aa8fca
      
       ("dma-buf/sw-sync: Reduce irqsave/irqrestore from known context")
      Signed-off-by: default avatarTetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
      Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/c2e46020-aaa6-4e06-bf73-f05823f913f0@I-love.SAKURA.ne.jp
      Signed-off-by: default avatarChristian König <christian.koenig@amd.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      ae6fc4e6
    • Carolina Jubran's avatar
      net/mlx5e: Use rx_missed_errors instead of rx_dropped for reporting buffer exhaustion · 72c6038d
      Carolina Jubran authored
      [ Upstream commit 5c74195d ]
      
      Previously, the driver incorrectly used rx_dropped to report device
      buffer exhaustion.
      
      According to the documentation, rx_dropped should not be used to count
      packets dropped due to buffer exhaustion, which is the purpose of
      rx_missed_errors.
      
      Use rx_missed_errors as intended for counting packets dropped due to
      buffer exhaustion.
      
      Fixes: 269e6b3a
      
       ("net/mlx5e: Report additional error statistics in get stats ndo")
      Signed-off-by: default avatarCarolina Jubran <cjubran@nvidia.com>
      Signed-off-by: default avatarTariq Toukan <tariqt@nvidia.com>
      Reviewed-by: default avatarSimon Horman <horms@kernel.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      72c6038d
    • Sagi Grimberg's avatar
      nvmet: fix ns enable/disable possible hang · 82fdfbf2
      Sagi Grimberg authored
      [ Upstream commit f97914e3 ]
      
      When disabling an nvmet namespace, there is a period where the
      subsys->lock is released, as the ns disable waits for backend IO to
      complete, and the ns percpu ref to be properly killed. The original
      intent was to avoid taking the subsystem lock for a prolong period as
      other processes may need to acquire it (for example new incoming
      connections).
      
      However, it opens up a window where another process may come in and
      enable the ns, (re)intiailizing the ns percpu_ref, causing the disable
      sequence to hang.
      
      Solve this by taking the global nvmet_config_sem over the entire configfs
      enable/disable sequence.
      
      Fixes: a07b4970
      
       ("nvmet: add a generic NVMe target")
      Signed-off-by: default avatarSagi Grimberg <sagi@grimberg.me>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      Reviewed-by: default avatarChaitanya Kulkarni <kch@nvidia.com>
      Signed-off-by: default avatarKeith Busch <kbusch@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      82fdfbf2
    • Andy Shevchenko's avatar
      spi: Don't mark message DMA mapped when no transfer in it is · 5f72ba46
      Andy Shevchenko authored
      [ Upstream commit 9f788ba4 ]
      
      There is no need to set the DMA mapped flag of the message if it has
      no mapped transfers. Moreover, it may give the code a chance to take
      the wrong paths, i.e. to exercise DMA related APIs on unmapped data.
      Make __spi_map_msg() to bail earlier on the above mentioned cases.
      
      Fixes: 99adef31
      
       ("spi: Provide core support for DMA mapping transfers")
      Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
      Link: https://msgid.link/r/20240522171018.3362521-2-andriy.shevchenko@linux.intel.com
      Signed-off-by: default avatarMark Brown <broonie@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      5f72ba46
    • Pablo Neira Ayuso's avatar
      netfilter: nft_payload: restore vlan q-in-q match support · 7ca9cf24
      Pablo Neira Ayuso authored
      [ Upstream commit aff5c01f ]
      
      Revert f6ae9f12 ("netfilter: nft_payload: add C-VLAN support").
      
      f41f72d0 ("netfilter: nft_payload: simplify vlan header handling")
      already allows to match on inner vlan tags by subtract the vlan header
      size to the payload offset which has been popped and stored in skbuff
      metadata fields.
      
      Fixes: f6ae9f12
      
       ("netfilter: nft_payload: add C-VLAN support")
      Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      7ca9cf24
    • Eric Dumazet's avatar
      netfilter: nfnetlink_queue: acquire rcu_read_lock() in instance_destroy_rcu() · e01065b3
      Eric Dumazet authored
      [ Upstream commit dc21c6cc ]
      
      syzbot reported that nf_reinject() could be called without rcu_read_lock() :
      
      WARNING: suspicious RCU usage
      6.9.0-rc7-syzkaller-02060-g5c1672705a1a #0 Not tainted
      
      net/netfilter/nfnetlink_queue.c:263 suspicious rcu_dereference_check() usage!
      
      other info that might help us debug this:
      
      rcu_scheduler_active = 2, debug_locks = 1
      2 locks held by syz-executor.4/13427:
        #0: ffffffff8e334f60 (rcu_callback){....}-{0:0}, at: rcu_lock_acquire include/linux/rcupdate.h:329 [inline]
        #0: ffffffff8e334f60 (rcu_callback){....}-{0:0}, at: rcu_do_batch kernel/rcu/tree.c:2190 [inline]
        #0: ffffffff8e334f60 (rcu_callback){....}-{0:0}, at: rcu_core+0xa86/0x1830 kernel/rcu/tree.c:2471
        #1: ffff88801ca92958 (&inst->lock){+.-.}-{2:2}, at: spin_lock_bh include/linux/spinlock.h:356 [inline]
        #1: ffff88801ca92958 (&inst->lock){+.-.}-{2:2}, at: nfqnl_flush net/netfilter/nfnetlink_queue.c:405 [inline]
        #1: ffff88801ca92958 (&inst->lock){+.-.}-{2:2}, at: instance_destroy_rcu+0x30/0x220 net/netfilter/nfnetlink_queue.c:172
      
      stack backtrace:
      CPU: 0 PID: 13427 Comm: syz-executor.4 Not tainted 6.9.0-rc7-syzkaller-02060-g5c1672705a1a #0
      Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 04/02/2024
      Call Trace:
       <IRQ>
        __dump_stack lib/dump_stack.c:88 [inline]
        dump_stack_lvl+0x241/0x360 lib/dump_stack.c:114
        lockdep_rcu_suspicious+0x221/0x340 kernel/locking/lockdep.c:6712
        nf_reinject net/netfilter/nfnetlink_queue.c:323 [inline]
        nfqnl_reinject+0x6ec/0x1120 net/netfilter/nfnetlink_queue.c:397
        nfqnl_flush net/netfilter/nfnetlink_queue.c:410 [inline]
        instance_destroy_rcu+0x1ae/0x220 net/netfilter/nfnetlink_queue.c:172
        rcu_do_batch kernel/rcu/tree.c:2196 [inline]
        rcu_core+0xafd/0x1830 kernel/rcu/tree.c:2471
        handle_softirqs+0x2d6/0x990 kernel/softirq.c:554
        __do_softirq kernel/softirq.c:588 [inline]
        invoke_softirq kernel/softirq.c:428 [inline]
        __irq_exit_rcu+0xf4/0x1c0 kernel/softirq.c:637
        irq_exit_rcu+0x9/0x30 kernel/softirq.c:649
        instr_sysvec_apic_timer_interrupt arch/x86/kernel/apic/apic.c:1043 [inline]
        sysvec_apic_timer_interrupt+0xa6/0xc0 arch/x86/kernel/apic/apic.c:1043
       </IRQ>
       <TASK>
      
      Fixes: 9872bec7
      
       ("[NETFILTER]: nfnetlink: use RCU for queue instances hash")
      Reported-by: default avatarsyzbot <syzkaller@googlegroups.com>
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Acked-by: default avatarFlorian Westphal <fw@strlen.de>
      Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      e01065b3
    • Ryosuke Yasuoka's avatar
      nfc: nci: Fix handling of zero-length payload packets in nci_rx_work() · 0f26983c
      Ryosuke Yasuoka authored
      [ Upstream commit 6671e352 ]
      
      When nci_rx_work() receives a zero-length payload packet, it should not
      discard the packet and exit the loop. Instead, it should continue
      processing subsequent packets.
      
      Fixes: d24b0353
      
       ("nfc: nci: Fix uninit-value in nci_dev_up and nci_ntf_packet")
      Signed-off-by: default avatarRyosuke Yasuoka <ryasuoka@redhat.com>
      Reviewed-by: default avatarSimon Horman <horms@kernel.org>
      Reviewed-by: default avatarKrzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
      Link: https://lore.kernel.org/r/20240521153444.535399-1-ryasuoka@redhat.com
      Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      0f26983c
    • Tetsuo Handa's avatar
      nfc: nci: Fix kcov check in nci_rx_work() · 728fb8b3
      Tetsuo Handa authored
      [ Upstream commit 19e35f24 ]
      
      Commit 7e8cdc97 ("nfc: Add KCOV annotations") added
      kcov_remote_start_common()/kcov_remote_stop() pair into nci_rx_work(),
      with an assumption that kcov_remote_stop() is called upon continue of
      the for loop. But commit d24b0353
      
       ("nfc: nci: Fix uninit-value in
      nci_dev_up and nci_ntf_packet") forgot to call kcov_remote_stop() before
      break of the for loop.
      
      Reported-by: default avatarsyzbot <syzbot+0438378d6f157baae1a2@syzkaller.appspotmail.com>
      Closes: https://syzkaller.appspot.com/bug?extid=0438378d6f157baae1a2
      Fixes: d24b0353
      
       ("nfc: nci: Fix uninit-value in nci_dev_up and nci_ntf_packet")
      Suggested-by: default avatarAndrey Konovalov <andreyknvl@gmail.com>
      Signed-off-by: default avatarTetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
      Reviewed-by: default avatarKrzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
      Link: https://lore.kernel.org/r/6d10f829-5a0c-405a-b39a-d7266f3a1a0b@I-love.SAKURA.ne.jp
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Stable-dep-of: 6671e352
      
       ("nfc: nci: Fix handling of zero-length payload packets in nci_rx_work()")
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      728fb8b3
    • Dae R. Jeong's avatar
      tls: fix missing memory barrier in tls_init · d72e126e
      Dae R. Jeong authored
      [ Upstream commit 91e61dd7 ]
      
      In tls_init(), a write memory barrier is missing, and store-store
      reordering may cause NULL dereference in tls_{setsockopt,getsockopt}.
      
      CPU0                               CPU1
      -----                              -----
      // In tls_init()
      // In tls_ctx_create()
      ctx = kzalloc()
      ctx->sk_proto = READ_ONCE(sk->sk_prot) -(1)
      
      // In update_sk_prot()
      WRITE_ONCE(sk->sk_prot, tls_prots)     -(2)
      
                                         // In sock_common_setsockopt()
                                         READ_ONCE(sk->sk_prot)->setsockopt()
      
                                         // In tls_{setsockopt,getsockopt}()
                                         ctx->sk_proto->setsockopt()    -(3)
      
      In the above scenario, when (1) and (2) are reordered, (3) can observe
      the NULL value of ctx->sk_proto, causing NULL dereference.
      
      To fix it, we rely on rcu_assign_pointer() which implies the release
      barrier semantic. By moving rcu_assign_pointer() after ctx->sk_proto is
      initialized, we can ensure that ctx->sk_proto are visible when
      changing sk->sk_prot.
      
      Fixes: d5bee737
      
       ("net/tls: Annotate access to sk_prot with READ_ONCE/WRITE_ONCE")
      Signed-off-by: default avatarYewon Choi <woni9911@gmail.com>
      Signed-off-by: default avatarDae R. Jeong <threeearcat@gmail.com>
      Link: https://lore.kernel.org/netdev/ZU4OJG56g2V9z_H7@dragonet/T/
      Link: https://lore.kernel.org/r/Zkx4vjSFp0mfpjQ2@libra05
      Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      d72e126e
    • Wei Fang's avatar
      net: fec: avoid lock evasion when reading pps_enable · cb95173e
      Wei Fang authored
      [ Upstream commit 3b1c92f8 ]
      
      The assignment of pps_enable is protected by tmreg_lock, but the read
      operation of pps_enable is not. So the Coverity tool reports a lock
      evasion warning which may cause data race to occur when running in a
      multithread environment. Although this issue is almost impossible to
      occur, we'd better fix it, at least it seems more logically reasonable,
      and it also prevents Coverity from continuing to issue warnings.
      
      Fixes: 278d2404
      
       ("net: fec: ptp: Enable PPS output based on ptp clock")
      Signed-off-by: default avatarWei Fang <wei.fang@nxp.com>
      Link: https://lore.kernel.org/r/20240521023800.17102-1-wei.fang@nxp.com
      Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      cb95173e
    • Jiri Pirko's avatar
      virtio: delete vq in vp_find_vqs_msix() when request_irq() fails · 7fbe54f0
      Jiri Pirko authored
      [ Upstream commit 89875151 ]
      
      When request_irq() fails, error path calls vp_del_vqs(). There, as vq is
      present in the list, free_irq() is called for the same vector. That
      causes following splat:
      
      [    0.414355] Trying to free already-free IRQ 27
      [    0.414403] WARNING: CPU: 1 PID: 1 at kernel/irq/manage.c:1899 free_irq+0x1a1/0x2d0
      [    0.414510] Modules linked in:
      [    0.414540] CPU: 1 PID: 1 Comm: swapper/0 Not tainted 6.9.0-rc4+ #27
      [    0.414540] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.3-1.fc39 04/01/2014
      [    0.414540] RIP: 0010:free_irq+0x1a1/0x2d0
      [    0.414540] Code: 1e 00 48 83 c4 08 48 89 e8 5b 5d 41 5c 41 5d 41 5e 41 5f c3 cc cc cc cc 90 8b 74 24 04 48 c7 c7 98 80 6c b1 e8 00 c9 f7 ff 90 <0f> 0b 90 90 48 89 ee 4c 89 ef e8 e0 20 b8 00 49 8b 47 40 48 8b 40
      [    0.414540] RSP: 0000:ffffb71480013ae0 EFLAGS: 00010086
      [    0.414540] RAX: 0000000000000000 RBX: ffffa099c2722000 RCX: 0000000000000000
      [    0.414540] RDX: 0000000000000000 RSI: ffffb71480013998 RDI: 0000000000000001
      [    0.414540] RBP: 0000000000000246 R08: 00000000ffffdfff R09: 0000000000000001
      [    0.414540] R10: 00000000ffffdfff R11: ffffffffb18729c0 R12: ffffa099c1c91760
      [    0.414540] R13: ffffa099c1c916a4 R14: ffffa099c1d2f200 R15: ffffa099c1c91600
      [    0.414540] FS:  0000000000000000(0000) GS:ffffa099fec40000(0000) knlGS:0000000000000000
      [    0.414540] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [    0.414540] CR2: 0000000000000000 CR3: 0000000008e3e001 CR4: 0000000000370ef0
      [    0.414540] Call Trace:
      [    0.414540]  <TASK>
      [    0.414540]  ? __warn+0x80/0x120
      [    0.414540]  ? free_irq+0x1a1/0x2d0
      [    0.414540]  ? report_bug+0x164/0x190
      [    0.414540]  ? handle_bug+0x3b/0x70
      [    0.414540]  ? exc_invalid_op+0x17/0x70
      [    0.414540]  ? asm_exc_invalid_op+0x1a/0x20
      [    0.414540]  ? free_irq+0x1a1/0x2d0
      [    0.414540]  vp_del_vqs+0xc1/0x220
      [    0.414540]  vp_find_vqs_msix+0x305/0x470
      [    0.414540]  vp_find_vqs+0x3e/0x1a0
      [    0.414540]  vp_modern_find_vqs+0x1b/0x70
      [    0.414540]  init_vqs+0x387/0x600
      [    0.414540]  virtnet_probe+0x50a/0xc80
      [    0.414540]  virtio_dev_probe+0x1e0/0x2b0
      [    0.414540]  really_probe+0xc0/0x2c0
      [    0.414540]  ? __pfx___driver_attach+0x10/0x10
      [    0.414540]  __driver_probe_device+0x73/0x120
      [    0.414540]  driver_probe_device+0x1f/0xe0
      [    0.414540]  __driver_attach+0x88/0x180
      [    0.414540]  bus_for_each_dev+0x85/0xd0
      [    0.414540]  bus_add_driver+0xec/0x1f0
      [    0.414540]  driver_register+0x59/0x100
      [    0.414540]  ? __pfx_virtio_net_driver_init+0x10/0x10
      [    0.414540]  virtio_net_driver_init+0x90/0xb0
      [    0.414540]  do_one_initcall+0x58/0x230
      [    0.414540]  kernel_init_freeable+0x1a3/0x2d0
      [    0.414540]  ? __pfx_kernel_init+0x10/0x10
      [    0.414540]  kernel_init+0x1a/0x1c0
      [    0.414540]  ret_from_fork+0x31/0x50
      [    0.414540]  ? __pfx_kernel_init+0x10/0x10
      [    0.414540]  ret_from_fork_asm+0x1a/0x30
      [    0.414540]  </TASK>
      
      Fix this by calling deleting the current vq when request_irq() fails.
      
      Fixes: 0b0f9dc5
      
       ("Revert "virtio_pci: use shared interrupts for virtqueues"")
      Signed-off-by: default avatarJiri Pirko <jiri@nvidia.com>
      Message-Id: <20240426150845.3999481-1-jiri@resnulli.us>
      Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      7fbe54f0
    • Jiangfeng Xiao's avatar
      arm64: asm-bug: Add .align 2 to the end of __BUG_ENTRY · 461a760d
      Jiangfeng Xiao authored
      [ Upstream commit ffbf4fb9 ]
      
      When CONFIG_DEBUG_BUGVERBOSE=n, we fail to add necessary padding bytes
      to bug_table entries, and as a result the last entry in a bug table will
      be ignored, potentially leading to an unexpected panic(). All prior
      entries in the table will be handled correctly.
      
      The arm64 ABI requires that struct fields of up to 8 bytes are
      naturally-aligned, with padding added within a struct such that struct
      are suitably aligned within arrays.
      
      When CONFIG_DEBUG_BUGVERPOSE=y, the layout of a bug_entry is:
      
      	struct bug_entry {
      		signed int      bug_addr_disp;	// 4 bytes
      		signed int      file_disp;	// 4 bytes
      		unsigned short  line;		// 2 bytes
      		unsigned short  flags;		// 2 bytes
      	}
      
      ... with 12 bytes total, requiring 4-byte alignment.
      
      When CONFIG_DEBUG_BUGVERBOSE=n, the layout of a bug_entry is:
      
      	struct bug_entry {
      		signed int      bug_addr_disp;	// 4 bytes
      		unsigned short  flags;		// 2 bytes
      		< implicit padding >		// 2 bytes
      	}
      
      ... with 8 bytes total, with 6 bytes of data and 2 bytes of trailing
      padding, requiring 4-byte alginment.
      
      When we create a bug_entry in assembly, we align the start of the entry
      to 4 bytes, which implicitly handles padding for any prior entries.
      However, we do not align the end of the entry, and so when
      CONFIG_DEBUG_BUGVERBOSE=n, the final entry lacks the trailing padding
      bytes.
      
      For the main kernel image this is not a problem as find_bug() doesn't
      depend on the trailing padding bytes when searching for entries:
      
      	for (bug = __start___bug_table; bug < __stop___bug_table; ++bug)
      		if (bugaddr == bug_addr(bug))
      			return bug;
      
      However for modules, module_bug_finalize() depends on the trailing
      bytes when calculating the number of entries:
      
      	mod->num_bugs = sechdrs[i].sh_size / sizeof(struct bug_entry);
      
      ... and as the last bug_entry lacks the necessary padding bytes, this entry
      will not be counted, e.g. in the case of a single entry:
      
      	sechdrs[i].sh_size == 6
      	sizeof(struct bug_entry) == 8;
      
      	sechdrs[i].sh_size / sizeof(struct bug_entry) == 0;
      
      Consequently module_find_bug() will miss the last bug_entry when it does:
      
      	for (i = 0; i < mod->num_bugs; ++i, ++bug)
      		if (bugaddr == bug_addr(bug))
      			goto out;
      
      ... which can lead to a kenrel panic due to an unhandled bug.
      
      This can be demonstrated with the following module:
      
      	static int __init buginit(void)
      	{
      		WARN(1, "hello\n");
      		return 0;
      	}
      
      	static void __exit bugexit(void)
      	{
      	}
      
      	module_init(buginit);
      	module_exit(bugexit);
      	MODULE_LICENSE("GPL");
      
      ... which will trigger a kernel panic when loaded:
      
      	------------[ cut here ]------------
      	hello
      	Unexpected kernel BRK exception at EL1
      	Internal error: BRK handler: 00000000f2000800 [#1] PREEMPT SMP
      	Modules linked in: hello(O+)
      	CPU: 0 PID: 50 Comm: insmod Tainted: G           O       6.9.1 #8
      	Hardware name: linux,dummy-virt (DT)
      	pstate: 60400005 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
      	pc : buginit+0x18/0x1000 [hello]
      	lr : buginit+0x18/0x1000 [hello]
      	sp : ffff800080533ae0
      	x29: ffff800080533ae0 x28: 0000000000000000 x27: 0000000000000000
      	x26: ffffaba8c4e70510 x25: ffff800080533c30 x24: ffffaba8c4a28a58
      	x23: 0000000000000000 x22: 0000000000000000 x21: ffff3947c0eab3c0
      	x20: ffffaba8c4e3f000 x19: ffffaba846464000 x18: 0000000000000006
      	x17: 0000000000000000 x16: ffffaba8c2492834 x15: 0720072007200720
      	x14: 0720072007200720 x13: ffffaba8c49b27c8 x12: 0000000000000312
      	x11: 0000000000000106 x10: ffffaba8c4a0a7c8 x9 : ffffaba8c49b27c8
      	x8 : 00000000ffffefff x7 : ffffaba8c4a0a7c8 x6 : 80000000fffff000
      	x5 : 0000000000000107 x4 : 0000000000000000 x3 : 0000000000000000
      	x2 : 0000000000000000 x1 : 0000000000000000 x0 : ffff3947c0eab3c0
      	Call trace:
      	 buginit+0x18/0x1000 [hello]
      	 do_one_initcall+0x80/0x1c8
      	 do_init_module+0x60/0x218
      	 load_module+0x1ba4/0x1d70
      	 __do_sys_init_module+0x198/0x1d0
      	 __arm64_sys_init_module+0x1c/0x28
      	 invoke_syscall+0x48/0x114
      	 el0_svc_common.constprop.0+0x40/0xe0
      	 do_el0_svc+0x1c/0x28
      	 el0_svc+0x34/0xd8
      	 el0t_64_sync_handler+0x120/0x12c
      	 el0t_64_sync+0x190/0x194
      	Code: d0ffffe0 910003fd 91000000 9400000b (d4210000)
      	---[ end trace 0000000000000000 ]---
      	Kernel panic - not syncing: BRK handler: Fatal exception
      
      Fix this by always aligning the end of a bug_entry to 4 bytes, which is
      correct regardless of CONFIG_DEBUG_BUGVERBOSE.
      
      Fixes: 9fb7410f
      
       ("arm64/BUG: Use BRK instruction for generic BUG traps")
      
      Signed-off-by: default avatarYuanbin Xie <xieyuanbin1@huawei.com>
      Signed-off-by: default avatarJiangfeng Xiao <xiaojiangfeng@huawei.com>
      Reviewed-by: default avatarMark Rutland <mark.rutland@arm.com>
      Link: https://lore.kernel.org/r/1716212077-43826-1-git-send-email-xiaojiangfeng@huawei.com
      Signed-off-by: default avatarWill Deacon <will@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      461a760d
    • Aaron Conole's avatar
      openvswitch: Set the skbuff pkt_type for proper pmtud support. · 8cae65ac
      Aaron Conole authored
      [ Upstream commit 30a92c9e
      
       ]
      
      Open vSwitch is originally intended to switch at layer 2, only dealing with
      Ethernet frames.  With the introduction of l3 tunnels support, it crossed
      into the realm of needing to care a bit about some routing details when
      making forwarding decisions.  If an oversized packet would need to be
      fragmented during this forwarding decision, there is a chance for pmtu
      to get involved and generate a routing exception.  This is gated by the
      skbuff->pkt_type field.
      
      When a flow is already loaded into the openvswitch module this field is
      set up and transitioned properly as a packet moves from one port to
      another.  In the case that a packet execute is invoked after a flow is
      newly installed this field is not properly initialized.  This causes the
      pmtud mechanism to omit sending the required exception messages across
      the tunnel boundary and a second attempt needs to be made to make sure
      that the routing exception is properly setup.  To fix this, we set the
      outgoing packet's pkt_type to PACKET_OUTGOING, since it can only get
      to the openvswitch module via a port device or packet command.
      
      Even for bridge ports as users, the pkt_type needs to be reset when
      doing the transmit as the packet is truly outgoing and routing needs
      to get involved post packet transformations, in the case of
      VXLAN/GENEVE/udp-tunnel packets.  In general, the pkt_type on output
      gets ignored, since we go straight to the driver, but in the case of
      tunnel ports they go through IP routing layer.
      
      This issue is periodically encountered in complex setups, such as large
      openshift deployments, where multiple sets of tunnel traversal occurs.
      A way to recreate this is with the ovn-heater project that can setup
      a networking environment which mimics such large deployments.  We need
      larger environments for this because we need to ensure that flow
      misses occur.  In these environment, without this patch, we can see:
      
        ./ovn_cluster.sh start
        podman exec ovn-chassis-1 ip r a 170.168.0.5/32 dev eth1 mtu 1200
        podman exec ovn-chassis-1 ip netns exec sw01p1 ip r flush cache
        podman exec ovn-chassis-1 ip netns exec sw01p1 \
               ping 21.0.0.3 -M do -s 1300 -c2
        PING 21.0.0.3 (21.0.0.3) 1300(1328) bytes of data.
        From 21.0.0.3 icmp_seq=2 Frag needed and DF set (mtu = 1142)
      
        --- 21.0.0.3 ping statistics ---
        ...
      
      Using tcpdump, we can also see the expected ICMP FRAG_NEEDED message is not
      sent into the server.
      
      With this patch, setting the pkt_type, we see the following:
      
        podman exec ovn-chassis-1 ip netns exec sw01p1 \
               ping 21.0.0.3 -M do -s 1300 -c2
        PING 21.0.0.3 (21.0.0.3) 1300(1328) bytes of data.
        From 21.0.0.3 icmp_seq=1 Frag needed and DF set (mtu = 1222)
        ping: local error: message too long, mtu=1222
      
        --- 21.0.0.3 ping statistics ---
        ...
      
      In this case, the first ping request receives the FRAG_NEEDED message and
      a local routing exception is created.
      
      Tested-by: default avatarJaime Caamano <jcaamano@redhat.com>
      Reported-at: https://issues.redhat.com/browse/FDP-164
      Fixes: 58264848
      
       ("openvswitch: Add vxlan tunneling support.")
      Signed-off-by: default avatarAaron Conole <aconole@redhat.com>
      Acked-by: default avatarEelco Chaudron <echaudro@redhat.com>
      Link: https://lore.kernel.org/r/20240516200941.16152-1-aconole@redhat.com
      Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      8cae65ac
    • Kuniyuki Iwashima's avatar
      tcp: Fix shift-out-of-bounds in dctcp_update_alpha(). · e9b2f606
      Kuniyuki Iwashima authored
      [ Upstream commit 3ebc46ca
      
       ]
      
      In dctcp_update_alpha(), we use a module parameter dctcp_shift_g
      as follows:
      
        alpha -= min_not_zero(alpha, alpha >> dctcp_shift_g);
        ...
        delivered_ce <<= (10 - dctcp_shift_g);
      
      It seems syzkaller started fuzzing module parameters and triggered
      shift-out-of-bounds [0] by setting 100 to dctcp_shift_g:
      
        memcpy((void*)0x20000080,
               "/sys/module/tcp_dctcp/parameters/dctcp_shift_g\000", 47);
        res = syscall(__NR_openat, /*fd=*/0xffffffffffffff9cul, /*file=*/0x20000080ul,
                      /*flags=*/2ul, /*mode=*/0ul);
        memcpy((void*)0x20000000, "100\000", 4);
        syscall(__NR_write, /*fd=*/r[0], /*val=*/0x20000000ul, /*len=*/4ul);
      
      Let's limit the max value of dctcp_shift_g by param_set_uint_minmax().
      
      With this patch:
      
        # echo 10 > /sys/module/tcp_dctcp/parameters/dctcp_shift_g
        # cat /sys/module/tcp_dctcp/parameters/dctcp_shift_g
        10
        # echo 11 > /sys/module/tcp_dctcp/parameters/dctcp_shift_g
        -bash: echo: write error: Invalid argument
      
      [0]:
      UBSAN: shift-out-of-bounds in net/ipv4/tcp_dctcp.c:143:12
      shift exponent 100 is too large for 32-bit type 'u32' (aka 'unsigned int')
      CPU: 0 PID: 8083 Comm: syz-executor345 Not tainted 6.9.0-05151-g1b294a1f3561 #2
      Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS
      1.13.0-1ubuntu1.1 04/01/2014
      Call Trace:
       <TASK>
       __dump_stack lib/dump_stack.c:88 [inline]
       dump_stack_lvl+0x201/0x300 lib/dump_stack.c:114
       ubsan_epilogue lib/ubsan.c:231 [inline]
       __ubsan_handle_shift_out_of_bounds+0x346/0x3a0 lib/ubsan.c:468
       dctcp_update_alpha+0x540/0x570 net/ipv4/tcp_dctcp.c:143
       tcp_in_ack_event net/ipv4/tcp_input.c:3802 [inline]
       tcp_ack+0x17b1/0x3bc0 net/ipv4/tcp_input.c:3948
       tcp_rcv_state_process+0x57a/0x2290 net/ipv4/tcp_input.c:6711
       tcp_v4_do_rcv+0x764/0xc40 net/ipv4/tcp_ipv4.c:1937
       sk_backlog_rcv include/net/sock.h:1106 [inline]
       __release_sock+0x20f/0x350 net/core/sock.c:2983
       release_sock+0x61/0x1f0 net/core/sock.c:3549
       mptcp_subflow_shutdown+0x3d0/0x620 net/mptcp/protocol.c:2907
       mptcp_check_send_data_fin+0x225/0x410 net/mptcp/protocol.c:2976
       __mptcp_close+0x238/0xad0 net/mptcp/protocol.c:3072
       mptcp_close+0x2a/0x1a0 net/mptcp/protocol.c:3127
       inet_release+0x190/0x1f0 net/ipv4/af_inet.c:437
       __sock_release net/socket.c:659 [inline]
       sock_close+0xc0/0x240 net/socket.c:1421
       __fput+0x41b/0x890 fs/file_table.c:422
       task_work_run+0x23b/0x300 kernel/task_work.c:180
       exit_task_work include/linux/task_work.h:38 [inline]
       do_exit+0x9c8/0x2540 kernel/exit.c:878
       do_group_exit+0x201/0x2b0 kernel/exit.c:1027
       __do_sys_exit_group kernel/exit.c:1038 [inline]
       __se_sys_exit_group kernel/exit.c:1036 [inline]
       __x64_sys_exit_group+0x3f/0x40 kernel/exit.c:1036
       do_syscall_x64 arch/x86/entry/common.c:52 [inline]
       do_syscall_64+0xe4/0x240 arch/x86/entry/common.c:83
       entry_SYSCALL_64_after_hwframe+0x67/0x6f
      RIP: 0033:0x7f6c2b5005b6
      Code: Unable to access opcode bytes at 0x7f6c2b50058c.
      RSP: 002b:00007ffe883eb948 EFLAGS: 00000246 ORIG_RAX: 00000000000000e7
      RAX: ffffffffffffffda RBX: 00007f6c2b5862f0 RCX: 00007f6c2b5005b6
      RDX: 0000000000000001 RSI: 000000000000003c RDI: 0000000000000001
      RBP: 0000000000000001 R08: 00000000000000e7 R09: ffffffffffffffc0
      R10: 0000000000000006 R11: 0000000000000246 R12: 00007f6c2b5862f0
      R13: 0000000000000001 R14: 0000000000000000 R15: 0000000000000001
       </TASK>
      
      Reported-by: default avatarsyzkaller <syzkaller@googlegroups.com>
      Reported-by: default avatarYue Sun <samsun1006219@gmail.com>
      Reported-by: default avatarxingwei lee <xrivendell7@gmail.com>
      Closes: https://lore.kernel.org/netdev/CAEkJfYNJM=cw-8x7_Vmj1J6uYVCWMbbvD=EFmDPVBGpTsqOxEA@mail.gmail.com/
      Fixes: e3118e83
      
       ("net: tcp: add DCTCP congestion control algorithm")
      Signed-off-by: default avatarKuniyuki Iwashima <kuniyu@amazon.com>
      Reviewed-by: default avatarSimon Horman <horms@kernel.org>
      Link: https://lore.kernel.org/r/20240517091626.32772-1-kuniyu@amazon.com
      Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      e9b2f606
    • Sagi Grimberg's avatar
      params: lift param_set_uint_minmax to common code · 42bd4e49
      Sagi Grimberg authored
      [ Upstream commit 2a14c9ae
      
       ]
      
      It is a useful helper hence move it to common code so others can enjoy
      it.
      
      Suggested-by: default avatarChristoph Hellwig <hch@lst.de>
      Reviewed-by: default avatarChaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
      Reviewed-by: default avatarHannes Reinecke <hare@suse.com>
      Signed-off-by: default avatarSagi Grimberg <sagi@grimberg.me>
      Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
      Stable-dep-of: 3ebc46ca
      
       ("tcp: Fix shift-out-of-bounds in dctcp_update_alpha().")
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      42bd4e49
    • Hangbin Liu's avatar
      ipv6: sr: fix memleak in seg6_hmac_init_algo · daf341e0
      Hangbin Liu authored
      [ Upstream commit efb9f4f1 ]
      
      seg6_hmac_init_algo returns without cleaning up the previous allocations
      if one fails, so it's going to leak all that memory and the crypto tfms.
      
      Update seg6_hmac_exit to only free the memory when allocated, so we can
      reuse the code directly.
      
      Fixes: bf355b8d
      
       ("ipv6: sr: add core files for SR HMAC support")
      Reported-by: default avatarSabrina Dubroca <sd@queasysnail.net>
      Closes: https://lore.kernel.org/netdev/Zj3bh-gE7eT6V6aH@hog/
      Signed-off-by: default avatarHangbin Liu <liuhangbin@gmail.com>
      Reviewed-by: default avatarSimon Horman <horms@kernel.org>
      Reviewed-by: default avatarSabrina Dubroca <sd@queasysnail.net>
      Link: https://lore.kernel.org/r/20240517005435.2600277-1-liuhangbin@gmail.com
      Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      daf341e0
    • Dan Aloni's avatar
      rpcrdma: fix handling for RDMA_CM_EVENT_DEVICE_REMOVAL · 1c65ebce
      Dan Aloni authored
      [ Upstream commit 4836da21 ]
      
      Under the scenario of IB device bonding, when bringing down one of the
      ports, or all ports, we saw xprtrdma entering a non-recoverable state
      where it is not even possible to complete the disconnect and shut it
      down the mount, requiring a reboot. Following debug, we saw that
      transport connect never ended after receiving the
      RDMA_CM_EVENT_DEVICE_REMOVAL callback.
      
      The DEVICE_REMOVAL callback is irrespective of whether the CM_ID is
      connected, and ESTABLISHED may not have happened. So need to work with
      each of these states accordingly.
      
      Fixes: 2acc5cae
      
       ('xprtrdma: Prevent dereferencing r_xprt->rx_ep after it is freed')
      Cc: Sagi Grimberg <sagi.grimberg@vastdata.com>
      Signed-off-by: default avatarDan Aloni <dan.aloni@vastdata.com>
      Reviewed-by: default avatarSagi Grimberg <sagi@grimberg.me>
      Reviewed-by: default avatarChuck Lever <chuck.lever@oracle.com>
      Signed-off-by: default avatarTrond Myklebust <trond.myklebust@hammerspace.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      1c65ebce
    • Dan Aloni's avatar
      sunrpc: fix NFSACL RPC retry on soft mount · f2b326b7
      Dan Aloni authored
      [ Upstream commit 0dc9f430 ]
      
      It used to be quite awhile ago since 1b63a751 ('SUNRPC: Refactor
      rpc_clone_client()'), in 2012, that `cl_timeout` was copied in so that
      all mount parameters propagate to NFSACL clients. However since that
      change, if mount options as follows are given:
      
          soft,timeo=50,retrans=16,vers=3
      
      The resultant NFSACL client receives:
      
          cl_softrtry: 1
          cl_timeout: to_initval=60000, to_maxval=60000, to_increment=0, to_retries=2, to_exponential=0
      
      These values lead to NFSACL operations not being retried under the
      condition of transient network outages with soft mount. Instead, getacl
      call fails after 60 seconds with EIO.
      
      The simple fix is to pass the existing client's `cl_timeout` as the new
      client timeout.
      
      Cc: Chuck Lever <chuck.lever@oracle.com>
      Cc: Benjamin Coddington <bcodding@redhat.com>
      Link: https://lore.kernel.org/all/20231105154857.ryakhmgaptq3hb6b@gmail.com/T/
      Fixes: 1b63a751
      
       ('SUNRPC: Refactor rpc_clone_client()')
      Signed-off-by: default avatarDan Aloni <dan.aloni@vastdata.com>
      Reviewed-by: default avatarBenjamin Coddington <bcodding@redhat.com>
      Signed-off-by: default avatarTrond Myklebust <trond.myklebust@hammerspace.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      f2b326b7
    • Shenghao Ding's avatar
      ASoC: tas2552: Add TX path for capturing AUDIO-OUT data · 6f39d5aa
      Shenghao Ding authored
      [ Upstream commit 7078ac4f ]
      
      TAS2552 is a Smartamp with I/V sense data, add TX path
      to support capturing I/V data.
      
      Fixes: 38803ce7
      
       ("ASoC: codecs: tas*: merge .digital_mute() into .mute_stream()")
      Signed-off-by: default avatarShenghao Ding <shenghao-ding@ti.com>
      Link: https://msgid.link/r/20240518033515.866-1-shenghao-ding@ti.com
      Signed-off-by: default avatarMark Brown <broonie@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      6f39d5aa
    • Ryosuke Yasuoka's avatar
      nfc: nci: Fix uninit-value in nci_rx_work · f80b786a
      Ryosuke Yasuoka authored
      [ Upstream commit e4a87abf ]
      
      syzbot reported the following uninit-value access issue [1]
      
      nci_rx_work() parses received packet from ndev->rx_q. It should be
      validated header size, payload size and total packet size before
      processing the packet. If an invalid packet is detected, it should be
      silently discarded.
      
      Fixes: d24b0353
      
       ("nfc: nci: Fix uninit-value in nci_dev_up and nci_ntf_packet")
      Reported-and-tested-by: default avatar <syzbot+d7b4dc6cd50410152534@syzkaller.appspotmail.com>
      Closes: https://syzkaller.appspot.com/bug?extid=d7b4dc6cd50410152534 [1]
      Signed-off-by: default avatarRyosuke Yasuoka <ryasuoka@redhat.com>
      Reviewed-by: default avatarKrzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      f80b786a
    • Masahiro Yamada's avatar
      x86/kconfig: Select ARCH_WANT_FRAME_POINTERS again when UNWINDER_FRAME_POINTER=y · ee6a4978
      Masahiro Yamada authored
      [ Upstream commit 66ee3636 ]
      
      It took me some time to understand the purpose of the tricky code at
      the end of arch/x86/Kconfig.debug.
      
      Without it, the following would be shown:
      
        WARNING: unmet direct dependencies detected for FRAME_POINTER
      
      because
      
        81d38719 ("x86/kconfig: Consolidate unwinders into multiple choice selection")
      
      removed 'select ARCH_WANT_FRAME_POINTERS'.
      
      The correct and more straightforward approach should have been to move
      it where 'select FRAME_POINTER' is located.
      
      Several architectures properly handle the conditional selection of
      ARCH_WANT_FRAME_POINTERS. For example, 'config UNWINDER_FRAME_POINTER'
      in arch/arm/Kconfig.debug.
      
      Fixes: 81d38719
      
       ("x86/kconfig: Consolidate unwinders into multiple choice selection")
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      Signed-off-by: default avatarBorislav Petkov (AMD) <bp@alien8.de>
      Acked-by: default avatarJosh Poimboeuf <jpoimboe@kernel.org>
      Link: https://lore.kernel.org/r/20240204122003.53795-1-masahiroy@kernel.org
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      ee6a4978
    • Matti Vaittinen's avatar
      regulator: bd71828: Don't overwrite runtime voltages · 8fb8be0e
      Matti Vaittinen authored
      [ Upstream commit 0f9f7c63
      
       ]
      
      Some of the regulators on the BD71828 have common voltage setting for
      RUN/SUSPEND/IDLE/LPSR states. The enable control can be set for each
      state though.
      
      The driver allows setting the voltage values for these states via
      device-tree. As a side effect, setting the voltages for
      SUSPEND/IDLE/LPSR will also change the RUN level voltage which is not
      desired and can break the system.
      
      The comment in code reflects this behaviour, but it is likely to not
      make people any happier. The right thing to do is to allow setting the
      enable/disable state at SUSPEND/IDLE/LPSR via device-tree, but to
      disallow setting state specific voltages for those regulators.
      
      BUCK1 is a bit different. It only shares the SUSPEND and LPSR state
      voltages. The former behaviour of allowing to silently overwrite the
      SUSPEND state voltage by LPSR state voltage is also changed here so that
      the SUSPEND voltage is prioritized over LPSR voltage.
      
      Prevent setting PMIC state specific voltages for regulators which do not
      support it.
      
      Signed-off-by: default avatarMatti Vaittinen <mazziesaccount@gmail.com>
      Fixes: 522498f8
      
       ("regulator: bd71828: Basic support for ROHM bd71828 PMIC regulators")
      Link: https://msgid.link/r/e1883ae1e3ae5668f1030455d4750923561f3d68.1715848512.git.mazziesaccount@gmail.com
      Signed-off-by: default avatarMark Brown <broonie@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      8fb8be0e
    • Zhu Yanjun's avatar
      null_blk: Fix the WARNING: modpost: missing MODULE_DESCRIPTION() · a2b0c3a6
      Zhu Yanjun authored
      [ Upstream commit 9e6727f8 ]
      
      No functional changes intended.
      
      Fixes: f2298c04
      
       ("null_blk: multi queue aware block test driver")
      Signed-off-by: default avatarZhu Yanjun <yanjun.zhu@linux.dev>
      Reviewed-by: default avatarChaitanya Kulkarni <kch@nvidia.com>
      Link: https://lore.kernel.org/r/20240506075538.6064-1-yanjun.zhu@linux.dev
      Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      a2b0c3a6
    • Hans Verkuil's avatar
      media: cec: core: avoid confusing "transmit timed out" message · 3166b2df
      Hans Verkuil authored
      [ Upstream commit cbe49997
      
       ]
      
      If, when waiting for a transmit to finish, the wait is interrupted,
      then you might get a "transmit timed out" message, even though the
      transmit was interrupted and did not actually time out.
      
      Set transmit_in_progress_aborted to true if the
      wait_for_completion_killable() call was interrupted and ensure
      that the transmit is properly marked as ABORTED.
      
      Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
      Reported-by: default avatarYang, Chenyuan <cy54@illinois.edu>
      Closes: https://lore.kernel.org/linux-media/PH7PR11MB57688E64ADE4FE82E658D86DA09EA@PH7PR11MB5768.namprd11.prod.outlook.com/
      Fixes: 590a8e56
      
       ("media: cec: abort if the current transmit was canceled")
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      3166b2df
    • Hans Verkuil's avatar
      media: cec: core: avoid recursive cec_claim_log_addrs · 5103090f
      Hans Verkuil authored
      [ Upstream commit 47c82aac
      
       ]
      
      Keep track if cec_claim_log_addrs() is running, and return -EBUSY
      if it is when calling CEC_ADAP_S_LOG_ADDRS.
      
      This prevents a case where cec_claim_log_addrs() could be called
      while it was still in progress.
      
      Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
      Reported-by: default avatarYang, Chenyuan <cy54@illinois.edu>
      Closes: https://lore.kernel.org/linux-media/PH7PR11MB57688E64ADE4FE82E658D86DA09EA@PH7PR11MB5768.namprd11.prod.outlook.com/
      Fixes: ca684386
      
       ("[media] cec: add HDMI CEC framework (api)")
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      5103090f
    • Hans Verkuil's avatar
      media: cec-adap.c: drop activate_cnt, use state info instead · 3e938b7d
      Hans Verkuil authored
      [ Upstream commit f9222f8c
      
       ]
      
      Using an activation counter to decide when the enable or disable the
      cec adapter is not the best approach and can lead to race conditions.
      
      Change this to determining the current status of the adapter, and
      enable or disable the adapter accordingly.
      
      It now only needs to be called whenever there is a chance that the
      state changes, and it can handle enabling/disabling monitoring as
      well if needed.
      
      This simplifies the code and it should be a more robust approach as well.
      
      Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@kernel.org>
      Stable-dep-of: 47c82aac
      
       ("media: cec: core: avoid recursive cec_claim_log_addrs")
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      3e938b7d
    • Hans Verkuil's avatar
      media: cec: use call_op and check for !unregistered · 73ef9ae9
      Hans Verkuil authored
      [ Upstream commit e2ed5024
      
       ]
      
      Use call_(void_)op consistently in the CEC core framework. Ditto
      for the cec pin ops. And check if !adap->devnode.unregistered before
      calling each op. This avoids calls to ops when the device has been
      unregistered and the underlying hardware may be gone.
      
      Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@kernel.org>
      Stable-dep-of: 47c82aac
      
       ("media: cec: core: avoid recursive cec_claim_log_addrs")
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      73ef9ae9
    • Hans Verkuil's avatar
      media: cec: correctly pass on reply results · 8fa7e489
      Hans Verkuil authored
      [ Upstream commit f9d0ecbf
      
       ]
      
      The results of non-blocking transmits were not correctly communicated
      to userspace.
      
      Specifically:
      
      1) if a non-blocking transmit was canceled, then rx_status wasn't set to 0
         as it should.
      2) if the non-blocking transmit succeeded, but the corresponding reply
         never arrived (aborted or timed out), then tx_status wasn't set to 0
         as it should, and rx_status was hardcoded to ABORTED instead of the
         actual reason, such as TIMEOUT. In addition, adap->ops->received() was
         never called, so drivers that want to do message processing themselves
         would not be informed of the failed reply.
      
      Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@kernel.org>
      Stable-dep-of: 47c82aac
      
       ("media: cec: core: avoid recursive cec_claim_log_addrs")
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      8fa7e489
    • Hans Verkuil's avatar
      media: cec: abort if the current transmit was canceled · b64cb24a
      Hans Verkuil authored
      [ Upstream commit 590a8e56
      
       ]
      
      If a transmit-in-progress was canceled, then, once the transmit
      is done, mark it as aborted and refrain from retrying the transmit.
      
      To signal this situation the new transmit_in_progress_aborted field is
      set to true.
      
      The old implementation would just set adap->transmitting to NULL and
      set adap->transmit_in_progress to false, but on the hardware level
      the transmit was still ongoing. However, the framework would think
      the transmit was aborted, and if a new transmit was issued, then
      it could overwrite the HW buffer containing the old transmit with the
      new transmit, leading to garbled data on the CEC bus.
      
      Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@kernel.org>
      Stable-dep-of: 47c82aac
      
       ("media: cec: core: avoid recursive cec_claim_log_addrs")
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      b64cb24a
    • Hans Verkuil's avatar
      media: cec: call enable_adap on s_log_addrs · 2c67f363
      Hans Verkuil authored
      [ Upstream commit 3813c932
      
       ]
      
      Don't enable/disable the adapter if the first fh is opened or the
      last fh is closed, instead do this when the adapter is configured
      or unconfigured, and also when we enter Monitor All or Monitor Pin
      mode for the first time or we exit the Monitor All/Pin mode for the
      last time.
      
      However, if needs_hpd is true, then do this when the physical
      address is set or cleared: in that case the adapter typically is
      powered by the HPD, so it really is disabled when the HPD is low.
      This case (needs_hpd is true) was already handled in this way, so
      this wasn't changed.
      
      The problem with the old behavior was that if the HPD goes low when
      no fh is open, and a transmit was in progress, then the adapter would
      be disabled, typically stopping the transmit immediately which
      leaves a partial message on the bus, which isn't nice and can confuse
      some adapters.
      
      It makes much more sense to disable it only when the adapter is
      unconfigured and we're not monitoring the bus, since then you really
      won't be using it anymore.
      
      To keep track of this store a CEC activation count and call adap_enable
      only when it goes from 0 to 1 or back to 0.
      
      Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@kernel.org>
      Stable-dep-of: 47c82aac
      
       ("media: cec: core: avoid recursive cec_claim_log_addrs")
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      2c67f363
    • Hans Verkuil's avatar
      media: cec: fix a deadlock situation · 0ab74ae9
      Hans Verkuil authored
      [ Upstream commit a9e61076
      
       ]
      
      The cec_devnode struct has a lock meant to serialize access
      to the fields of this struct. This lock is taken during
      device node (un)registration and when opening or releasing a
      filehandle to the device node. When the last open filehandle
      is closed the cec adapter might be disabled by calling the
      adap_enable driver callback with the devnode.lock held.
      
      However, if during that callback a message or event arrives
      then the driver will call one of the cec_queue_event()
      variants in cec-adap.c, and those will take the same devnode.lock
      to walk the open filehandle list.
      
      This obviously causes a deadlock.
      
      This is quite easy to reproduce with the cec-gpio driver since that
      uses the cec-pin framework which generated lots of events and uses
      a kernel thread for the processing, so when adap_enable is called
      the thread is still running and can generate events.
      
      But I suspect that it might also happen with other drivers if an
      interrupt arrives signaling e.g. a received message before adap_enable
      had a chance to disable the interrupts.
      
      This patch adds a new mutex to serialize access to the fhs list.
      When adap_enable() is called the devnode.lock mutex is held, but
      not devnode.lock_fhs. The event functions in cec-adap.c will now
      use devnode.lock_fhs instead of devnode.lock, ensuring that it is
      safe to call those functions from the adap_enable callback.
      
      This specific issue only happens if the last open filehandle is closed
      and the physical address is invalid. This is not something that
      happens during normal operation, but it does happen when monitoring
      CEC traffic (e.g. cec-ctl --monitor) with an unconfigured CEC adapter.
      
      Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
      Cc: <stable@vger.kernel.org>  # for v5.13 and up
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      Stable-dep-of: 47c82aac
      
       ("media: cec: core: avoid recursive cec_claim_log_addrs")
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      0ab74ae9