Skip to content
  1. Sep 19, 2023
    • Hangyu Hua's avatar
      net: ethernet: mtk_eth_soc: fix possible NULL pointer dereference in mtk_hwlro_get_fdir_all() · ff5faed5
      Hangyu Hua authored
      [ Upstream commit e4c79810 ]
      
      rule_locs is allocated in ethtool_get_rxnfc and the size is determined by
      rule_cnt from user space. So rule_cnt needs to be check before using
      rule_locs to avoid NULL pointer dereference.
      
      Fixes: 7aab747e
      
       ("net: ethernet: mediatek: add ethtool functions to configure RX flows of HW LRO")
      Signed-off-by: default avatarHangyu Hua <hbh25y@gmail.com>
      Reviewed-by: default avatarSimon Horman <horms@kernel.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      ff5faed5
    • Hangyu Hua's avatar
      net: ethernet: mvpp2_main: fix possible OOB write in mvpp2_ethtool_get_rxnfc() · 349638f7
      Hangyu Hua authored
      [ Upstream commit 51fe0a47 ]
      
      rules is allocated in ethtool_get_rxnfc and the size is determined by
      rule_cnt from user space. So rule_cnt needs to be check before using
      rules to avoid OOB writing or NULL pointer dereference.
      
      Fixes: 90b509b3
      
       ("net: mvpp2: cls: Add Classification offload support")
      Signed-off-by: default avatarHangyu Hua <hbh25y@gmail.com>
      Reviewed-by: default avatarMarcin Wojtas <mw@semihalf.com>
      Reviewed-by: default avatarRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      349638f7
    • Vincent Whitchurch's avatar
      net: stmmac: fix handling of zero coalescing tx-usecs · 9dbbc87d
      Vincent Whitchurch authored
      [ Upstream commit fa60b816 ]
      
      Setting ethtool -C eth0 tx-usecs 0 is supposed to disable the use of the
      coalescing timer but currently it gets programmed with zero delay
      instead.
      
      Disable the use of the coalescing timer if tx-usecs is zero by
      preventing it from being restarted.  Note that to keep things simple we
      don't start/stop the timer when the coalescing settings are changed, but
      just let that happen on the next transmit or timer expiry.
      
      Fixes: 8fce3331
      
       ("net: stmmac: Rework coalesce timer and fix multi-queue races")
      Signed-off-by: default avatarVincent Whitchurch <vincent.whitchurch@axis.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      9dbbc87d
    • Guangguan Wang's avatar
      net/smc: use smc_lgr_list.lock to protect smc_lgr_list.list iterate in smcr_port_add · 70c8d170
      Guangguan Wang authored
      [ Upstream commit f5146e3e ]
      
      While doing smcr_port_add, there maybe linkgroup add into or delete
      from smc_lgr_list.list at the same time, which may result kernel crash.
      So, use smc_lgr_list.lock to protect smc_lgr_list.list iterate in
      smcr_port_add.
      
      The crash calltrace show below:
      BUG: kernel NULL pointer dereference, address: 0000000000000000
      PGD 0 P4D 0
      Oops: 0000 [#1] SMP NOPTI
      CPU: 0 PID: 559726 Comm: kworker/0:92 Kdump: loaded Tainted: G
      Hardware name: Alibaba Cloud Alibaba Cloud ECS, BIOS 449e491 04/01/2014
      Workqueue: events smc_ib_port_event_work [smc]
      RIP: 0010:smcr_port_add+0xa6/0xf0 [smc]
      RSP: 0000:ffffa5a2c8f67de0 EFLAGS: 00010297
      RAX: 0000000000000001 RBX: ffff9935e0650000 RCX: 0000000000000000
      RDX: 0000000000000010 RSI: ffff9935e0654290 RDI: ffff9935c8560000
      RBP: 0000000000000000 R08: 0000000000000000 R09: ffff9934c0401918
      R10: 0000000000000000 R11: ffffffffb4a5c278 R12: ffff99364029aae4
      R13: ffff99364029aa00 R14: 00000000ffffffed R15: ffff99364029ab08
      FS:  0000000000000000(0000) GS:ffff994380600000(0000) knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: 0000000000000000 CR3: 0000000f06a10003 CR4: 0000000002770ef0
      PKRU: 55555554
      Call Trace:
       smc_ib_port_event_work+0x18f/0x380 [smc]
       process_one_work+0x19b/0x340
       worker_thread+0x30/0x370
       ? process_one_work+0x340/0x340
       kthread+0x114/0x130
       ? __kthread_cancel_work+0x50/0x50
       ret_from_fork+0x1f/0x30
      
      Fixes: 1f90a05d
      
       ("net/smc: add smcr_port_add() and smcr_link_up() processing")
      Signed-off-by: default avatarGuangguan Wang <guangguan.wang@linux.alibaba.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      70c8d170
    • Björn Töpel's avatar
      selftests: Keep symlinks, when possible · ef5d546b
      Björn Töpel authored
      [ Upstream commit 3f3f3841 ]
      
      When kselftest is built/installed with the 'gen_tar' target, rsync is
      used for the installation step to copy files. Extra care is needed for
      tests that have symlinks. Commit ae108c48 ("selftests: net: Fix
      cross-tree inclusion of scripts") added '-L' (transform symlink into
      referent file/dir) to rsync, to fix dangling links. However, that
      broke some tests where the symlink (being a symlink) is part of the
      test (e.g. exec:execveat).
      
      Use rsync's '--copy-unsafe-links' that does right thing.
      
      Fixes: ae108c48
      
       ("selftests: net: Fix cross-tree inclusion of scripts")
      Signed-off-by: default avatarBjörn Töpel <bjorn@rivosinc.com>
      Reviewed-by: default avatarBenjamin Poirier <bpoirier@nvidia.com>
      Signed-off-by: default avatarShuah Khan <skhan@linuxfoundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      ef5d546b
    • Björn Töpel's avatar
      kselftest/runner.sh: Propagate SIGTERM to runner child · cdd61a27
      Björn Töpel authored
      [ Upstream commit 9616cb34 ]
      
      Timeouts in kselftest are done using the "timeout" command with the
      "--foreground" option. Without the "foreground" option, it is not
      possible for a user to cancel the runner using SIGINT, because the
      signal is not propagated to timeout which is running in a different
      process group. The "forground" options places the timeout in the same
      process group as its parent, but only sends the SIGTERM (on timeout)
      signal to the forked process. Unfortunately, this does not play nice
      with all kselftests, e.g. "net:fcnal-test.sh", where the child
      processes will linger because timeout does not send SIGTERM to the
      group.
      
      Some users have noted these hangs [1].
      
      Fix this by nesting the timeout with an additional timeout without the
      foreground option.
      
      Link: https://lore.kernel.org/all/7650b2eb-0aee-a2b0-2e64-c9bc63210f67@alu.unizg.hr/ # [1]
      Fixes: 651e0d88
      
       ("kselftest/runner: allow to properly deliver signals to tests")
      Signed-off-by: default avatarBjörn Töpel <bjorn@rivosinc.com>
      Signed-off-by: default avatarShuah Khan <skhan@linuxfoundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      cdd61a27
    • Liu Jian's avatar
      net: ipv4: fix one memleak in __inet_del_ifa() · 980f8445
      Liu Jian authored
      [ Upstream commit ac28b1ec ]
      
      I got the below warning when do fuzzing test:
      unregister_netdevice: waiting for bond0 to become free. Usage count = 2
      
      It can be repoduced via:
      
      ip link add bond0 type bond
      sysctl -w net.ipv4.conf.bond0.promote_secondaries=1
      ip addr add 4.117.174.103/0 scope 0x40 dev bond0
      ip addr add 192.168.100.111/255.255.255.254 scope 0 dev bond0
      ip addr add 0.0.0.4/0 scope 0x40 secondary dev bond0
      ip addr del 4.117.174.103/0 scope 0x40 dev bond0
      ip link delete bond0 type bond
      
      In this reproduction test case, an incorrect 'last_prim' is found in
      __inet_del_ifa(), as a result, the secondary address(0.0.0.4/0 scope 0x40)
      is lost. The memory of the secondary address is leaked and the reference of
      in_device and net_device is leaked.
      
      Fix this problem:
      Look for 'last_prim' starting at location of the deleted IP and inserting
      the promoted IP into the location of 'last_prim'.
      
      Fixes: 0ff60a45
      
       ("[IPV4]: Fix secondary IP addresses after promotion")
      Signed-off-by: default avatarLiu Jian <liujian56@huawei.com>
      Signed-off-by: default avatarJulian Anastasov <ja@ssi.bg>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      980f8445
    • Jinjie Ruan's avatar
      kunit: Fix wild-memory-access bug in kunit_free_suite_set() · 9acb294e
      Jinjie Ruan authored
      [ Upstream commit 2810c1e9 ]
      
      Inject fault while probing kunit-example-test.ko, if kstrdup()
      fails in mod_sysfs_setup() in load_module(), the mod->state will
      switch from MODULE_STATE_COMING to MODULE_STATE_GOING instead of
      from MODULE_STATE_LIVE to MODULE_STATE_GOING, so only
      kunit_module_exit() will be called without kunit_module_init(), and
      the mod->kunit_suites is no set correctly and the free in
      kunit_free_suite_set() will cause below wild-memory-access bug.
      
      The mod->state state machine when load_module() succeeds:
      
      MODULE_STATE_UNFORMED ---> MODULE_STATE_COMING ---> MODULE_STATE_LIVE
      	 ^						|
      	 |						| delete_module
      	 +---------------- MODULE_STATE_GOING <---------+
      
      The mod->state state machine when load_module() fails at
      mod_sysfs_setup():
      
      MODULE_STATE_UNFORMED ---> MODULE_STATE_COMING ---> MODULE_STATE_GOING
      	^						|
      	|						|
      	+-----------------------------------------------+
      
      Call kunit_module_init() at MODULE_STATE_COMING state to fix the issue
      because MODULE_STATE_LIVE is transformed from it.
      
       Unable to handle kernel paging request at virtual address ffffff341e942a88
       KASAN: maybe wild-memory-access in range [0x0003f9a0f4a15440-0x0003f9a0f4a15447]
       Mem abort info:
         ESR = 0x0000000096000004
         EC = 0x25: DABT (current EL), IL = 32 bits
         SET = 0, FnV = 0
         EA = 0, S1PTW = 0
         FSC = 0x04: level 0 translation fault
       Data abort info:
         ISV = 0, ISS = 0x00000004, ISS2 = 0x00000000
         CM = 0, WnR = 0, TnD = 0, TagAccess = 0
         GCS = 0, Overlay = 0, DirtyBit = 0, Xs = 0
       swapper pgtable: 4k pages, 48-bit VAs, pgdp=00000000441ea000
       [ffffff341e942a88] pgd=0000000000000000, p4d=0000000000000000
       Internal error: Oops: 0000000096000004 [#1] PREEMPT SMP
       Modules linked in: kunit_example_test(-) cfg80211 rfkill 8021q garp mrp stp llc ipv6 [last unloaded: kunit_example_test]
       CPU: 3 PID: 2035 Comm: modprobe Tainted: G        W        N 6.5.0-next-20230828+ #136
       Hardware name: linux,dummy-virt (DT)
       pstate: a0000005 (NzCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
       pc : kfree+0x2c/0x70
       lr : kunit_free_suite_set+0xcc/0x13c
       sp : ffff8000829b75b0
       x29: ffff8000829b75b0 x28: ffff8000829b7b90 x27: 0000000000000000
       x26: dfff800000000000 x25: ffffcd07c82a7280 x24: ffffcd07a50ab300
       x23: ffffcd07a50ab2e8 x22: 1ffff00010536ec0 x21: dfff800000000000
       x20: ffffcd07a50ab2f0 x19: ffffcd07a50ab2f0 x18: 0000000000000000
       x17: 0000000000000000 x16: 0000000000000000 x15: ffffcd07c24b6764
       x14: ffffcd07c24b63c0 x13: ffffcd07c4cebb94 x12: ffff700010536ec7
       x11: 1ffff00010536ec6 x10: ffff700010536ec6 x9 : dfff800000000000
       x8 : 00008fffefac913a x7 : 0000000041b58ab3 x6 : 0000000000000000
       x5 : 1ffff00010536ec5 x4 : ffff8000829b7628 x3 : dfff800000000000
       x2 : ffffff341e942a80 x1 : ffffcd07a50aa000 x0 : fffffc0000000000
       Call trace:
        kfree+0x2c/0x70
        kunit_free_suite_set+0xcc/0x13c
        kunit_module_notify+0xd8/0x360
        blocking_notifier_call_chain+0xc4/0x128
        load_module+0x382c/0x44a4
        init_module_from_file+0xd4/0x128
        idempotent_init_module+0x2c8/0x524
        __arm64_sys_finit_module+0xac/0x100
        invoke_syscall+0x6c/0x258
        el0_svc_common.constprop.0+0x160/0x22c
        do_el0_svc+0x44/0x5c
        el0_svc+0x38/0x78
        el0t_64_sync_handler+0x13c/0x158
        el0t_64_sync+0x190/0x194
       Code: aa0003e1 b25657e0 d34cfc42 8b021802 (f9400440)
       ---[ end trace 0000000000000000 ]---
       Kernel panic - not syncing: Oops: Fatal exception
       SMP: stopping secondary CPUs
       Kernel Offset: 0x4d0742200000 from 0xffff800080000000
       PHYS_OFFSET: 0xffffee43c0000000
       CPU features: 0x88000203,3c020000,1000421b
       Memory Limit: none
       Rebooting in 1 seconds..
      
      Fixes: 3d6e4462
      
       ("kunit: unify module and builtin suite definitions")
      Signed-off-by: default avatarJinjie Ruan <ruanjinjie@huawei.com>
      Reviewed-by: default avatarRae Moar <rmoar@google.com>
      Reviewed-by: default avatarDavid Gow <davidgow@google.com>
      Signed-off-by: default avatarShuah Khan <skhan@linuxfoundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      9acb294e
    • Hamza Mahfooz's avatar
      drm/amdgpu: register a dirty framebuffer callback for fbcon · cb30ff2a
      Hamza Mahfooz authored
      commit 0a611560
      
       upstream.
      
      fbcon requires that we implement &drm_framebuffer_funcs.dirty.
      Otherwise, the framebuffer might take a while to flush (which would
      manifest as noticeable lag). However, we can't enable this callback for
      non-fbcon cases since it may cause too many atomic commits to be made at
      once. So, implement amdgpu_dirtyfb() and only enable it for fbcon
      framebuffers (we can use the "struct drm_file file" parameter in the
      callback to check for this since it is only NULL when called by fbcon,
      at least in the mainline kernel) on devices that support atomic KMS.
      
      Cc: Aurabindo Pillai <aurabindo.pillai@amd.com>
      Cc: Mario Limonciello <mario.limonciello@amd.com>
      Cc: stable@vger.kernel.org # 6.1+
      Link: https://gitlab.freedesktop.org/drm/amd/-/issues/2519
      Reviewed-by: default avatarMario Limonciello <mario.limonciello@amd.com>
      Signed-off-by: default avatarHamza Mahfooz <hamza.mahfooz@amd.com>
      Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      cb30ff2a
    • Gabe Teeger's avatar
      drm/amd/display: Remove wait while locked · b53fee19
      Gabe Teeger authored
      commit 5a3ccb14 upstream.
      
      [Why]
      We wait for mpc idle while in a locked state, leading to potential
      deadlock.
      
      [What]
      Move the wait_for_idle call to outside of HW lock. This and a
      call to wait_drr_doublebuffer_pending_clear are moved added to a new
      static helper function called wait_for_outstanding_hw_updates, to make
      the interface clearer.
      
      Cc: stable@vger.kernel.org
      Fixes: 8f0d304d
      
       ("drm/amd/display: Do not commit pipe when updating DRR")
      Reviewed-by: default avatarJun Lei <jun.lei@amd.com>
      Acked-by: default avatarHamza Mahfooz <hamza.mahfooz@amd.com>
      Signed-off-by: default avatarGabe Teeger <gabe.teeger@amd.com>
      Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      b53fee19
    • Wenjing Liu's avatar
      drm/amd/display: always switch off ODM before committing more streams · 2d7a6fcb
      Wenjing Liu authored
      commit 49a30c3d upstream.
      
      ODM power optimization is only supported with single stream. When ODM
      power optimization is enabled, we might not have enough free pipes for
      enabling other stream. So when we are committing more than 1 stream we
      should first switch off ODM power optimization to make room for new
      stream and then allocating pipe resource for the new stream.
      
      Cc: stable@vger.kernel.org
      Fixes: 59de751e
      
       ("drm/amd/display: add ODM case when looking for first split pipe")
      Reviewed-by: default avatarDillon Varone <dillon.varone@amd.com>
      Acked-by: default avatarHamza Mahfooz <hamza.mahfooz@amd.com>
      Signed-off-by: default avatarWenjing Liu <wenjing.liu@amd.com>
      Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      2d7a6fcb
    • Namhyung Kim's avatar
      perf hists browser: Fix the number of entries for 'e' key · c29bfda6
      Namhyung Kim authored
      commit f6b8436b upstream.
      
      The 'e' key is to toggle expand/collapse the selected entry only.  But
      the current code has a bug that it only increases the number of entries
      by 1 in the hierarchy mode so users cannot move under the current entry
      after the key stroke.  This is due to a wrong assumption in the
      hist_entry__set_folding().
      
      The commit b33f9226 ("perf hists browser: Put hist_entry folding
      logic into single function") factored out the code, but actually it
      should be handled separately.  The hist_browser__set_folding() is to
      update fold state for each entry so it needs to traverse all (child)
      entries regardless of the current fold state.  So it increases the
      number of entries by 1.
      
      But the hist_entry__set_folding() only cares the currently selected
      entry and its all children.  So it should count all unfolded child
      entries.  This code is implemented in hist_browser__toggle_fold()
      already so we can just call it.
      
      Fixes: b33f9226
      
       ("perf hists browser: Put hist_entry folding logic into single function")
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Ian Rogers <irogers@google.com>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: stable@vger.kernel.org
      Link: https://lore.kernel.org/r/20230731094934.1616495-2-namhyung@kernel.org
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      c29bfda6
    • Namhyung Kim's avatar
      perf tools: Handle old data in PERF_RECORD_ATTR · f4618f13
      Namhyung Kim authored
      commit 9bf63282 upstream.
      
      The PERF_RECORD_ATTR is used for a pipe mode to describe an event with
      attribute and IDs.  The ID table comes after the attr and it calculate
      size of the table using the total record size and the attr size.
      
        n_ids = (total_record_size - end_of_the_attr_field) / sizeof(u64)
      
      This is fine for most use cases, but sometimes it saves the pipe output
      in a file and then process it later.  And it becomes a problem if there
      is a change in attr size between the record and report.
      
        $ perf record -o- > perf-pipe.data  # old version
        $ perf report -i- < perf-pipe.data  # new version
      
      For example, if the attr size is 128 and it has 4 IDs, then it would
      save them in 168 byte like below:
      
         8 byte: perf event header { .type = PERF_RECORD_ATTR, .size = 168 },
       128 byte: perf event attr { .size = 128, ... },
        32 byte: event IDs [] = { 1234, 1235, 1236, 1237 },
      
      But when report later, it thinks the attr size is 136 then it only read
      the last 3 entries as ID.
      
         8 byte: perf event header { .type = PERF_RECORD_ATTR, .size = 168 },
       136 byte: perf event attr { .size = 136, ... },
        24 byte: event IDs [] = { 1235, 1236, 1237 },  // 1234 is missing
      
      So it should use the recorded version of the attr.  The attr has the
      size field already then it should honor the size when reading data.
      
      Fixes: 2c46dbb5
      
       ("perf: Convert perf header attrs into attr events")
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Ian Rogers <irogers@google.com>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Tom Zanussi <zanussi@kernel.org>
      Cc: stable@vger.kernel.org
      Link: https://lore.kernel.org/r/20230825152552.112913-1-namhyung@kernel.org
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      f4618f13
    • Namhyung Kim's avatar
      perf test shell stat_bpf_counters: Fix test on Intel · be69e8c8
      Namhyung Kim authored
      commit 68ca249c upstream.
      
      As of now, bpf counters (bperf) don't support event groups.  But the
      default perf stat includes topdown metrics if supported (on recent Intel
      machines) which require groups.  That makes perf stat exiting.
      
        $ sudo perf stat --bpf-counter true
        bpf managed perf events do not yet support groups.
      
      Actually the test explicitly uses cycles event only, but it missed to
      pass the option when it checks the availability of the command.
      
      Fixes: 2c0cb9f5
      
       ("perf test: Add a shell test for 'perf stat --bpf-counters' new option")
      Reviewed-by: default avatarSong Liu <song@kernel.org>
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Ian Rogers <irogers@google.com>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: bpf@vger.kernel.org
      Cc: stable@vger.kernel.org
      Link: https://lore.kernel.org/r/20230825164152.165610-2-namhyung@kernel.org
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      be69e8c8
    • Namhyung Kim's avatar
      perf hists browser: Fix hierarchy mode header · cb094064
      Namhyung Kim authored
      commit e2cabf2a upstream.
      
      The commit ef9ff601 ("perf ui browser: Move the extra title
      lines from the hists browser") introduced ui_browser__gotorc_title() to
      help moving non-title lines easily.  But it missed to update the title
      for the hierarchy mode so it won't print the header line on TUI at all.
      
        $ perf report --hierarchy
      
      Fixes: ef9ff601
      
       ("perf ui browser: Move the extra title lines from the hists browser")
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Ian Rogers <irogers@google.com>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: stable@vger.kernel.org
      Link: https://lore.kernel.org/r/20230731094934.1616495-1-namhyung@kernel.org
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      cb094064
    • Maciej W. Rozycki's avatar
      MIPS: Fix CONFIG_CPU_DADDI_WORKAROUNDS `modules_install' regression · ec540961
      Maciej W. Rozycki authored
      commit a79a404e upstream.
      
      Remove a build-time check for the presence of the GCC `-msym32' option.
      This option has been there since GCC 4.1.0, which is below the minimum
      required as at commit 805b2e1d
      
       ("kbuild: include Makefile.compiler
      only when compiler is needed"), when an error message:
      
      arch/mips/Makefile:306: *** CONFIG_CPU_DADDI_WORKAROUNDS unsupported without -msym32.  Stop.
      
      started to trigger for the `modules_install' target with configurations
      such as `decstation_64_defconfig' that set CONFIG_CPU_DADDI_WORKAROUNDS,
      because said commit has made `cc-option-yn' an undefined function for
      non-build targets.
      
      Reported-by: default avatarJan-Benedict Glaw <jbglaw@lug-owl.de>
      Signed-off-by: default avatarMaciej W. Rozycki <macro@orcam.me.uk>
      Fixes: 805b2e1d
      
       ("kbuild: include Makefile.compiler only when compiler is needed")
      Cc: stable@vger.kernel.org # v5.13+
      Reviewed-by: default avatarPhilippe Mathieu-Daudé <philmd@linaro.org>
      Signed-off-by: default avatarThomas Bogendoerfer <tsbogend@alpha.franken.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      ec540961
    • Sean Christopherson's avatar
      KVM: SVM: Skip VMSA init in sev_es_init_vmcb() if pointer is NULL · 60b5ef4c
      Sean Christopherson authored
      commit 1952e74d upstream.
      
      Skip initializing the VMSA physical address in the VMCB if the VMSA is
      NULL, which occurs during intrahost migration as KVM initializes the VMCB
      before copying over state from the source to the destination (including
      the VMSA and its physical address).
      
      In normal builds, __pa() is just math, so the bug isn't fatal, but with
      CONFIG_DEBUG_VIRTUAL=y, the validity of the virtual address is verified
      and passing in NULL will make the kernel unhappy.
      
      Fixes: 6defa24d
      
       ("KVM: SEV: Init target VMCBs in sev_migrate_from")
      Cc: stable@vger.kernel.org
      Cc: Peter Gonda <pgonda@google.com>
      Reviewed-by: default avatarPeter Gonda <pgonda@google.com>
      Reviewed-by: default avatarPankaj Gupta <pankaj.gupta@amd.com>
      Link: https://lore.kernel.org/r/20230825022357.2852133-3-seanjc@google.com
      Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      60b5ef4c
    • Sean Christopherson's avatar
      KVM: SVM: Set target pCPU during IRTE update if target vCPU is running · 12645e62
      Sean Christopherson authored
      commit f3cebc75 upstream.
      
      Update the target pCPU for IOMMU doorbells when updating IRTE routing if
      KVM is actively running the associated vCPU.  KVM currently only updates
      the pCPU when loading the vCPU (via avic_vcpu_load()), and so doorbell
      events will be delayed until the vCPU goes through a put+load cycle (which
      might very well "never" happen for the lifetime of the VM).
      
      To avoid inserting a stale pCPU, e.g. due to racing between updating IRTE
      routing and vCPU load/put, get the pCPU information from the vCPU's
      Physical APIC ID table entry (a.k.a. avic_physical_id_cache in KVM) and
      update the IRTE while holding ir_list_lock.  Add comments with --verbose
      enabled to explain exactly what is and isn't protected by ir_list_lock.
      
      Fixes: 411b44ba
      
       ("svm: Implements update_pi_irte hook to setup posted interrupt")
      Reported-by: default avatardengqiao.joey <dengqiao.joey@bytedance.com>
      Cc: stable@vger.kernel.org
      Cc: Alejandro Jimenez <alejandro.j.jimenez@oracle.com>
      Cc: Joao Martins <joao.m.martins@oracle.com>
      Cc: Maxim Levitsky <mlevitsk@redhat.com>
      Cc: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
      Tested-by: default avatarAlejandro Jimenez <alejandro.j.jimenez@oracle.com>
      Reviewed-by: default avatarJoao Martins <joao.m.martins@oracle.com>
      Link: https://lore.kernel.org/r/20230808233132.2499764-3-seanjc@google.com
      Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      12645e62
    • Sean Christopherson's avatar
      KVM: nSVM: Load L1's TSC multiplier based on L1 state, not L2 state · 5b2b0535
      Sean Christopherson authored
      commit 0c94e246 upstream.
      
      When emulating nested VM-Exit, load L1's TSC multiplier if L1's desired
      ratio doesn't match the current ratio, not if the ratio L1 is using for
      L2 diverges from the default.  Functionally, the end result is the same
      as KVM will run L2 with L1's multiplier if L2's multiplier is the default,
      i.e. checking that L1's multiplier is loaded is equivalent to checking if
      L2 has a non-default multiplier.
      
      However, the assertion that TSC scaling is exposed to L1 is flawed, as
      userspace can trigger the WARN at will by writing the MSR and then
      updating guest CPUID to hide the feature (modifying guest CPUID is
      allowed anytime before KVM_RUN).  E.g. hacking KVM's state_test
      selftest to do
      
                      vcpu_set_msr(vcpu, MSR_AMD64_TSC_RATIO, 0);
                      vcpu_clear_cpuid_feature(vcpu, X86_FEATURE_TSCRATEMSR);
      
      after restoring state in a new VM+vCPU yields an endless supply of:
      
        ------------[ cut here ]------------
        WARNING: CPU: 10 PID: 206939 at arch/x86/kvm/svm/nested.c:1105
                 nested_svm_vmexit+0x6af/0x720 [kvm_amd]
        Call Trace:
         nested_svm_exit_handled+0x102/0x1f0 [kvm_amd]
         svm_handle_exit+0xb9/0x180 [kvm_amd]
         kvm_arch_vcpu_ioctl_run+0x1eab/0x2570 [kvm]
         kvm_vcpu_ioctl+0x4c9/0x5b0 [kvm]
         ? trace_hardirqs_off+0x4d/0xa0
         __se_sys_ioctl+0x7a/0xc0
         __x64_sys_ioctl+0x21/0x30
         do_syscall_64+0x41/0x90
         entry_SYSCALL_64_after_hwframe+0x63/0xcd
      
      Unlike the nested VMRUN path, hoisting the svm->tsc_scaling_enabled check
      into the if-statement is wrong as KVM needs to ensure L1's multiplier is
      loaded in the above scenario.   Alternatively, the WARN_ON() could simply
      be deleted, but that would make KVM's behavior even more subtle, e.g. it's
      not immediately obvious why it's safe to write MSR_AMD64_TSC_RATIO when
      checking only tsc_ratio_msr.
      
      Fixes: 5228eb96
      
       ("KVM: x86: nSVM: implement nested TSC scaling")
      Cc: Maxim Levitsky <mlevitsk@redhat.com>
      Cc: stable@vger.kernel.org
      Link: https://lore.kernel.org/r/20230729011608.1065019-3-seanjc@google.com
      Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      5b2b0535
    • Sean Christopherson's avatar
      KVM: nSVM: Check instead of asserting on nested TSC scaling support · 6c1ecfea
      Sean Christopherson authored
      commit 7cafe9b8 upstream.
      
      Check for nested TSC scaling support on nested SVM VMRUN instead of
      asserting that TSC scaling is exposed to L1 if L1's MSR_AMD64_TSC_RATIO
      has diverged from KVM's default.  Userspace can trigger the WARN at will
      by writing the MSR and then updating guest CPUID to hide the feature
      (modifying guest CPUID is allowed anytime before KVM_RUN).  E.g. hacking
      KVM's state_test selftest to do
      
      		vcpu_set_msr(vcpu, MSR_AMD64_TSC_RATIO, 0);
      		vcpu_clear_cpuid_feature(vcpu, X86_FEATURE_TSCRATEMSR);
      
      after restoring state in a new VM+vCPU yields an endless supply of:
      
        ------------[ cut here ]------------
        WARNING: CPU: 164 PID: 62565 at arch/x86/kvm/svm/nested.c:699
                 nested_vmcb02_prepare_control+0x3d6/0x3f0 [kvm_amd]
        Call Trace:
         <TASK>
         enter_svm_guest_mode+0x114/0x560 [kvm_amd]
         nested_svm_vmrun+0x260/0x330 [kvm_amd]
         vmrun_interception+0x29/0x30 [kvm_amd]
         svm_invoke_exit_handler+0x35/0x100 [kvm_amd]
         svm_handle_exit+0xe7/0x180 [kvm_amd]
         kvm_arch_vcpu_ioctl_run+0x1eab/0x2570 [kvm]
         kvm_vcpu_ioctl+0x4c9/0x5b0 [kvm]
         __se_sys_ioctl+0x7a/0xc0
         __x64_sys_ioctl+0x21/0x30
         do_syscall_64+0x41/0x90
         entry_SYSCALL_64_after_hwframe+0x63/0xcd
        RIP: 0033:0x45ca1b
      
      Note, the nested #VMEXIT path has the same flaw, but needs a different
      fix and will be handled separately.
      
      Fixes: 5228eb96
      
       ("KVM: x86: nSVM: implement nested TSC scaling")
      Cc: Maxim Levitsky <mlevitsk@redhat.com>
      Cc: stable@vger.kernel.org
      Link: https://lore.kernel.org/r/20230729011608.1065019-2-seanjc@google.com
      Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      6c1ecfea
    • Sean Christopherson's avatar
      KVM: SVM: Get source vCPUs from source VM for SEV-ES intrahost migration · 5c18ace7
      Sean Christopherson authored
      commit f1187ef2 upstream.
      
      Fix a goof where KVM tries to grab source vCPUs from the destination VM
      when doing intrahost migration.  Grabbing the wrong vCPU not only hoses
      the guest, it also crashes the host due to the VMSA pointer being left
      NULL.
      
        BUG: unable to handle page fault for address: ffffe38687000000
        #PF: supervisor read access in kernel mode
        #PF: error_code(0x0000) - not-present page
        PGD 0 P4D 0
        Oops: 0000 [#1] SMP NOPTI
        CPU: 39 PID: 17143 Comm: sev_migrate_tes Tainted: GO       6.5.0-smp--fff2e47e6c3b-next #151
        Hardware name: Google, Inc. Arcadia_IT_80/Arcadia_IT_80, BIOS 34.28.0 07/10/2023
        RIP: 0010:__free_pages+0x15/0xd0
        RSP: 0018:ffff923fcf6e3c78 EFLAGS: 00010246
        RAX: 0000000000000000 RBX: ffffe38687000000 RCX: 0000000000000100
        RDX: 0000000000000100 RSI: 0000000000000000 RDI: ffffe38687000000
        RBP: ffff923fcf6e3c88 R08: ffff923fcafb0000 R09: 0000000000000000
        R10: 0000000000000000 R11: ffffffff83619b90 R12: ffff923fa9540000
        R13: 0000000000080007 R14: ffff923f6d35d000 R15: 0000000000000000
        FS:  0000000000000000(0000) GS:ffff929d0d7c0000(0000) knlGS:0000000000000000
        CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
        CR2: ffffe38687000000 CR3: 0000005224c34005 CR4: 0000000000770ee0
        PKRU: 55555554
        Call Trace:
         <TASK>
         sev_free_vcpu+0xcb/0x110 [kvm_amd]
         svm_vcpu_free+0x75/0xf0 [kvm_amd]
         kvm_arch_vcpu_destroy+0x36/0x140 [kvm]
         kvm_destroy_vcpus+0x67/0x100 [kvm]
         kvm_arch_destroy_vm+0x161/0x1d0 [kvm]
         kvm_put_kvm+0x276/0x560 [kvm]
         kvm_vm_release+0x25/0x30 [kvm]
         __fput+0x106/0x280
         ____fput+0x12/0x20
         task_work_run+0x86/0xb0
         do_exit+0x2e3/0x9c0
         do_group_exit+0xb1/0xc0
         __x64_sys_exit_group+0x1b/0x20
         do_syscall_64+0x41/0x90
         entry_SYSCALL_64_after_hwframe+0x63/0xcd
         </TASK>
        CR2: ffffe38687000000
      
      Fixes: 6defa24d
      
       ("KVM: SEV: Init target VMCBs in sev_migrate_from")
      Cc: stable@vger.kernel.org
      Cc: Peter Gonda <pgonda@google.com>
      Reviewed-by: default avatarPeter Gonda <pgonda@google.com>
      Reviewed-by: default avatarPankaj Gupta <pankaj.gupta@amd.com>
      Link: https://lore.kernel.org/r/20230825022357.2852133-2-seanjc@google.com
      Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      5c18ace7
    • Sean Christopherson's avatar
      KVM: SVM: Don't inject #UD if KVM attempts to skip SEV guest insn · ba82001e
      Sean Christopherson authored
      commit cb49631a upstream.
      
      Don't inject a #UD if KVM attempts to "emulate" to skip an instruction
      for an SEV guest, and instead resume the guest and hope that it can make
      forward progress.  When commit 04c40f34
      
       ("KVM: SVM: Inject #UD on
      attempted emulation for SEV guest w/o insn buffer") added the completely
      arbitrary #UD behavior, there were no known scenarios where a well-behaved
      guest would induce a VM-Exit that triggered emulation, i.e. it was thought
      that injecting #UD would be helpful.
      
      However, now that KVM (correctly) attempts to re-inject INT3/INTO, e.g. if
      a #NPF is encountered when attempting to deliver the INT3/INTO, an SEV
      guest can trigger emulation without a buffer, through no fault of its own.
      Resuming the guest and retrying the INT3/INTO is architecturally wrong,
      e.g. the vCPU will incorrectly re-hit code #DBs, but for SEV guests there
      is literally no other option that has a chance of making forward progress.
      
      Drop the #UD injection for all "skip" emulation, not just those related to
      INT3/INTO, even though that means that the guest will likely end up in an
      infinite loop instead of getting a #UD (the vCPU may also crash, e.g. if
      KVM emulated everything about an instruction except for advancing RIP).
      There's no evidence that suggests that an unexpected #UD is actually
      better than hanging the vCPU, e.g. a soft-hung vCPU can still respond to
      IRQs and NMIs to generate a backtrace.
      
      Reported-by: default avatarWu Zongyo <wuzongyo@mail.ustc.edu.cn>
      Closes: https://lore.kernel.org/all/8eb933fd-2cf3-d7a9-32fe-2a1d82eac42a@mail.ustc.edu.cn
      Fixes: 6ef88d6e
      
       ("KVM: SVM: Re-inject INT3/INTO instead of retrying the instruction")
      Cc: stable@vger.kernel.org
      Cc: Tom Lendacky <thomas.lendacky@amd.com>
      Link: https://lore.kernel.org/r/20230825013621.2845700-2-seanjc@google.com
      Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      ba82001e
    • Sean Christopherson's avatar
      KVM: SVM: Take and hold ir_list_lock when updating vCPU's Physical ID entry · 3988692a
      Sean Christopherson authored
      commit 4c08e737
      
       upstream.
      
      Hoist the acquisition of ir_list_lock from avic_update_iommu_vcpu_affinity()
      to its two callers, avic_vcpu_load() and avic_vcpu_put(), specifically to
      encapsulate the write to the vCPU's entry in the AVIC Physical ID table.
      This will allow a future fix to pull information from the Physical ID entry
      when updating the IRTE, without potentially consuming stale information,
      i.e. without racing with the vCPU being (un)loaded.
      
      Add a comment to call out that ir_list_lock does NOT protect against
      multiple writers, specifically that reading the Physical ID entry in
      avic_vcpu_put() outside of the lock is safe.
      
      To preserve some semblance of independence from ir_list_lock, keep the
      READ_ONCE() in avic_vcpu_load() even though acuiring the spinlock
      effectively ensures the load(s) will be generated after acquiring the
      lock.
      
      Cc: stable@vger.kernel.org
      Tested-by: default avatarAlejandro Jimenez <alejandro.j.jimenez@oracle.com>
      Reviewed-by: default avatarJoao Martins <joao.m.martins@oracle.com>
      Link: https://lore.kernel.org/r/20230808233132.2499764-2-seanjc@google.com
      Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      3988692a
    • Hamza Mahfooz's avatar
      drm/amd/display: prevent potential division by zero errors · ff536a96
      Hamza Mahfooz authored
      commit 07e388aa upstream.
      
      There are two places in apply_below_the_range() where it's possible for
      a divide by zero error to occur. So, to fix this make sure the divisor
      is non-zero before attempting the computation in both cases.
      
      Cc: stable@vger.kernel.org
      Link: https://gitlab.freedesktop.org/drm/amd/-/issues/2637
      Fixes: a463b263 ("drm/amd/display: Fix frames_to_insert math")
      Fixes: ded6119e
      
       ("drm/amd/display: Reinstate LFC optimization")
      Reviewed-by: default avatarAurabindo Pillai <aurabindo.pillai@amd.com>
      Signed-off-by: default avatarHamza Mahfooz <hamza.mahfooz@amd.com>
      Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      ff536a96
    • Melissa Wen's avatar
      drm/amd/display: enable cursor degamma for DCN3+ DRM legacy gamma · e1769b1d
      Melissa Wen authored
      commit 57a943eb upstream.
      
      For DRM legacy gamma, AMD display manager applies implicit sRGB degamma
      using a pre-defined sRGB transfer function. It works fine for DCN2
      family where degamma ROM and custom curves go to the same color block.
      But, on DCN3+, degamma is split into two blocks: degamma ROM for
      pre-defined TFs and `gamma correction` for user/custom curves and
      degamma ROM settings doesn't apply to cursor plane. To get DRM legacy
      gamma working as expected, enable cursor degamma ROM for implict sRGB
      degamma on HW with this configuration.
      
      Cc: stable@vger.kernel.org
      Link: https://gitlab.freedesktop.org/drm/amd/-/issues/2803
      Fixes: 96b020e2
      
       ("drm/amd/display: check attr flag before set cursor degamma on DCN3+")
      Signed-off-by: default avatarMelissa Wen <mwen@igalia.com>
      Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      e1769b1d
    • William Zhang's avatar
      mtd: rawnand: brcmnand: Fix ECC level field setting for v7.2 controller · 3388ca3a
      William Zhang authored
      commit 2ec2839a upstream.
      
      v7.2 controller has different ECC level field size and shift in the acc
      control register than its predecessor and successor controller. It needs
      to be set specifically.
      
      Fixes: decba6d4
      
       ("mtd: brcmnand: Add v7.2 controller support")
      Signed-off-by: default avatarWilliam Zhang <william.zhang@broadcom.com>
      Reviewed-by: default avatarFlorian Fainelli <florian.fainelli@broadcom.com>
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarMiquel Raynal <miquel.raynal@bootlin.com>
      Link: https://lore.kernel.org/linux-mtd/20230706182909.79151-2-william.zhang@broadcom.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      3388ca3a
    • William Zhang's avatar
      mtd: rawnand: brcmnand: Fix potential false time out warning · 31d42146
      William Zhang authored
      commit 9cc0a598 upstream.
      
      If system is busy during the command status polling function, the driver
      may not get the chance to poll the status register till the end of time
      out and return the premature status.  Do a final check after time out
      happens to ensure reading the correct status.
      
      Fixes: 9d2ee0a6
      
       ("mtd: nand: brcmnand: Check flash #WP pin status before nand erase/program")
      Signed-off-by: default avatarWilliam Zhang <william.zhang@broadcom.com>
      Reviewed-by: default avatarFlorian Fainelli <florian.fainelli@broadcom.com>
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarMiquel Raynal <miquel.raynal@bootlin.com>
      Link: https://lore.kernel.org/linux-mtd/20230706182909.79151-3-william.zhang@broadcom.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      31d42146
    • Linus Walleij's avatar
      mtd: spi-nor: Correct flags for Winbond w25q128 · 7c6ba20a
      Linus Walleij authored
      commit 83e824a4
      
       upstream.
      
      The Winbond "w25q128" (actual vendor name W25Q128JV) has
      exactly the same flags as the sibling device "w25q128jv".
      The devices both require unlocking to enable write access.
      
      The actual product naming between devices vs the Linux
      strings in winbond.c:
      
      0xef4018: "w25q128"   W25Q128JV-IN/IQ/JQ
      0xef7018: "w25q128jv" W25Q128JV-IM/JM
      
      The latter device, "w25q128jv" supports features named DTQ
      and QPI, otherwise it is the same.
      
      Not having the right flags has the annoying side effect
      that write access does not work.
      
      After this patch I can write to the flash on the Inteno
      XG6846 router.
      
      The flash memory also supports dual and quad SPI modes.
      This does not currently manifest, but by turning on SFDP
      parsing, the right SPI modes are emitted in
      /sys/kernel/debug/spi-nor/spi1.0/capabilities
      for this chip, so we also turn on this.
      
      Since we now have determined that SFDP parsing works on
      the device, we also detect the geometry using SFDP.
      
      After this dmesg and sysfs says:
      [    1.062401] spi-nor spi1.0: w25q128 (16384 Kbytes)
      cat erasesize
      65536
      (16384*1024)/65536 = 256 sectors
      
      spi-nor sysfs:
      cat jedec_id
      ef4018
      cat manufacturer
      winbond
      cat partname
      w25q128
      hexdump -v -C sfdp
      00000000  53 46 44 50 05 01 00 ff  00 05 01 10 80 00 00 ff
      00000010  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
      00000020  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
      00000030  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
      00000040  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
      00000050  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
      00000060  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
      00000070  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
      00000080  e5 20 f9 ff ff ff ff 07  44 eb 08 6b 08 3b 42 bb
      00000090  fe ff ff ff ff ff 00 00  ff ff 40 eb 0c 20 0f 52
      000000a0  10 d8 00 00 36 02 a6 00  82 ea 14 c9 e9 63 76 33
      000000b0  7a 75 7a 75 f7 a2 d5 5c  19 f7 4d ff e9 30 f8 80
      
      Cc: stable@vger.kernel.org
      Suggested-by: default avatarMichael Walle <michael@walle.cc>
      Reviewed-by: default avatarMichael Walle <michael@walle.cc>
      Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      Link: https://lore.kernel.org/r/20230718-spi-nor-winbond-w25q128-v5-1-a73653ee46c3@linaro.org
      Signed-off-by: default avatarTudor Ambarus <tudor.ambarus@linaro.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      7c6ba20a
    • William Zhang's avatar
      mtd: rawnand: brcmnand: Fix potential out-of-bounds access in oob write · 45fe4ad7
      William Zhang authored
      commit 5d532441 upstream.
      
      When the oob buffer length is not in multiple of words, the oob write
      function does out-of-bounds read on the oob source buffer at the last
      iteration. Fix that by always checking length limit on the oob buffer
      read and fill with 0xff when reaching the end of the buffer to the oob
      registers.
      
      Fixes: 27c5b17c
      
       ("mtd: nand: add NAND driver "library" for Broadcom STB NAND controller")
      Signed-off-by: default avatarWilliam Zhang <william.zhang@broadcom.com>
      Reviewed-by: default avatarFlorian Fainelli <florian.fainelli@broadcom.com>
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarMiquel Raynal <miquel.raynal@bootlin.com>
      Link: https://lore.kernel.org/linux-mtd/20230706182909.79151-5-william.zhang@broadcom.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      45fe4ad7
    • William Zhang's avatar
      mtd: rawnand: brcmnand: Fix crash during the panic_write · a7e118fc
      William Zhang authored
      commit e66dd317 upstream.
      
      When executing a NAND command within the panic write path, wait for any
      pending command instead of calling BUG_ON to avoid crashing while
      already crashing.
      
      Fixes: 27c5b17c
      
       ("mtd: nand: add NAND driver "library" for Broadcom STB NAND controller")
      Signed-off-by: default avatarWilliam Zhang <william.zhang@broadcom.com>
      Reviewed-by: default avatarFlorian Fainelli <florian.fainelli@broadcom.com>
      Reviewed-by: default avatarKursad Oney <kursad.oney@broadcom.com>
      Reviewed-by: default avatarKamal Dasu <kamal.dasu@broadcom.com>
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarMiquel Raynal <miquel.raynal@bootlin.com>
      Link: https://lore.kernel.org/linux-mtd/20230706182909.79151-4-william.zhang@broadcom.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      a7e118fc
    • Liu Ying's avatar
      drm/mxsfb: Disable overlay plane in mxsfb_plane_overlay_atomic_disable() · 8bf2d4ca
      Liu Ying authored
      commit aa656d48 upstream.
      
      When disabling overlay plane in mxsfb_plane_overlay_atomic_update(),
      overlay plane's framebuffer pointer is NULL.  So, dereferencing it would
      cause a kernel Oops(NULL pointer dereferencing).  Fix the issue by
      disabling overlay plane in mxsfb_plane_overlay_atomic_disable() instead.
      
      Fixes: cb285a53
      
       ("drm: mxsfb: Replace mxsfb_get_fb_paddr() with drm_fb_cma_get_gem_addr()")
      Cc: stable@vger.kernel.org # 5.19+
      Signed-off-by: default avatarLiu Ying <victor.liu@nxp.com>
      Reviewed-by: default avatarMarek Vasut <marex@denx.de>
      Signed-off-by: default avatarMarek Vasut <marex@denx.de>
      Link: https://patchwork.freedesktop.org/patch/msgid/20230612092359.784115-1-victor.liu@nxp.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      8bf2d4ca
    • Anand Jain's avatar
      btrfs: use the correct superblock to compare fsid in btrfs_validate_super · 09974a13
      Anand Jain authored
      commit d167aa76
      
       upstream.
      
      The function btrfs_validate_super() should verify the fsid in the provided
      superblock argument. Because, all its callers expect it to do that.
      
      Such as in the following stack:
      
         write_all_supers()
             sb = fs_info->super_for_commit;
             btrfs_validate_write_super(.., sb)
               btrfs_validate_super(.., sb, ..)
      
         scrub_one_super()
      	btrfs_validate_super(.., sb, ..)
      
      And
         check_dev_super()
      	btrfs_validate_super(.., sb, ..)
      
      However, it currently verifies the fs_info::super_copy::fsid instead,
      which is not correct.  Fix this using the correct fsid in the superblock
      argument.
      
      CC: stable@vger.kernel.org # 5.4+
      Reviewed-by: default avatarJohannes Thumshirn <johannes.thumshirn@wdc.com>
      Tested-by: default avatarGuilherme G. Piccoli <gpiccoli@igalia.com>
      Signed-off-by: default avatarAnand Jain <anand.jain@oracle.com>
      Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
      Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      09974a13
    • Naohiro Aota's avatar
      btrfs: zoned: re-enable metadata over-commit for zoned mode · b692f7d1
      Naohiro Aota authored
      commit 5b135b38 upstream.
      
      Now that, we can re-enable metadata over-commit. As we moved the activation
      from the reservation time to the write time, we no longer need to ensure
      all the reserved bytes is properly activated.
      
      Without the metadata over-commit, it suffers from lower performance because
      it needs to flush the delalloc items more often and allocate more block
      groups. Re-enabling metadata over-commit will solve the issue.
      
      Fixes: 79417d04
      
       ("btrfs: zoned: disable metadata overcommit for zoned")
      CC: stable@vger.kernel.org # 6.1+
      Reviewed-by: default avatarJohannes Thumshirn <johannes.thumshirn@wdc.com>
      Signed-off-by: default avatarNaohiro Aota <naohiro.aota@wdc.com>
      Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      b692f7d1
    • Josef Bacik's avatar
      btrfs: set page extent mapped after read_folio in relocate_one_page · 08daa38c
      Josef Bacik authored
      commit e7f1326c upstream.
      
      One of the CI runs triggered the following panic
      
        assertion failed: PagePrivate(page) && page->private, in fs/btrfs/subpage.c:229
        ------------[ cut here ]------------
        kernel BUG at fs/btrfs/subpage.c:229!
        Internal error: Oops - BUG: 00000000f2000800 [#1] SMP
        CPU: 0 PID: 923660 Comm: btrfs Not tainted 6.5.0-rc3+ #1
        pstate: 61400005 (nZCv daif +PAN -UAO -TCO +DIT -SSBS BTYPE=--)
        pc : btrfs_subpage_assert+0xbc/0xf0
        lr : btrfs_subpage_assert+0xbc/0xf0
        sp : ffff800093213720
        x29: ffff800093213720 x28: ffff8000932138b4 x27: 000000000c280000
        x26: 00000001b5d00000 x25: 000000000c281000 x24: 000000000c281fff
        x23: 0000000000001000 x22: 0000000000000000 x21: ffffff42b95bf880
        x20: ffff42b9528e0000 x19: 0000000000001000 x18: ffffffffffffffff
        x17: 667274622f736620 x16: 6e69202c65746176 x15: 0000000000000028
        x14: 0000000000000003 x13: 00000000002672d7 x12: 0000000000000000
        x11: ffffcd3f0ccd9204 x10: ffffcd3f0554ae50 x9 : ffffcd3f0379528c
        x8 : ffff800093213428 x7 : 0000000000000000 x6 : ffffcd3f091771e8
        x5 : ffff42b97f333948 x4 : 0000000000000000 x3 : 0000000000000000
        x2 : 0000000000000000 x1 : ffff42b9556cde80 x0 : 000000000000004f
        Call trace:
         btrfs_subpage_assert+0xbc/0xf0
         btrfs_subpage_set_dirty+0x38/0xa0
         btrfs_page_set_dirty+0x58/0x88
         relocate_one_page+0x204/0x5f0
         relocate_file_extent_cluster+0x11c/0x180
         relocate_data_extent+0xd0/0xf8
         relocate_block_group+0x3d0/0x4e8
         btrfs_relocate_block_group+0x2d8/0x490
         btrfs_relocate_chunk+0x54/0x1a8
         btrfs_balance+0x7f4/0x1150
         btrfs_ioctl+0x10f0/0x20b8
         __arm64_sys_ioctl+0x120/0x11d8
         invoke_syscall.constprop.0+0x80/0xd8
         do_el0_svc+0x6c/0x158
         el0_svc+0x50/0x1b0
         el0t_64_sync_handler+0x120/0x130
         el0t_64_sync+0x194/0x198
        Code: 91098021 b0007fa0 91346000 97e9c6d2 (d4210000)
      
      This is the same problem outlined in 17b17fcd
      
       ("btrfs:
      set_page_extent_mapped after read_folio in btrfs_cont_expand") , and the
      fix is the same.  I originally looked for the same pattern elsewhere in
      our code, but mistakenly skipped over this code because I saw the page
      cache readahead before we set_page_extent_mapped, not realizing that
      this was only in the !page case, that we can still end up with a
      !uptodate page and then do the btrfs_read_folio further down.
      
      The fix here is the same as the above mentioned patch, move the
      set_page_extent_mapped call to after the btrfs_read_folio() block to
      make sure that we have the subpage blocksize stuff setup properly before
      using the page.
      
      CC: stable@vger.kernel.org # 6.1+
      Reviewed-by: default avatarFilipe Manana <fdmanana@suse.com>
      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>
      08daa38c
    • Filipe Manana's avatar
      btrfs: don't start transaction when joining with TRANS_JOIN_NOSTART · 91f6a538
      Filipe Manana authored
      commit 4490e803 upstream.
      
      When joining a transaction with TRANS_JOIN_NOSTART, if we don't find a
      running transaction we end up creating one. This goes against the purpose
      of TRANS_JOIN_NOSTART which is to join a running transaction if its state
      is at or below the state TRANS_STATE_COMMIT_START, otherwise return an
      -ENOENT error and don't start a new transaction. So fix this to not create
      a new transaction if there's no running transaction at or below that
      state.
      
      CC: stable@vger.kernel.org # 4.14+
      Fixes: a6d155d2
      
       ("Btrfs: fix deadlock between fiemap and transaction commits")
      Signed-off-by: default avatarFilipe Manana <fdmanana@suse.com>
      Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      91f6a538
    • Boris Burkov's avatar
      btrfs: free qgroup rsv on io failure · f933a1c4
      Boris Burkov authored
      commit e28b0211
      
       upstream.
      
      If we do a write whose bio suffers an error, we will never reclaim the
      qgroup reserved space for it. We allocate the space in the write_iter
      codepath, then release the reservation as we allocate the ordered
      extent, but we only create a delayed ref if the ordered extent finishes.
      If it has an error, we simply leak the rsv. This is apparent in running
      any error injecting (dmerror) fstests like btrfs/146 or btrfs/160. Such
      tests fail due to dmesg on umount complaining about the leaked qgroup
      data space.
      
      When we clean up other aspects of space on failed ordered_extents, also
      free the qgroup rsv.
      
      Reviewed-by: default avatarJosef Bacik <josef@toxicpanda.com>
      CC: stable@vger.kernel.org # 5.10+
      Signed-off-by: default avatarBoris Burkov <boris@bur.io>
      Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      f933a1c4
    • Boris Burkov's avatar
      btrfs: fix start transaction qgroup rsv double free · cdc3ba29
      Boris Burkov authored
      commit a6496849
      
       upstream.
      
      btrfs_start_transaction reserves metadata space of the PERTRANS type
      before it identifies a transaction to start/join. This allows flushing
      when reserving that space without a deadlock. However, it results in a
      race which temporarily breaks qgroup rsv accounting.
      
      T1                                              T2
      start_transaction
      do_stuff
                                                  start_transaction
                                                      qgroup_reserve_meta_pertrans
      commit_transaction
          qgroup_free_meta_all_pertrans
                                                  hit an error starting txn
                                                  goto reserve_fail
                                                  qgroup_free_meta_pertrans (already freed!)
      
      The basic issue is that there is nothing preventing another commit from
      committing before start_transaction finishes (in fact sometimes we
      intentionally wait for it) so any error path that frees the reserve is
      at risk of this race.
      
      While this exact space was getting freed anyway, and it's not a huge
      deal to double free it (just a warning, the free code catches this), it
      can result in incorrectly freeing some other pertrans reservation in
      this same reservation, which could then lead to spuriously granting
      reservations we might not have the space for. Therefore, I do believe it
      is worth fixing.
      
      To fix it, use the existing prealloc->pertrans conversion mechanism.
      When we first reserve the space, we reserve prealloc space and only when
      we are sure we have a transaction do we convert it to pertrans. This way
      any racing commits do not blow away our reservation, but we still get a
      pertrans reservation that is freed when _this_ transaction gets committed.
      
      This issue can be reproduced by running generic/269 with either qgroups
      or squotas enabled via mkfs on the scratch device.
      
      Reviewed-by: default avatarJosef Bacik <josef@toxicpanda.com>
      CC: stable@vger.kernel.org # 5.10+
      Signed-off-by: default avatarBoris Burkov <boris@bur.io>
      Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      cdc3ba29
    • Naohiro Aota's avatar
      btrfs: zoned: do not zone finish data relocation block group · 59c38f05
      Naohiro Aota authored
      commit 332581bd upstream.
      
      When multiple writes happen at once, we may need to sacrifice a currently
      active block group to be zone finished for a new allocation. We choose a
      block group with the least free space left, and zone finish it.
      
      To do the finishing, we need to send IOs for already allocated region
      and wait for them and on-going IOs. Otherwise, these IOs fail because the
      zone is already finished at the time the IO reach a device.
      
      However, if a block group dedicated to the data relocation is zone
      finished, there is a chance that finishing it before an ongoing write IO
      reaches the device. That is because there is timing gap between an
      allocation is done (block_group->reservations == 0, as pre-allocation is
      done) and an ordered extent is created when the relocation IO starts.
      Thus, if we finish the zone between them, we can fail the IOs.
      
      We cannot simply use "fs_info->data_reloc_bg == block_group->start" to
      avoid the zone finishing. Because, the data_reloc_bg may already switch to
      a new block group, while there are still ongoing write IOs to the old
      data_reloc_bg.
      
      So, this patch reworks the BLOCK_GROUP_FLAG_ZONED_DATA_RELOC bit to
      indicate there is a data relocation allocation and/or ongoing write to the
      block group. The bit is set on allocation and cleared in end_io function of
      the last IO for the currently allocated region.
      
      To change the timing of the bit setting also solves the issue that the bit
      being left even after there is no IO going on. With the current code, if
      the data_reloc_bg switches after the last IO to the current data_reloc_bg,
      the bit is set at this timing and there is no one clearing that bit. As a
      result, that block group is kept unallocatable for anything.
      
      Fixes: 343d8a30 ("btrfs: zoned: prevent allocation from previous data relocation BG")
      Fixes: 74e91b12
      
       ("btrfs: zoned: zone finish unused block group")
      CC: stable@vger.kernel.org # 6.1+
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      Reviewed-by: default avatarJohannes Thumshirn <johannes.thumshirn@wdc.com>
      Signed-off-by: default avatarNaohiro Aota <naohiro.aota@wdc.com>
      Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      59c38f05
    • ruanmeisi's avatar
      fuse: nlookup missing decrement in fuse_direntplus_link · ef819c2f
      ruanmeisi authored
      commit b8bd342d
      
       upstream.
      
      During our debugging of glusterfs, we found an Assertion failed error:
      inode_lookup >= nlookup, which was caused by the nlookup value in the
      kernel being greater than that in the FUSE file system.
      
      The issue was introduced by fuse_direntplus_link, where in the function,
      fuse_iget increments nlookup, and if d_splice_alias returns failure,
      fuse_direntplus_link returns failure without decrementing nlookup
      https://github.com/gluster/glusterfs/pull/4081
      
      Signed-off-by: default avatarruanmeisi <ruan.meisi@zte.com.cn>
      Fixes: 0b05b183
      
       ("fuse: implement NFS-like readdirplus support")
      Cc: <stable@vger.kernel.org> # v3.9
      Signed-off-by: default avatarMiklos Szeredi <mszeredi@redhat.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      ef819c2f
    • Damien Le Moal's avatar
      ata: pata_ftide010: Add missing MODULE_DESCRIPTION · 6694be11
      Damien Le Moal authored
      commit 7274eef5 upstream.
      
      Add the missing MODULE_DESCRIPTION() to avoid warnings such as:
      
      WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/ata/pata_ftide010.o
      
      when compiling with W=1.
      
      Fixes: be4e456e
      
       ("ata: Add driver for Faraday Technology FTIDE010")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarDamien Le Moal <dlemoal@kernel.org>
      Reviewed-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      6694be11