Skip to content
  1. May 17, 2024
    • Lukasz Majewski's avatar
      hsr: Simplify code for announcing HSR nodes timer setup · 5136ea7f
      Lukasz Majewski authored
      [ Upstream commit 4893b8b3 ]
      
      Up till now the code to start HSR announce timer, which triggers sending
      supervisory frames, was assuming that hsr_netdev_notify() would be called
      at least twice for hsrX interface. This was required to have different
      values for old and current values of network device's operstate.
      
      This is problematic for a case where hsrX interface is already in the
      operational state when hsr_netdev_notify() is called, so timer is not
      configured to trigger and as a result the hsrX is not sending supervisory
      frames to HSR ring.
      
      This error has been discovered when hsr_ping.sh script was run. To be
      more specific - for the hsr1 and hsr2 the hsr_netdev_notify() was
      called at least twice with different IF_OPER_{LOWERDOWN|DOWN|UP} states
      assigned in hsr_check_carrier_and_operstate(hsr). As a result there was
      no issue with sending supervisory frames.
      However, with hsr3, the notify function was called only once with
      operstate set to IF_OPER_UP and timer responsible for triggering
      supervisory frames was not fired.
      
      The solution is to use netif_oper_up() and netif_running() helper
      functions to assess if network hsrX device is up.
      Only then, when the timer is not already pending, it is started.
      Otherwise it is deactivated.
      
      Fixes: f421436a
      
       ("net/hsr: Add support for the High-availability Seamless Redundancy protocol (HSRv0)")
      Signed-off-by: default avatarLukasz Majewski <lukma@denx.de>
      Reviewed-by: default avatarSimon Horman <horms@kernel.org>
      Link: https://lore.kernel.org/r/20240507111214.3519800-1-lukma@denx.de
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      5136ea7f
    • Eric Dumazet's avatar
      net-sysfs: convert dev->operstate reads to lockless ones · ca4e781f
      Eric Dumazet authored
      [ Upstream commit 004d1383
      
       ]
      
      operstate_show() can omit dev_base_lock acquisition only
      to read dev->operstate.
      
      Annotate accesses to dev->operstate.
      
      Writers still acquire dev_base_lock for mutual exclusion.
      
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Stable-dep-of: 4893b8b3
      
       ("hsr: Simplify code for announcing HSR nodes timer setup")
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      ca4e781f
    • Thomas Gleixner's avatar
      timers: Rename del_timer() to timer_delete() · b086d1e8
      Thomas Gleixner authored
      [ Upstream commit bb663f0f
      
       ]
      
      The timer related functions do not have a strict timer_ prefixed namespace
      which is really annoying.
      
      Rename del_timer() to timer_delete() and provide del_timer()
      as a wrapper. Document that del_timer() is not for new code.
      
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Tested-by: default avatarGuenter Roeck <linux@roeck-us.net>
      Reviewed-by: default avatarSteven Rostedt (Google) <rostedt@goodmis.org>
      Reviewed-by: default avatarJacob Keller <jacob.e.keller@intel.com>
      Reviewed-by: default avatarAnna-Maria Behnsen <anna-maria@linutronix.de>
      Link: https://lore.kernel.org/r/20221123201625.015535022@linutronix.de
      Stable-dep-of: 4893b8b3
      
       ("hsr: Simplify code for announcing HSR nodes timer setup")
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      b086d1e8
    • Thomas Gleixner's avatar
      timers: Get rid of del_singleshot_timer_sync() · e2591243
      Thomas Gleixner authored
      [ Upstream commit 9a5a3056
      
       ]
      
      del_singleshot_timer_sync() used to be an optimization for deleting timers
      which are not rearmed from the timer callback function.
      
      This optimization turned out to be broken and got mapped to
      del_timer_sync() about 17 years ago.
      
      Get rid of the undocumented indirection and use del_timer_sync() directly.
      
      No functional change.
      
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Tested-by: default avatarGuenter Roeck <linux@roeck-us.net>
      Reviewed-by: default avatarJacob Keller <jacob.e.keller@intel.com>
      Reviewed-by: default avatarAnna-Maria Behnsen <anna-maria@linutronix.de>
      Link: https://lore.kernel.org/r/20221123201624.706987932@linutronix.de
      Stable-dep-of: 4893b8b3
      
       ("hsr: Simplify code for announcing HSR nodes timer setup")
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      e2591243
    • Eric Dumazet's avatar
      ipv6: fib6_rules: avoid possible NULL dereference in fib6_rule_action() · 7e3242c1
      Eric Dumazet authored
      [ Upstream commit d101291b ]
      
      syzbot is able to trigger the following crash [1],
      caused by unsafe ip6_dst_idev() use.
      
      Indeed ip6_dst_idev() can return NULL, and must always be checked.
      
      [1]
      
      Oops: general protection fault, probably for non-canonical address 0xdffffc0000000000: 0000 [#1] PREEMPT SMP KASAN PTI
      KASAN: null-ptr-deref in range [0x0000000000000000-0x0000000000000007]
      CPU: 0 PID: 31648 Comm: syz-executor.0 Not tainted 6.9.0-rc4-next-20240417-syzkaller #0
      Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 03/27/2024
       RIP: 0010:__fib6_rule_action net/ipv6/fib6_rules.c:237 [inline]
       RIP: 0010:fib6_rule_action+0x241/0x7b0 net/ipv6/fib6_rules.c:267
      Code: 02 00 00 49 8d 9f d8 00 00 00 48 89 d8 48 c1 e8 03 42 80 3c 20 00 74 08 48 89 df e8 f9 32 bf f7 48 8b 1b 48 89 d8 48 c1 e8 03 <42> 80 3c 20 00 74 08 48 89 df e8 e0 32 bf f7 4c 8b 03 48 89 ef 4c
      RSP: 0018:ffffc9000fc1f2f0 EFLAGS: 00010246
      RAX: 0000000000000000 RBX: 0000000000000000 RCX: 1a772f98c8186700
      RDX: 0000000000000003 RSI: ffffffff8bcac4e0 RDI: ffffffff8c1f9760
      RBP: ffff8880673fb980 R08: ffffffff8fac15ef R09: 1ffffffff1f582bd
      R10: dffffc0000000000 R11: fffffbfff1f582be R12: dffffc0000000000
      R13: 0000000000000080 R14: ffff888076509000 R15: ffff88807a029a00
      FS:  00007f55e82ca6c0(0000) GS:ffff8880b9400000(0000) knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: 0000001b31d23000 CR3: 0000000022b66000 CR4: 00000000003506f0
      DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
      Call Trace:
       <TASK>
        fib_rules_lookup+0x62c/0xdb0 net/core/fib_rules.c:317
        fib6_rule_lookup+0x1fd/0x790 net/ipv6/fib6_rules.c:108
        ip6_route_output_flags_noref net/ipv6/route.c:2637 [inline]
        ip6_route_output_flags+0x38e/0x610 net/ipv6/route.c:2649
        ip6_route_output include/net/ip6_route.h:93 [inline]
        ip6_dst_lookup_tail+0x189/0x11a0 net/ipv6/ip6_output.c:1120
        ip6_dst_lookup_flow+0xb9/0x180 net/ipv6/ip6_output.c:1250
        sctp_v6_get_dst+0x792/0x1e20 net/sctp/ipv6.c:326
        sctp_transport_route+0x12c/0x2e0 net/sctp/transport.c:455
        sctp_assoc_add_peer+0x614/0x15c0 net/sctp/associola.c:662
        sctp_connect_new_asoc+0x31d/0x6c0 net/sctp/socket.c:1099
        __sctp_connect+0x66d/0xe30 net/sctp/socket.c:1197
        sctp_connect net/sctp/socket.c:4819 [inline]
        sctp_inet_connect+0x149/0x1f0 net/sctp/socket.c:4834
        __sys_connect_file net/socket.c:2048 [inline]
        __sys_connect+0x2df/0x310 net/socket.c:2065
        __do_sys_connect net/socket.c:2075 [inline]
        __se_sys_connect net/socket.c:2072 [inline]
        __x64_sys_connect+0x7a/0x90 net/socket.c:2072
        do_syscall_x64 arch/x86/entry/common.c:52 [inline]
        do_syscall_64+0xf5/0x240 arch/x86/entry/common.c:83
       entry_SYSCALL_64_after_hwframe+0x77/0x7f
      
      Fixes: 5e5f3f0f
      
       ("[IPV6] ADDRCONF: Convert ipv6_get_saddr() to ipv6_dev_get_saddr().")
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Reviewed-by: default avatarSimon Horman <horms@kernel.org>
      Reviewed-by: default avatarDavid Ahern <dsahern@kernel.org>
      Link: https://lore.kernel.org/r/20240507163145.835254-1-edumazet@google.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      7e3242c1
    • Felix Fietkau's avatar
      net: bridge: fix corrupted ethernet header on multicast-to-unicast · bd786963
      Felix Fietkau authored
      [ Upstream commit 86b29d83 ]
      
      The change from skb_copy to pskb_copy unfortunately changed the data
      copying to omit the ethernet header, since it was pulled before reaching
      this point. Fix this by calling __skb_push/pull around pskb_copy.
      
      Fixes: 59c878cb
      
       ("net: bridge: fix multicast-to-unicast with fraglist GSO")
      Signed-off-by: default avatarFelix Fietkau <nbd@nbd.name>
      Acked-by: default avatarNikolay Aleksandrov <razor@blackwall.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      bd786963
    • Eric Dumazet's avatar
      phonet: fix rtm_phonet_notify() skb allocation · 728a8316
      Eric Dumazet authored
      [ Upstream commit d8cac856 ]
      
      fill_route() stores three components in the skb:
      
      - struct rtmsg
      - RTA_DST (u8)
      - RTA_OIF (u32)
      
      Therefore, rtm_phonet_notify() should use
      
      NLMSG_ALIGN(sizeof(struct rtmsg)) +
      nla_total_size(1) +
      nla_total_size(4)
      
      Fixes: f062f41d
      
       ("Phonet: routing table Netlink interface")
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Acked-by: default avatarRémi Denis-Courmont <courmisch@gmail.com>
      Link: https://lore.kernel.org/r/20240502161700.1804476-1-edumazet@google.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      728a8316
    • Aleksa Savic's avatar
      hwmon: (corsair-cpro) Protect ccp->wait_input_report with a spinlock · 544895ba
      Aleksa Savic authored
      [ Upstream commit d02abd57 ]
      
      Through hidraw, userspace can cause a status report to be sent
      from the device. The parsing in ccp_raw_event() may happen in
      parallel to a send_usb_cmd() call (which resets the completion
      for tracking the report) if it's running on a different CPU where
      bottom half interrupts are not disabled.
      
      Add a spinlock around the complete_all() in ccp_raw_event() and
      reinit_completion() in send_usb_cmd() to prevent race issues.
      
      Fixes: 40c3a445
      
       ("hwmon: add Corsair Commander Pro driver")
      Signed-off-by: default avatarAleksa Savic <savicaleksa83@gmail.com>
      Acked-by: default avatarMarius Zachmann <mail@mariuszachmann.de>
      Link: https://lore.kernel.org/r/20240504092504.24158-4-savicaleksa83@gmail.com
      Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      544895ba
    • Aleksa Savic's avatar
      hwmon: (corsair-cpro) Use complete_all() instead of complete() in ccp_raw_event() · a6c70251
      Aleksa Savic authored
      [ Upstream commit 3a034a7b ]
      
      In ccp_raw_event(), the ccp->wait_input_report completion is
      completed once. Since we're waiting for exactly one report in
      send_usb_cmd(), use complete_all() instead of complete()
      to mark the completion as spent.
      
      Fixes: 40c3a445
      
       ("hwmon: add Corsair Commander Pro driver")
      Signed-off-by: default avatarAleksa Savic <savicaleksa83@gmail.com>
      Acked-by: default avatarMarius Zachmann <mail@mariuszachmann.de>
      Link: https://lore.kernel.org/r/20240504092504.24158-3-savicaleksa83@gmail.com
      Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      a6c70251
    • Aleksa Savic's avatar
      hwmon: (corsair-cpro) Use a separate buffer for sending commands · 95c5fc88
      Aleksa Savic authored
      [ Upstream commit e0cd85dc ]
      
      Introduce cmd_buffer, a separate buffer for storing only
      the command that is sent to the device. Before this separation,
      the existing buffer was shared for both the command and the
      report received in ccp_raw_event(), which was copied into it.
      
      However, because of hidraw, the raw event parsing may be triggered
      in the middle of sending a command, resulting in outputting gibberish
      to the device. Using a separate buffer resolves this.
      
      Fixes: 40c3a445
      
       ("hwmon: add Corsair Commander Pro driver")
      Signed-off-by: default avatarAleksa Savic <savicaleksa83@gmail.com>
      Acked-by: default avatarMarius Zachmann <mail@mariuszachmann.de>
      Link: https://lore.kernel.org/r/20240504092504.24158-2-savicaleksa83@gmail.com
      Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      95c5fc88
    • Roded Zats's avatar
      rtnetlink: Correct nested IFLA_VF_VLAN_LIST attribute validation · 6e4c7193
      Roded Zats authored
      [ Upstream commit 1aec77b2 ]
      
      Each attribute inside a nested IFLA_VF_VLAN_LIST is assumed to be a
      struct ifla_vf_vlan_info so the size of such attribute needs to be at least
      of sizeof(struct ifla_vf_vlan_info) which is 14 bytes.
      The current size validation in do_setvfinfo is against NLA_HDRLEN (4 bytes)
      which is less than sizeof(struct ifla_vf_vlan_info) so this validation
      is not enough and a too small attribute might be cast to a
      struct ifla_vf_vlan_info, this might result in an out of bands
      read access when accessing the saved (casted) entry in ivvl.
      
      Fixes: 79aab093
      
       ("net: Update API for VF vlan protocol 802.1ad support")
      Signed-off-by: default avatarRoded Zats <rzats@paloaltonetworks.com>
      Reviewed-by: default avatarDonald Hunter <donald.hunter@gmail.com>
      Link: https://lore.kernel.org/r/20240502155751.75705-1-rzats@paloaltonetworks.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      6e4c7193
    • Marek Vasut's avatar
      net: ks8851: Queue RX packets in IRQ handler instead of disabling BHs · 8a3ff43d
      Marek Vasut authored
      [ Upstream commit e0863634 ]
      
      Currently the driver uses local_bh_disable()/local_bh_enable() in its
      IRQ handler to avoid triggering net_rx_action() softirq on exit from
      netif_rx(). The net_rx_action() could trigger this driver .start_xmit
      callback, which is protected by the same lock as the IRQ handler, so
      calling the .start_xmit from netif_rx() from the IRQ handler critical
      section protected by the lock could lead to an attempt to claim the
      already claimed lock, and a hang.
      
      The local_bh_disable()/local_bh_enable() approach works only in case
      the IRQ handler is protected by a spinlock, but does not work if the
      IRQ handler is protected by mutex, i.e. this works for KS8851 with
      Parallel bus interface, but not for KS8851 with SPI bus interface.
      
      Remove the BH manipulation and instead of calling netif_rx() inside
      the IRQ handler code protected by the lock, queue all the received
      SKBs in the IRQ handler into a queue first, and once the IRQ handler
      exits the critical section protected by the lock, dequeue all the
      queued SKBs and push them all into netif_rx(). At this point, it is
      safe to trigger the net_rx_action() softirq, since the netif_rx()
      call is outside of the lock that protects the IRQ handler.
      
      Fixes: be0384bf
      
       ("net: ks8851: Handle softirqs at the end of IRQ thread to fix hang")
      Tested-by: Ronald Wahl <ronald.wahl@raritan.com> # KS8851 SPI
      Signed-off-by: default avatarMarek Vasut <marex@denx.de>
      Reviewed-by: default avatarEric Dumazet <edumazet@google.com>
      Link: https://lore.kernel.org/r/20240502183436.117117-1-marex@denx.de
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      8a3ff43d
    • Duoming Zhou's avatar
      Bluetooth: l2cap: fix null-ptr-deref in l2cap_chan_timeout · 8960ff65
      Duoming Zhou authored
      [ Upstream commit adf0398c ]
      
      There is a race condition between l2cap_chan_timeout() and
      l2cap_chan_del(). When we use l2cap_chan_del() to delete the
      channel, the chan->conn will be set to null. But the conn could
      be dereferenced again in the mutex_lock() of l2cap_chan_timeout().
      As a result the null pointer dereference bug will happen. The
      KASAN report triggered by POC is shown below:
      
      [  472.074580] ==================================================================
      [  472.075284] BUG: KASAN: null-ptr-deref in mutex_lock+0x68/0xc0
      [  472.075308] Write of size 8 at addr 0000000000000158 by task kworker/0:0/7
      [  472.075308]
      [  472.075308] CPU: 0 PID: 7 Comm: kworker/0:0 Not tainted 6.9.0-rc5-00356-g78c0094a146b #36
      [  472.075308] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.14.0-0-g155821a1990b-prebuilt.qemu4
      [  472.075308] Workqueue: events l2cap_chan_timeout
      [  472.075308] Call Trace:
      [  472.075308]  <TASK>
      [  472.075308]  dump_stack_lvl+0x137/0x1a0
      [  472.075308]  print_report+0x101/0x250
      [  472.075308]  ? __virt_addr_valid+0x77/0x160
      [  472.075308]  ? mutex_lock+0x68/0xc0
      [  472.075308]  kasan_report+0x139/0x170
      [  472.075308]  ? mutex_lock+0x68/0xc0
      [  472.075308]  kasan_check_range+0x2c3/0x2e0
      [  472.075308]  mutex_lock+0x68/0xc0
      [  472.075308]  l2cap_chan_timeout+0x181/0x300
      [  472.075308]  process_one_work+0x5d2/0xe00
      [  472.075308]  worker_thread+0xe1d/0x1660
      [  472.075308]  ? pr_cont_work+0x5e0/0x5e0
      [  472.075308]  kthread+0x2b7/0x350
      [  472.075308]  ? pr_cont_work+0x5e0/0x5e0
      [  472.075308]  ? kthread_blkcg+0xd0/0xd0
      [  472.075308]  ret_from_fork+0x4d/0x80
      [  472.075308]  ? kthread_blkcg+0xd0/0xd0
      [  472.075308]  ret_from_fork_asm+0x11/0x20
      [  472.075308]  </TASK>
      [  472.075308] ==================================================================
      [  472.094860] Disabling lock debugging due to kernel taint
      [  472.096136] BUG: kernel NULL pointer dereference, address: 0000000000000158
      [  472.096136] #PF: supervisor write access in kernel mode
      [  472.096136] #PF: error_code(0x0002) - not-present page
      [  472.096136] PGD 0 P4D 0
      [  472.096136] Oops: 0002 [#1] PREEMPT SMP KASAN NOPTI
      [  472.096136] CPU: 0 PID: 7 Comm: kworker/0:0 Tainted: G    B              6.9.0-rc5-00356-g78c0094a146b #36
      [  472.096136] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.14.0-0-g155821a1990b-prebuilt.qemu4
      [  472.096136] Workqueue: events l2cap_chan_timeout
      [  472.096136] RIP: 0010:mutex_lock+0x88/0xc0
      [  472.096136] Code: be 08 00 00 00 e8 f8 23 1f fd 4c 89 f7 be 08 00 00 00 e8 eb 23 1f fd 42 80 3c 23 00 74 08 48 88
      [  472.096136] RSP: 0018:ffff88800744fc78 EFLAGS: 00000246
      [  472.096136] RAX: 0000000000000000 RBX: 1ffff11000e89f8f RCX: ffffffff8457c865
      [  472.096136] RDX: 0000000000000001 RSI: 0000000000000008 RDI: ffff88800744fc78
      [  472.096136] RBP: 0000000000000158 R08: ffff88800744fc7f R09: 1ffff11000e89f8f
      [  472.096136] R10: dffffc0000000000 R11: ffffed1000e89f90 R12: dffffc0000000000
      [  472.096136] R13: 0000000000000158 R14: ffff88800744fc78 R15: ffff888007405a00
      [  472.096136] FS:  0000000000000000(0000) GS:ffff88806d200000(0000) knlGS:0000000000000000
      [  472.096136] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [  472.096136] CR2: 0000000000000158 CR3: 000000000da32000 CR4: 00000000000006f0
      [  472.096136] Call Trace:
      [  472.096136]  <TASK>
      [  472.096136]  ? __die_body+0x8d/0xe0
      [  472.096136]  ? page_fault_oops+0x6b8/0x9a0
      [  472.096136]  ? kernelmode_fixup_or_oops+0x20c/0x2a0
      [  472.096136]  ? do_user_addr_fault+0x1027/0x1340
      [  472.096136]  ? _printk+0x7a/0xa0
      [  472.096136]  ? mutex_lock+0x68/0xc0
      [  472.096136]  ? add_taint+0x42/0xd0
      [  472.096136]  ? exc_page_fault+0x6a/0x1b0
      [  472.096136]  ? asm_exc_page_fault+0x26/0x30
      [  472.096136]  ? mutex_lock+0x75/0xc0
      [  472.096136]  ? mutex_lock+0x88/0xc0
      [  472.096136]  ? mutex_lock+0x75/0xc0
      [  472.096136]  l2cap_chan_timeout+0x181/0x300
      [  472.096136]  process_one_work+0x5d2/0xe00
      [  472.096136]  worker_thread+0xe1d/0x1660
      [  472.096136]  ? pr_cont_work+0x5e0/0x5e0
      [  472.096136]  kthread+0x2b7/0x350
      [  472.096136]  ? pr_cont_work+0x5e0/0x5e0
      [  472.096136]  ? kthread_blkcg+0xd0/0xd0
      [  472.096136]  ret_from_fork+0x4d/0x80
      [  472.096136]  ? kthread_blkcg+0xd0/0xd0
      [  472.096136]  ret_from_fork_asm+0x11/0x20
      [  472.096136]  </TASK>
      [  472.096136] Modules linked in:
      [  472.096136] CR2: 0000000000000158
      [  472.096136] ---[ end trace 0000000000000000 ]---
      [  472.096136] RIP: 0010:mutex_lock+0x88/0xc0
      [  472.096136] Code: be 08 00 00 00 e8 f8 23 1f fd 4c 89 f7 be 08 00 00 00 e8 eb 23 1f fd 42 80 3c 23 00 74 08 48 88
      [  472.096136] RSP: 0018:ffff88800744fc78 EFLAGS: 00000246
      [  472.096136] RAX: 0000000000000000 RBX: 1ffff11000e89f8f RCX: ffffffff8457c865
      [  472.096136] RDX: 0000000000000001 RSI: 0000000000000008 RDI: ffff88800744fc78
      [  472.096136] RBP: 0000000000000158 R08: ffff88800744fc7f R09: 1ffff11000e89f8f
      [  472.132932] R10: dffffc0000000000 R11: ffffed1000e89f90 R12: dffffc0000000000
      [  472.132932] R13: 0000000000000158 R14: ffff88800744fc78 R15: ffff888007405a00
      [  472.132932] FS:  0000000000000000(0000) GS:ffff88806d200000(0000) knlGS:0000000000000000
      [  472.132932] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [  472.132932] CR2: 0000000000000158 CR3: 000000000da32000 CR4: 00000000000006f0
      [  472.132932] Kernel panic - not syncing: Fatal exception
      [  472.132932] Kernel Offset: disabled
      [  472.132932] ---[ end Kernel panic - not syncing: Fatal exception ]---
      
      Add a check to judge whether the conn is null in l2cap_chan_timeout()
      in order to mitigate the bug.
      
      Fixes: 3df91ea2
      
       ("Bluetooth: Revert to mutexes from RCU list")
      Signed-off-by: default avatarDuoming Zhou <duoming@zju.edu.cn>
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      8960ff65
    • Sungwoo Kim's avatar
      Bluetooth: msft: fix slab-use-after-free in msft_do_close() · e3880b53
      Sungwoo Kim authored
      [ Upstream commit 10f9f426 ]
      
      Tying the msft->data lifetime to hdev by freeing it in
      hci_release_dev() to fix the following case:
      
      [use]
      msft_do_close()
        msft = hdev->msft_data;
        if (!msft)                      ...(1) <- passed.
          return;
        mutex_lock(&msft->filter_lock); ...(4) <- used after freed.
      
      [free]
      msft_unregister()
        msft = hdev->msft_data;
        hdev->msft_data = NULL;         ...(2)
        kfree(msft);                    ...(3) <- msft is freed.
      
      ==================================================================
      BUG: KASAN: slab-use-after-free in __mutex_lock_common
      kernel/locking/mutex.c:587 [inline]
      BUG: KASAN: slab-use-after-free in __mutex_lock+0x8f/0xc30
      kernel/locking/mutex.c:752
      Read of size 8 at addr ffff888106cbbca8 by task kworker/u5:2/309
      
      Fixes: bf6a4e30
      
       ("Bluetooth: disable advertisement filters during suspend")
      Signed-off-by: default avatarSungwoo Kim <iam@sung-woo.kim>
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      e3880b53
    • Duoming Zhou's avatar
      Bluetooth: Fix use-after-free bugs caused by sco_sock_timeout · bfab2c1f
      Duoming Zhou authored
      [ Upstream commit 483bc081 ]
      
      When the sco connection is established and then, the sco socket
      is releasing, timeout_work will be scheduled to judge whether
      the sco disconnection is timeout. The sock will be deallocated
      later, but it is dereferenced again in sco_sock_timeout. As a
      result, the use-after-free bugs will happen. The root cause is
      shown below:
      
          Cleanup Thread               |      Worker Thread
      sco_sock_release                 |
        sco_sock_close                 |
          __sco_sock_close             |
            sco_sock_set_timer         |
              schedule_delayed_work    |
        sco_sock_kill                  |    (wait a time)
          sock_put(sk) //FREE          |  sco_sock_timeout
                                       |    sock_hold(sk) //USE
      
      The KASAN report triggered by POC is shown below:
      
      [   95.890016] ==================================================================
      [   95.890496] BUG: KASAN: slab-use-after-free in sco_sock_timeout+0x5e/0x1c0
      [   95.890755] Write of size 4 at addr ffff88800c388080 by task kworker/0:0/7
      ...
      [   95.890755] Workqueue: events sco_sock_timeout
      [   95.890755] Call Trace:
      [   95.890755]  <TASK>
      [   95.890755]  dump_stack_lvl+0x45/0x110
      [   95.890755]  print_address_description+0x78/0x390
      [   95.890755]  print_report+0x11b/0x250
      [   95.890755]  ? __virt_addr_valid+0xbe/0xf0
      [   95.890755]  ? sco_sock_timeout+0x5e/0x1c0
      [   95.890755]  kasan_report+0x139/0x170
      [   95.890755]  ? update_load_avg+0xe5/0x9f0
      [   95.890755]  ? sco_sock_timeout+0x5e/0x1c0
      [   95.890755]  kasan_check_range+0x2c3/0x2e0
      [   95.890755]  sco_sock_timeout+0x5e/0x1c0
      [   95.890755]  process_one_work+0x561/0xc50
      [   95.890755]  worker_thread+0xab2/0x13c0
      [   95.890755]  ? pr_cont_work+0x490/0x490
      [   95.890755]  kthread+0x279/0x300
      [   95.890755]  ? pr_cont_work+0x490/0x490
      [   95.890755]  ? kthread_blkcg+0xa0/0xa0
      [   95.890755]  ret_from_fork+0x34/0x60
      [   95.890755]  ? kthread_blkcg+0xa0/0xa0
      [   95.890755]  ret_from_fork_asm+0x11/0x20
      [   95.890755]  </TASK>
      [   95.890755]
      [   95.890755] Allocated by task 506:
      [   95.890755]  kasan_save_track+0x3f/0x70
      [   95.890755]  __kasan_kmalloc+0x86/0x90
      [   95.890755]  __kmalloc+0x17f/0x360
      [   95.890755]  sk_prot_alloc+0xe1/0x1a0
      [   95.890755]  sk_alloc+0x31/0x4e0
      [   95.890755]  bt_sock_alloc+0x2b/0x2a0
      [   95.890755]  sco_sock_create+0xad/0x320
      [   95.890755]  bt_sock_create+0x145/0x320
      [   95.890755]  __sock_create+0x2e1/0x650
      [   95.890755]  __sys_socket+0xd0/0x280
      [   95.890755]  __x64_sys_socket+0x75/0x80
      [   95.890755]  do_syscall_64+0xc4/0x1b0
      [   95.890755]  entry_SYSCALL_64_after_hwframe+0x67/0x6f
      [   95.890755]
      [   95.890755] Freed by task 506:
      [   95.890755]  kasan_save_track+0x3f/0x70
      [   95.890755]  kasan_save_free_info+0x40/0x50
      [   95.890755]  poison_slab_object+0x118/0x180
      [   95.890755]  __kasan_slab_free+0x12/0x30
      [   95.890755]  kfree+0xb2/0x240
      [   95.890755]  __sk_destruct+0x317/0x410
      [   95.890755]  sco_sock_release+0x232/0x280
      [   95.890755]  sock_close+0xb2/0x210
      [   95.890755]  __fput+0x37f/0x770
      [   95.890755]  task_work_run+0x1ae/0x210
      [   95.890755]  get_signal+0xe17/0xf70
      [   95.890755]  arch_do_signal_or_restart+0x3f/0x520
      [   95.890755]  syscall_exit_to_user_mode+0x55/0x120
      [   95.890755]  do_syscall_64+0xd1/0x1b0
      [   95.890755]  entry_SYSCALL_64_after_hwframe+0x67/0x6f
      [   95.890755]
      [   95.890755] The buggy address belongs to the object at ffff88800c388000
      [   95.890755]  which belongs to the cache kmalloc-1k of size 1024
      [   95.890755] The buggy address is located 128 bytes inside of
      [   95.890755]  freed 1024-byte region [ffff88800c388000, ffff88800c388400)
      [   95.890755]
      [   95.890755] The buggy address belongs to the physical page:
      [   95.890755] page: refcount:1 mapcount:0 mapping:0000000000000000 index:0xffff88800c38a800 pfn:0xc388
      [   95.890755] head: order:3 entire_mapcount:0 nr_pages_mapped:0 pincount:0
      [   95.890755] anon flags: 0x100000000000840(slab|head|node=0|zone=1)
      [   95.890755] page_type: 0xffffffff()
      [   95.890755] raw: 0100000000000840 ffff888006842dc0 0000000000000000 0000000000000001
      [   95.890755] raw: ffff88800c38a800 000000000010000a 00000001ffffffff 0000000000000000
      [   95.890755] head: 0100000000000840 ffff888006842dc0 0000000000000000 0000000000000001
      [   95.890755] head: ffff88800c38a800 000000000010000a 00000001ffffffff 0000000000000000
      [   95.890755] head: 0100000000000003 ffffea000030e201 ffffea000030e248 00000000ffffffff
      [   95.890755] head: 0000000800000000 0000000000000000 00000000ffffffff 0000000000000000
      [   95.890755] page dumped because: kasan: bad access detected
      [   95.890755]
      [   95.890755] Memory state around the buggy address:
      [   95.890755]  ffff88800c387f80: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
      [   95.890755]  ffff88800c388000: fa fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
      [   95.890755] >ffff88800c388080: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
      [   95.890755]                    ^
      [   95.890755]  ffff88800c388100: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
      [   95.890755]  ffff88800c388180: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
      [   95.890755] ==================================================================
      
      Fix this problem by adding a check protected by sco_conn_lock to judget
      whether the conn->hcon is null. Because the conn->hcon will be set to null,
      when the sock is releasing.
      
      Fixes: ba316be1
      
       ("Bluetooth: schedule SCO timeouts with delayed_work")
      Signed-off-by: default avatarDuoming Zhou <duoming@zju.edu.cn>
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      bfab2c1f
    • Kuniyuki Iwashima's avatar
      tcp: Use refcount_inc_not_zero() in tcp_twsk_unique(). · 13ed7cdf
      Kuniyuki Iwashima authored
      [ Upstream commit f2db7230 ]
      
      Anderson Nascimento reported a use-after-free splat in tcp_twsk_unique()
      with nice analysis.
      
      Since commit ec94c269 ("tcp/dccp: avoid one atomic operation for
      timewait hashdance"), inet_twsk_hashdance() sets TIME-WAIT socket's
      sk_refcnt after putting it into ehash and releasing the bucket lock.
      
      Thus, there is a small race window where other threads could try to
      reuse the port during connect() and call sock_hold() in tcp_twsk_unique()
      for the TIME-WAIT socket with zero refcnt.
      
      If that happens, the refcnt taken by tcp_twsk_unique() is overwritten
      and sock_put() will cause underflow, triggering a real use-after-free
      somewhere else.
      
      To avoid the use-after-free, we need to use refcount_inc_not_zero() in
      tcp_twsk_unique() and give up on reusing the port if it returns false.
      
      [0]:
      refcount_t: addition on 0; use-after-free.
      WARNING: CPU: 0 PID: 1039313 at lib/refcount.c:25 refcount_warn_saturate+0xe5/0x110
      CPU: 0 PID: 1039313 Comm: trigger Not tainted 6.8.6-200.fc39.x86_64 #1
      Hardware name: VMware, Inc. VMware20,1/440BX Desktop Reference Platform, BIOS VMW201.00V.21805430.B64.2305221830 05/22/2023
      RIP: 0010:refcount_warn_saturate+0xe5/0x110
      Code: 42 8e ff 0f 0b c3 cc cc cc cc 80 3d aa 13 ea 01 00 0f 85 5e ff ff ff 48 c7 c7 f8 8e b7 82 c6 05 96 13 ea 01 01 e8 7b 42 8e ff <0f> 0b c3 cc cc cc cc 48 c7 c7 50 8f b7 82 c6 05 7a 13 ea 01 01 e8
      RSP: 0018:ffffc90006b43b60 EFLAGS: 00010282
      RAX: 0000000000000000 RBX: ffff888009bb3ef0 RCX: 0000000000000027
      RDX: ffff88807be218c8 RSI: 0000000000000001 RDI: ffff88807be218c0
      RBP: 0000000000069d70 R08: 0000000000000000 R09: ffffc90006b439f0
      R10: ffffc90006b439e8 R11: 0000000000000003 R12: ffff8880029ede84
      R13: 0000000000004e20 R14: ffffffff84356dc0 R15: ffff888009bb3ef0
      FS:  00007f62c10926c0(0000) GS:ffff88807be00000(0000) knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: 0000000020ccb000 CR3: 000000004628c005 CR4: 0000000000f70ef0
      PKRU: 55555554
      Call Trace:
       <TASK>
       ? refcount_warn_saturate+0xe5/0x110
       ? __warn+0x81/0x130
       ? refcount_warn_saturate+0xe5/0x110
       ? report_bug+0x171/0x1a0
       ? refcount_warn_saturate+0xe5/0x110
       ? handle_bug+0x3c/0x80
       ? exc_invalid_op+0x17/0x70
       ? asm_exc_invalid_op+0x1a/0x20
       ? refcount_warn_saturate+0xe5/0x110
       tcp_twsk_unique+0x186/0x190
       __inet_check_established+0x176/0x2d0
       __inet_hash_connect+0x74/0x7d0
       ? __pfx___inet_check_established+0x10/0x10
       tcp_v4_connect+0x278/0x530
       __inet_stream_connect+0x10f/0x3d0
       inet_stream_connect+0x3a/0x60
       __sys_connect+0xa8/0xd0
       __x64_sys_connect+0x18/0x20
       do_syscall_64+0x83/0x170
       entry_SYSCALL_64_after_hwframe+0x78/0x80
      RIP: 0033:0x7f62c11a885d
      Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d a3 45 0c 00 f7 d8 64 89 01 48
      RSP: 002b:00007f62c1091e58 EFLAGS: 00000296 ORIG_RAX: 000000000000002a
      RAX: ffffffffffffffda RBX: 0000000020ccb004 RCX: 00007f62c11a885d
      RDX: 0000000000000010 RSI: 0000000020ccb000 RDI: 0000000000000003
      RBP: 00007f62c1091e90 R08: 0000000000000000 R09: 0000000000000000
      R10: 0000000000000000 R11: 0000000000000296 R12: 00007f62c10926c0
      R13: ffffffffffffff88 R14: 0000000000000000 R15: 00007ffe237885b0
       </TASK>
      
      Fixes: ec94c269
      
       ("tcp/dccp: avoid one atomic operation for timewait hashdance")
      Reported-by: default avatarAnderson Nascimento <anderson@allelesecurity.com>
      Closes: https://lore.kernel.org/netdev/37a477a6-d39e-486b-9577-3463f655a6b7@allelesecurity.com/
      Suggested-by: default avatarEric Dumazet <edumazet@google.com>
      Signed-off-by: default avatarKuniyuki Iwashima <kuniyu@amazon.com>
      Reviewed-by: default avatarEric Dumazet <edumazet@google.com>
      Link: https://lore.kernel.org/r/20240501213145.62261-1-kuniyu@amazon.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      13ed7cdf
    • Eric Dumazet's avatar
      tcp: defer shutdown(SEND_SHUTDOWN) for TCP_SYN_RECV sockets · 3fe4ef05
      Eric Dumazet authored
      [ Upstream commit 94062790 ]
      
      TCP_SYN_RECV state is really special, it is only used by
      cross-syn connections, mostly used by fuzzers.
      
      In the following crash [1], syzbot managed to trigger a divide
      by zero in tcp_rcv_space_adjust()
      
      A socket makes the following state transitions,
      without ever calling tcp_init_transfer(),
      meaning tcp_init_buffer_space() is also not called.
      
               TCP_CLOSE
      connect()
               TCP_SYN_SENT
               TCP_SYN_RECV
      shutdown() -> tcp_shutdown(sk, SEND_SHUTDOWN)
               TCP_FIN_WAIT1
      
      To fix this issue, change tcp_shutdown() to not
      perform a TCP_SYN_RECV -> TCP_FIN_WAIT1 transition,
      which makes no sense anyway.
      
      When tcp_rcv_state_process() later changes socket state
      from TCP_SYN_RECV to TCP_ESTABLISH, then look at
      sk->sk_shutdown to finally enter TCP_FIN_WAIT1 state,
      and send a FIN packet from a sane socket state.
      
      This means tcp_send_fin() can now be called from BH
      context, and must use GFP_ATOMIC allocations.
      
      [1]
      divide error: 0000 [#1] PREEMPT SMP KASAN NOPTI
      CPU: 1 PID: 5084 Comm: syz-executor358 Not tainted 6.9.0-rc6-syzkaller-00022-g98369dccd2f8 #0
      Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 03/27/2024
       RIP: 0010:tcp_rcv_space_adjust+0x2df/0x890 net/ipv4/tcp_input.c:767
      Code: e3 04 4c 01 eb 48 8b 44 24 38 0f b6 04 10 84 c0 49 89 d5 0f 85 a5 03 00 00 41 8b 8e c8 09 00 00 89 e8 29 c8 48 0f af c3 31 d2 <48> f7 f1 48 8d 1c 43 49 8d 96 76 08 00 00 48 89 d0 48 c1 e8 03 48
      RSP: 0018:ffffc900031ef3f0 EFLAGS: 00010246
      RAX: 0c677a10441f8f42 RBX: 000000004fb95e7e RCX: 0000000000000000
      RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000
      RBP: 0000000027d4b11f R08: ffffffff89e535a4 R09: 1ffffffff25e6ab7
      R10: dffffc0000000000 R11: ffffffff8135e920 R12: ffff88802a9f8d30
      R13: dffffc0000000000 R14: ffff88802a9f8d00 R15: 1ffff1100553f2da
      FS:  00005555775c0380(0000) GS:ffff8880b9500000(0000) knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: 00007f1155bf2304 CR3: 000000002b9f2000 CR4: 0000000000350ef0
      Call Trace:
       <TASK>
        tcp_recvmsg_locked+0x106d/0x25a0 net/ipv4/tcp.c:2513
        tcp_recvmsg+0x25d/0x920 net/ipv4/tcp.c:2578
        inet6_recvmsg+0x16a/0x730 net/ipv6/af_inet6.c:680
        sock_recvmsg_nosec net/socket.c:1046 [inline]
        sock_recvmsg+0x109/0x280 net/socket.c:1068
        ____sys_recvmsg+0x1db/0x470 net/socket.c:2803
        ___sys_recvmsg net/socket.c:2845 [inline]
        do_recvmmsg+0x474/0xae0 net/socket.c:2939
        __sys_recvmmsg net/socket.c:3018 [inline]
        __do_sys_recvmmsg net/socket.c:3041 [inline]
        __se_sys_recvmmsg net/socket.c:3034 [inline]
        __x64_sys_recvmmsg+0x199/0x250 net/socket.c:3034
        do_syscall_x64 arch/x86/entry/common.c:52 [inline]
        do_syscall_64+0xf5/0x240 arch/x86/entry/common.c:83
       entry_SYSCALL_64_after_hwframe+0x77/0x7f
      RIP: 0033:0x7faeb6363db9
      Code: 28 00 00 00 75 05 48 83 c4 28 c3 e8 c1 17 00 00 90 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 b8 ff ff ff f7 d8 64 89 01 48
      RSP: 002b:00007ffcc1997168 EFLAGS: 00000246 ORIG_RAX: 000000000000012b
      RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007faeb6363db9
      RDX: 0000000000000001 RSI: 0000000020000bc0 RDI: 0000000000000005
      RBP: 0000000000000000 R08: 0000000000000000 R09: 000000000000001c
      R10: 0000000000000122 R11: 0000000000000246 R12: 0000000000000000
      R13: 0000000000000000 R14: 0000000000000001 R15: 0000000000000001
      
      Fixes: 1da177e4
      
       ("Linux-2.6.12-rc2")
      Reported-by: default avatarsyzbot <syzkaller@googlegroups.com>
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Acked-by: default avatarNeal Cardwell <ncardwell@google.com>
      Link: https://lore.kernel.org/r/20240501125448.896529-1-edumazet@google.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      3fe4ef05
    • Boy.Wu's avatar
      ARM: 9381/1: kasan: clear stale stack poison · ad702338
      Boy.Wu authored
      [ Upstream commit c4238686 ]
      
      We found below OOB crash:
      
      [   33.452494] ==================================================================
      [   33.453513] BUG: KASAN: stack-out-of-bounds in refresh_cpu_vm_stats.constprop.0+0xcc/0x2ec
      [   33.454660] Write of size 164 at addr c1d03d30 by task swapper/0/0
      [   33.455515]
      [   33.455767] CPU: 0 PID: 0 Comm: swapper/0 Tainted: G           O       6.1.25-mainline #1
      [   33.456880] Hardware name: Generic DT based system
      [   33.457555]  unwind_backtrace from show_stack+0x18/0x1c
      [   33.458326]  show_stack from dump_stack_lvl+0x40/0x4c
      [   33.459072]  dump_stack_lvl from print_report+0x158/0x4a4
      [   33.459863]  print_report from kasan_report+0x9c/0x148
      [   33.460616]  kasan_report from kasan_check_range+0x94/0x1a0
      [   33.461424]  kasan_check_range from memset+0x20/0x3c
      [   33.462157]  memset from refresh_cpu_vm_stats.constprop.0+0xcc/0x2ec
      [   33.463064]  refresh_cpu_vm_stats.constprop.0 from tick_nohz_idle_stop_tick+0x180/0x53c
      [   33.464181]  tick_nohz_idle_stop_tick from do_idle+0x264/0x354
      [   33.465029]  do_idle from cpu_startup_entry+0x20/0x24
      [   33.465769]  cpu_startup_entry from rest_init+0xf0/0xf4
      [   33.466528]  rest_init from arch_post_acpi_subsys_init+0x0/0x18
      [   33.467397]
      [   33.467644] The buggy address belongs to stack of task swapper/0/0
      [   33.468493]  and is located at offset 112 in frame:
      [   33.469172]  refresh_cpu_vm_stats.constprop.0+0x0/0x2ec
      [   33.469917]
      [   33.470165] This frame has 2 objects:
      [   33.470696]  [32, 76) 'global_zone_diff'
      [   33.470729]  [112, 276) 'global_node_diff'
      [   33.471294]
      [   33.472095] The buggy address belongs to the physical page:
      [   33.472862] page:3cd72da8 refcount:1 mapcount:0 mapping:00000000 index:0x0 pfn:0x41d03
      [   33.473944] flags: 0x1000(reserved|zone=0)
      [   33.474565] raw: 00001000 ed741470 ed741470 00000000 00000000 00000000 ffffffff 00000001
      [   33.475656] raw: 00000000
      [   33.476050] page dumped because: kasan: bad access detected
      [   33.476816]
      [   33.477061] Memory state around the buggy address:
      [   33.477732]  c1d03c00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
      [   33.478630]  c1d03c80: 00 00 00 00 00 00 00 00 f1 f1 f1 f1 00 00 00 00
      [   33.479526] >c1d03d00: 00 04 f2 f2 f2 f2 00 00 00 00 00 00 f1 f1 f1 f1
      [   33.480415]                                                ^
      [   33.481195]  c1d03d80: 00 00 00 00 00 00 00 00 00 00 04 f3 f3 f3 f3 f3
      [   33.482088]  c1d03e00: f3 f3 f3 f3 00 00 00 00 00 00 00 00 00 00 00 00
      [   33.482978] ==================================================================
      
      We find the root cause of this OOB is that arm does not clear stale stack
      poison in the case of cpuidle.
      
      This patch refer to arch/arm64/kernel/sleep.S to resolve this issue.
      
      From cited commit [1] that explain the problem
      
      Functions which the compiler has instrumented for KASAN place poison on
      the stack shadow upon entry and remove this poison prior to returning.
      
      In the case of cpuidle, CPUs exit the kernel a number of levels deep in
      C code.  Any instrumented functions on this critical path will leave
      portions of the stack shadow poisoned.
      
      If CPUs lose context and return to the kernel via a cold path, we
      restore a prior context saved in __cpu_suspend_enter are forgotten, and
      we never remove the poison they placed in the stack shadow area by
      functions calls between this and the actual exit of the kernel.
      
      Thus, (depending on stackframe layout) subsequent calls to instrumented
      functions may hit this stale poison, resulting in (spurious) KASAN
      splats to the console.
      
      To avoid this, clear any stale poison from the idle thread for a CPU
      prior to bringing a CPU online.
      
      From cited commit [2]
      
      Extend to check for CONFIG_KASAN_STACK
      
      [1] commit 0d97e6d8 ("arm64: kasan: clear stale stack poison")
      [2] commit d56a9ef8
      
       ("kasan, arm64: unpoison stack only with CONFIG_KASAN_STACK")
      
      Signed-off-by: default avatarBoy Wu <boy.wu@mediatek.com>
      Reviewed-by: default avatarMark Rutland <mark.rutland@arm.com>
      Acked-by: default avatarAndrey Ryabinin <ryabinin.a.a@gmail.com>
      Reviewed-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      Fixes: 5615f69b
      
       ("ARM: 9016/2: Initialize the mapping of KASan shadow memory")
      Signed-off-by: default avatarRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      ad702338
    • Paul Davey's avatar
      xfrm: Preserve vlan tags for transport mode software GRO · 179db49d
      Paul Davey authored
      [ Upstream commit 58fbfeca ]
      
      The software GRO path for esp transport mode uses skb_mac_header_rebuild
      prior to re-injecting the packet via the xfrm_napi_dev.  This only
      copies skb->mac_len bytes of header which may not be sufficient if the
      packet contains 802.1Q tags or other VLAN tags.  Worse copying only the
      initial header will leave a packet marked as being VLAN tagged but
      without the corresponding tag leading to mangling when it is later
      untagged.
      
      The VLAN tags are important when receiving the decrypted esp transport
      mode packet after GRO processing to ensure it is received on the correct
      interface.
      
      Therefore record the full mac header length in xfrm*_transport_input for
      later use in corresponding xfrm*_transport_finish to copy the entire mac
      header when rebuilding the mac header for GRO.  The skb->data pointer is
      left pointing skb->mac_header bytes after the start of the mac header as
      is expected by the network stack and network and transport header
      offsets reset to this location.
      
      Fixes: 7785bba2
      
       ("esp: Add a software GRO codepath")
      Signed-off-by: default avatarPaul Davey <paul.davey@alliedtelesis.co.nz>
      Signed-off-by: default avatarSteffen Klassert <steffen.klassert@secunet.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      179db49d
    • Al Viro's avatar
      qibfs: fix dentry leak · bd8f78c7
      Al Viro authored
      [ Upstream commit aa23317d ]
      
      simple_recursive_removal() drops the pinning references to all positives
      in subtree.  For the cases when its argument has been kept alive by
      the pinning alone that's exactly the right thing to do, but here
      the argument comes from dcache lookup, that needs to be balanced by
      explicit dput().
      
      Fixes: e41d2378
      
       "qib_fs: switch to simple_recursive_removal()"
      Fucked-up-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      bd8f78c7
    • Namhyung Kim's avatar
      perf unwind-libdw: Handle JIT-generated DSOs properly · f269a8ce
      Namhyung Kim authored
      [ Upstream commit c966d23a ]
      
      Usually DSOs are mapped from the beginning of the file, so the base
      address of the DSO can be calculated by map->start - map->pgoff.
      
      However, JIT DSOs which are generated by `perf inject -j`, are mapped
      only the code segment.  This makes unwind-libdw code confusing and
      rejects processing unwinds in the JIT DSOs.  It should use the map
      start address as base for them to fix the confusion.
      
      Fixes: 1fe627da
      
       ("perf unwind: Take pgoff into account when reporting elf to libdwfl")
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Fangrui Song <maskray@google.com>
      Cc: Ian Rogers <irogers@google.com>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Milian Wolff <milian.wolff@kdab.com>
      Cc: Pablo Galindo <pablogsal@gmail.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: https://lore.kernel.org/r/20231212070547.612536-3-namhyung@kernel.org
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      f269a8ce
    • Namhyung Kim's avatar
      perf unwind-libunwind: Fix base address for .eh_frame · cf731a5d
      Namhyung Kim authored
      [ Upstream commit 4fb54994 ]
      
      The base address of a DSO mapping should start at the start of the file.
      Usually DSOs are mapped from the pgoff 0 so it doesn't matter when it
      uses the start of the map address.
      
      But generated DSOs for JIT codes doesn't start from the 0 so it should
      subtract the offset to calculate the .eh_frame table offsets correctly.
      
      Fixes: dc2cf4ca
      
       ("perf unwind: Fix segbase for ld.lld linked objects")
      Reviewed-by: default avatarIan Rogers <irogers@google.com>
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Fangrui Song <maskray@google.com>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Milian Wolff <milian.wolff@kdab.com>
      Cc: Pablo Galindo <pablogsal@gmail.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: https://lore.kernel.org/r/20231212070547.612536-4-namhyung@kernel.org
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      cf731a5d
    • Geert Uytterhoeven's avatar
      spi: Merge spi_controller.{slave,target}_abort() · 2f5e8322
      Geert Uytterhoeven authored
      [ Upstream commit 6c6871cd ]
      
      Mixing SPI slave/target handlers and SPI slave/target controllers using
      legacy and modern naming does not work well: there are now two different
      callbacks for aborting a slave/target operation, of which only one is
      populated, while spi_{slave,target}_abort() check and use only one,
      which may be the unpopulated one.
      
      Fix this by merging the slave/target abort callbacks into a single
      callback using a union, like is already done for the slave/target flags.
      
      Fixes: b8d3b056
      
       ("spi: introduce new helpers with using modern naming")
      Signed-off-by: default avatarGeert Uytterhoeven <geert+renesas@glider.be>
      Link: https://lore.kernel.org/r/809c82d54b85dd87ef7ee69fc93016085be85cec.1667555967.git.geert+renesas@glider.be
      Signed-off-by: default avatarMark Brown <broonie@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      2f5e8322
    • Miguel Ojeda's avatar
      kbuild: rust: avoid creating temporary files · 53ce433a
      Miguel Ojeda authored
      [ Upstream commit df01b7cf
      
       ]
      
      `rustc` outputs by default the temporary files (i.e. the ones saved
      by `-Csave-temps`, such as `*.rcgu*` files) in the current working
      directory when `-o` and `--out-dir` are not given (even if
      `--emit=x=path` is given, i.e. it does not use those for temporaries).
      
      Since out-of-tree modules are compiled from the `linux` tree,
      `rustc` then tries to create them there, which may not be accessible.
      
      Thus pass `--out-dir` explicitly, even if it is just for the temporary
      files.
      
      Similarly, do so for Rust host programs too.
      
      Reported-by: default avatarRaphael Nestler <raphael.nestler@gmail.com>
      Closes: https://github.com/Rust-for-Linux/linux/issues/1015
      Reported-by: default avatarAndrea Righi <andrea.righi@canonical.com>
      Tested-by: Raphael Nestler <raphael.nestler@gmail.com> # non-hostprogs
      Tested-by: Andrea Righi <andrea.righi@canonical.com> # non-hostprogs
      Fixes: 295d8398
      
       ("kbuild: specify output names separately for each emission type from rustc")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarMiguel Ojeda <ojeda@kernel.org>
      Tested-by: default avatarMartin Rodriguez Reboredo <yakoyoku@gmail.com>
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      53ce433a
    • Vanillan Wang's avatar
      net:usb:qmi_wwan: support Rolling modules · 56633a5e
      Vanillan Wang authored
      [ Upstream commit d3620460
      
       ]
      
      Update the qmi_wwan driver support for the Rolling
      LTE modules.
      
      - VID:PID 33f8:0104, RW101-GL for laptop debug M.2 cards(with RMNET
      interface for /Linux/Chrome OS)
      0x0104: RMNET, diag, at, pipe
      
      Here are the outputs of usb-devices:
      T:  Bus=04 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=5000 MxCh= 0
      D:  Ver= 3.20 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 9 #Cfgs=  1
      P:  Vendor=33f8 ProdID=0104 Rev=05.04
      S:  Manufacturer=Rolling Wireless S.a.r.l.
      S:  Product=Rolling Module
      S:  SerialNumber=ba2eb033
      C:  #Ifs= 6 Cfg#= 1 Atr=a0 MxPwr=896mA
      I:  If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
      E:  Ad=01(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
      E:  Ad=81(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
      I:  If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
      E:  Ad=02(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
      E:  Ad=82(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
      E:  Ad=83(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
      I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
      E:  Ad=03(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
      E:  Ad=84(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
      E:  Ad=85(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
      I:  If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=40 Driver=option
      E:  Ad=04(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
      E:  Ad=86(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
      E:  Ad=87(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
      I:  If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=50 Driver=qmi_wwan
      E:  Ad=0f(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
      E:  Ad=88(I) Atr=03(Int.) MxPS=   8 Ivl=32ms
      E:  Ad=8e(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
      I:  If#= 5 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=usbfs
      E:  Ad=05(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
      E:  Ad=89(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
      
      Signed-off-by: default avatarVanillan Wang <vanillanwang@163.com>
      Link: https://lore.kernel.org/r/20240416120713.24777-1-vanillanwang@163.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      56633a5e
    • Lyude Paul's avatar
      drm/nouveau/dp: Don't probe eDP ports twice harder · 04fa2cfc
      Lyude Paul authored
      [ Upstream commit bf52d7f9
      
       ]
      
      I didn't pay close enough attention the last time I tried to fix this
      problem - while we currently do correctly take care to make sure we don't
      probe a connected eDP port more then once, we don't do the same thing for
      eDP ports we found to be disconnected.
      
      So, fix this and make sure we only ever probe eDP ports once and then leave
      them at that connector state forever (since without HPD, it's not going to
      change on its own anyway). This should get rid of the last few GSP errors
      getting spit out during runtime suspend and resume on some machines, as we
      tried to reprobe eDP ports in response to ACPI hotplug probe events.
      
      Signed-off-by: default avatarLyude Paul <lyude@redhat.com>
      Reviewed-by: default avatarDave Airlie <airlied@redhat.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20240404233736.7946-3-lyude@redhat.com
      (cherry picked from commit fe6660b6
      
      )
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      04fa2cfc
    • Joakim Sindholt's avatar
      fs/9p: drop inodes immediately on non-.L too · ba2adb44
      Joakim Sindholt authored
      [ Upstream commit 7fd524b9
      
       ]
      
      Signed-off-by: default avatarJoakim Sindholt <opensource@zhasha.com>
      Signed-off-by: default avatarEric Van Hensbergen <ericvh@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      ba2adb44
    • Stephen Boyd's avatar
      clk: Don't hold prepare_lock when calling kref_put() · d063d13a
      Stephen Boyd authored
      [ Upstream commit 6f63af75
      
       ]
      
      We don't need to hold the prepare_lock when dropping a ref on a struct
      clk_core. The release function is only freeing memory and any code with
      a pointer reference has already unlinked anything pointing to the
      clk_core. This reduces the holding area of the prepare_lock a bit.
      
      Note that we also don't call free_clk() with the prepare_lock held.
      There isn't any reason to do that.
      
      Reviewed-by: default avatarDouglas Anderson <dianders@chromium.org>
      Signed-off-by: default avatarStephen Boyd <sboyd@kernel.org>
      Link: https://lore.kernel.org/r/20240325184204.745706-3-sboyd@kernel.org
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      d063d13a
    • Andy Shevchenko's avatar
      gpio: crystalcove: Use -ENOTSUPP consistently · e4e82ef3
      Andy Shevchenko authored
      [ Upstream commit ace0ebe5
      
       ]
      
      The GPIO library expects the drivers to return -ENOTSUPP in some
      cases and not using analogue POSIX code. Make the driver to follow
      this.
      
      Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      e4e82ef3
    • Andy Shevchenko's avatar
      gpio: wcove: Use -ENOTSUPP consistently · 8ebcd162
      Andy Shevchenko authored
      [ Upstream commit 0c3b532a
      
       ]
      
      The GPIO library expects the drivers to return -ENOTSUPP in some
      cases and not using analogue POSIX code. Make the driver to follow
      this.
      
      Reviewed-by: default avatarKuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
      Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      8ebcd162
    • Jeff Layton's avatar
      9p: explicitly deny setlease attempts · f3b0226f
      Jeff Layton authored
      [ Upstream commit 7a846022
      
       ]
      
      9p is a remote network protocol, and it doesn't support asynchronous
      notifications from the server. Ensure that we don't hand out any leases
      since we can't guarantee they'll be broken when a file's contents
      change.
      
      Signed-off-by: default avatarJeff Layton <jlayton@kernel.org>
      Signed-off-by: default avatarEric Van Hensbergen <ericvh@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      f3b0226f
    • Joakim Sindholt's avatar
      fs/9p: translate O_TRUNC into OTRUNC · 5d74f4d8
      Joakim Sindholt authored
      [ Upstream commit 87de39e7
      
       ]
      
      This one hits both 9P2000 and .u as it appears v9fs has never translated
      the O_TRUNC flag.
      
      Signed-off-by: default avatarJoakim Sindholt <opensource@zhasha.com>
      Signed-off-by: default avatarEric Van Hensbergen <ericvh@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      5d74f4d8
    • Joakim Sindholt's avatar
      fs/9p: only translate RWX permissions for plain 9P2000 · ca9b5c81
      Joakim Sindholt authored
      [ Upstream commit cd25e15e
      
       ]
      
      Garbage in plain 9P2000's perm bits is allowed through, which causes it
      to be able to set (among others) the suid bit. This was presumably not
      the intent since the unix extended bits are handled explicitly and
      conditionally on .u.
      
      Signed-off-by: default avatarJoakim Sindholt <opensource@zhasha.com>
      Signed-off-by: default avatarEric Van Hensbergen <ericvh@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      ca9b5c81
    • Krzysztof Kozlowski's avatar
      iommu: mtk: fix module autoloading · 3aba6c4e
      Krzysztof Kozlowski authored
      [ Upstream commit 7537e31d
      
       ]
      
      Add MODULE_DEVICE_TABLE(), so modules could be properly autoloaded
      based on the alias from of_device_id table.
      
      Signed-off-by: default avatarKrzysztof Kozlowski <krzk@kernel.org>
      Link: https://lore.kernel.org/r/20240410164109.233308-1-krzk@kernel.org
      Signed-off-by: default avatarJoerg Roedel <jroedel@suse.de>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      3aba6c4e
    • Michael Kelley's avatar
      Drivers: hv: vmbus: Don't free ring buffers that couldn't be re-encrypted · 2f622008
      Michael Kelley authored
      [ Upstream commit 30d18df6
      
       ]
      
      In CoCo VMs it is possible for the untrusted host to cause
      set_memory_encrypted() or set_memory_decrypted() to fail such that an
      error is returned and the resulting memory is shared. Callers need to
      take care to handle these errors to avoid returning decrypted (shared)
      memory to the page allocator, which could lead to functional or security
      issues.
      
      The VMBus ring buffer code could free decrypted/shared pages if
      set_memory_decrypted() fails. Check the decrypted field in the struct
      vmbus_gpadl for the ring buffers to decide whether to free the memory.
      
      Signed-off-by: default avatarMichael Kelley <mhklinux@outlook.com>
      Reviewed-by: default avatarKuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
      Acked-by: default avatarKirill A. Shutemov <kirill.shutemov@linux.intel.com>
      Link: https://lore.kernel.org/r/20240311161558.1310-6-mhklinux@outlook.com
      Signed-off-by: default avatarWei Liu <wei.liu@kernel.org>
      Message-ID: <20240311161558.1310-6-mhklinux@outlook.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      2f622008
    • Rick Edgecombe's avatar
      uio_hv_generic: Don't free decrypted memory · dabf12bf
      Rick Edgecombe authored
      [ Upstream commit 3d788b2f
      
       ]
      
      In CoCo VMs it is possible for the untrusted host to cause
      set_memory_encrypted() or set_memory_decrypted() to fail such that an
      error is returned and the resulting memory is shared. Callers need to
      take care to handle these errors to avoid returning decrypted (shared)
      memory to the page allocator, which could lead to functional or security
      issues.
      
      The VMBus device UIO driver could free decrypted/shared pages if
      set_memory_decrypted() fails. Check the decrypted field in the gpadl
      to decide whether to free the memory.
      
      Signed-off-by: default avatarRick Edgecombe <rick.p.edgecombe@intel.com>
      Signed-off-by: default avatarMichael Kelley <mhklinux@outlook.com>
      Reviewed-by: default avatarKuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
      Acked-by: default avatarKirill A. Shutemov <kirill.shutemov@linux.intel.com>
      Link: https://lore.kernel.org/r/20240311161558.1310-5-mhklinux@outlook.com
      Signed-off-by: default avatarWei Liu <wei.liu@kernel.org>
      Message-ID: <20240311161558.1310-5-mhklinux@outlook.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      dabf12bf
    • Rick Edgecombe's avatar
      Drivers: hv: vmbus: Track decrypted status in vmbus_gpadl · 1999644d
      Rick Edgecombe authored
      [ Upstream commit 211f514e
      
       ]
      
      In CoCo VMs it is possible for the untrusted host to cause
      set_memory_encrypted() or set_memory_decrypted() to fail such that an
      error is returned and the resulting memory is shared. Callers need to
      take care to handle these errors to avoid returning decrypted (shared)
      memory to the page allocator, which could lead to functional or security
      issues.
      
      In order to make sure callers of vmbus_establish_gpadl() and
      vmbus_teardown_gpadl() don't return decrypted/shared pages to
      allocators, add a field in struct vmbus_gpadl to keep track of the
      decryption status of the buffers. This will allow the callers to
      know if they should free or leak the pages.
      
      Signed-off-by: default avatarRick Edgecombe <rick.p.edgecombe@intel.com>
      Signed-off-by: default avatarMichael Kelley <mhklinux@outlook.com>
      Reviewed-by: default avatarKuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
      Acked-by: default avatarKirill A. Shutemov <kirill.shutemov@linux.intel.com>
      Link: https://lore.kernel.org/r/20240311161558.1310-3-mhklinux@outlook.com
      Signed-off-by: default avatarWei Liu <wei.liu@kernel.org>
      Message-ID: <20240311161558.1310-3-mhklinux@outlook.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      1999644d
    • John Stultz's avatar
      selftests: timers: Fix valid-adjtimex signed left-shift undefined behavior · 1f3484de
      John Stultz authored
      [ Upstream commit 07636136
      
       ]
      
      The struct adjtimex freq field takes a signed value who's units are in
      shifted (<<16) parts-per-million.
      
      Unfortunately for negative adjustments, the straightforward use of:
      
        freq = ppm << 16 trips undefined behavior warnings with clang:
      
      valid-adjtimex.c:66:6: warning: shifting a negative signed value is undefined [-Wshift-negative-value]
              -499<<16,
              ~~~~^
      valid-adjtimex.c:67:6: warning: shifting a negative signed value is undefined [-Wshift-negative-value]
              -450<<16,
              ~~~~^
      ..
      
      Fix it by using a multiply by (1 << 16) instead of shifting negative values
      in the valid-adjtimex test case. Align the values for better readability.
      
      Reported-by: default avatarLee Jones <joneslee@google.com>
      Reported-by: default avatarMuhammad Usama Anjum <usama.anjum@collabora.com>
      Signed-off-by: default avatarJohn Stultz <jstultz@google.com>
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Reviewed-by: default avatarMuhammad Usama Anjum <usama.anjum@collabora.com>
      Link: https://lore.kernel.org/r/20240409202222.2830476-1-jstultz@google.com
      Link: https://lore.kernel.org/lkml/0c6d4f0d-2064-4444-986b-1d1ed782135f@collabora.com/
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      1f3484de
    • Lijo Lazar's avatar
      drm/amdgpu: Refine IB schedule error logging · 45289683
      Lijo Lazar authored
      [ Upstream commit 4b18a91f
      
       ]
      
      Downgrade to debug information when IBs are skipped. Also, use dev_* to
      identify the device.
      
      Signed-off-by: default avatarLijo Lazar <lijo.lazar@amd.com>
      Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
      Reviewed-by: default avatarAsad Kamal <asad.kamal@amd.com>
      Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      45289683
    • Justin Ernst's avatar
      tools/power/turbostat: Fix uncore frequency file string · a513ccd9
      Justin Ernst authored
      [ Upstream commit 60add818
      
       ]
      
      Running turbostat on a 16 socket HPE Scale-up Compute 3200 (SapphireRapids) fails with:
      turbostat: /sys/devices/system/cpu/intel_uncore_frequency/package_010_die_00/current_freq_khz: open failed: No such file or directory
      
      We observe the sysfs uncore frequency directories named:
      ...
      package_09_die_00/
      package_10_die_00/
      package_11_die_00/
      ...
      package_15_die_00/
      
      The culprit is an incorrect sprintf format string "package_0%d_die_0%d" used
      with each instance of reading uncore frequency files. uncore-frequency-common.c
      creates the sysfs directory with the format "package_%02d_die_%02d". Once the
      package value reaches double digits, the formats diverge.
      
      Change each instance of "package_0%d_die_0%d" to "package_%02d_die_%02d".
      
      [lenb: deleted the probe part of this patch, as it was already fixed]
      
      Signed-off-by: default avatarJustin Ernst <justin.ernst@hpe.com>
      Reviewed-by: default avatarThomas Renninger <trenn@suse.de>
      Signed-off-by: default avatarLen Brown <len.brown@intel.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      a513ccd9