Skip to content
  1. Feb 25, 2023
    • Thomas Gleixner's avatar
      alarmtimer: Prevent starvation by small intervals and SIG_IGN · d21f4dae
      Thomas Gleixner authored
      commit d125d134 upstream.
      
      syzbot reported a RCU stall which is caused by setting up an alarmtimer
      with a very small interval and ignoring the signal. The reproducer arms the
      alarm timer with a relative expiry of 8ns and an interval of 9ns. Not a
      problem per se, but that's an issue when the signal is ignored because then
      the timer is immediately rearmed because there is no way to delay that
      rearming to the signal delivery path.  See posix_timer_fn() and commit
      58229a18 ("posix-timers: Prevent softirq starvation by small intervals
      and SIG_IGN") for details.
      
      The reproducer does not set SIG_IGN explicitely, but it sets up the timers
      signal with SIGCONT. That has the same effect as explicitely setting
      SIG_IGN for a signal as SIGCONT is ignored if there is no handler set and
      the task is not ptraced.
      
      The log clearly shows that:
      
         [pid  5102] --- SIGCONT {si_signo=SIGCONT, si_code=SI_TIMER, si_timerid=0, si_overrun=316014, si_int=0, si_ptr=NULL} ---
      
      It works because the tasks are traced and therefore the signal is queued so
      the tracer can see it, which delays the restart of the timer to the signal
      delivery path. But then the tracer is killed:
      
         [pid  5087] kill(-5102, SIGKILL <unfinished ...>
         ...
         ./strace-static-x86_64: Process 5107 detached
      
      and after it's gone the stall can be observed:
      
         syzkaller login: [   79.439102][    C0] hrtimer: interrupt took 68471 ns
         [  184.460538][    C1] rcu: INFO: rcu_preempt detected stalls on CPUs/tasks:
         ...
         [  184.658237][    C1] rcu: Stack dump where RCU GP kthread last ran:
         [  184.664574][    C1] Sending NMI from CPU 1 to CPUs 0:
         [  184.669821][    C0] NMI backtrace for cpu 0
         [  184.669831][    C0] CPU: 0 PID: 5108 Comm: syz-executor192 Not tainted 6.2.0-rc6-next-20230203-syzkaller #0
         ...
         [  184.670036][    C0] Call Trace:
         [  184.670041][    C0]  <IRQ>
         [  184.670045][    C0]  alarmtimer_fired+0x327/0x670
      
      posix_timer_fn() prevents that by checking whether the interval for
      timers which have the signal ignored is smaller than a jiffie and
      artifically delay it by shifting the next expiry out by a jiffie. That's
      accurate vs. the overrun accounting, but slightly inaccurate
      vs. timer_gettimer(2).
      
      The comment in that function says what needs to be done and there was a fix
      available for the regular userspace induced SIG_IGN mechanism, but that did
      not work due to the implicit ignore for SIGCONT and similar signals. This
      needs to be worked on, but for now the only available workaround is to do
      exactly what posix_timer_fn() does:
      
      Increase the interval of self-rearming timers, which have their signal
      ignored, to at least a jiffie.
      
      Interestingly this has been fixed before via commit ff86bf0c
      
      
      ("alarmtimer: Rate limit periodic intervals") already, but that fix got
      lost in a later rework.
      
      Reported-by: default avatar <syzbot+b9564ba6e8e00694511b@syzkaller.appspotmail.com>
      Fixes: f2c45807
      
       ("alarmtimer: Switch over to generic set/get/rearm routine")
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Acked-by: default avatarJohn Stultz <jstultz@google.com>
      Cc: stable@vger.kernel.org
      Link: https://lore.kernel.org/r/87k00q1no2.ffs@tglx
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      d21f4dae
    • Sean Anderson's avatar
      powerpc: dts: t208x: Disable 10G on MAC1 and MAC2 · 65317563
      Sean Anderson authored
      [ Upstream commit 8d8bee13 ]
      
      There aren't enough resources to run these ports at 10G speeds. Disable
      10G for these ports, reverting to the previous speed.
      
      Fixes: 36926a7d
      
       ("powerpc: dts: t208x: Mark MAC1 and MAC2 as 10G")
      Reported-by: default avatarCamelia Alexandra Groza <camelia.groza@nxp.com>
      Signed-off-by: default avatarSean Anderson <sean.anderson@seco.com>
      Reviewed-by: default avatarCamelia Groza <camelia.groza@nxp.com>
      Tested-by: default avatarCamelia Groza <camelia.groza@nxp.com>
      Link: https://lore.kernel.org/r/20221216172937.2960054-1-sean.anderson@seco.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      65317563
    • Jason A. Donenfeld's avatar
      random: always mix cycle counter in add_latent_entropy() · 7cdfefb6
      Jason A. Donenfeld authored
      [ Upstream commit d7bf7f3b ]
      
      add_latent_entropy() is called every time a process forks, in
      kernel_clone(). This in turn calls add_device_randomness() using the
      latent entropy global state. add_device_randomness() does two things:
      
         2) Mixes into the input pool the latent entropy argument passed; and
         1) Mixes in a cycle counter, a sort of measurement of when the event
            took place, the high precision bits of which are presumably
            difficult to predict.
      
      (2) is impossible without CONFIG_GCC_PLUGIN_LATENT_ENTROPY=y. But (1) is
      always possible. However, currently CONFIG_GCC_PLUGIN_LATENT_ENTROPY=n
      disables both (1) and (2), instead of just (2).
      
      This commit causes the CONFIG_GCC_PLUGIN_LATENT_ENTROPY=n case to still
      do (1) by passing NULL (len 0) to add_device_randomness() when add_latent_
      entropy() is called.
      
      Cc: Dominik Brodowski <linux@dominikbrodowski.net>
      Cc: PaX Team <pageexec@freemail.hu>
      Cc: Emese Revfy <re.emese@gmail.com>
      Fixes: 38addce8
      
       ("gcc-plugins: Add latent_entropy plugin")
      Signed-off-by: default avatarJason A. Donenfeld <Jason@zx2c4.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      7cdfefb6
    • Sean Anderson's avatar
      powerpc: dts: t208x: Mark MAC1 and MAC2 as 10G · 2272c78a
      Sean Anderson authored
      [ Upstream commit 36926a7d ]
      
      On the T208X SoCs, MAC1 and MAC2 support XGMII. Add some new MAC dtsi
      fragments, and mark the QMAN ports as 10G.
      
      Fixes: da414bb9
      
       ("powerpc/mpc85xx: Add FSL QorIQ DPAA FMan support to the SoC device tree(s)")
      Signed-off-by: default avatarSean Anderson <sean.anderson@seco.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      2272c78a
    • Bitterblue Smith's avatar
      wifi: rtl8xxxu: gen2: Turn on the rate control · 0a1de956
      Bitterblue Smith authored
      [ Upstream commit 791082ec ]
      
      Re-enable the function rtl8xxxu_gen2_report_connect.
      
      It informs the firmware when connecting to a network. This makes the
      firmware enable the rate control, which makes the upload faster.
      
      It also informs the firmware when disconnecting from a network. In the
      past this made reconnecting impossible because it was sending the
      auth on queue 0x7 (TXDESC_QUEUE_VO) instead of queue 0x12
      (TXDESC_QUEUE_MGNT):
      
      wlp0s20f0u3: send auth to 90:55:de:__:__:__ (try 1/3)
      wlp0s20f0u3: send auth to 90:55:de:__:__:__ (try 2/3)
      wlp0s20f0u3: send auth to 90:55:de:__:__:__ (try 3/3)
      wlp0s20f0u3: authentication with 90:55:de:__:__:__ timed out
      
      Probably the firmware disables the unnecessary TX queues when it
      knows it's disconnected.
      
      However, this was fixed in commit edd5747a ("wifi: rtl8xxxu: Fix
      skb misuse in TX queue selection").
      
      Fixes: c59f13bb
      
       ("rtl8xxxu: Work around issue with 8192eu and 8723bu devices not reconnecting")
      Signed-off-by: default avatarBitterblue Smith <rtl8821cerfe2@gmail.com>
      Signed-off-by: default avatarKalle Valo <kvalo@kernel.org>
      Link: https://lore.kernel.org/r/43200afc-0c65-ee72-48f8-231edd1df493@gmail.com
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      0a1de956
  2. Feb 22, 2023
    • Greg Kroah-Hartman's avatar
      Linux 4.14.306 · 1e61bd26
      Greg Kroah-Hartman authored
      
      
      Link: https://lore.kernel.org/r/20230220133548.158615609@linuxfoundation.org
      Tested-by: default avatarLinux Kernel Functional Testing <lkft@linaro.org>
      Tested-by: default avatarJon Hunter <jonathanh@nvidia.com>
      Tested-by: default avatarGuenter Roeck <linux@roeck-us.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      v4.14.306
      1e61bd26
    • Ryusuke Konishi's avatar
      nilfs2: fix underflow in second superblock position calculations · 2f7a1135
      Ryusuke Konishi authored
      commit 99b9402a
      
       upstream.
      
      Macro NILFS_SB2_OFFSET_BYTES, which computes the position of the second
      superblock, underflows when the argument device size is less than 4096
      bytes.  Therefore, when using this macro, it is necessary to check in
      advance that the device size is not less than a lower limit, or at least
      that underflow does not occur.
      
      The current nilfs2 implementation lacks this check, causing out-of-bound
      block access when mounting devices smaller than 4096 bytes:
      
       I/O error, dev loop0, sector 36028797018963960 op 0x0:(READ) flags 0x0
       phys_seg 1 prio class 2
       NILFS (loop0): unable to read secondary superblock (blocksize = 1024)
      
      In addition, when trying to resize the filesystem to a size below 4096
      bytes, this underflow occurs in nilfs_resize_fs(), passing a huge number
      of segments to nilfs_sufile_resize(), corrupting parameters such as the
      number of segments in superblocks.  This causes excessive loop iterations
      in nilfs_sufile_resize() during a subsequent resize ioctl, causing
      semaphore ns_segctor_sem to block for a long time and hang the writer
      thread:
      
       INFO: task segctord:5067 blocked for more than 143 seconds.
            Not tainted 6.2.0-rc8-syzkaller-00015-gf6feea56f66d #0
       "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
       task:segctord        state:D stack:23456 pid:5067  ppid:2
       flags:0x00004000
       Call Trace:
        <TASK>
        context_switch kernel/sched/core.c:5293 [inline]
        __schedule+0x1409/0x43f0 kernel/sched/core.c:6606
        schedule+0xc3/0x190 kernel/sched/core.c:6682
        rwsem_down_write_slowpath+0xfcf/0x14a0 kernel/locking/rwsem.c:1190
        nilfs_transaction_lock+0x25c/0x4f0 fs/nilfs2/segment.c:357
        nilfs_segctor_thread_construct fs/nilfs2/segment.c:2486 [inline]
        nilfs_segctor_thread+0x52f/0x1140 fs/nilfs2/segment.c:2570
        kthread+0x270/0x300 kernel/kthread.c:376
        ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:308
        </TASK>
       ...
       Call Trace:
        <TASK>
        folio_mark_accessed+0x51c/0xf00 mm/swap.c:515
        __nilfs_get_page_block fs/nilfs2/page.c:42 [inline]
        nilfs_grab_buffer+0x3d3/0x540 fs/nilfs2/page.c:61
        nilfs_mdt_submit_block+0xd7/0x8f0 fs/nilfs2/mdt.c:121
        nilfs_mdt_read_block+0xeb/0x430 fs/nilfs2/mdt.c:176
        nilfs_mdt_get_block+0x12d/0xbb0 fs/nilfs2/mdt.c:251
        nilfs_sufile_get_segment_usage_block fs/nilfs2/sufile.c:92 [inline]
        nilfs_sufile_truncate_range fs/nilfs2/sufile.c:679 [inline]
        nilfs_sufile_resize+0x7a3/0x12b0 fs/nilfs2/sufile.c:777
        nilfs_resize_fs+0x20c/0xed0 fs/nilfs2/super.c:422
        nilfs_ioctl_resize fs/nilfs2/ioctl.c:1033 [inline]
        nilfs_ioctl+0x137c/0x2440 fs/nilfs2/ioctl.c:1301
        ...
      
      This fixes these issues by inserting appropriate minimum device size
      checks or anti-underflow checks, depending on where the macro is used.
      
      Link: https://lkml.kernel.org/r/0000000000004e1dfa05f4a48e6b@google.com
      Link: https://lkml.kernel.org/r/20230214224043.24141-1-konishi.ryusuke@gmail.com
      Signed-off-by: default avatarRyusuke Konishi <konishi.ryusuke@gmail.com>
      Reported-by: default avatar <syzbot+f0c4082ce5ebebdac63b@syzkaller.appspotmail.com>
      Tested-by: default avatarRyusuke Konishi <konishi.ryusuke@gmail.com>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      2f7a1135
    • Greg Kroah-Hartman's avatar
      kvm: initialize all of the kvm_debugregs structure before sending it to userspace · 1d43de93
      Greg Kroah-Hartman authored
      commit 2c10b614
      
       upstream.
      
      When calling the KVM_GET_DEBUGREGS ioctl, on some configurations, there
      might be some unitialized portions of the kvm_debugregs structure that
      could be copied to userspace.  Prevent this as is done in the other kvm
      ioctls, by setting the whole structure to 0 before copying anything into
      it.
      
      Bonus is that this reduces the lines of code as the explicit flag
      setting and reserved space zeroing out can be removed.
      
      Cc: Sean Christopherson <seanjc@google.com>
      Cc: Paolo Bonzini <pbonzini@redhat.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Dave Hansen <dave.hansen@linux.intel.com>
      Cc: <x86@kernel.org>
      Cc: "H. Peter Anvin" <hpa@zytor.com>
      Cc: stable <stable@kernel.org>
      Reported-by: default avatarXingyuan Mo <hdthky0@gmail.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Message-Id: <20230214103304.3689213-1-gregkh@linuxfoundation.org>
      Tested-by: default avatarXingyuan Mo <hdthky0@gmail.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      1d43de93
    • Natalia Petrova's avatar
      i40e: Add checking for null for nlmsg_find_attr() · c9aec733
      Natalia Petrova authored
      [ Upstream commit 7fa0b526 ]
      
      The result of nlmsg_find_attr() 'br_spec' is dereferenced in
      nla_for_each_nested(), but it can take NULL value in nla_find() function,
      which will result in an error.
      
      Found by Linux Verification Center (linuxtesting.org) with SVACE.
      
      Fixes: 51616018
      
       ("i40e: Add support for getlink, setlink ndo ops")
      Signed-off-by: default avatarNatalia Petrova <n.petrova@fintech.ru>
      Reviewed-by: default avatarJesse Brandeburg <jesse.brandeburg@intel.com>
      Tested-by: Gurucharan G <gurucharanx.g@intel.com> (A Contingent worker at Intel)
      Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
      Link: https://lore.kernel.org/r/20230209172833.3596034-1-anthony.l.nguyen@intel.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      c9aec733
    • Guillaume Nault's avatar
      ipv6: Fix tcp socket connection with DSCP. · 7fd4ff4c
      Guillaume Nault authored
      commit 8230680f upstream.
      
      Take into account the IPV6_TCLASS socket option (DSCP) in
      tcp_v6_connect(). Otherwise fib6_rule_match() can't properly
      match the DSCP value, resulting in invalid route lookup.
      
      For example:
      
        ip route add unreachable table main 2001:db8::10/124
      
        ip route add table 100 2001:db8::10/124 dev eth0
        ip -6 rule add dsfield 0x04 table 100
      
        echo test | socat - TCP6:[2001:db8::11]:54321,ipv6-tclass=0x04
      
      Without this patch, socat fails at connect() time ("No route to host")
      because the fib-rule doesn't jump to table 100 and the lookup ends up
      being done in the main table.
      
      Fixes: 2cc67cc7
      
       ("[IPV6] ROUTE: Routing by Traffic Class.")
      Signed-off-by: default avatarGuillaume Nault <gnault@redhat.com>
      Reviewed-by: default avatarEric Dumazet <edumazet@google.com>
      Reviewed-by: default avatarDavid Ahern <dsahern@kernel.org>
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      7fd4ff4c
    • Guillaume Nault's avatar
      ipv6: Fix datagram socket connection with DSCP. · 86c8d15e
      Guillaume Nault authored
      commit e010ae08 upstream.
      
      Take into account the IPV6_TCLASS socket option (DSCP) in
      ip6_datagram_flow_key_init(). Otherwise fib6_rule_match() can't
      properly match the DSCP value, resulting in invalid route lookup.
      
      For example:
      
        ip route add unreachable table main 2001:db8::10/124
      
        ip route add table 100 2001:db8::10/124 dev eth0
        ip -6 rule add dsfield 0x04 table 100
      
        echo test | socat - UDP6:[2001:db8::11]:54321,ipv6-tclass=0x04
      
      Without this patch, socat fails at connect() time ("No route to host")
      because the fib-rule doesn't jump to table 100 and the lookup ends up
      being done in the main table.
      
      Fixes: 2cc67cc7
      
       ("[IPV6] ROUTE: Routing by Traffic Class.")
      Signed-off-by: default avatarGuillaume Nault <gnault@redhat.com>
      Reviewed-by: default avatarEric Dumazet <edumazet@google.com>
      Reviewed-by: default avatarDavid Ahern <dsahern@kernel.org>
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      86c8d15e
    • Jakub Kicinski's avatar
      net: mpls: fix stale pointer if allocation fails during device rename · b89824a9
      Jakub Kicinski authored
      commit fda6c89f
      
       upstream.
      
      lianhui reports that when MPLS fails to register the sysctl table
      under new location (during device rename) the old pointers won't
      get overwritten and may be freed again (double free).
      
      Handle this gracefully. The best option would be unregistering
      the MPLS from the device completely on failure, but unfortunately
      mpls_ifdown() can fail. So failing fully is also unreliable.
      
      Another option is to register the new table first then only
      remove old one if the new one succeeds. That requires more
      code, changes order of notifications and two tables may be
      visible at the same time.
      
      sysctl point is not used in the rest of the code - set to NULL
      on failures and skip unregister if already NULL.
      
      Reported-by: default avatarlianhui tang <bluetlh@gmail.com>
      Fixes: 0fae3bf0
      
       ("mpls: handle device renames for per-device sysctls")
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      b89824a9
    • Cristian Ciocaltea's avatar
      net: stmmac: Restrict warning on disabling DMA store and fwd mode · a724a63b
      Cristian Ciocaltea authored
      commit 05d7623a upstream.
      
      When setting 'snps,force_thresh_dma_mode' DT property, the following
      warning is always emitted, regardless the status of force_sf_dma_mode:
      
      dwmac-starfive 10020000.ethernet: force_sf_dma_mode is ignored if force_thresh_dma_mode is set.
      
      Do not print the rather misleading message when DMA store and forward
      mode is already disabled.
      
      Fixes: e2a240c7
      
       ("driver:net:stmmac: Disable DMA store and forward mode if platform data force_thresh_dma_mode is set.")
      Signed-off-by: default avatarCristian Ciocaltea <cristian.ciocaltea@collabora.com>
      Link: https://lore.kernel.org/r/20230210202126.877548-1-cristian.ciocaltea@collabora.com
      Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      a724a63b
    • Miko Larsson's avatar
      net/usb: kalmia: Don't pass act_len in usb_bulk_msg error path · 1b5de7d4
      Miko Larsson authored
      commit c68f345b upstream.
      
      syzbot reported that act_len in kalmia_send_init_packet() is
      uninitialized when passing it to the first usb_bulk_msg error path. Jiri
      Pirko noted that it's pointless to pass it in the error path, and that
      the value that would be printed in the second error path would be the
      value of act_len from the first call to usb_bulk_msg.[1]
      
      With this in mind, let's just not pass act_len to the usb_bulk_msg error
      paths.
      
      1: https://lore.kernel.org/lkml/Y9pY61y1nwTuzMOa@nanopsycho/
      
      Fixes: d4026123
      
       ("net/usb: Add Samsung Kalmia driver for Samsung GT-B3730")
      Reported-and-tested-by: default avatar <syzbot+cd80c5ef5121bfe85b55@syzkaller.appspotmail.com>
      Signed-off-by: default avatarMiko Larsson <mikoxyzzz@gmail.com>
      Reviewed-by: default avatarAlexander Duyck <alexanderduyck@fb.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      1b5de7d4
    • Kuniyuki Iwashima's avatar
      dccp/tcp: Avoid negative sk_forward_alloc by ipv6_pinfo.pktoptions. · 3abda752
      Kuniyuki Iwashima authored
      commit ca43ccf4 upstream.
      
      Eric Dumazet pointed out [0] that when we call skb_set_owner_r()
      for ipv6_pinfo.pktoptions, sk_rmem_schedule() has not been called,
      resulting in a negative sk_forward_alloc.
      
      We add a new helper which clones a skb and sets its owner only
      when sk_rmem_schedule() succeeds.
      
      Note that we move skb_set_owner_r() forward in (dccp|tcp)_v6_do_rcv()
      because tcp_send_synack() can make sk_forward_alloc negative before
      ipv6_opt_accepted() in the crossed SYN-ACK or self-connect() cases.
      
      [0]: https://lore.kernel.org/netdev/CANn89iK9oc20Jdi_41jb9URdF210r7d1Y-+uypbMSbOfY6jqrg@mail.gmail.com/
      
      Fixes: 323fbd0e ("net: dccp: Add handling of IPV6_PKTOPTIONS to dccp_v6_do_rcv()")
      Fixes: 3df80d93 ("[DCCP]: Introduce DCCPv6")
      Fixes: 1da177e4
      
       ("Linux-2.6.12-rc2")
      Signed-off-by: default avatarKuniyuki Iwashima <kuniyu@amazon.com>
      Reviewed-by: default avatarEric Dumazet <edumazet@google.com>
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      3abda752
    • Rafał Miłecki's avatar
      net: bgmac: fix BCM5358 support by setting correct flags · 3f975c6f
      Rafał Miłecki authored
      commit d61615c3 upstream.
      
      Code blocks handling BCMA_CHIP_ID_BCM5357 and BCMA_CHIP_ID_BCM53572 were
      incorrectly unified. Chip package values are not unique and cannot be
      checked independently. They are meaningful only in a context of a given
      chip.
      
      Packages BCM5358 and BCM47188 share the same value but then belong to
      different chips. Code unification resulted in treating BCM5358 as
      BCM47188 and broke its initialization.
      
      Link: https://github.com/openwrt/openwrt/issues/8278
      Fixes: cb1b0f90
      
       ("net: ethernet: bgmac: unify code of the same family")
      Cc: Jon Mason <jdmason@kudzu.us>
      Signed-off-by: default avatarRafał Miłecki <rafal@milecki.pl>
      Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
      Link: https://lore.kernel.org/r/20230208091637.16291-1-zajec5@gmail.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      3f975c6f
    • Jason Xing's avatar
      i40e: add double of VLAN header when computing the max MTU · f3758675
      Jason Xing authored
      commit ce45ffb8 upstream.
      
      Include the second VLAN HLEN into account when computing the maximum
      MTU size as other drivers do.
      
      Fixes: 0c8493d9
      
       ("i40e: add XDP support for pass and drop actions")
      Signed-off-by: default avatarJason Xing <kernelxing@tencent.com>
      Reviewed-by: default avatarAlexander Duyck <alexanderduyck@fb.com>
      Tested-by: Chandan Kumar Rout <chandanx.rout@intel.com> (A Contingent Worker at Intel)
      Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      f3758675
    • Andrew Morton's avatar
      revert "squashfs: harden sanity check in squashfs_read_xattr_id_table" · ea09332b
      Andrew Morton authored
      commit a5b21d8d upstream.
      
      This fix was nacked by Philip, for reasons identified in the email linked
      below.
      
      Link: https://lkml.kernel.org/r/68f15d67-8945-2728-1f17-5b53a80ec52d@squashfs.org.uk
      Fixes: 72e544b1
      
       ("squashfs: harden sanity check in squashfs_read_xattr_id_table")
      Cc: Alexey Khoroshilov <khoroshilov@ispras.ru>
      Cc: Fedor Pchelkin <pchelkin@ispras.ru>
      Cc: Phillip Lougher <phillip@squashfs.org.uk>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      ea09332b
    • Mike Kravetz's avatar
      hugetlb: check for undefined shift on 32 bit architectures · bb2f39a0
      Mike Kravetz authored
      commit ec4288fe upstream.
      
      Users can specify the hugetlb page size in the mmap, shmget and
      memfd_create system calls.  This is done by using 6 bits within the flags
      argument to encode the base-2 logarithm of the desired page size.  The
      routine hstate_sizelog() uses the log2 value to find the corresponding
      hugetlb hstate structure.  Converting the log2 value (page_size_log) to
      potential hugetlb page size is the simple statement:
      
      	1UL << page_size_log
      
      Because only 6 bits are used for page_size_log, the left shift can not be
      greater than 63.  This is fine on 64 bit architectures where a long is 64
      bits.  However, if a value greater than 31 is passed on a 32 bit
      architecture (where long is 32 bits) the shift will result in undefined
      behavior.  This was generally not an issue as the result of the undefined
      shift had to exactly match hugetlb page size to proceed.
      
      Recent improvements in runtime checking have resulted in this undefined
      behavior throwing errors such as reported below.
      
      Fix by comparing page_size_log to BITS_PER_LONG before doing shift.
      
      Link: https://lkml.kernel.org/r/20230216013542.138708-1-mike.kravetz@oracle.com
      Link: https://lore.kernel.org/lkml/CA+G9fYuei_Tr-vN9GS7SfFyU1y9hNysnf=PB7kT0=yv4MiPgVg@mail.gmail.com/
      Fixes: 42d7395f
      
       ("mm: support more pagesizes for MAP_HUGETLB/SHM_HUGETLB")
      Signed-off-by: default avatarMike Kravetz <mike.kravetz@oracle.com>
      Reported-by: default avatarNaresh Kamboju <naresh.kamboju@linaro.org>
      Reviewed-by: default avatarJesper Juhl <jesperjuhl76@gmail.com>
      Acked-by: default avatarMuchun Song <songmuchun@bytedance.com>
      Tested-by: default avatarLinux Kernel Functional Testing <lkft@linaro.org>
      Tested-by: default avatarNaresh Kamboju <naresh.kamboju@linaro.org>
      Cc: Anders Roxell <anders.roxell@linaro.org>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Sasha Levin <sashal@kernel.org>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      bb2f39a0
    • Bo Liu's avatar
      ALSA: hda/conexant: add a new hda codec SN6180 · 3ae2f244
      Bo Liu authored
      commit 18d7e16c
      
       upstream.
      
      The current kernel does not support the SN6180 codec chip.
      Add the SN6180 codec configuration item to kernel.
      
      Signed-off-by: default avatarBo Liu <bo.liu@senarytech.com>
      Cc: <stable@vger.kernel.org>
      Link: https://lore.kernel.org/r/1675908828-1012-1-git-send-email-bo.liu@senarytech.com
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      3ae2f244
    • Yang Yingliang's avatar
      mmc: sdio: fix possible resource leaks in some error paths · 92ff03c2
      Yang Yingliang authored
      commit 605d9fb9 upstream.
      
      If sdio_add_func() or sdio_init_func() fails, sdio_remove_func() can
      not release the resources, because the sdio function is not presented
      in these two cases, it won't call of_node_put() or put_device().
      
      To fix these leaks, make sdio_func_present() only control whether
      device_del() needs to be called or not, then always call of_node_put()
      and put_device().
      
      In error case in sdio_init_func(), the reference of 'card->dev' is
      not get, to avoid redundant put in sdio_free_func_cis(), move the
      get_device() to sdio_alloc_func() and put_device() to sdio_release_func(),
      it can keep the get/put function be balanced.
      
      Without this patch, while doing fault inject test, it can get the
      following leak reports, after this fix, the leak is gone.
      
      unreferenced object 0xffff888112514000 (size 2048):
        comm "kworker/3:2", pid 65, jiffies 4294741614 (age 124.774s)
        hex dump (first 32 bytes):
          00 e0 6f 12 81 88 ff ff 60 58 8d 06 81 88 ff ff  ..o.....`X......
          10 40 51 12 81 88 ff ff 10 40 51 12 81 88 ff ff  .@Q......@Q.....
        backtrace:
          [<000000009e5931da>] kmalloc_trace+0x21/0x110
          [<000000002f839ccb>] mmc_alloc_card+0x38/0xb0 [mmc_core]
          [<0000000004adcbf6>] mmc_sdio_init_card+0xde/0x170 [mmc_core]
          [<000000007538fea0>] mmc_attach_sdio+0xcb/0x1b0 [mmc_core]
          [<00000000d4fdeba7>] mmc_rescan+0x54a/0x640 [mmc_core]
      
      unreferenced object 0xffff888112511000 (size 2048):
        comm "kworker/3:2", pid 65, jiffies 4294741623 (age 124.766s)
        hex dump (first 32 bytes):
          00 40 51 12 81 88 ff ff e0 58 8d 06 81 88 ff ff  .@Q......X......
          10 10 51 12 81 88 ff ff 10 10 51 12 81 88 ff ff  ..Q.......Q.....
        backtrace:
          [<000000009e5931da>] kmalloc_trace+0x21/0x110
          [<00000000fcbe706c>] sdio_alloc_func+0x35/0x100 [mmc_core]
          [<00000000c68f4b50>] mmc_attach_sdio.cold.18+0xb1/0x395 [mmc_core]
          [<00000000d4fdeba7>] mmc_rescan+0x54a/0x640 [mmc_core]
      
      Fixes: 3d10a1ba
      
       ("sdio: fix reference counting in sdio_remove_func()")
      Signed-off-by: default avatarYang Yingliang <yangyingliang@huawei.com>
      Cc: stable@vger.kernel.org
      Link: https://lore.kernel.org/r/20230130125808.3471254-1-yangyingliang@huawei.com
      Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      92ff03c2
    • Greg Kroah-Hartman's avatar
      Revert "x86/fpu: Use _Alignof to avoid undefined behavior in TYPE_ALIGN" · 9d02708e
      Greg Kroah-Hartman authored
      This reverts commit 67c6d797 which is
      commit 55228db2
      
       upstream.
      
      _Alignof is not in the gcc version that the 4.14.y kernel still
      supports (3.2), so this change needs to be reverted as it breaks the
      build on those older compiler versions.
      
      Reported-by: default avatarMichael Nies <michael.nies@netclusive.com>
      Link: https://lore.kernel.org/r/HE1PR0902MB188277E37DED663AE440510BE1D99@HE1PR0902MB1882.eurprd09.prod.outlook.com
      Link: https://bugzilla.kernel.org/show_bug.cgi?id=217013
      Cc: YingChi Long <me@inclyc.cn>
      Cc: Borislav Petkov <bp@suse.de>
      Cc: Nick Desaulniers <ndesaulniers@google.com>
      Cc: Nathan Chancellor <nathan@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      9d02708e
    • Seth Jenkins's avatar
      aio: fix mremap after fork null-deref · 808f1e4b
      Seth Jenkins authored
      commit 81e9d6f8 upstream.
      
      Commit e4a0d3e7 ("aio: Make it possible to remap aio ring") introduced
      a null-deref if mremap is called on an old aio mapping after fork as
      mm->ioctx_table will be set to NULL.
      
      [jmoyer@redhat.com: fix 80 column issue]
      Link: https://lkml.kernel.org/r/x49sffq4nvg.fsf@segfault.boston.devel.redhat.com
      Fixes: e4a0d3e7
      
       ("aio: Make it possible to remap aio ring")
      Signed-off-by: default avatarSeth Jenkins <sethjenkins@google.com>
      Signed-off-by: default avatarJeff Moyer <jmoyer@redhat.com>
      Cc: Alexander Viro <viro@zeniv.linux.org.uk>
      Cc: Benjamin LaHaise <bcrl@kvack.org>
      Cc: Jann Horn <jannh@google.com>
      Cc: Pavel Emelyanov <xemul@parallels.com>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      808f1e4b
    • Amit Engel's avatar
      nvme-fc: fix a missing queue put in nvmet_fc_ls_create_association · dc62f8f2
      Amit Engel authored
      [ Upstream commit 0cab4404
      
       ]
      
      As part of nvmet_fc_ls_create_association there is a case where
      nvmet_fc_alloc_target_queue fails right after a new association with an
      admin queue is created. In this case, no one releases the get taken in
      nvmet_fc_alloc_target_assoc.  This fix is adding the missing put.
      
      Signed-off-by: default avatarAmit Engel <Amit.Engel@dell.com>
      Reviewed-by: default avatarJames Smart <jsmart2021@gmail.com>
      Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      dc62f8f2
    • Hyunwoo Kim's avatar
      net/rose: Fix to not accept on connected socket · d044166d
      Hyunwoo Kim authored
      [ Upstream commit 14caefcf
      
       ]
      
      If you call listen() and accept() on an already connect()ed
      rose socket, accept() can successfully connect.
      This is because when the peer socket sends data to sendmsg,
      the skb with its own sk stored in the connected socket's
      sk->sk_receive_queue is connected, and rose_accept() dequeues
      the skb waiting in the sk->sk_receive_queue.
      
      This creates a child socket with the sk of the parent
      rose socket, which can cause confusion.
      
      Fix rose_listen() to return -EINVAL if the socket has
      already been successfully connected, and add lock_sock
      to prevent this issue.
      
      Signed-off-by: default avatarHyunwoo Kim <v4bel@theori.io>
      Reviewed-by: default avatarKuniyuki Iwashima <kuniyu@amazon.com>
      Link: https://lore.kernel.org/r/20230125105944.GA133314@ubuntu
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      d044166d
    • Shunsuke Mie's avatar
      tools/virtio: fix the vringh test for virtio ring changes · 8775a0f9
      Shunsuke Mie authored
      [ Upstream commit 3f7b75ab
      
       ]
      
      Fix the build caused by missing kmsan_handle_dma() and is_power_of_2() that
      are used in drivers/virtio/virtio_ring.c.
      
      Signed-off-by: default avatarShunsuke Mie <mie@igel.co.jp>
      Message-Id: <20230110034310.779744-1-mie@igel.co.jp>
      Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      8775a0f9
    • Mike Kravetz's avatar
      migrate: hugetlb: check for hugetlb shared PMD in node migration · 6981f0ae
      Mike Kravetz authored
      commit 73bdf65e upstream.
      
      migrate_pages/mempolicy semantics state that CAP_SYS_NICE is required to
      move pages shared with another process to a different node.  page_mapcount
      > 1 is being used to determine if a hugetlb page is shared.  However, a
      hugetlb page will have a mapcount of 1 if mapped by multiple processes via
      a shared PMD.  As a result, hugetlb pages shared by multiple processes and
      mapped with a shared PMD can be moved by a process without CAP_SYS_NICE.
      
      To fix, check for a shared PMD if mapcount is 1.  If a shared PMD is found
      consider the page shared.
      
      Link: https://lkml.kernel.org/r/20230126222721.222195-3-mike.kravetz@oracle.com
      Fixes: e2d8cf40
      
       ("migrate: add hugepage migration code to migrate_pages()")
      Signed-off-by: default avatarMike Kravetz <mike.kravetz@oracle.com>
      Acked-by: default avatarPeter Xu <peterx@redhat.com>
      Acked-by: default avatarDavid Hildenbrand <david@redhat.com>
      Cc: James Houghton <jthoughton@google.com>
      Cc: Matthew Wilcox <willy@infradead.org>
      Cc: Michal Hocko <mhocko@suse.com>
      Cc: Muchun Song <songmuchun@bytedance.com>
      Cc: Naoya Horiguchi <naoya.horiguchi@linux.dev>
      Cc: Vishal Moola (Oracle) <vishal.moola@gmail.com>
      Cc: Yang Shi <shy828301@gmail.com>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      6981f0ae
    • Mark Pearson's avatar
      usb: core: add quirk for Alcor Link AK9563 smartcard reader · 1948dfd7
      Mark Pearson authored
      commit 303e724d
      
       upstream.
      
      The Alcor Link AK9563 smartcard reader used on some Lenovo platforms
      doesn't work. If LPM is enabled the reader will provide an invalid
      usb config descriptor. Added quirk to disable LPM.
      
      Verified fix on Lenovo P16 G1 and T14 G3
      
      Tested-by: default avatarMiroslav Zatko <mzatko@mirexoft.com>
      Tested-by: default avatarDennis Wassenberg <dennis.wassenberg@secunet.com>
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarDennis Wassenberg <dennis.wassenberg@secunet.com>
      Signed-off-by: default avatarMark Pearson <mpearson-lenovo@squebb.ca>
      Link: https://lore.kernel.org/r/20230208181223.1092654-1-mpearson-lenovo@squebb.ca
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      1948dfd7
    • Alan Stern's avatar
      net: USB: Fix wrong-direction WARNING in plusb.c · f0ad46ef
      Alan Stern authored
      commit 811d5811
      
       upstream.
      
      The syzbot fuzzer detected a bug in the plusb network driver: A
      zero-length control-OUT transfer was treated as a read instead of a
      write.  In modern kernels this error provokes a WARNING:
      
      usb 1-1: BOGUS control dir, pipe 80000280 doesn't match bRequestType c0
      WARNING: CPU: 0 PID: 4645 at drivers/usb/core/urb.c:411
      usb_submit_urb+0x14a7/0x1880 drivers/usb/core/urb.c:411
      Modules linked in:
      CPU: 1 PID: 4645 Comm: dhcpcd Not tainted
      6.2.0-rc6-syzkaller-00050-g9f266ccaa2f5 #0
      Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google
      01/12/2023
      RIP: 0010:usb_submit_urb+0x14a7/0x1880 drivers/usb/core/urb.c:411
      ...
      Call Trace:
       <TASK>
       usb_start_wait_urb+0x101/0x4b0 drivers/usb/core/message.c:58
       usb_internal_control_msg drivers/usb/core/message.c:102 [inline]
       usb_control_msg+0x320/0x4a0 drivers/usb/core/message.c:153
       __usbnet_read_cmd+0xb9/0x390 drivers/net/usb/usbnet.c:2010
       usbnet_read_cmd+0x96/0xf0 drivers/net/usb/usbnet.c:2068
       pl_vendor_req drivers/net/usb/plusb.c:60 [inline]
       pl_set_QuickLink_features drivers/net/usb/plusb.c:75 [inline]
       pl_reset+0x2f/0xf0 drivers/net/usb/plusb.c:85
       usbnet_open+0xcc/0x5d0 drivers/net/usb/usbnet.c:889
       __dev_open+0x297/0x4d0 net/core/dev.c:1417
       __dev_change_flags+0x587/0x750 net/core/dev.c:8530
       dev_change_flags+0x97/0x170 net/core/dev.c:8602
       devinet_ioctl+0x15a2/0x1d70 net/ipv4/devinet.c:1147
       inet_ioctl+0x33f/0x380 net/ipv4/af_inet.c:979
       sock_do_ioctl+0xcc/0x230 net/socket.c:1169
       sock_ioctl+0x1f8/0x680 net/socket.c:1286
       vfs_ioctl fs/ioctl.c:51 [inline]
       __do_sys_ioctl fs/ioctl.c:870 [inline]
       __se_sys_ioctl fs/ioctl.c:856 [inline]
       __x64_sys_ioctl+0x197/0x210 fs/ioctl.c:856
       do_syscall_x64 arch/x86/entry/common.c:50 [inline]
       do_syscall_64+0x39/0xb0 arch/x86/entry/common.c:80
       entry_SYSCALL_64_after_hwframe+0x63/0xcd
      
      The fix is to call usbnet_write_cmd() instead of usbnet_read_cmd() and
      remove the USB_DIR_IN flag.
      
      Reported-and-tested-by: default avatar <syzbot+2a0e7abd24f1eb90ce25@syzkaller.appspotmail.com>
      Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
      Fixes: 090ffa9d
      
       ("[PATCH] USB: usbnet (9/9) module for pl2301/2302 cables")
      CC: stable@vger.kernel.org
      Link: https://lore.kernel.org/r/00000000000052099f05f3b3e298@google.com/
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      f0ad46ef
    • Maxim Korotkov's avatar
      pinctrl: single: fix potential NULL dereference · 1177bdaf
      Maxim Korotkov authored
      [ Upstream commit d2d73e6d ]
      
      Added checking of pointer "function" in pcs_set_mux().
      pinmux_generic_get_function() can return NULL and the pointer
      "function" was dereferenced without checking against NULL.
      
      Found by Linux Verification Center (linuxtesting.org) with SVACE.
      
      Fixes: 571aec4d
      
       ("pinctrl: single: Use generic pinmux helpers for managing functions")
      Signed-off-by: default avatarMaxim Korotkov <korotkov.maxim.s@gmail.com>
      Reviewed-by: default avatarTony Lindgren <tony@atomide.com>
      Link: https://lore.kernel.org/r/20221118104332.943-1-korotkov.maxim.s@gmail.com
      Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      1177bdaf
    • Joel Stanley's avatar
      pinctrl: aspeed: Fix confusing types in return value · ddfd0094
      Joel Stanley authored
      [ Upstream commit 287a344a ]
      
      The function signature is int, but we return a bool. Instead return a
      negative errno as the kerneldoc suggests.
      
      Fixes: 4d3d0e42
      
       ("pinctrl: Add core support for Aspeed SoCs")
      Signed-off-by: default avatarJoel Stanley <joel@jms.id.au>
      Reviewed-by: default avatarAndrew Jeffery <andrew@aj.id.au>
      Link: https://lore.kernel.org/r/20230119231856.52014-1-joel@jms.id.au
      Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      ddfd0094
    • Dan Carpenter's avatar
      ALSA: pci: lx6464es: fix a debug loop · c817d0cf
      Dan Carpenter authored
      [ Upstream commit 5dac9f8d ]
      
      This loop accidentally reuses the "i" iterator for both the inside and
      the outside loop.  The value of MAX_STREAM_BUFFER is 5.  I believe that
      chip->rmh.stat_len is in the 2-12 range.  If the value of .stat_len is
      4 or more then it will loop exactly one time, but if it's less then it
      is a forever loop.
      
      It looks like it was supposed to combined into one loop where
      conditions are checked.
      
      Fixes: 8e632006
      
       ("ALSA: lx_core: Remove useless #if 0 .. #endif")
      Signed-off-by: default avatarDan Carpenter <error27@gmail.com>
      Link: https://lore.kernel.org/r/Y9jnJTis/mRFJAQp@kili
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      c817d0cf
    • Artemii Karasev's avatar
      ALSA: emux: Avoid potential array out-of-bound in snd_emux_xg_control() · 45e37dc6
      Artemii Karasev authored
      commit 6a32425f
      
       upstream.
      
      snd_emux_xg_control() can be called with an argument 'param' greater
      than size of 'control' array. It may lead to accessing 'control'
      array at a wrong index.
      
      Found by Linux Verification Center (linuxtesting.org) with SVACE.
      
      Signed-off-by: default avatarArtemii Karasev <karasev@ispras.ru>
      Fixes: 1da177e4
      
       ("Linux-2.6.12-rc2")
      Cc: <stable@vger.kernel.org>
      Link: https://lore.kernel.org/r/20230207132026.2870-1-karasev@ispras.ru
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      45e37dc6
    • Josef Bacik's avatar
      btrfs: limit device extents to the device size · fdbdbd22
      Josef Bacik authored
      commit 3c538de0
      
       upstream.
      
      There was a recent regression in btrfs/177 that started happening with
      the size class patches ("btrfs: introduce size class to block group
      allocator").  This however isn't a regression introduced by those
      patches, but rather the bug was uncovered by a change in behavior in
      these patches.  The patches triggered more chunk allocations in the
      ^free-space-tree case, which uncovered a race with device shrink.
      
      The problem is we will set the device total size to the new size, and
      use this to find a hole for a device extent.  However during shrink we
      may have device extents allocated past this range, so we could
      potentially find a hole in a range past our new shrink size.  We don't
      actually limit our found extent to the device size anywhere, we assume
      that we will not find a hole past our device size.  This isn't true with
      shrink as we're relocating block groups and thus creating holes past the
      device size.
      
      Fix this by making sure we do not search past the new device size, and
      if we wander into any device extents that start after our device size
      simply break from the loop and use whatever hole we've already found.
      
      CC: stable@vger.kernel.org # 4.14+
      Signed-off-by: default avatarJosef Bacik <josef@toxicpanda.com>
      Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      fdbdbd22
    • Ilpo Järvinen's avatar
      serial: 8250_dma: Fix DMA Rx rearm race · 5756452b
      Ilpo Järvinen authored
      commit 57e9af78
      
       upstream.
      
      As DMA Rx can be completed from two places, it is possible that DMA Rx
      completes before DMA completion callback had a chance to complete it.
      Once the previous DMA Rx has been completed, a new one can be started
      on the next UART interrupt. The following race is possible
      (uart_unlock_and_check_sysrq_irqrestore() replaced with
      spin_unlock_irqrestore() for simplicity/clarity):
      
      CPU0					CPU1
      					dma_rx_complete()
      serial8250_handle_irq()
        spin_lock_irqsave(&port->lock)
        handle_rx_dma()
          serial8250_rx_dma_flush()
            __dma_rx_complete()
              dma->rx_running = 0
              // Complete DMA Rx
        spin_unlock_irqrestore(&port->lock)
      
      serial8250_handle_irq()
        spin_lock_irqsave(&port->lock)
        handle_rx_dma()
          serial8250_rx_dma()
            dma->rx_running = 1
            // Setup a new DMA Rx
        spin_unlock_irqrestore(&port->lock)
      
      					  spin_lock_irqsave(&port->lock)
      					  // sees dma->rx_running = 1
      					  __dma_rx_complete()
      					    dma->rx_running = 0
      					    // Incorrectly complete
      					    // running DMA Rx
      
      This race seems somewhat theoretical to occur for real but handle it
      correctly regardless. Check what is the DMA status before complething
      anything in __dma_rx_complete().
      
      Reported-by: default avatarGilles BULOZ <gilles.buloz@kontron.com>
      Tested-by: default avatarGilles BULOZ <gilles.buloz@kontron.com>
      Fixes: 9ee4b83e
      
       ("serial: 8250: Add support for dmaengine")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
      Link: https://lore.kernel.org/r/20230130114841.25749-3-ilpo.jarvinen@linux.intel.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      5756452b
    • Ilpo Järvinen's avatar
      serial: 8250_dma: Fix DMA Rx completion race · 8e665906
      Ilpo Järvinen authored
      commit 31352811
      
       upstream.
      
      __dma_rx_complete() is called from two places:
        - Through the DMA completion callback dma_rx_complete()
        - From serial8250_rx_dma_flush() after IIR_RLSI or IIR_RX_TIMEOUT
      The former does not hold port's lock during __dma_rx_complete() which
      allows these two to race and potentially insert the same data twice.
      
      Extend port's lock coverage in dma_rx_complete() to prevent the race
      and check if the DMA Rx is still pending completion before calling
      into __dma_rx_complete().
      
      Reported-by: default avatarGilles BULOZ <gilles.buloz@kontron.com>
      Tested-by: default avatarGilles BULOZ <gilles.buloz@kontron.com>
      Fixes: 9ee4b83e
      
       ("serial: 8250: Add support for dmaengine")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
      Link: https://lore.kernel.org/r/20230130114841.25749-2-ilpo.jarvinen@linux.intel.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      8e665906
    • Phillip Lougher's avatar
      Squashfs: fix handling and sanity checking of xattr_ids count · 7fe583c9
      Phillip Lougher authored
      commit f65c4bbb upstream.
      
      A Sysbot [1] corrupted filesystem exposes two flaws in the handling and
      sanity checking of the xattr_ids count in the filesystem.  Both of these
      flaws cause computation overflow due to incorrect typing.
      
      In the corrupted filesystem the xattr_ids value is 4294967071, which
      stored in a signed variable becomes the negative number -225.
      
      Flaw 1 (64-bit systems only):
      
      The signed integer xattr_ids variable causes sign extension.
      
      This causes variable overflow in the SQUASHFS_XATTR_*(A) macros.  The
      variable is first multiplied by sizeof(struct squashfs_xattr_id) where the
      type of the sizeof operator is "unsigned long".
      
      On a 64-bit system this is 64-bits in size, and causes the negative number
      to be sign extended and widened to 64-bits and then become unsigned.  This
      produces the very large number 18446744073709548016 or 2^64 - 3600.  This
      number when rounded up by SQUASHFS_METADATA_SIZE - 1 (8191 bytes) and
      divided by SQUASHFS_METADATA_SIZE overflows and produces a length of 0
      (stored in len).
      
      Flaw 2 (32-bit systems only):
      
      On a 32-bit system the integer variable is not widened by the unsigned
      long type of the sizeof operator (32-bits), and the signedness of the
      variable has no effect due it always being treated as unsigned.
      
      The above corrupted xattr_ids value of 4294967071, when multiplied
      overflows and produces the number 4294963696 or 2^32 - 3400.  This number
      when rounded up by SQUASHFS_METADATA_SIZE - 1 (8191 bytes) and divided by
      SQUASHFS_METADATA_SIZE overflows again and produces a length of 0.
      
      The effect of the 0 length computation:
      
      In conjunction with the corrupted xattr_ids field, the filesystem also has
      a corrupted xattr_table_start value, where it matches the end of
      filesystem value of 850.
      
      This causes the following sanity check code to fail because the
      incorrectly computed len of 0 matches the incorrect size of the table
      reported by the superblock (0 bytes).
      
          len = SQUASHFS_XATTR_BLOCK_BYTES(*xattr_ids);
          indexes = SQUASHFS_XATTR_BLOCKS(*xattr_ids);
      
          /*
           * The computed size of the index table (len bytes) should exactly
           * match the table start and end points
          */
          start = table_start + sizeof(*id_table);
          end = msblk->bytes_used;
      
          if (len != (end - start))
                  return ERR_PTR(-EINVAL);
      
      Changing the xattr_ids variable to be "usigned int" fixes the flaw on a
      64-bit system.  This relies on the fact the computation is widened by the
      unsigned long type of the sizeof operator.
      
      Casting the variable to u64 in the above macro fixes this flaw on a 32-bit
      system.
      
      It also means 64-bit systems do not implicitly rely on the type of the
      sizeof operator to widen the computation.
      
      [1] https://lore.kernel.org/lkml/000000000000cd44f005f1a0f17f@google.com/
      
      Link: https://lkml.kernel.org/r/20230127061842.10965-1-phillip@squashfs.org.uk
      Fixes: 506220d2
      
       ("squashfs: add more sanity checks in xattr id lookup")
      Signed-off-by: default avatarPhillip Lougher <phillip@squashfs.org.uk>
      Reported-by: default avatar <syzbot+082fa4af80a5bb1a9843@syzkaller.appspotmail.com>
      Cc: Alexey Khoroshilov <khoroshilov@ispras.ru>
      Cc: Fedor Pchelkin <pchelkin@ispras.ru>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      7fe583c9
    • Longlong Xia's avatar
      mm/swapfile: add cond_resched() in get_swap_pages() · 29f0349c
      Longlong Xia authored
      commit 7717fc1a
      
       upstream.
      
      The softlockup still occurs in get_swap_pages() under memory pressure.  64
      CPU cores, 64GB memory, and 28 zram devices, the disksize of each zram
      device is 50MB with same priority as si.  Use the stress-ng tool to
      increase memory pressure, causing the system to oom frequently.
      
      The plist_for_each_entry_safe() loops in get_swap_pages() could reach tens
      of thousands of times to find available space (extreme case:
      cond_resched() is not called in scan_swap_map_slots()).  Let's add
      cond_resched() into get_swap_pages() when failed to find available space
      to avoid softlockup.
      
      Link: https://lkml.kernel.org/r/20230128094757.1060525-1-xialonglong1@huawei.com
      Signed-off-by: default avatarLonglong Xia <xialonglong1@huawei.com>
      Reviewed-by: default avatar"Huang, Ying" <ying.huang@intel.com>
      Cc: Chen Wandun <chenwandun@huawei.com>
      Cc: Huang Ying <ying.huang@intel.com>
      Cc: Kefeng Wang <wangkefeng.wang@huawei.com>
      Cc: Nanyong Sun <sunnanyong@huawei.com>
      Cc: Hugh Dickins <hughd@google.com>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      29f0349c
    • Mike Kravetz's avatar
      mm: hugetlb: proc: check for hugetlb shared PMD in /proc/PID/smaps · 30576df1
      Mike Kravetz authored
      commit 3489dbb6 upstream.
      
      Patch series "Fixes for hugetlb mapcount at most 1 for shared PMDs".
      
      This issue of mapcount in hugetlb pages referenced by shared PMDs was
      discussed in [1].  The following two patches address user visible behavior
      caused by this issue.
      
      [1] https://lore.kernel.org/linux-mm/Y9BF+OCdWnCSilEu@monkey/
      
      
      This patch (of 2):
      
      A hugetlb page will have a mapcount of 1 if mapped by multiple processes
      via a shared PMD.  This is because only the first process increases the
      map count, and subsequent processes just add the shared PMD page to their
      page table.
      
      page_mapcount is being used to decide if a hugetlb page is shared or
      private in /proc/PID/smaps.  Pages referenced via a shared PMD were
      incorrectly being counted as private.
      
      To fix, check for a shared PMD if mapcount is 1.  If a shared PMD is found
      count the hugetlb page as shared.  A new helper to check for a shared PMD
      is added.
      
      [akpm@linux-foundation.org: simplification, per David]
      [akpm@linux-foundation.org: hugetlb.h: include page_ref.h for page_count()]
      Link: https://lkml.kernel.org/r/20230126222721.222195-2-mike.kravetz@oracle.com
      Fixes: 25ee01a2
      
       ("mm: hugetlb: proc: add hugetlb-related fields to /proc/PID/smaps")
      Signed-off-by: default avatarMike Kravetz <mike.kravetz@oracle.com>
      Acked-by: default avatarPeter Xu <peterx@redhat.com>
      Cc: David Hildenbrand <david@redhat.com>
      Cc: James Houghton <jthoughton@google.com>
      Cc: Matthew Wilcox <willy@infradead.org>
      Cc: Michal Hocko <mhocko@suse.com>
      Cc: Muchun Song <songmuchun@bytedance.com>
      Cc: Naoya Horiguchi <naoya.horiguchi@linux.dev>
      Cc: Vishal Moola (Oracle) <vishal.moola@gmail.com>
      Cc: Yang Shi <shy828301@gmail.com>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      30576df1
    • Helge Deller's avatar
      parisc: Wire up PTRACE_GETREGS/PTRACE_SETREGS for compat case · 4ebcbcea
      Helge Deller authored
      commit 316f1f42
      
       upstream.
      
      Wire up the missing ptrace requests PTRACE_GETREGS, PTRACE_SETREGS,
      PTRACE_GETFPREGS and PTRACE_SETFPREGS when running 32-bit applications
      on 64-bit kernels.
      
      Signed-off-by: default avatarHelge Deller <deller@gmx.de>
      Cc: stable@vger.kernel.org # 4.7+
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      4ebcbcea