Skip to content
  1. Jan 04, 2023
    • Mario Limonciello's avatar
      ACPI: x86: s2idle: Force AMD GUID/_REV 2 on HP Elitebook 865 · 577821f7
      Mario Limonciello authored
      commit 3ea45390
      
       upstream.
      
      HP Elitebook 865 supports both the AMD GUID w/ _REV 2 and Microsoft
      GUID with _REV 0. Both have very similar code but the AMD GUID
      has a special workaround that is specific to a problem with
      spurious wakeups on systems with Qualcomm WLAN.
      
      This is believed to be a bug in the Qualcomm WLAN F/W (it doesn't
      affect any other WLAN H/W). If this WLAN firmware is fixed this
      quirk can be dropped.
      
      Cc: stable@vger.kernel.org # 6.1
      Signed-off-by: default avatarMario Limonciello <mario.limonciello@amd.com>
      Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      577821f7
    • Aditya Garg's avatar
      hfsplus: fix bug causing custom uid and gid being unable to be assigned with mount · 0478b94c
      Aditya Garg authored
      commit 9f2b5deb
      
       upstream.
      
      Despite specifying UID and GID in mount command, the specified UID and GID
      were not being assigned. This patch fixes this issue.
      
      Link: https://lkml.kernel.org/r/C0264BF5-059C-45CF-B8DA-3A3BD2C803A2@live.com
      Signed-off-by: default avatarAditya Garg <gargaditya08@live.com>
      Reviewed-by: default avatarViacheslav Dubeyko <slava@dubeyko.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>
      0478b94c
    • Qiujun Huang's avatar
      pstore/zone: Use GFP_ATOMIC to allocate zone buffer · 23ac2a31
      Qiujun Huang authored
      commit 99b3b837
      
       upstream.
      
      There is a case found when triggering a panic_on_oom, pstore fails to dump
      kmsg. Because psz_kmsg_write_record can't get the new buffer.
      
      Handle this by using GFP_ATOMIC to allocate a buffer at lower watermark.
      
      Signed-off-by: default avatarQiujun Huang <hqjagain@gmail.com>
      Fixes: 335426c6
      
       ("pstore/zone: Provide way to skip "broken" zone for MTD devices")
      Cc: WeiXiong Liao <gmpy.liaowx@gmail.com>
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarKees Cook <keescook@chromium.org>
      Link: https://lore.kernel.org/r/CAJRQjofRCF7wjrYmw3D7zd5QZnwHQq+F8U-mJDJ6NZ4bddYdLA@mail.gmail.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      23ac2a31
    • Luca Stefani's avatar
      pstore: Properly assign mem_type property · 5c3a4cdc
      Luca Stefani authored
      commit beca3e31 upstream.
      
      If mem-type is specified in the device tree
      it would end up overriding the record_size
      field instead of populating mem_type.
      
      As record_size is currently parsed after the
      improper assignment with default size 0 it
      continued to work as expected regardless of the
      value found in the device tree.
      
      Simply changing the target field of the struct
      is enough to get mem-type working as expected.
      
      Fixes: 9d843e8f
      
       ("pstore: Add mem_type property DT parsing support")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarLuca Stefani <luca@osomprivacy.com>
      Signed-off-by: default avatarKees Cook <keescook@chromium.org>
      Link: https://lore.kernel.org/r/20221222131049.286288-1-luca@osomprivacy.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      5c3a4cdc
    • Arnd Bergmann's avatar
      kmsan: include linux/vmalloc.h · 2cec280c
      Arnd Bergmann authored
      commit aaa746ad upstream.
      
      This is needed for the vmap/vunmap declarations:
      
      mm/kmsan/kmsan_test.c:316:9: error: implicit declaration of function 'vmap' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
              vbuf = vmap(pages, npages, VM_MAP, PAGE_KERNEL);
                     ^
      mm/kmsan/kmsan_test.c:316:29: error: use of undeclared identifier 'VM_MAP'
              vbuf = vmap(pages, npages, VM_MAP, PAGE_KERNEL);
                                         ^
      mm/kmsan/kmsan_test.c:322:3: error: implicit declaration of function 'vunmap' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
                      vunmap(vbuf);
                      ^
      
      Link: https://lkml.kernel.org/r/20221215163046.4079767-1-arnd@kernel.org
      Fixes: 8ed691b0
      
       ("kmsan: add tests for KMSAN")
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Reviewed-by: default avatarAlexander Potapenko <glider@google.com>
      Cc: Dmitry Vyukov <dvyukov@google.com>
      Cc: Marco Elver <elver@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>
      2cec280c
    • Arnd Bergmann's avatar
      kmsan: export kmsan_handle_urb · dace33a1
      Arnd Bergmann authored
      commit 7ba594d7 upstream.
      
      USB support can be in a loadable module, and this causes a link failure
      with KMSAN:
      
      ERROR: modpost: "kmsan_handle_urb" [drivers/usb/core/usbcore.ko] undefined!
      
      Export the symbol so it can be used by this module.
      
      Link: https://lkml.kernel.org/r/20221215162710.3802378-1-arnd@kernel.org
      Fixes: 553a8018
      
       ("kmsan: handle memory sent to/from USB")
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Reviewed-by: default avatarAlexander Potapenko <glider@google.com>
      Cc: Dmitry Vyukov <dvyukov@google.com>
      Cc: Marco Elver <elver@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>
      dace33a1
    • Mathieu Desnoyers's avatar
      mm/mempolicy: fix memory leak in set_mempolicy_home_node system call · 0ce4cc6d
      Mathieu Desnoyers authored
      commit 38ce7c9b upstream.
      
      When encountering any vma in the range with policy other than MPOL_BIND or
      MPOL_PREFERRED_MANY, an error is returned without issuing a mpol_put on
      the policy just allocated with mpol_dup().
      
      This allows arbitrary users to leak kernel memory.
      
      Link: https://lkml.kernel.org/r/20221215194621.202816-1-mathieu.desnoyers@efficios.com
      Fixes: c6018b4b
      
       ("mm/mempolicy: add set_mempolicy_home_node syscall")
      Signed-off-by: default avatarMathieu Desnoyers <mathieu.desnoyers@efficios.com>
      Reviewed-by: default avatarRandy Dunlap <rdunlap@infradead.org>
      Reviewed-by: default avatar"Huang, Ying" <ying.huang@intel.com>
      Reviewed-by: default avatarAneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
      Acked-by: default avatarMichal Hocko <mhocko@suse.com>
      Cc: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
      Cc: Dave Hansen <dave.hansen@linux.intel.com>
      Cc: Feng Tang <feng.tang@intel.com>
      Cc: Michal Hocko <mhocko@kernel.org>
      Cc: Andrea Arcangeli <aarcange@redhat.com>
      Cc: Mel Gorman <mgorman@techsingularity.net>
      Cc: Mike Kravetz <mike.kravetz@oracle.com>
      Cc: Randy Dunlap <rdunlap@infradead.org>
      Cc: Vlastimil Babka <vbabka@suse.cz>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Dan Williams <dan.j.williams@intel.com>
      Cc: Huang Ying <ying.huang@intel.com>
      Cc: <stable@vger.kernel.org>	[5.17+]
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      0ce4cc6d
    • Vlastimil Babka's avatar
      mm, mremap: fix mremap() expanding vma with addr inside vma · 4d528dab
      Vlastimil Babka authored
      commit 6f12be79 upstream.
      
      Since 6.1 we have noticed random rpm install failures that were tracked to
      mremap() returning -ENOMEM and to commit ca3d76b0
      
       ("mm: add merging
      after mremap resize").
      
      The problem occurs when mremap() expands a VMA in place, but using an
      starting address that's not vma->vm_start, but somewhere in the middle.
      The extension_pgoff calculation introduced by the commit is wrong in that
      case, so vma_merge() fails due to pgoffs not being compatible.  Fix the
      calculation.
      
      By the way it seems that the situations, where rpm now expands a vma from
      the middle, were made possible also due to that commit, thanks to the
      improved vma merging.  Yet it should work just fine, except for the buggy
      calculation.
      
      Link: https://lkml.kernel.org/r/20221216163227.24648-1-vbabka@suse.cz
      Reported-by: default avatarJiri Slaby <jirislaby@kernel.org>
        Link: https://bugzilla.suse.com/show_bug.cgi?id=1206359
      Fixes: ca3d76b0
      
       ("mm: add merging after mremap resize")
      Signed-off-by: default avatarVlastimil Babka <vbabka@suse.cz>
      Cc: Jakub Matěna <matenajakub@gmail.com>
      Cc: "Kirill A . Shutemov" <kirill@shutemov.name>
      Cc: Liam Howlett <liam.howlett@oracle.com>
      Cc: Matthew Wilcox <willy@infradead.org>
      Cc: Mel Gorman <mgorman@techsingularity.net>
      Cc: Michal Hocko <mhocko@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>
      4d528dab
    • Mel Gorman's avatar
      rtmutex: Add acquire semantics for rtmutex lock acquisition slow path · 97e14ae0
      Mel Gorman authored
      commit 1c0908d8 upstream.
      
      Jan Kara reported the following bug triggering on 6.0.5-rt14 running dbench
      on XFS on arm64.
      
       kernel BUG at fs/inode.c:625!
       Internal error: Oops - BUG: 0 [#1] PREEMPT_RT SMP
       CPU: 11 PID: 6611 Comm: dbench Tainted: G            E   6.0.0-rt14-rt+ #1
       pc : clear_inode+0xa0/0xc0
       lr : clear_inode+0x38/0xc0
       Call trace:
        clear_inode+0xa0/0xc0
        evict+0x160/0x180
        iput+0x154/0x240
        do_unlinkat+0x184/0x300
        __arm64_sys_unlinkat+0x48/0xc0
        el0_svc_common.constprop.4+0xe4/0x2c0
        do_el0_svc+0xac/0x100
        el0_svc+0x78/0x200
        el0t_64_sync_handler+0x9c/0xc0
        el0t_64_sync+0x19c/0x1a0
      
      It also affects 6.1-rc7-rt5 and affects a preempt-rt fork of 5.14 so this
      is likely a bug that existed forever and only became visible when ARM
      support was added to preempt-rt. The same problem does not occur on x86-64
      and he also reported that converting sb->s_inode_wblist_lock to
      raw_spinlock_t makes the problem disappear indicating that the RT spinlock
      variant is the problem.
      
      Which in turn means that RT mutexes on ARM64 and any other weakly ordered
      architecture are affected by this independent of RT.
      
      Will Deacon observed:
      
        "I'd be more inclined to be suspicious of the slowpath tbh, as we need to
         make sure that we have acquire semantics on all paths where the lock can
         be taken. Looking at the rtmutex code, this really isn't obvious to me
         -- for example, try_to_take_rt_mutex() appears to be able to return via
         the 'takeit' label without acquire semantics and it looks like we might
         be relying on the caller's subsequent _unlock_ of the wait_lock for
         ordering, but that will give us release semantics which aren't correct."
      
      Sebastian Andrzej Siewior prototyped a fix that does work based on that
      comment but it was a little bit overkill and added some fences that should
      not be necessary.
      
      The lock owner is updated with an IRQ-safe raw spinlock held, but the
      spin_unlock does not provide acquire semantics which are needed when
      acquiring a mutex.
      
      Adds the necessary acquire semantics for lock owner updates in the slow path
      acquisition and the waiter bit logic.
      
      It successfully completed 10 iterations of the dbench workload while the
      vanilla kernel fails on the first iteration.
      
      [ bigeasy@linutronix.de: Initial prototype fix ]
      
      Fixes: 700318d1 ("locking/rtmutex: Use acquire/release semantics")
      Fixes: 23f78d4a
      
       ("[PATCH] pi-futex: rt mutex core")
      Reported-by: default avatarJan Kara <jack@suse.cz>
      Signed-off-by: default avatarMel Gorman <mgorman@techsingularity.net>
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Cc: stable@vger.kernel.org
      Link: https://lore.kernel.org/r/20221202100223.6mevpbl7i6x5udfd@techsingularity.net
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      97e14ae0
    • Mathieu Desnoyers's avatar
      futex: Fix futex_waitv() hrtimer debug object leak on kcalloc error · 09727bc3
      Mathieu Desnoyers authored
      commit 94cd8fa0 upstream.
      
      In a scenario where kcalloc() fails to allocate memory, the futex_waitv
      system call immediately returns -ENOMEM without invoking
      destroy_hrtimer_on_stack(). When CONFIG_DEBUG_OBJECTS_TIMERS=y, this
      results in leaking a timer debug object.
      
      Fixes: bf69bad3
      
       ("futex: Implement sys_futex_waitv()")
      Signed-off-by: default avatarMathieu Desnoyers <mathieu.desnoyers@efficios.com>
      Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
      Reviewed-by: default avatarDavidlohr Bueso <dave@stgolabs.net>
      Cc: stable@vger.kernel.org
      Cc: stable@vger.kernel.org # v5.16+
      Link: https://lore.kernel.org/r/20221214222008.200393-1-mathieu.desnoyers@efficios.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      09727bc3
    • Terry Junge's avatar
      HID: plantronics: Additional PIDs for double volume key presses quirk · c86c5cf6
      Terry Junge authored
      [ Upstream commit 3d57f36c
      
       ]
      
      I no longer work for Plantronics (aka Poly, aka HP) and do not have
      access to the headsets in order to test. However, as noted by Maxim,
      the other 32xx models that share the same base code set as the 3220
      would need the same quirk. This patch adds the PIDs for the rest of
      the Blackwire 32XX product family that require the quirk.
      
      Plantronics Blackwire 3210 Series (047f:c055)
      Plantronics Blackwire 3215 Series (047f:c057)
      Plantronics Blackwire 3225 Series (047f:c058)
      
      Quote from previous patch by Maxim Mikityanskiy
      Plantronics Blackwire 3220 Series (047f:c056) sends HID reports twice
      for each volume key press. This patch adds a quirk to hid-plantronics
      for this product ID, which will ignore the second volume key press if
      it happens within 5 ms from the last one that was handled.
      
      The patch was tested on the mentioned model only, it shouldn't affect
      other models, however, this quirk might be needed for them too.
      Auto-repeat (when a key is held pressed) is not affected, because the
      rate is about 3 times per second, which is far less frequent than once
      in 5 ms.
      End quote
      
      Signed-off-by: default avatarTerry Junge <linuxhid@cosmicgizmosystems.com>
      Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      c86c5cf6
    • José Expósito's avatar
      HID: multitouch: fix Asus ExpertBook P2 P2451FA trackpoint · 79f9b467
      José Expósito authored
      [ Upstream commit 4eab1c2f ]
      
      The HID descriptor of this device contains two mouse collections, one
      for mouse emulation and the other for the trackpoint.
      
      Both collections get merged and, because the first one defines X and Y,
      the movemenent events reported by the trackpoint collection are
      ignored.
      
      Set the MT_CLS_WIN_8_FORCE_MULTI_INPUT class for this device to be able
      to receive its reports.
      
      This fix is similar to/based on commit 40d5bb87
      
       ("HID: multitouch:
      enable multi-input as a quirk for some devices").
      
      Link: https://gitlab.freedesktop.org/libinput/libinput/-/issues/825
      Reported-by: default avatarAkito <the@akito.ooo>
      Tested-by: default avatarAkito <the@akito.ooo>
      Signed-off-by: default avatarJosé Expósito <jose.exposito89@gmail.com>
      Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      79f9b467
    • wuqiang's avatar
      kprobes: kretprobe events missing on 2-core KVM guest · d465fa2a
      wuqiang authored
      [ Upstream commit 3b7ddab8
      
       ]
      
      Default value of maxactive is set as num_possible_cpus() for nonpreemptable
      systems. For a 2-core system, only 2 kretprobe instances would be allocated
      in default, then these 2 instances for execve kretprobe are very likely to
      be used up with a pipelined command.
      
      Here's the testcase: a shell script was added to crontab, and the content
      of the script is:
      
        #!/bin/sh
        do_something_magic `tr -dc a-z < /dev/urandom | head -c 10`
      
      cron will trigger a series of program executions (4 times every hour). Then
      events loss would be noticed normally after 3-4 hours of testings.
      
      The issue is caused by a burst of series of execve requests. The best number
      of kretprobe instances could be different case by case, and should be user's
      duty to determine, but num_possible_cpus() as the default value is inadequate
      especially for systems with small number of cpus.
      
      This patch enables the logic for preemption as default, thus increases the
      minimum of maxactive to 10 for nonpreemptable systems.
      
      Link: https://lore.kernel.org/all/20221110081502.492289-1-wuqiang.matt@bytedance.com/
      
      Signed-off-by: default avatarwuqiang <wuqiang.matt@bytedance.com>
      Reviewed-by: default avatarSolar Designer <solar@openwall.com>
      Acked-by: default avatarMasami Hiramatsu (Google) <mhiramat@kernel.org>
      Signed-off-by: default avatarMasami Hiramatsu (Google) <mhiramat@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      d465fa2a
    • Dai Ngo's avatar
      NFSD: fix use-after-free in __nfs42_ssc_open() · 650b69b1
      Dai Ngo authored
      [ Upstream commit 75333d48
      
       ]
      
      Problem caused by source's vfsmount being unmounted but remains
      on the delayed unmount list. This happens when nfs42_ssc_open()
      return errors.
      
      Fixed by removing nfsd4_interssc_connect(), leave the vfsmount
      for the laundromat to unmount when idle time expires.
      
      We don't need to call nfs_do_sb_deactive when nfs42_ssc_open
      return errors since the file was not opened so nfs_server->active
      was not incremented. Same as in nfsd4_copy, if we fail to
      launch nfsd4_do_async_copy thread then there's no need to
      call nfs_do_sb_deactive
      
      Reported-by: default avatarXingyuan Mo <hdthky0@gmail.com>
      Signed-off-by: default avatarDai Ngo <dai.ngo@oracle.com>
      Tested-by: default avatarXingyuan Mo <hdthky0@gmail.com>
      Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      650b69b1
    • Kees Cook's avatar
      rtc: msc313: Fix function prototype mismatch in msc313_rtc_probe() · ba50fee6
      Kees Cook authored
      [ Upstream commit 21b8a1dd
      
       ]
      
      With clang's kernel control flow integrity (kCFI, CONFIG_CFI_CLANG),
      indirect call targets are validated against the expected function
      pointer prototype to make sure the call target is valid to help mitigate
      ROP attacks. If they are not identical, there is a failure at run time,
      which manifests as either a kernel panic or thread getting killed.
      
      msc313_rtc_probe() was passing clk_disable_unprepare() directly, which
      did not have matching prototypes for devm_add_action_or_reset()'s
      callback argument. Refactor to use devm_clk_get_enabled() instead.
      
      This was found as a result of Clang's new -Wcast-function-type-strict
      flag, which is more sensitive than the simpler -Wcast-function-type,
      which only checks for type width mismatches.
      
      Reported-by: default avatarkernel test robot <lkp@intel.com>
      Link: https://lore.kernel.org/lkml/202211041527.HD8TLSE1-lkp@intel.com
      Suggested-by: default avatarChristophe JAILLET <christophe.jaillet@wanadoo.fr>
      Cc: Daniel Palmer <daniel@thingy.jp>
      Cc: Romain Perier <romain.perier@gmail.com>
      Cc: Alessandro Zummo <a.zummo@towertech.it>
      Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>
      Cc: linux-arm-kernel@lists.infradead.org
      Cc: linux-rtc@vger.kernel.org
      Signed-off-by: default avatarKees Cook <keescook@chromium.org>
      Reviewed-by: default avatarDaniel Palmer <daniel@thingy.jp>
      Tested-by: default avatarDaniel Palmer <daniel@thingy.jp>
      Link: https://lore.kernel.org/r/20221202184525.gonna.423-kees@kernel.org
      Signed-off-by: default avatarAlexandre Belloni <alexandre.belloni@bootlin.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      ba50fee6
    • Nathan Lynch's avatar
      powerpc/rtas: avoid scheduling in rtas_os_term() · 482d990a
      Nathan Lynch authored
      [ Upstream commit 6c606e57
      
       ]
      
      It's unsafe to use rtas_busy_delay() to handle a busy status from
      the ibm,os-term RTAS function in rtas_os_term():
      
      Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b
      BUG: sleeping function called from invalid context at arch/powerpc/kernel/rtas.c:618
      in_atomic(): 1, irqs_disabled(): 1, non_block: 0, pid: 1, name: swapper/0
      preempt_count: 2, expected: 0
      CPU: 7 PID: 1 Comm: swapper/0 Tainted: G      D            6.0.0-rc5-02182-gf8553a572277-dirty #9
      Call Trace:
      [c000000007b8f000] [c000000001337110] dump_stack_lvl+0xb4/0x110 (unreliable)
      [c000000007b8f040] [c0000000002440e4] __might_resched+0x394/0x3c0
      [c000000007b8f0e0] [c00000000004f680] rtas_busy_delay+0x120/0x1b0
      [c000000007b8f100] [c000000000052d04] rtas_os_term+0xb8/0xf4
      [c000000007b8f180] [c0000000001150fc] pseries_panic+0x50/0x68
      [c000000007b8f1f0] [c000000000036354] ppc_panic_platform_handler+0x34/0x50
      [c000000007b8f210] [c0000000002303c4] notifier_call_chain+0xd4/0x1c0
      [c000000007b8f2b0] [c0000000002306cc] atomic_notifier_call_chain+0xac/0x1c0
      [c000000007b8f2f0] [c0000000001d62b8] panic+0x228/0x4d0
      [c000000007b8f390] [c0000000001e573c] do_exit+0x140c/0x1420
      [c000000007b8f480] [c0000000001e586c] make_task_dead+0xdc/0x200
      
      Use rtas_busy_delay_time() instead, which signals without side effects
      whether to attempt the ibm,os-term RTAS call again.
      
      Signed-off-by: default avatarNathan Lynch <nathanl@linux.ibm.com>
      Reviewed-by: default avatarNicholas Piggin <npiggin@gmail.com>
      Reviewed-by: default avatarAndrew Donnellan <ajd@linux.ibm.com>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/20221118150751.469393-5-nathanl@linux.ibm.com
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      482d990a
    • Nathan Lynch's avatar
      powerpc/rtas: avoid device tree lookups in rtas_os_term() · 464d10e8
      Nathan Lynch authored
      [ Upstream commit ed2213bf
      
       ]
      
      rtas_os_term() is called during panic. Its behavior depends on a couple
      of conditions in the /rtas node of the device tree, the traversal of
      which entails locking and local IRQ state changes. If the kernel panics
      while devtree_lock is held, rtas_os_term() as currently written could
      hang.
      
      Instead of discovering the relevant characteristics at panic time,
      cache them in file-static variables at boot. Note the lookup for
      "ibm,extended-os-term" is converted to of_property_read_bool() since it
      is a boolean property, not an RTAS function token.
      
      Signed-off-by: default avatarNathan Lynch <nathanl@linux.ibm.com>
      Reviewed-by: default avatarNicholas Piggin <npiggin@gmail.com>
      Reviewed-by: default avatarAndrew Donnellan <ajd@linux.ibm.com>
      [mpe: Incorporate suggested change from Nick]
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/20221118150751.469393-4-nathanl@linux.ibm.com
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      464d10e8
    • Ricardo Ribalda's avatar
      iommu/mediatek: Fix crash on isr after kexec() · 85cc8a18
      Ricardo Ribalda authored
      [ Upstream commit 00ef8885
      
       ]
      
      If the system is rebooted via isr(), the IRQ handler might
      be triggered before the domain is initialized. Resulting on
      an invalid memory access error.
      
      Fix:
      [    0.500930] Unable to handle kernel read from unreadable memory at virtual address 0000000000000070
      [    0.501166] Call trace:
      [    0.501174]  report_iommu_fault+0x28/0xfc
      [    0.501180]  mtk_iommu_isr+0x10c/0x1c0
      
      Signed-off-by: default avatarRicardo Ribalda <ribalda@chromium.org>
      Reviewed-by: default avatarAngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
      Reviewed-by: default avatarRobin Murphy <robin.murphy@arm.com>
      Link: https://lore.kernel.org/r/20221125-mtk-iommu-v2-0-e168dff7d43e@chromium.org
      [ joro: Fixed spelling in commit message ]
      Signed-off-by: default avatarJoerg Roedel <jroedel@suse.de>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      85cc8a18
    • Christophe Leroy's avatar
      objtool: Fix SEGFAULT · fcee8a2d
      Christophe Leroy authored
      [ Upstream commit efb11fdb
      
       ]
      
      find_insn() will return NULL in case of failure. Check insn in order
      to avoid a kernel Oops for NULL pointer dereference.
      
      Tested-by: default avatarNaveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
      Reviewed-by: default avatarNaveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
      Acked-by: default avatarJosh Poimboeuf <jpoimboe@kernel.org>
      Acked-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
      Signed-off-by: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/20221114175754.1131267-9-sv@linux.ibm.com
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      fcee8a2d
    • Yin Xiujiang's avatar
      fs/ntfs3: Fix slab-out-of-bounds in r_page · 6d076293
      Yin Xiujiang authored
      [ Upstream commit ecfbd57c
      
       ]
      
      When PAGE_SIZE is 64K, if read_log_page is called by log_read_rst for
      the first time, the size of *buffer would be equal to
      DefaultLogPageSize(4K).But for *buffer operations like memcpy,
      if the memory area size(n) which being assigned to buffer is larger
      than 4K (log->page_size(64K) or bytes(64K-page_off)), it will cause
      an out of boundary error.
       Call trace:
        [...]
        kasan_report+0x44/0x130
        check_memory_region+0xf8/0x1a0
        memcpy+0xc8/0x100
        ntfs_read_run_nb+0x20c/0x460
        read_log_page+0xd0/0x1f4
        log_read_rst+0x110/0x75c
        log_replay+0x1e8/0x4aa0
        ntfs_loadlog_and_replay+0x290/0x2d0
        ntfs_fill_super+0x508/0xec0
        get_tree_bdev+0x1fc/0x34c
        [...]
      
      Fix this by setting variable r_page to NULL in log_read_rst.
      
      Signed-off-by: default avatarYin Xiujiang <yinxiujiang@kylinos.cn>
      Signed-off-by: default avatarKonstantin Komarov <almaz.alexandrovich@paragon-software.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      6d076293
    • Dan Carpenter's avatar
      fs/ntfs3: Delete duplicate condition in ntfs_read_mft() · 4d744cee
      Dan Carpenter authored
      [ Upstream commit 65801516 ]
      
      There were two patches which addressed the same bug and added the same
      condition:
      
      commit 6db62086 ("fs/ntfs3: Validate data run offset")
      commit 887bfc54
      
       ("fs/ntfs3: Fix slab-out-of-bounds read in run_unpack")
      
      Delete one condition.
      
      Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
      Signed-off-by: default avatarKonstantin Komarov <almaz.alexandrovich@paragon-software.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      4d744cee
    • Tetsuo Handa's avatar
      fs/ntfs3: Use __GFP_NOWARN allocation at ntfs_fill_super() · fd8aa71b
      Tetsuo Handa authored
      [ Upstream commit 59bfd7a4
      
       ]
      
      syzbot is reporting too large allocation at ntfs_fill_super() [1], for a
      crafted filesystem can contain bogus inode->i_size. Add __GFP_NOWARN in
      order to avoid too large allocation warning, than exhausting memory by
      using kvmalloc().
      
      Link: https://syzkaller.appspot.com/bug?extid=33f3faaa0c08744f7d40 [1]
      Reported-by: default avatarsyzot <syzbot+33f3faaa0c08744f7d40@syzkaller.appspotmail.com>
      Signed-off-by: default avatarTetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
      Signed-off-by: default avatarKonstantin Komarov <almaz.alexandrovich@paragon-software.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      fd8aa71b
    • Tetsuo Handa's avatar
      fs/ntfs3: Use __GFP_NOWARN allocation at wnd_init() · 590a6943
      Tetsuo Handa authored
      [ Upstream commit 0d0f659b
      
       ]
      
      syzbot is reporting too large allocation at wnd_init() [1], for a crafted
      filesystem can become wnd->nwnd close to UINT_MAX. Add __GFP_NOWARN in
      order to avoid too large allocation warning, than exhausting memory by
      using kvcalloc().
      
      Link: https://syzkaller.appspot.com/bug?extid=fa4648a5446460b7b963 [1]
      Reported-by: default avatarsyzot <syzbot+fa4648a5446460b7b963@syzkaller.appspotmail.com>
      Signed-off-by: default avatarTetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
      Signed-off-by: default avatarKonstantin Komarov <almaz.alexandrovich@paragon-software.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      590a6943
    • Edward Lo's avatar
      fs/ntfs3: Validate index root when initialize NTFS security · d6379ce2
      Edward Lo authored
      [ Upstream commit bfcdbae0
      
       ]
      
      This enhances the sanity check for $SDH and $SII while initializing NTFS
      security, guarantees these index root are legit.
      
      [  162.459513] BUG: KASAN: use-after-free in hdr_find_e.isra.0+0x10c/0x320
      [  162.460176] Read of size 2 at addr ffff8880037bca99 by task mount/243
      [  162.460851]
      [  162.461252] CPU: 0 PID: 243 Comm: mount Not tainted 6.0.0-rc7 #42
      [  162.461744] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.14.0-0-g155821a1990b-prebuilt.qemu.org 04/01/2014
      [  162.462609] Call Trace:
      [  162.462954]  <TASK>
      [  162.463276]  dump_stack_lvl+0x49/0x63
      [  162.463822]  print_report.cold+0xf5/0x689
      [  162.464608]  ? unwind_get_return_address+0x3a/0x60
      [  162.465766]  ? hdr_find_e.isra.0+0x10c/0x320
      [  162.466975]  kasan_report+0xa7/0x130
      [  162.467506]  ? _raw_spin_lock_irq+0xc0/0xf0
      [  162.467998]  ? hdr_find_e.isra.0+0x10c/0x320
      [  162.468536]  __asan_load2+0x68/0x90
      [  162.468923]  hdr_find_e.isra.0+0x10c/0x320
      [  162.469282]  ? cmp_uints+0xe0/0xe0
      [  162.469557]  ? cmp_sdh+0x90/0x90
      [  162.469864]  ? ni_find_attr+0x214/0x300
      [  162.470217]  ? ni_load_mi+0x80/0x80
      [  162.470479]  ? entry_SYSCALL_64_after_hwframe+0x63/0xcd
      [  162.470931]  ? ntfs_bread_run+0x190/0x190
      [  162.471307]  ? indx_get_root+0xe4/0x190
      [  162.471556]  ? indx_get_root+0x140/0x190
      [  162.471833]  ? indx_init+0x1e0/0x1e0
      [  162.472069]  ? fnd_clear+0x115/0x140
      [  162.472363]  ? _raw_spin_lock_irqsave+0x100/0x100
      [  162.472731]  indx_find+0x184/0x470
      [  162.473461]  ? sysvec_apic_timer_interrupt+0x57/0xc0
      [  162.474429]  ? indx_find_buffer+0x2d0/0x2d0
      [  162.474704]  ? do_syscall_64+0x3b/0x90
      [  162.474962]  dir_search_u+0x196/0x2f0
      [  162.475381]  ? ntfs_nls_to_utf16+0x450/0x450
      [  162.475661]  ? ntfs_security_init+0x3d6/0x440
      [  162.475906]  ? is_sd_valid+0x180/0x180
      [  162.476191]  ntfs_extend_init+0x13f/0x2c0
      [  162.476496]  ? ntfs_fix_post_read+0x130/0x130
      [  162.476861]  ? iput.part.0+0x286/0x320
      [  162.477325]  ntfs_fill_super+0x11e0/0x1b50
      [  162.477709]  ? put_ntfs+0x1d0/0x1d0
      [  162.477970]  ? vsprintf+0x20/0x20
      [  162.478258]  ? set_blocksize+0x95/0x150
      [  162.478538]  get_tree_bdev+0x232/0x370
      [  162.478789]  ? put_ntfs+0x1d0/0x1d0
      [  162.479038]  ntfs_fs_get_tree+0x15/0x20
      [  162.479374]  vfs_get_tree+0x4c/0x130
      [  162.479729]  path_mount+0x654/0xfe0
      [  162.480124]  ? putname+0x80/0xa0
      [  162.480484]  ? finish_automount+0x2e0/0x2e0
      [  162.480894]  ? putname+0x80/0xa0
      [  162.481467]  ? kmem_cache_free+0x1c4/0x440
      [  162.482280]  ? putname+0x80/0xa0
      [  162.482714]  do_mount+0xd6/0xf0
      [  162.483264]  ? path_mount+0xfe0/0xfe0
      [  162.484782]  ? __kasan_check_write+0x14/0x20
      [  162.485593]  __x64_sys_mount+0xca/0x110
      [  162.486024]  do_syscall_64+0x3b/0x90
      [  162.486543]  entry_SYSCALL_64_after_hwframe+0x63/0xcd
      [  162.487141] RIP: 0033:0x7f9d374e948a
      [  162.488324] Code: 48 8b 0d 11 fa 2a 00 f7 d8 64 89 01 48 83 c8 ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 49 89 ca b8 a5 00 00 008
      [  162.489728] RSP: 002b:00007ffe30e73d18 EFLAGS: 00000206 ORIG_RAX: 00000000000000a5
      [  162.490971] RAX: ffffffffffffffda RBX: 0000561cdb43a060 RCX: 00007f9d374e948a
      [  162.491669] RDX: 0000561cdb43a260 RSI: 0000561cdb43a2e0 RDI: 0000561cdb442af0
      [  162.492050] RBP: 0000000000000000 R08: 0000561cdb43a280 R09: 0000000000000020
      [  162.492459] R10: 00000000c0ed0000 R11: 0000000000000206 R12: 0000561cdb442af0
      [  162.493183] R13: 0000561cdb43a260 R14: 0000000000000000 R15: 00000000ffffffff
      [  162.493644]  </TASK>
      [  162.493908]
      [  162.494214] The buggy address belongs to the physical page:
      [  162.494761] page:000000003e38a3d5 refcount:0 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x37bc
      [  162.496064] flags: 0xfffffc0000000(node=0|zone=1|lastcpupid=0x1fffff)
      [  162.497278] raw: 000fffffc0000000 ffffea00000df1c8 ffffea00000df008 0000000000000000
      [  162.498928] raw: 0000000000000000 0000000000240000 00000000ffffffff 0000000000000000
      [  162.500542] page dumped because: kasan: bad access detected
      [  162.501057]
      [  162.501242] Memory state around the buggy address:
      [  162.502230]  ffff8880037bc980: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
      [  162.502977]  ffff8880037bca00: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
      [  162.503522] >ffff8880037bca80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
      [  162.503963]                             ^
      [  162.504370]  ffff8880037bcb00: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
      [  162.504766]  ffff8880037bcb80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
      
      Signed-off-by: default avatarEdward Lo <edward.lo@ambergroup.io>
      Signed-off-by: default avatarKonstantin Komarov <almaz.alexandrovich@paragon-software.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      d6379ce2
    • Andre Przywara's avatar
      phy: sun4i-usb: Add support for the H616 USB PHY · fe5c3915
      Andre Przywara authored
      [ Upstream commit 0f607406
      
       ]
      
      The USB PHY used in the Allwinner H616 SoC inherits some traits from its
      various predecessors: it has four full PHYs like the H3, needs some
      extra bits to be set like the H6, and puts SIDDQ on a different bit like
      the A100. Plus it needs this weird PHY2 quirk.
      
      Name all those properties in a new config struct and assign a new
      compatible name to it.
      
      Signed-off-by: default avatarAndre Przywara <andre.przywara@arm.com>
      Reviewed-by: default avatarSamuel Holland <samuel@sholland.org>
      Link: https://lore.kernel.org/r/20221031111358.3387297-5-andre.przywara@arm.com
      Signed-off-by: default avatarVinod Koul <vkoul@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      fe5c3915
    • Andre Przywara's avatar
      phy: sun4i-usb: Introduce port2 SIDDQ quirk · 1eacd1fd
      Andre Przywara authored
      [ Upstream commit b45c6d80
      
       ]
      
      At least the Allwinner H616 SoC requires a weird quirk to make most
      USB PHYs work: Only port2 works out of the box, but all other ports
      need some help from this port2 to work correctly: The CLK_BUS_PHY2 and
      RST_USB_PHY2 clock and reset need to be enabled, and the SIDDQ bit in
      the PMU PHY control register needs to be cleared. For this register to
      be accessible, CLK_BUS_ECHI2 needs to be ungated. Don't ask ....
      
      Instead of disguising this as some generic feature, treat it more like
      a quirk (what it really is):
      If the quirk bit is set, and we initialise a PHY other than PHY2, ungate
      this one special clock, and clear the SIDDQ bit. We also pick the clock
      and reset from PHY2 and enable them as well.
      
      Signed-off-by: default avatarAndre Przywara <andre.przywara@arm.com>
      Link: https://lore.kernel.org/r/20221031111358.3387297-4-andre.przywara@arm.com
      Signed-off-by: default avatarVinod Koul <vkoul@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      1eacd1fd
    • Pierre-Louis Bossart's avatar
      soundwire: dmi-quirks: add quirk variant for LAPBC710 NUC15 · 0da27d8e
      Pierre-Louis Bossart authored
      [ Upstream commit f7449576
      
       ]
      
      Some NUC15 LAPBC710 devices don't expose the same DMI information as
      the Intel reference, add additional entry in the match table.
      
      BugLink: https://github.com/thesofproject/linux/issues/3885
      Signed-off-by: default avatarPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
      Reviewed-by: default avatarRanjani Sridharan <ranjani.sridharan@linux.intel.com>
      Signed-off-by: default avatarBard Liao <yung-chuan.liao@linux.intel.com>
      Link: https://lore.kernel.org/r/20221018012500.1592994-1-yung-chuan.liao@linux.intel.com
      Signed-off-by: default avatarVinod Koul <vkoul@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      0da27d8e
    • Hawkins Jiawei's avatar
      fs/ntfs3: Fix slab-out-of-bounds read in run_unpack · d34485d4
      Hawkins Jiawei authored
      [ Upstream commit 887bfc54
      
       ]
      
      Syzkaller reports slab-out-of-bounds bug as follows:
      ==================================================================
      BUG: KASAN: slab-out-of-bounds in run_unpack+0x8b7/0x970 fs/ntfs3/run.c:944
      Read of size 1 at addr ffff88801bbdff02 by task syz-executor131/3611
      
      [...]
      Call Trace:
       <TASK>
       __dump_stack lib/dump_stack.c:88 [inline]
       dump_stack_lvl+0xcd/0x134 lib/dump_stack.c:106
       print_address_description mm/kasan/report.c:317 [inline]
       print_report.cold+0x2ba/0x719 mm/kasan/report.c:433
       kasan_report+0xb1/0x1e0 mm/kasan/report.c:495
       run_unpack+0x8b7/0x970 fs/ntfs3/run.c:944
       run_unpack_ex+0xb0/0x7c0 fs/ntfs3/run.c:1057
       ntfs_read_mft fs/ntfs3/inode.c:368 [inline]
       ntfs_iget5+0xc20/0x3280 fs/ntfs3/inode.c:501
       ntfs_loadlog_and_replay+0x124/0x5d0 fs/ntfs3/fsntfs.c:272
       ntfs_fill_super+0x1eff/0x37f0 fs/ntfs3/super.c:1018
       get_tree_bdev+0x440/0x760 fs/super.c:1323
       vfs_get_tree+0x89/0x2f0 fs/super.c:1530
       do_new_mount fs/namespace.c:3040 [inline]
       path_mount+0x1326/0x1e20 fs/namespace.c:3370
       do_mount fs/namespace.c:3383 [inline]
       __do_sys_mount fs/namespace.c:3591 [inline]
       __se_sys_mount fs/namespace.c:3568 [inline]
       __x64_sys_mount+0x27f/0x300 fs/namespace.c:3568
       do_syscall_x64 arch/x86/entry/common.c:50 [inline]
       do_syscall_64+0x35/0xb0 arch/x86/entry/common.c:80
       entry_SYSCALL_64_after_hwframe+0x63/0xcd
       [...]
       </TASK>
      
      The buggy address belongs to the physical page:
      page:ffffea00006ef600 refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x1bbd8
      head:ffffea00006ef600 order:3 compound_mapcount:0 compound_pincount:0
      flags: 0xfff00000010200(slab|head|node=0|zone=1|lastcpupid=0x7ff)
      page dumped because: kasan: bad access detected
      
      Memory state around the buggy address:
       ffff88801bbdfe00: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
       ffff88801bbdfe80: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
      >ffff88801bbdff00: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
                         ^
       ffff88801bbdff80: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
       ffff88801bbe0000: fa fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
      ==================================================================
      
      Kernel will tries to read record and parse MFT from disk in
      ntfs_read_mft().
      
      Yet the problem is that during enumerating attributes in record,
      kernel doesn't check whether run_off field loading from the disk
      is a valid value.
      
      To be more specific, if attr->nres.run_off is larger than attr->size,
      kernel will passes an invalid argument run_buf_size in
      run_unpack_ex(), which having an integer overflow. Then this invalid
      argument will triggers the slab-out-of-bounds Read bug as above.
      
      This patch solves it by adding the sanity check between
      the offset to packed runs and attribute size.
      
      link: https://lore.kernel.org/all/0000000000009145fc05e94bd5c3@google.com/#t
      Reported-and-tested-by: default avatar <syzbot+8d6fbb27a6aded64b25b@syzkaller.appspotmail.com>
      Signed-off-by: default avatarHawkins Jiawei <yin31149@gmail.com>
      Signed-off-by: default avatarKonstantin Komarov <almaz.alexandrovich@paragon-software.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      d34485d4
    • Edward Lo's avatar
      fs/ntfs3: Validate resident attribute name · 2f041a19
      Edward Lo authored
      [ Upstream commit 54e45702
      
       ]
      
      Though we already have some sanity checks while enumerating attributes,
      resident attribute names aren't included. This patch checks the resident
      attribute names are in the valid ranges.
      
      [  259.209031] BUG: KASAN: slab-out-of-bounds in ni_create_attr_list+0x1e1/0x850
      [  259.210770] Write of size 426 at addr ffff88800632f2b2 by task exp/255
      [  259.211551]
      [  259.212035] CPU: 0 PID: 255 Comm: exp Not tainted 6.0.0-rc6 #37
      [  259.212955] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.14.0-0-g155821a1990b-prebuilt.qemu.org 04/01/2014
      [  259.214387] Call Trace:
      [  259.214640]  <TASK>
      [  259.214895]  dump_stack_lvl+0x49/0x63
      [  259.215284]  print_report.cold+0xf5/0x689
      [  259.215565]  ? kasan_poison+0x3c/0x50
      [  259.215778]  ? kasan_unpoison+0x28/0x60
      [  259.215991]  ? ni_create_attr_list+0x1e1/0x850
      [  259.216270]  kasan_report+0xa7/0x130
      [  259.216481]  ? ni_create_attr_list+0x1e1/0x850
      [  259.216719]  kasan_check_range+0x15a/0x1d0
      [  259.216939]  memcpy+0x3c/0x70
      [  259.217136]  ni_create_attr_list+0x1e1/0x850
      [  259.217945]  ? __rcu_read_unlock+0x5b/0x280
      [  259.218384]  ? ni_remove_attr+0x2e0/0x2e0
      [  259.218712]  ? kernel_text_address+0xcf/0xe0
      [  259.219064]  ? __kernel_text_address+0x12/0x40
      [  259.219434]  ? arch_stack_walk+0x9e/0xf0
      [  259.219668]  ? __this_cpu_preempt_check+0x13/0x20
      [  259.219904]  ? sysvec_apic_timer_interrupt+0x57/0xc0
      [  259.220140]  ? asm_sysvec_apic_timer_interrupt+0x1b/0x20
      [  259.220561]  ni_ins_attr_ext+0x52c/0x5c0
      [  259.220984]  ? ni_create_attr_list+0x850/0x850
      [  259.221532]  ? run_deallocate+0x120/0x120
      [  259.221972]  ? vfs_setxattr+0x128/0x300
      [  259.222688]  ? setxattr+0x126/0x140
      [  259.222921]  ? path_setxattr+0x164/0x180
      [  259.223431]  ? __x64_sys_setxattr+0x6d/0x80
      [  259.223828]  ? entry_SYSCALL_64_after_hwframe+0x63/0xcd
      [  259.224417]  ? mi_find_attr+0x3c/0xf0
      [  259.224772]  ni_insert_attr+0x1ba/0x420
      [  259.225216]  ? ni_ins_attr_ext+0x5c0/0x5c0
      [  259.225504]  ? ntfs_read_ea+0x119/0x450
      [  259.225775]  ni_insert_resident+0xc0/0x1c0
      [  259.226316]  ? ni_insert_nonresident+0x400/0x400
      [  259.227001]  ? __kasan_kmalloc+0x88/0xb0
      [  259.227468]  ? __kmalloc+0x192/0x320
      [  259.227773]  ntfs_set_ea+0x6bf/0xb30
      [  259.228216]  ? ftrace_graph_ret_addr+0x2a/0xb0
      [  259.228494]  ? entry_SYSCALL_64_after_hwframe+0x63/0xcd
      [  259.228838]  ? ntfs_read_ea+0x450/0x450
      [  259.229098]  ? is_bpf_text_address+0x24/0x40
      [  259.229418]  ? kernel_text_address+0xcf/0xe0
      [  259.229681]  ? __kernel_text_address+0x12/0x40
      [  259.229948]  ? unwind_get_return_address+0x3a/0x60
      [  259.230271]  ? write_profile+0x270/0x270
      [  259.230537]  ? arch_stack_walk+0x9e/0xf0
      [  259.230836]  ntfs_setxattr+0x114/0x5c0
      [  259.231099]  ? ntfs_set_acl_ex+0x2e0/0x2e0
      [  259.231529]  ? evm_protected_xattr_common+0x6d/0x100
      [  259.231817]  ? posix_xattr_acl+0x13/0x80
      [  259.232073]  ? evm_protect_xattr+0x1f7/0x440
      [  259.232351]  __vfs_setxattr+0xda/0x120
      [  259.232635]  ? xattr_resolve_name+0x180/0x180
      [  259.232912]  __vfs_setxattr_noperm+0x93/0x300
      [  259.233219]  __vfs_setxattr_locked+0x141/0x160
      [  259.233492]  ? kasan_poison+0x3c/0x50
      [  259.233744]  vfs_setxattr+0x128/0x300
      [  259.234002]  ? __vfs_setxattr_locked+0x160/0x160
      [  259.234837]  do_setxattr+0xb8/0x170
      [  259.235567]  ? vmemdup_user+0x53/0x90
      [  259.236212]  setxattr+0x126/0x140
      [  259.236491]  ? do_setxattr+0x170/0x170
      [  259.236791]  ? debug_smp_processor_id+0x17/0x20
      [  259.237232]  ? kasan_quarantine_put+0x57/0x180
      [  259.237605]  ? putname+0x80/0xa0
      [  259.237870]  ? __kasan_slab_free+0x11c/0x1b0
      [  259.238234]  ? putname+0x80/0xa0
      [  259.238500]  ? preempt_count_sub+0x18/0xc0
      [  259.238775]  ? __mnt_want_write+0xaa/0x100
      [  259.238990]  ? mnt_want_write+0x8b/0x150
      [  259.239290]  path_setxattr+0x164/0x180
      [  259.239605]  ? setxattr+0x140/0x140
      [  259.239849]  ? debug_smp_processor_id+0x17/0x20
      [  259.240174]  ? fpregs_assert_state_consistent+0x67/0x80
      [  259.240411]  __x64_sys_setxattr+0x6d/0x80
      [  259.240715]  do_syscall_64+0x3b/0x90
      [  259.240934]  entry_SYSCALL_64_after_hwframe+0x63/0xcd
      [  259.241697] RIP: 0033:0x7fc6b26e4469
      [  259.242647] Code: 00 f3 c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 40 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 088
      [  259.244512] RSP: 002b:00007ffc3c7841f8 EFLAGS: 00000217 ORIG_RAX: 00000000000000bc
      [  259.245086] RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007fc6b26e4469
      [  259.246025] RDX: 00007ffc3c784380 RSI: 00007ffc3c7842e0 RDI: 00007ffc3c784238
      [  259.246961] RBP: 00007ffc3c788410 R08: 0000000000000001 R09: 00007ffc3c7884f8
      [  259.247775] R10: 000000000000007f R11: 0000000000000217 R12: 00000000004004e0
      [  259.248534] R13: 00007ffc3c7884f0 R14: 0000000000000000 R15: 0000000000000000
      [  259.249368]  </TASK>
      [  259.249644]
      [  259.249888] Allocated by task 255:
      [  259.250283]  kasan_save_stack+0x26/0x50
      [  259.250957]  __kasan_kmalloc+0x88/0xb0
      [  259.251826]  __kmalloc+0x192/0x320
      [  259.252745]  ni_create_attr_list+0x11e/0x850
      [  259.253298]  ni_ins_attr_ext+0x52c/0x5c0
      [  259.253685]  ni_insert_attr+0x1ba/0x420
      [  259.253974]  ni_insert_resident+0xc0/0x1c0
      [  259.254311]  ntfs_set_ea+0x6bf/0xb30
      [  259.254629]  ntfs_setxattr+0x114/0x5c0
      [  259.254859]  __vfs_setxattr+0xda/0x120
      [  259.255155]  __vfs_setxattr_noperm+0x93/0x300
      [  259.255445]  __vfs_setxattr_locked+0x141/0x160
      [  259.255862]  vfs_setxattr+0x128/0x300
      [  259.256251]  do_setxattr+0xb8/0x170
      [  259.256522]  setxattr+0x126/0x140
      [  259.256911]  path_setxattr+0x164/0x180
      [  259.257308]  __x64_sys_setxattr+0x6d/0x80
      [  259.257637]  do_syscall_64+0x3b/0x90
      [  259.257970]  entry_SYSCALL_64_after_hwframe+0x63/0xcd
      [  259.258550]
      [  259.258772] The buggy address belongs to the object at ffff88800632f000
      [  259.258772]  which belongs to the cache kmalloc-1k of size 1024
      [  259.260190] The buggy address is located 690 bytes inside of
      [  259.260190]  1024-byte region [ffff88800632f000, ffff88800632f400)
      [  259.261412]
      [  259.261743] The buggy address belongs to the physical page:
      [  259.262354] page:0000000081e8cac9 refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x632c
      [  259.263722] head:0000000081e8cac9 order:2 compound_mapcount:0 compound_pincount:0
      [  259.264284] flags: 0xfffffc0010200(slab|head|node=0|zone=1|lastcpupid=0x1fffff)
      [  259.265312] raw: 000fffffc0010200 ffffea0000060d00 dead000000000004 ffff888001041dc0
      [  259.265772] raw: 0000000000000000 0000000080080008 00000001ffffffff 0000000000000000
      [  259.266305] page dumped because: kasan: bad access detected
      [  259.266588]
      [  259.266728] Memory state around the buggy address:
      [  259.267225]  ffff88800632f300: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
      [  259.267841]  ffff88800632f380: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
      [  259.269111] >ffff88800632f400: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
      [  259.269626]                    ^
      [  259.270162]  ffff88800632f480: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
      [  259.270810]  ffff88800632f500: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
      
      Signed-off-by: default avatarEdward Lo <edward.lo@ambergroup.io>
      Signed-off-by: default avatarKonstantin Komarov <almaz.alexandrovich@paragon-software.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      2f041a19
    • Edward Lo's avatar
      fs/ntfs3: Validate buffer length while parsing index · 3f6f75e8
      Edward Lo authored
      [ Upstream commit 4d42ecda
      
       ]
      
      indx_read is called when we have some NTFS directory operations that
      need more information from the index buffers. This adds a sanity check
      to make sure the returned index buffer length is legit, or we may have
      some out-of-bound memory accesses.
      
      [  560.897595] BUG: KASAN: slab-out-of-bounds in hdr_find_e.isra.0+0x10c/0x320
      [  560.898321] Read of size 2 at addr ffff888009497238 by task exp/245
      [  560.898760]
      [  560.899129] CPU: 0 PID: 245 Comm: exp Not tainted 6.0.0-rc6 #37
      [  560.899505] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.14.0-0-g155821a1990b-prebuilt.qemu.org 04/01/2014
      [  560.900170] Call Trace:
      [  560.900407]  <TASK>
      [  560.900732]  dump_stack_lvl+0x49/0x63
      [  560.901108]  print_report.cold+0xf5/0x689
      [  560.901395]  ? hdr_find_e.isra.0+0x10c/0x320
      [  560.901716]  kasan_report+0xa7/0x130
      [  560.901950]  ? hdr_find_e.isra.0+0x10c/0x320
      [  560.902208]  __asan_load2+0x68/0x90
      [  560.902427]  hdr_find_e.isra.0+0x10c/0x320
      [  560.902846]  ? cmp_uints+0xe0/0xe0
      [  560.903363]  ? cmp_sdh+0x90/0x90
      [  560.903883]  ? ntfs_bread_run+0x190/0x190
      [  560.904196]  ? rwsem_down_read_slowpath+0x750/0x750
      [  560.904969]  ? ntfs_fix_post_read+0xe0/0x130
      [  560.905259]  ? __kasan_check_write+0x14/0x20
      [  560.905599]  ? up_read+0x1a/0x90
      [  560.905853]  ? indx_read+0x22c/0x380
      [  560.906096]  indx_find+0x2ef/0x470
      [  560.906352]  ? indx_find_buffer+0x2d0/0x2d0
      [  560.906692]  ? __kasan_kmalloc+0x88/0xb0
      [  560.906977]  dir_search_u+0x196/0x2f0
      [  560.907220]  ? ntfs_nls_to_utf16+0x450/0x450
      [  560.907464]  ? __kasan_check_write+0x14/0x20
      [  560.907747]  ? mutex_lock+0x8f/0xe0
      [  560.907970]  ? __mutex_lock_slowpath+0x20/0x20
      [  560.908214]  ? kmem_cache_alloc+0x143/0x4b0
      [  560.908459]  ntfs_lookup+0xe0/0x100
      [  560.908788]  __lookup_slow+0x116/0x220
      [  560.909050]  ? lookup_fast+0x1b0/0x1b0
      [  560.909309]  ? lookup_fast+0x13f/0x1b0
      [  560.909601]  walk_component+0x187/0x230
      [  560.909944]  link_path_walk.part.0+0x3f0/0x660
      [  560.910285]  ? handle_lookup_down+0x90/0x90
      [  560.910618]  ? path_init+0x642/0x6e0
      [  560.911084]  ? percpu_counter_add_batch+0x6e/0xf0
      [  560.912559]  ? __alloc_file+0x114/0x170
      [  560.913008]  path_openat+0x19c/0x1d10
      [  560.913419]  ? getname_flags+0x73/0x2b0
      [  560.913815]  ? kasan_save_stack+0x3a/0x50
      [  560.914125]  ? kasan_save_stack+0x26/0x50
      [  560.914542]  ? __kasan_slab_alloc+0x6d/0x90
      [  560.914924]  ? kmem_cache_alloc+0x143/0x4b0
      [  560.915339]  ? getname_flags+0x73/0x2b0
      [  560.915647]  ? getname+0x12/0x20
      [  560.916114]  ? __x64_sys_open+0x4c/0x60
      [  560.916460]  ? path_lookupat.isra.0+0x230/0x230
      [  560.916867]  ? __isolate_free_page+0x2e0/0x2e0
      [  560.917194]  do_filp_open+0x15c/0x1f0
      [  560.917448]  ? may_open_dev+0x60/0x60
      [  560.917696]  ? expand_files+0xa4/0x3a0
      [  560.917923]  ? __kasan_check_write+0x14/0x20
      [  560.918185]  ? _raw_spin_lock+0x88/0xdb
      [  560.918409]  ? _raw_spin_lock_irqsave+0x100/0x100
      [  560.918783]  ? _find_next_bit+0x4a/0x130
      [  560.919026]  ? _raw_spin_unlock+0x19/0x40
      [  560.919276]  ? alloc_fd+0x14b/0x2d0
      [  560.919635]  do_sys_openat2+0x32a/0x4b0
      [  560.920035]  ? file_open_root+0x230/0x230
      [  560.920336]  ? __rcu_read_unlock+0x5b/0x280
      [  560.920813]  do_sys_open+0x99/0xf0
      [  560.921208]  ? filp_open+0x60/0x60
      [  560.921482]  ? exit_to_user_mode_prepare+0x49/0x180
      [  560.921867]  __x64_sys_open+0x4c/0x60
      [  560.922128]  do_syscall_64+0x3b/0x90
      [  560.922369]  entry_SYSCALL_64_after_hwframe+0x63/0xcd
      [  560.923030] RIP: 0033:0x7f7dff2e4469
      [  560.923681] Code: 00 f3 c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 40 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 088
      [  560.924451] RSP: 002b:00007ffd41a210b8 EFLAGS: 00000206 ORIG_RAX: 0000000000000002
      [  560.925168] RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f7dff2e4469
      [  560.925655] RDX: 0000000000000000 RSI: 0000000000000002 RDI: 00007ffd41a211f0
      [  560.926085] RBP: 00007ffd41a252a0 R08: 00007f7dff60fba0 R09: 00007ffd41a25388
      [  560.926405] R10: 0000000000400b80 R11: 0000000000000206 R12: 00000000004004e0
      [  560.926867] R13: 00007ffd41a25380 R14: 0000000000000000 R15: 0000000000000000
      [  560.927241]  </TASK>
      [  560.927491]
      [  560.927755] Allocated by task 245:
      [  560.928409]  kasan_save_stack+0x26/0x50
      [  560.929271]  __kasan_kmalloc+0x88/0xb0
      [  560.929778]  __kmalloc+0x192/0x320
      [  560.930023]  indx_read+0x249/0x380
      [  560.930224]  indx_find+0x2a2/0x470
      [  560.930695]  dir_search_u+0x196/0x2f0
      [  560.930892]  ntfs_lookup+0xe0/0x100
      [  560.931115]  __lookup_slow+0x116/0x220
      [  560.931323]  walk_component+0x187/0x230
      [  560.931570]  link_path_walk.part.0+0x3f0/0x660
      [  560.931791]  path_openat+0x19c/0x1d10
      [  560.932008]  do_filp_open+0x15c/0x1f0
      [  560.932226]  do_sys_openat2+0x32a/0x4b0
      [  560.932413]  do_sys_open+0x99/0xf0
      [  560.932709]  __x64_sys_open+0x4c/0x60
      [  560.933417]  do_syscall_64+0x3b/0x90
      [  560.933776]  entry_SYSCALL_64_after_hwframe+0x63/0xcd
      [  560.934235]
      [  560.934486] The buggy address belongs to the object at ffff888009497000
      [  560.934486]  which belongs to the cache kmalloc-512 of size 512
      [  560.935239] The buggy address is located 56 bytes to the right of
      [  560.935239]  512-byte region [ffff888009497000, ffff888009497200)
      [  560.936153]
      [  560.937326] The buggy address belongs to the physical page:
      [  560.938228] page:0000000062a3dfae refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x9496
      [  560.939616] head:0000000062a3dfae order:1 compound_mapcount:0 compound_pincount:0
      [  560.940219] flags: 0xfffffc0010200(slab|head|node=0|zone=1|lastcpupid=0x1fffff)
      [  560.942702] raw: 000fffffc0010200 ffffea0000164f80 dead000000000005 ffff888001041c80
      [  560.943932] raw: 0000000000000000 0000000080080008 00000001ffffffff 0000000000000000
      [  560.944568] page dumped because: kasan: bad access detected
      [  560.945735]
      [  560.946112] Memory state around the buggy address:
      [  560.946870]  ffff888009497100: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
      [  560.947242]  ffff888009497180: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
      [  560.947611] >ffff888009497200: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
      [  560.947915]                                         ^
      [  560.948249]  ffff888009497280: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
      [  560.948687]  ffff888009497300: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
      
      Signed-off-by: default avatarEdward Lo <edward.lo@ambergroup.io>
      Signed-off-by: default avatarKonstantin Komarov <almaz.alexandrovich@paragon-software.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      3f6f75e8
    • Edward Lo's avatar
      fs/ntfs3: Validate attribute name offset · b343c40b
      Edward Lo authored
      [ Upstream commit 4f1dc7d9
      
       ]
      
      Although the attribute name length is checked before comparing it to
      some common names (e.g., $I30), the offset isn't. This adds a sanity
      check for the attribute name offset, guarantee the validity and prevent
      possible out-of-bound memory accesses.
      
      [  191.720056] BUG: unable to handle page fault for address: ffffebde00000008
      [  191.721060] #PF: supervisor read access in kernel mode
      [  191.721586] #PF: error_code(0x0000) - not-present page
      [  191.722079] PGD 0 P4D 0
      [  191.722571] Oops: 0000 [#1] PREEMPT SMP KASAN NOPTI
      [  191.723179] CPU: 0 PID: 244 Comm: mount Not tainted 6.0.0-rc4 #28
      [  191.723749] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.14.0-0-g155821a1990b-prebuilt.qemu.org 04/01/2014
      [  191.724832] RIP: 0010:kfree+0x56/0x3b0
      [  191.725870] Code: 80 48 01 d8 0f 82 65 03 00 00 48 c7 c2 00 00 00 80 48 2b 15 2c 06 dd 01 48 01 d0 48 c1 e8 0c 48 c1 e0 06 48 03 05 0a 069
      [  191.727375] RSP: 0018:ffff8880076f7878 EFLAGS: 00000286
      [  191.727897] RAX: ffffebde00000000 RBX: 0000000000000040 RCX: ffffffff8528d5b9
      [  191.728531] RDX: 0000777f80000000 RSI: ffffffff8522d49c RDI: 0000000000000040
      [  191.729183] RBP: ffff8880076f78a0 R08: 0000000000000000 R09: 0000000000000000
      [  191.729628] R10: ffff888008949fd8 R11: ffffed10011293fd R12: 0000000000000040
      [  191.730158] R13: ffff888008949f98 R14: ffff888008949ec0 R15: ffff888008949fb0
      [  191.730645] FS:  00007f3520cd7e40(0000) GS:ffff88805ba00000(0000) knlGS:0000000000000000
      [  191.731328] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [  191.731667] CR2: ffffebde00000008 CR3: 0000000009704000 CR4: 00000000000006f0
      [  191.732568] Call Trace:
      [  191.733231]  <TASK>
      [  191.733860]  kvfree+0x2c/0x40
      [  191.734632]  ni_clear+0x180/0x290
      [  191.735085]  ntfs_evict_inode+0x45/0x70
      [  191.735495]  evict+0x199/0x280
      [  191.735996]  iput.part.0+0x286/0x320
      [  191.736438]  iput+0x32/0x50
      [  191.736811]  iget_failed+0x23/0x30
      [  191.737270]  ntfs_iget5+0x337/0x1890
      [  191.737629]  ? ntfs_clear_mft_tail+0x20/0x260
      [  191.738201]  ? ntfs_get_block_bmap+0x70/0x70
      [  191.738482]  ? ntfs_objid_init+0xf6/0x140
      [  191.738779]  ? ntfs_reparse_init+0x140/0x140
      [  191.739266]  ntfs_fill_super+0x121b/0x1b50
      [  191.739623]  ? put_ntfs+0x1d0/0x1d0
      [  191.739984]  ? asm_sysvec_apic_timer_interrupt+0x1b/0x20
      [  191.740466]  ? put_ntfs+0x1d0/0x1d0
      [  191.740787]  ? sb_set_blocksize+0x6a/0x80
      [  191.741272]  get_tree_bdev+0x232/0x370
      [  191.741829]  ? put_ntfs+0x1d0/0x1d0
      [  191.742669]  ntfs_fs_get_tree+0x15/0x20
      [  191.743132]  vfs_get_tree+0x4c/0x130
      [  191.743457]  path_mount+0x654/0xfe0
      [  191.743938]  ? putname+0x80/0xa0
      [  191.744271]  ? finish_automount+0x2e0/0x2e0
      [  191.744582]  ? putname+0x80/0xa0
      [  191.745053]  ? kmem_cache_free+0x1c4/0x440
      [  191.745403]  ? putname+0x80/0xa0
      [  191.745616]  do_mount+0xd6/0xf0
      [  191.745887]  ? path_mount+0xfe0/0xfe0
      [  191.746287]  ? __kasan_check_write+0x14/0x20
      [  191.746582]  __x64_sys_mount+0xca/0x110
      [  191.746850]  do_syscall_64+0x3b/0x90
      [  191.747122]  entry_SYSCALL_64_after_hwframe+0x63/0xcd
      [  191.747517] RIP: 0033:0x7f351fee948a
      [  191.748332] Code: 48 8b 0d 11 fa 2a 00 f7 d8 64 89 01 48 83 c8 ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 49 89 ca b8 a5 00 00 008
      [  191.749341] RSP: 002b:00007ffd51cf3af8 EFLAGS: 00000202 ORIG_RAX: 00000000000000a5
      [  191.749960] RAX: ffffffffffffffda RBX: 000055b903733060 RCX: 00007f351fee948a
      [  191.750589] RDX: 000055b903733260 RSI: 000055b9037332e0 RDI: 000055b90373bce0
      [  191.751115] RBP: 0000000000000000 R08: 000055b903733280 R09: 0000000000000020
      [  191.751537] R10: 00000000c0ed0000 R11: 0000000000000202 R12: 000055b90373bce0
      [  191.751946] R13: 000055b903733260 R14: 0000000000000000 R15: 00000000ffffffff
      [  191.752519]  </TASK>
      [  191.752782] Modules linked in:
      [  191.753785] CR2: ffffebde00000008
      [  191.754937] ---[ end trace 0000000000000000 ]---
      [  191.755429] RIP: 0010:kfree+0x56/0x3b0
      [  191.755725] Code: 80 48 01 d8 0f 82 65 03 00 00 48 c7 c2 00 00 00 80 48 2b 15 2c 06 dd 01 48 01 d0 48 c1 e8 0c 48 c1 e0 06 48 03 05 0a 069
      [  191.756744] RSP: 0018:ffff8880076f7878 EFLAGS: 00000286
      [  191.757218] RAX: ffffebde00000000 RBX: 0000000000000040 RCX: ffffffff8528d5b9
      [  191.757580] RDX: 0000777f80000000 RSI: ffffffff8522d49c RDI: 0000000000000040
      [  191.758016] RBP: ffff8880076f78a0 R08: 0000000000000000 R09: 0000000000000000
      [  191.758570] R10: ffff888008949fd8 R11: ffffed10011293fd R12: 0000000000000040
      [  191.758957] R13: ffff888008949f98 R14: ffff888008949ec0 R15: ffff888008949fb0
      [  191.759317] FS:  00007f3520cd7e40(0000) GS:ffff88805ba00000(0000) knlGS:0000000000000000
      [  191.759711] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [  191.760118] CR2: ffffebde00000008 CR3: 0000000009704000 CR4: 00000000000006f0
      
      Signed-off-by: default avatarEdward Lo <edward.lo@ambergroup.io>
      Signed-off-by: default avatarKonstantin Komarov <almaz.alexandrovich@paragon-software.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      b343c40b
    • Edward Lo's avatar
      fs/ntfs3: Add null pointer check for inode operations · a7b23037
      Edward Lo authored
      [ Upstream commit c1ca8ef0
      
       ]
      
      This adds a sanity check for the i_op pointer of the inode which is
      returned after reading Root directory MFT record. We should check the
      i_op is valid before trying to create the root dentry, otherwise we may
      encounter a NPD while mounting a image with a funny Root directory MFT
      record.
      
      [  114.484325] BUG: kernel NULL pointer dereference, address: 0000000000000008
      [  114.484811] #PF: supervisor read access in kernel mode
      [  114.485084] #PF: error_code(0x0000) - not-present page
      [  114.485606] PGD 0 P4D 0
      [  114.485975] Oops: 0000 [#1] PREEMPT SMP KASAN NOPTI
      [  114.486570] CPU: 0 PID: 237 Comm: mount Tainted: G    B              6.0.0-rc4 #28
      [  114.486977] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.14.0-0-g155821a1990b-prebuilt.qemu.org 04/01/2014
      [  114.488169] RIP: 0010:d_flags_for_inode+0xe0/0x110
      [  114.488816] Code: 24 f7 ff 49 83 3e 00 74 41 41 83 cd 02 66 44 89 6b 02 eb 92 48 8d 7b 20 e8 6d 24 f7 ff 4c 8b 73 20 49 8d 7e 08 e8 60 241
      [  114.490326] RSP: 0018:ffff8880065e7aa8 EFLAGS: 00000296
      [  114.490695] RAX: 0000000000000001 RBX: ffff888008ccd750 RCX: ffffffff84af2aea
      [  114.490986] RDX: 0000000000000001 RSI: 0000000000000008 RDI: ffffffff87abd020
      [  114.491364] RBP: ffff8880065e7ac8 R08: 0000000000000001 R09: fffffbfff0f57a05
      [  114.491675] R10: ffffffff87abd027 R11: fffffbfff0f57a04 R12: 0000000000000000
      [  114.491954] R13: 0000000000000008 R14: 0000000000000000 R15: ffff888008ccd750
      [  114.492397] FS:  00007fdc8a627e40(0000) GS:ffff888058200000(0000) knlGS:0000000000000000
      [  114.492797] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [  114.493150] CR2: 0000000000000008 CR3: 00000000013ba000 CR4: 00000000000006f0
      [  114.493671] Call Trace:
      [  114.493890]  <TASK>
      [  114.494075]  __d_instantiate+0x24/0x1c0
      [  114.494505]  d_instantiate.part.0+0x35/0x50
      [  114.494754]  d_make_root+0x53/0x80
      [  114.494998]  ntfs_fill_super+0x1232/0x1b50
      [  114.495260]  ? put_ntfs+0x1d0/0x1d0
      [  114.495499]  ? vsprintf+0x20/0x20
      [  114.495723]  ? set_blocksize+0x95/0x150
      [  114.495964]  get_tree_bdev+0x232/0x370
      [  114.496272]  ? put_ntfs+0x1d0/0x1d0
      [  114.496502]  ntfs_fs_get_tree+0x15/0x20
      [  114.496859]  vfs_get_tree+0x4c/0x130
      [  114.497099]  path_mount+0x654/0xfe0
      [  114.497507]  ? putname+0x80/0xa0
      [  114.497933]  ? finish_automount+0x2e0/0x2e0
      [  114.498362]  ? putname+0x80/0xa0
      [  114.498571]  ? kmem_cache_free+0x1c4/0x440
      [  114.498819]  ? putname+0x80/0xa0
      [  114.499069]  do_mount+0xd6/0xf0
      [  114.499343]  ? path_mount+0xfe0/0xfe0
      [  114.499683]  ? __kasan_check_write+0x14/0x20
      [  114.500133]  __x64_sys_mount+0xca/0x110
      [  114.500592]  do_syscall_64+0x3b/0x90
      [  114.500930]  entry_SYSCALL_64_after_hwframe+0x63/0xcd
      [  114.501294] RIP: 0033:0x7fdc898e948a
      [  114.501542] Code: 48 8b 0d 11 fa 2a 00 f7 d8 64 89 01 48 83 c8 ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 49 89 ca b8 a5 00 00 008
      [  114.502716] RSP: 002b:00007ffd793e58f8 EFLAGS: 00000202 ORIG_RAX: 00000000000000a5
      [  114.503175] RAX: ffffffffffffffda RBX: 0000564b2228f060 RCX: 00007fdc898e948a
      [  114.503588] RDX: 0000564b2228f260 RSI: 0000564b2228f2e0 RDI: 0000564b22297ce0
      [  114.504925] RBP: 0000000000000000 R08: 0000564b2228f280 R09: 0000000000000020
      [  114.505484] R10: 00000000c0ed0000 R11: 0000000000000202 R12: 0000564b22297ce0
      [  114.505823] R13: 0000564b2228f260 R14: 0000000000000000 R15: 00000000ffffffff
      [  114.506562]  </TASK>
      [  114.506887] Modules linked in:
      [  114.507648] CR2: 0000000000000008
      [  114.508884] ---[ end trace 0000000000000000 ]---
      [  114.509675] RIP: 0010:d_flags_for_inode+0xe0/0x110
      [  114.510140] Code: 24 f7 ff 49 83 3e 00 74 41 41 83 cd 02 66 44 89 6b 02 eb 92 48 8d 7b 20 e8 6d 24 f7 ff 4c 8b 73 20 49 8d 7e 08 e8 60 241
      [  114.511762] RSP: 0018:ffff8880065e7aa8 EFLAGS: 00000296
      [  114.512401] RAX: 0000000000000001 RBX: ffff888008ccd750 RCX: ffffffff84af2aea
      [  114.513103] RDX: 0000000000000001 RSI: 0000000000000008 RDI: ffffffff87abd020
      [  114.513512] RBP: ffff8880065e7ac8 R08: 0000000000000001 R09: fffffbfff0f57a05
      [  114.513831] R10: ffffffff87abd027 R11: fffffbfff0f57a04 R12: 0000000000000000
      [  114.514757] R13: 0000000000000008 R14: 0000000000000000 R15: ffff888008ccd750
      [  114.515411] FS:  00007fdc8a627e40(0000) GS:ffff888058200000(0000) knlGS:0000000000000000
      [  114.515794] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [  114.516208] CR2: 0000000000000008 CR3: 00000000013ba000 CR4: 00000000000006f0
      
      Signed-off-by: default avatarEdward Lo <edward.lo@ambergroup.io>
      Signed-off-by: default avatarKonstantin Komarov <almaz.alexandrovich@paragon-software.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      a7b23037
    • Shigeru Yoshida's avatar
      fs/ntfs3: Fix memory leak on ntfs_fill_super() error path · 2600c80e
      Shigeru Yoshida authored
      [ Upstream commit 51e76a23
      
       ]
      
      syzbot reported kmemleak as below:
      
      BUG: memory leak
      unreferenced object 0xffff8880122f1540 (size 32):
        comm "a.out", pid 6664, jiffies 4294939771 (age 25.500s)
        hex dump (first 32 bytes):
          00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
          00 00 00 00 00 00 00 00 ed ff ed ff 00 00 00 00  ................
        backtrace:
          [<ffffffff81b16052>] ntfs_init_fs_context+0x22/0x1c0
          [<ffffffff8164aaa7>] alloc_fs_context+0x217/0x430
          [<ffffffff81626dd4>] path_mount+0x704/0x1080
          [<ffffffff81627e7c>] __x64_sys_mount+0x18c/0x1d0
          [<ffffffff84593e14>] do_syscall_64+0x34/0xb0
          [<ffffffff84600087>] entry_SYSCALL_64_after_hwframe+0x63/0xcd
      
      This patch fixes this issue by freeing mount options on error path of
      ntfs_fill_super().
      
      Reported-by: default avatar <syzbot+9d67170b20e8f94351c8@syzkaller.appspotmail.com>
      Signed-off-by: default avatarShigeru Yoshida <syoshida@redhat.com>
      Signed-off-by: default avatarKonstantin Komarov <almaz.alexandrovich@paragon-software.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      2600c80e
    • Edward Lo's avatar
      fs/ntfs3: Add null pointer check to attr_load_runs_vcn · 1621734c
      Edward Lo authored
      [ Upstream commit 2681631c
      
       ]
      
      Some metadata files are handled before MFT. This adds a null pointer
      check for some corner cases that could lead to NPD while reading these
      metadata files for a malformed NTFS image.
      
      [  240.190827] BUG: kernel NULL pointer dereference, address: 0000000000000158
      [  240.191583] #PF: supervisor read access in kernel mode
      [  240.191956] #PF: error_code(0x0000) - not-present page
      [  240.192391] PGD 0 P4D 0
      [  240.192897] Oops: 0000 [#1] PREEMPT SMP KASAN NOPTI
      [  240.193805] CPU: 0 PID: 242 Comm: mount Tainted: G    B             5.19.0+ #17
      [  240.194477] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.14.0-0-g155821a1990b-prebuilt.qemu.org 04/01/2014
      [  240.195152] RIP: 0010:ni_find_attr+0xae/0x300
      [  240.195679] Code: c8 48 c7 45 88 c0 4e 5e 86 c7 00 f1 f1 f1 f1 c7 40 04 00 f3 f3 f3 65 48 8b 04 25 28 00 00 00 48 89 45 d0 31 c0 e8 e2 d9f
      [  240.196642] RSP: 0018:ffff88800812f690 EFLAGS: 00000286
      [  240.197019] RAX: 0000000000000001 RBX: 0000000000000000 RCX: ffffffff85ef037a
      [  240.197523] RDX: 0000000000000001 RSI: 0000000000000008 RDI: ffffffff88e95f60
      [  240.197877] RBP: ffff88800812f738 R08: 0000000000000001 R09: fffffbfff11d2bed
      [  240.198292] R10: ffffffff88e95f67 R11: fffffbfff11d2bec R12: 0000000000000000
      [  240.198647] R13: 0000000000000080 R14: 0000000000000000 R15: 0000000000000000
      [  240.199410] FS:  00007f233c33be40(0000) GS:ffff888058200000(0000) knlGS:0000000000000000
      [  240.199895] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [  240.200314] CR2: 0000000000000158 CR3: 0000000004d32000 CR4: 00000000000006f0
      [  240.200839] Call Trace:
      [  240.201104]  <TASK>
      [  240.201502]  ? ni_load_mi+0x80/0x80
      [  240.202297]  ? ___slab_alloc+0x465/0x830
      [  240.202614]  attr_load_runs_vcn+0x8c/0x1a0
      [  240.202886]  ? __kasan_slab_alloc+0x32/0x90
      [  240.203157]  ? attr_data_write_resident+0x250/0x250
      [  240.203543]  mi_read+0x133/0x2c0
      [  240.203785]  mi_get+0x70/0x140
      [  240.204012]  ni_load_mi_ex+0xfa/0x190
      [  240.204346]  ? ni_std5+0x90/0x90
      [  240.204588]  ? __kasan_kmalloc+0x88/0xb0
      [  240.204859]  ni_enum_attr_ex+0xf1/0x1c0
      [  240.205107]  ? ni_fname_type.part.0+0xd0/0xd0
      [  240.205600]  ? ntfs_load_attr_list+0xbe/0x300
      [  240.205864]  ? ntfs_cmp_names_cpu+0x125/0x180
      [  240.206157]  ntfs_iget5+0x56c/0x1870
      [  240.206510]  ? ntfs_get_block_bmap+0x70/0x70
      [  240.206776]  ? __kasan_kmalloc+0x88/0xb0
      [  240.207030]  ? set_blocksize+0x95/0x150
      [  240.207545]  ntfs_fill_super+0xb8f/0x1e20
      [  240.207839]  ? put_ntfs+0x1d0/0x1d0
      [  240.208069]  ? vsprintf+0x20/0x20
      [  240.208467]  ? mutex_unlock+0x81/0xd0
      [  240.208846]  ? set_blocksize+0x95/0x150
      [  240.209221]  get_tree_bdev+0x232/0x370
      [  240.209804]  ? put_ntfs+0x1d0/0x1d0
      [  240.210519]  ntfs_fs_get_tree+0x15/0x20
      [  240.210991]  vfs_get_tree+0x4c/0x130
      [  240.211455]  path_mount+0x645/0xfd0
      [  240.211806]  ? putname+0x80/0xa0
      [  240.212112]  ? finish_automount+0x2e0/0x2e0
      [  240.212559]  ? kmem_cache_free+0x110/0x390
      [  240.212906]  ? putname+0x80/0xa0
      [  240.213329]  do_mount+0xd6/0xf0
      [  240.213829]  ? path_mount+0xfd0/0xfd0
      [  240.214246]  ? __kasan_check_write+0x14/0x20
      [  240.214774]  __x64_sys_mount+0xca/0x110
      [  240.215080]  do_syscall_64+0x3b/0x90
      [  240.215442]  entry_SYSCALL_64_after_hwframe+0x63/0xcd
      [  240.215811] RIP: 0033:0x7f233b4e948a
      [  240.216104] Code: 48 8b 0d 11 fa 2a 00 f7 d8 64 89 01 48 83 c8 ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 49 89 ca b8 a5 00 00 008
      [  240.217615] RSP: 002b:00007fff02211ec8 EFLAGS: 00000202 ORIG_RAX: 00000000000000a5
      [  240.218718] RAX: ffffffffffffffda RBX: 0000561cdc35b060 RCX: 00007f233b4e948a
      [  240.219556] RDX: 0000561cdc35b260 RSI: 0000561cdc35b2e0 RDI: 0000561cdc363af0
      [  240.219975] RBP: 0000000000000000 R08: 0000561cdc35b280 R09: 0000000000000020
      [  240.220403] R10: 00000000c0ed0000 R11: 0000000000000202 R12: 0000561cdc363af0
      [  240.220803] R13: 0000561cdc35b260 R14: 0000000000000000 R15: 00000000ffffffff
      [  240.221256]  </TASK>
      [  240.221567] Modules linked in:
      [  240.222028] CR2: 0000000000000158
      [  240.223291] ---[ end trace 0000000000000000 ]---
      [  240.223669] RIP: 0010:ni_find_attr+0xae/0x300
      [  240.224058] Code: c8 48 c7 45 88 c0 4e 5e 86 c7 00 f1 f1 f1 f1 c7 40 04 00 f3 f3 f3 65 48 8b 04 25 28 00 00 00 48 89 45 d0 31 c0 e8 e2 d9f
      [  240.225033] RSP: 0018:ffff88800812f690 EFLAGS: 00000286
      [  240.225968] RAX: 0000000000000001 RBX: 0000000000000000 RCX: ffffffff85ef037a
      [  240.226624] RDX: 0000000000000001 RSI: 0000000000000008 RDI: ffffffff88e95f60
      [  240.227307] RBP: ffff88800812f738 R08: 0000000000000001 R09: fffffbfff11d2bed
      [  240.227816] R10: ffffffff88e95f67 R11: fffffbfff11d2bec R12: 0000000000000000
      [  240.228330] R13: 0000000000000080 R14: 0000000000000000 R15: 0000000000000000
      [  240.228729] FS:  00007f233c33be40(0000) GS:ffff888058200000(0000) knlGS:0000000000000000
      [  240.229281] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [  240.230298] CR2: 0000000000000158 CR3: 0000000004d32000 CR4: 00000000000006f0
      
      Signed-off-by: default avatarEdward Lo <edward.lo@ambergroup.io>
      Signed-off-by: default avatarKonstantin Komarov <almaz.alexandrovich@paragon-software.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      1621734c
    • Edward Lo's avatar
      fs/ntfs3: Validate data run offset · 9173b89c
      Edward Lo authored
      [ Upstream commit 6db62086
      
       ]
      
      This adds sanity checks for data run offset. We should make sure data
      run offset is legit before trying to unpack them, otherwise we may
      encounter use-after-free or some unexpected memory access behaviors.
      
      [   82.940342] BUG: KASAN: use-after-free in run_unpack+0x2e3/0x570
      [   82.941180] Read of size 1 at addr ffff888008a8487f by task mount/240
      [   82.941670]
      [   82.942069] CPU: 0 PID: 240 Comm: mount Not tainted 5.19.0+ #15
      [   82.942482] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.14.0-0-g155821a1990b-prebuilt.qemu.org 04/01/2014
      [   82.943720] Call Trace:
      [   82.944204]  <TASK>
      [   82.944471]  dump_stack_lvl+0x49/0x63
      [   82.944908]  print_report.cold+0xf5/0x67b
      [   82.945141]  ? __wait_on_bit+0x106/0x120
      [   82.945750]  ? run_unpack+0x2e3/0x570
      [   82.946626]  kasan_report+0xa7/0x120
      [   82.947046]  ? run_unpack+0x2e3/0x570
      [   82.947280]  __asan_load1+0x51/0x60
      [   82.947483]  run_unpack+0x2e3/0x570
      [   82.947709]  ? memcpy+0x4e/0x70
      [   82.947927]  ? run_pack+0x7a0/0x7a0
      [   82.948158]  run_unpack_ex+0xad/0x3f0
      [   82.948399]  ? mi_enum_attr+0x14a/0x200
      [   82.948717]  ? run_unpack+0x570/0x570
      [   82.949072]  ? ni_enum_attr_ex+0x1b2/0x1c0
      [   82.949332]  ? ni_fname_type.part.0+0xd0/0xd0
      [   82.949611]  ? mi_read+0x262/0x2c0
      [   82.949970]  ? ntfs_cmp_names_cpu+0x125/0x180
      [   82.950249]  ntfs_iget5+0x632/0x1870
      [   82.950621]  ? ntfs_get_block_bmap+0x70/0x70
      [   82.951192]  ? evict+0x223/0x280
      [   82.951525]  ? iput.part.0+0x286/0x320
      [   82.951969]  ntfs_fill_super+0x1321/0x1e20
      [   82.952436]  ? put_ntfs+0x1d0/0x1d0
      [   82.952822]  ? vsprintf+0x20/0x20
      [   82.953188]  ? mutex_unlock+0x81/0xd0
      [   82.953379]  ? set_blocksize+0x95/0x150
      [   82.954001]  get_tree_bdev+0x232/0x370
      [   82.954438]  ? put_ntfs+0x1d0/0x1d0
      [   82.954700]  ntfs_fs_get_tree+0x15/0x20
      [   82.955049]  vfs_get_tree+0x4c/0x130
      [   82.955292]  path_mount+0x645/0xfd0
      [   82.955615]  ? putname+0x80/0xa0
      [   82.955955]  ? finish_automount+0x2e0/0x2e0
      [   82.956310]  ? kmem_cache_free+0x110/0x390
      [   82.956723]  ? putname+0x80/0xa0
      [   82.957023]  do_mount+0xd6/0xf0
      [   82.957411]  ? path_mount+0xfd0/0xfd0
      [   82.957638]  ? __kasan_check_write+0x14/0x20
      [   82.957948]  __x64_sys_mount+0xca/0x110
      [   82.958310]  do_syscall_64+0x3b/0x90
      [   82.958719]  entry_SYSCALL_64_after_hwframe+0x63/0xcd
      [   82.959341] RIP: 0033:0x7fd0d1ce948a
      [   82.960193] Code: 48 8b 0d 11 fa 2a 00 f7 d8 64 89 01 48 83 c8 ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 49 89 ca b8 a5 00 00 008
      [   82.961532] RSP: 002b:00007ffe59ff69a8 EFLAGS: 00000202 ORIG_RAX: 00000000000000a5
      [   82.962527] RAX: ffffffffffffffda RBX: 0000564dcc107060 RCX: 00007fd0d1ce948a
      [   82.963266] RDX: 0000564dcc107260 RSI: 0000564dcc1072e0 RDI: 0000564dcc10fce0
      [   82.963686] RBP: 0000000000000000 R08: 0000564dcc107280 R09: 0000000000000020
      [   82.964272] R10: 00000000c0ed0000 R11: 0000000000000202 R12: 0000564dcc10fce0
      [   82.964785] R13: 0000564dcc107260 R14: 0000000000000000 R15: 00000000ffffffff
      
      Signed-off-by: default avatarEdward Lo <edward.lo@ambergroup.io>
      Signed-off-by: default avatarKonstantin Komarov <almaz.alexandrovich@paragon-software.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      9173b89c
    • edward lo's avatar
      fs/ntfs3: Add overflow check for attribute size · 0bb9f93b
      edward lo authored
      [ Upstream commit e19c6277
      
       ]
      
      The offset addition could overflow and pass the used size check given an
      attribute with very large size (e.g., 0xffffff7f) while parsing MFT
      attributes. This could lead to out-of-bound memory R/W if we try to
      access the next attribute derived by Add2Ptr(attr, asize)
      
      [   32.963847] BUG: unable to handle page fault for address: ffff956a83c76067
      [   32.964301] #PF: supervisor read access in kernel mode
      [   32.964526] #PF: error_code(0x0000) - not-present page
      [   32.964893] PGD 4dc01067 P4D 4dc01067 PUD 0
      [   32.965316] Oops: 0000 [#1] PREEMPT SMP NOPTI
      [   32.965727] CPU: 0 PID: 243 Comm: mount Not tainted 5.19.0+ #6
      [   32.966050] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.14.0-0-g155821a1990b-prebuilt.qemu.org 04/01/2014
      [   32.966628] RIP: 0010:mi_enum_attr+0x44/0x110
      [   32.967239] Code: 89 f0 48 29 c8 48 89 c1 39 c7 0f 86 94 00 00 00 8b 56 04 83 fa 17 0f 86 88 00 00 00 89 d0 01 ca 48 01 f0 8d 4a 08 39 f9a
      [   32.968101] RSP: 0018:ffffba15c06a7c38 EFLAGS: 00000283
      [   32.968364] RAX: ffff956a83c76067 RBX: ffff956983c76050 RCX: 000000000000006f
      [   32.968651] RDX: 0000000000000067 RSI: ffff956983c760e8 RDI: 00000000000001c8
      [   32.968963] RBP: ffffba15c06a7c38 R08: 0000000000000064 R09: 00000000ffffff7f
      [   32.969249] R10: 0000000000000007 R11: ffff956983c760e8 R12: ffff95698225e000
      [   32.969870] R13: 0000000000000000 R14: ffffba15c06a7cd8 R15: ffff95698225e170
      [   32.970655] FS:  00007fdab8189e40(0000) GS:ffff9569fdc00000(0000) knlGS:0000000000000000
      [   32.971098] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [   32.971378] CR2: ffff956a83c76067 CR3: 0000000002c58000 CR4: 00000000000006f0
      [   32.972098] Call Trace:
      [   32.972842]  <TASK>
      [   32.973341]  ni_enum_attr_ex+0xda/0xf0
      [   32.974087]  ntfs_iget5+0x1db/0xde0
      [   32.974386]  ? slab_post_alloc_hook+0x53/0x270
      [   32.974778]  ? ntfs_fill_super+0x4c7/0x12a0
      [   32.975115]  ntfs_fill_super+0x5d6/0x12a0
      [   32.975336]  get_tree_bdev+0x175/0x270
      [   32.975709]  ? put_ntfs+0x150/0x150
      [   32.975956]  ntfs_fs_get_tree+0x15/0x20
      [   32.976191]  vfs_get_tree+0x2a/0xc0
      [   32.976374]  ? capable+0x19/0x20
      [   32.976572]  path_mount+0x484/0xaa0
      [   32.977025]  ? putname+0x57/0x70
      [   32.977380]  do_mount+0x80/0xa0
      [   32.977555]  __x64_sys_mount+0x8b/0xe0
      [   32.978105]  do_syscall_64+0x3b/0x90
      [   32.978830]  entry_SYSCALL_64_after_hwframe+0x63/0xcd
      [   32.979311] RIP: 0033:0x7fdab72e948a
      [   32.980015] Code: 48 8b 0d 11 fa 2a 00 f7 d8 64 89 01 48 83 c8 ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 49 89 ca b8 a5 00 00 008
      [   32.981251] RSP: 002b:00007ffd15b87588 EFLAGS: 00000206 ORIG_RAX: 00000000000000a5
      [   32.981832] RAX: ffffffffffffffda RBX: 0000557de0aaf060 RCX: 00007fdab72e948a
      [   32.982234] RDX: 0000557de0aaf260 RSI: 0000557de0aaf2e0 RDI: 0000557de0ab7ce0
      [   32.982714] RBP: 0000000000000000 R08: 0000557de0aaf280 R09: 0000000000000020
      [   32.983046] R10: 00000000c0ed0000 R11: 0000000000000206 R12: 0000557de0ab7ce0
      [   32.983494] R13: 0000557de0aaf260 R14: 0000000000000000 R15: 00000000ffffffff
      [   32.984094]  </TASK>
      [   32.984352] Modules linked in:
      [   32.984753] CR2: ffff956a83c76067
      [   32.985911] ---[ end trace 0000000000000000 ]---
      [   32.986555] RIP: 0010:mi_enum_attr+0x44/0x110
      [   32.987217] Code: 89 f0 48 29 c8 48 89 c1 39 c7 0f 86 94 00 00 00 8b 56 04 83 fa 17 0f 86 88 00 00 00 89 d0 01 ca 48 01 f0 8d 4a 08 39 f9a
      [   32.988232] RSP: 0018:ffffba15c06a7c38 EFLAGS: 00000283
      [   32.988532] RAX: ffff956a83c76067 RBX: ffff956983c76050 RCX: 000000000000006f
      [   32.988916] RDX: 0000000000000067 RSI: ffff956983c760e8 RDI: 00000000000001c8
      [   32.989356] RBP: ffffba15c06a7c38 R08: 0000000000000064 R09: 00000000ffffff7f
      [   32.989994] R10: 0000000000000007 R11: ffff956983c760e8 R12: ffff95698225e000
      [   32.990415] R13: 0000000000000000 R14: ffffba15c06a7cd8 R15: ffff95698225e170
      [   32.991011] FS:  00007fdab8189e40(0000) GS:ffff9569fdc00000(0000) knlGS:0000000000000000
      [   32.991524] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [   32.991936] CR2: ffff956a83c76067 CR3: 0000000002c58000 CR4: 00000000000006f0
      
      This patch adds an overflow check
      
      Signed-off-by: default avataredward lo <edward.lo@ambergroup.io>
      Signed-off-by: default avatarKonstantin Komarov <almaz.alexandrovich@paragon-software.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      0bb9f93b
    • edward lo's avatar
      fs/ntfs3: Validate BOOT record_size · db91a9c5
      edward lo authored
      [ Upstream commit 0b660462
      
       ]
      
      When the NTFS BOOT record_size field < 0, it represents a
      shift value. However, there is no sanity check on the shift result
      and the sbi->record_bits calculation through blksize_bits() assumes
      the size always > 256, which could lead to NPD while mounting a
      malformed NTFS image.
      
      [  318.675159] BUG: kernel NULL pointer dereference, address: 0000000000000158
      [  318.675682] #PF: supervisor read access in kernel mode
      [  318.675869] #PF: error_code(0x0000) - not-present page
      [  318.676246] PGD 0 P4D 0
      [  318.676502] Oops: 0000 [#1] PREEMPT SMP NOPTI
      [  318.676934] CPU: 0 PID: 259 Comm: mount Not tainted 5.19.0 #5
      [  318.677289] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.14.0-0-g155821a1990b-prebuilt.qemu.org 04/01/2014
      [  318.678136] RIP: 0010:ni_find_attr+0x2d/0x1c0
      [  318.678656] Code: 89 ca 4d 89 c7 41 56 41 55 41 54 41 89 cc 55 48 89 fd 53 48 89 d3 48 83 ec 20 65 48 8b 04 25 28 00 00 00 48 89 44 24 180
      [  318.679848] RSP: 0018:ffffa6c8c0297bd8 EFLAGS: 00000246
      [  318.680104] RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000000080
      [  318.680790] RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000
      [  318.681679] RBP: 0000000000000000 R08: 0000000000000000 R09: 0000000000000000
      [  318.682577] R10: 0000000000000000 R11: 0000000000000005 R12: 0000000000000080
      [  318.683015] R13: ffff8d5582e68400 R14: 0000000000000100 R15: 0000000000000000
      [  318.683618] FS:  00007fd9e1c81e40(0000) GS:ffff8d55fdc00000(0000) knlGS:0000000000000000
      [  318.684280] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [  318.684651] CR2: 0000000000000158 CR3: 0000000002e1a000 CR4: 00000000000006f0
      [  318.685623] Call Trace:
      [  318.686607]  <TASK>
      [  318.686872]  ? ntfs_alloc_inode+0x1a/0x60
      [  318.687235]  attr_load_runs_vcn+0x2b/0xa0
      [  318.687468]  mi_read+0xbb/0x250
      [  318.687576]  ntfs_iget5+0x114/0xd90
      [  318.687750]  ntfs_fill_super+0x588/0x11b0
      [  318.687953]  ? put_ntfs+0x130/0x130
      [  318.688065]  ? snprintf+0x49/0x70
      [  318.688164]  ? put_ntfs+0x130/0x130
      [  318.688256]  get_tree_bdev+0x16a/0x260
      [  318.688407]  vfs_get_tree+0x20/0xb0
      [  318.688519]  path_mount+0x2dc/0x9b0
      [  318.688877]  do_mount+0x74/0x90
      [  318.689142]  __x64_sys_mount+0x89/0xd0
      [  318.689636]  do_syscall_64+0x3b/0x90
      [  318.689998]  entry_SYSCALL_64_after_hwframe+0x63/0xcd
      [  318.690318] RIP: 0033:0x7fd9e133c48a
      [  318.690687] Code: 48 8b 0d 11 fa 2a 00 f7 d8 64 89 01 48 83 c8 ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 49 89 ca b8 a5 00 00 008
      [  318.691357] RSP: 002b:00007ffd374406c8 EFLAGS: 00000202 ORIG_RAX: 00000000000000a5
      [  318.691632] RAX: ffffffffffffffda RBX: 0000564d0b051080 RCX: 00007fd9e133c48a
      [  318.691920] RDX: 0000564d0b051280 RSI: 0000564d0b051300 RDI: 0000564d0b0596a0
      [  318.692123] RBP: 0000000000000000 R08: 0000564d0b0512a0 R09: 0000000000000020
      [  318.692349] R10: 00000000c0ed0000 R11: 0000000000000202 R12: 0000564d0b0596a0
      [  318.692673] R13: 0000564d0b051280 R14: 0000000000000000 R15: 00000000ffffffff
      [  318.693007]  </TASK>
      [  318.693271] Modules linked in:
      [  318.693614] CR2: 0000000000000158
      [  318.694446] ---[ end trace 0000000000000000 ]---
      [  318.694779] RIP: 0010:ni_find_attr+0x2d/0x1c0
      [  318.694952] Code: 89 ca 4d 89 c7 41 56 41 55 41 54 41 89 cc 55 48 89 fd 53 48 89 d3 48 83 ec 20 65 48 8b 04 25 28 00 00 00 48 89 44 24 180
      [  318.696042] RSP: 0018:ffffa6c8c0297bd8 EFLAGS: 00000246
      [  318.696531] RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000000080
      [  318.698114] RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000
      [  318.699286] RBP: 0000000000000000 R08: 0000000000000000 R09: 0000000000000000
      [  318.699795] R10: 0000000000000000 R11: 0000000000000005 R12: 0000000000000080
      [  318.700236] R13: ffff8d5582e68400 R14: 0000000000000100 R15: 0000000000000000
      [  318.700973] FS:  00007fd9e1c81e40(0000) GS:ffff8d55fdc00000(0000) knlGS:0000000000000000
      [  318.701688] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [  318.702190] CR2: 0000000000000158 CR3: 0000000002e1a000 CR4: 00000000000006f0
      [  318.726510] mount (259) used greatest stack depth: 13320 bytes left
      
      This patch adds a sanity check.
      
      Signed-off-by: default avataredward lo <edward.lo@ambergroup.io>
      Signed-off-by: default avatarKonstantin Komarov <almaz.alexandrovich@paragon-software.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      db91a9c5
    • Christoph Hellwig's avatar
      nvmet: don't defer passthrough commands with trivial effects to the workqueue · 2df48753
      Christoph Hellwig authored
      [ Upstream commit 2a459f69 ]
      
      Mask out the "Command Supported" and "Logical Block Content Change" bits
      and only defer execution of commands that have non-trivial effects to
      the workqueue for synchronous execution.  This allows to execute admin
      commands asynchronously on controllers that provide a Command Supported
      and Effects log page, and will keep allowing to execute Write commands
      asynchronously once command effects on I/O commands are taken into
      account.
      
      Fixes: c1fef73f
      
       ("nvmet: add passthru code to process commands")
      Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
      Reviewed-by: default avatarKeith Busch <kbusch@kernel.org>
      Reviewed-by: default avatarSagi Grimberg <sagi@grimberg.me>
      Reviewed-by: default avatarKanchan Joshi <joshi.k@samsung.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      2df48753
    • Christoph Hellwig's avatar
      nvme: fix the NVME_CMD_EFFECTS_CSE_MASK definition · a574e81b
      Christoph Hellwig authored
      [ Upstream commit 685e6311 ]
      
      3 << 16 does not generate the correct mask for bits 16, 17 and 18.
      Use the GENMASK macro to generate the correct mask instead.
      
      Fixes: 84fef62d
      
       ("nvme: check admin passthru command effects")
      Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
      Reviewed-by: default avatarKeith Busch <kbusch@kernel.org>
      Reviewed-by: default avatarSagi Grimberg <sagi@grimberg.me>
      Reviewed-by: default avatarKanchan Joshi <joshi.k@samsung.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      a574e81b
    • Adam Vodopjan's avatar
      ata: ahci: Fix PCS quirk application for suspend · aa9732da
      Adam Vodopjan authored
      [ Upstream commit 37e14e4f ]
      
      Since kernel 5.3.4 my laptop (ICH8M controller) does not see Kingston
      SV300S37A60G SSD disk connected into a SATA connector on wake from
      suspend.  The problem was introduced in c312ef17 ("libata/ahci: Drop
      PCS quirk for Denverton and beyond"): the quirk is not applied on wake
      from suspend as it originally was.
      
      It is worth to mention the commit contained another bug: the quirk is
      not applied at all to controllers which require it. The fix commit
      09d6ac8d ("libata/ahci: Fix PCS quirk application") landed in 5.3.8.
      So testing my patch anywhere between commits c312ef17 and
      09d6ac8d is pointless.
      
      Not all disks trigger the problem. For example nothing bad happens with
      Western Digital WD5000LPCX HDD.
      
      Test hardware:
      - Acer 5920G with ICH8M SATA controller
      - sda: some SATA HDD connnected into the DVD drive IDE port with a
        SATA-IDE caddy. It is a boot disk
      - sdb: Kingston SV300S37A60G SSD connected into the only SATA port
      
      Sample "dmesg --notime | grep -E '^(sd |ata)'" output on wake:
      
      sd 0:0:0:0: [sda] Starting disk
      sd 2:0:0:0: [sdb] Starting disk
      ata4: SATA link down (SStatus 4 SControl 300)
      ata3: SATA link down (SStatus 4 SControl 300)
      ata1.00: ACPI cmd ef/03:0c:00:00:00:a0 (SET FEATURES) filtered out
      ata1.00: ACPI cmd ef/03:42:00:00:00:a0 (SET FEATURES) filtered out
      ata1: FORCE: cable set to 80c
      ata5: SATA link down (SStatus 0 SControl 300)
      ata3: SATA link down (SStatus 4 SControl 300)
      ata3: SATA link down (SStatus 4 SControl 300)
      ata3.00: disabled
      sd 2:0:0:0: rejecting I/O to offline device
      ata3.00: detaching (SCSI 2:0:0:0)
      sd 2:0:0:0: [sdb] Start/Stop Unit failed: Result: hostbyte=DID_NO_CONNECT
      	driverbyte=DRIVER_OK
      sd 2:0:0:0: [sdb] Synchronizing SCSI cache
      sd 2:0:0:0: [sdb] Synchronize Cache(10) failed: Result:
      	hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
      sd 2:0:0:0: [sdb] Stopping disk
      sd 2:0:0:0: [sdb] Start/Stop Unit failed: Result: hostbyte=DID_BAD_TARGET
      	driverbyte=DRIVER_OK
      
      Commit c312ef17 dropped ahci_pci_reset_controller() which internally
      calls ahci_reset_controller() and applies the PCS quirk if needed after
      that. It was called each time a reset was required instead of just
      ahci_reset_controller(). This patch puts the function back in place.
      
      Fixes: c312ef17
      
       ("libata/ahci: Drop PCS quirk for Denverton and beyond")
      Signed-off-by: default avatarAdam Vodopjan <grozzly@protonmail.com>
      Signed-off-by: default avatarDamien Le Moal <damien.lemoal@opensource.wdc.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      aa9732da