Skip to content
Snippets Groups Projects
  1. Mar 22, 2023
    • Greg Kroah-Hartman's avatar
    • Lee Jones's avatar
      HID: uhid: Over-ride the default maximum data buffer value with our own · cf6939a8
      Lee Jones authored
      
      commit 1c5d4221 upstream.
      
      The default maximum data buffer size for this interface is UHID_DATA_MAX
      (4k).  When data buffers are being processed, ensure this value is used
      when ensuring the sanity, rather than a value between the user provided
      value and HID_MAX_BUFFER_SIZE (16k).
      
      Signed-off-by: default avatarLee Jones <lee@kernel.org>
      Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
      Signed-off-by: default avatarLee Jones <lee@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      cf6939a8
    • Lee Jones's avatar
      HID: core: Provide new max_buffer_size attribute to over-ride the default · e4bcc58a
      Lee Jones authored
      
      commit b1a37ed0 upstream.
      
      Presently, when a report is processed, its proposed size, provided by
      the user of the API (as Report Size * Report Count) is compared against
      the subsystem default HID_MAX_BUFFER_SIZE (16k).  However, some
      low-level HID drivers allocate a reduced amount of memory to their
      buffers (e.g. UHID only allocates UHID_DATA_MAX (4k) buffers), rending
      this check inadequate in some cases.
      
      In these circumstances, if the received report ends up being smaller
      than the proposed report size, the remainder of the buffer is zeroed.
      That is, the space between sizeof(csize) (size of the current report)
      and the rsize (size proposed i.e. Report Size * Report Count), which can
      be handled up to HID_MAX_BUFFER_SIZE (16k).  Meaning that memset()
      shoots straight past the end of the buffer boundary and starts zeroing
      out in-use values, often resulting in calamity.
      
      This patch introduces a new variable into 'struct hid_ll_driver' where
      individual low-level drivers can over-ride the default maximum value of
      HID_MAX_BUFFER_SIZE (16k) with something more sympathetic to the
      interface.
      
      Signed-off-by: default avatarLee Jones <lee@kernel.org>
      Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
      [Lee: Backported to v4.19.y]
      Signed-off-by: default avatarLee Jones <lee@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      e4bcc58a
    • Biju Das's avatar
      serial: 8250_em: Fix UART port type · 1715b382
      Biju Das authored
      
      commit 32e293be upstream.
      
      As per HW manual for  EMEV2 "R19UH0040EJ0400 Rev.4.00", the UART
      IP found on EMMA mobile SoC is Register-compatible with the
      general-purpose 16750 UART chip. Fix UART port type as 16750 and
      enable 64-bytes fifo support.
      
      Fixes: 22886ee9 ("serial8250-em: Emma Mobile UART driver V2")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarBiju Das <biju.das.jz@bp.renesas.com>
      Link: https://lore.kernel.org/r/20230227114152.22265-2-biju.das.jz@bp.renesas.com
      
      
      [biju: manually fixed the conflicts]
      Signed-off-by: default avatarBiju Das <biju.das.jz@bp.renesas.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      1715b382
    • John Harrison's avatar
      drm/i915: Don't use stolen memory for ring buffers with LLC · 2c04adc4
      John Harrison authored
      
      commit 690e0ec8 upstream.
      
      Direction from hardware is that stolen memory should never be used for
      ring buffer allocations on platforms with LLC. There are too many
      caching pitfalls due to the way stolen memory accesses are routed. So
      it is safest to just not use it.
      
      Signed-off-by: default avatarJohn Harrison <John.C.Harrison@Intel.com>
      Fixes: c58b735f ("drm/i915: Allocate rings from stolen")
      Cc: Chris Wilson <chris@chris-wilson.co.uk>
      Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
      Cc: Jani Nikula <jani.nikula@linux.intel.com>
      Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
      Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
      Cc: intel-gfx@lists.freedesktop.org
      Cc: <stable@vger.kernel.org> # v4.9+
      Tested-by: default avatarJouni Högander <jouni.hogander@intel.com>
      Reviewed-by: default avatarDaniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20230216011101.1909009-2-John.C.Harrison@Intel.com
      
      
      (cherry picked from commit f54c1f6c)
      Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
      Signed-off-by: default avatarJohn Harrison <John.C.Harrison@Intel.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      2c04adc4
    • Nikita Zhandarovich's avatar
      x86/mm: Fix use of uninitialized buffer in sme_enable() · ffdf8d81
      Nikita Zhandarovich authored
      
      commit cbebd68f upstream.
      
      cmdline_find_option() may fail before doing any initialization of
      the buffer array. This may lead to unpredictable results when the same
      buffer is used later in calls to strncmp() function.  Fix the issue by
      returning early if cmdline_find_option() returns an error.
      
      Found by Linux Verification Center (linuxtesting.org) with static
      analysis tool SVACE.
      
      Fixes: aca20d54 ("x86/mm: Add support to make use of Secure Memory Encryption")
      Signed-off-by: default avatarNikita Zhandarovich <n.zhandarovich@fintech.ru>
      Signed-off-by: default avatarBorislav Petkov (AMD) <bp@alien8.de>
      Acked-by: default avatarTom Lendacky <thomas.lendacky@amd.com>
      Cc: <stable@kernel.org>
      Link: https://lore.kernel.org/r/20230306160656.14844-1-n.zhandarovich@fintech.ru
      
      
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      ffdf8d81
    • Helge Deller's avatar
      fbdev: stifb: Provide valid pixelclock and add fb_check_var() checks · e6d5a0a1
      Helge Deller authored
      
      commit 203873a5 upstream.
      
      Find a valid modeline depending on the machine graphic card
      configuration and add the fb_check_var() function to validate
      Xorg provided graphics settings.
      
      Signed-off-by: default avatarHelge Deller <deller@gmx.de>
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      e6d5a0a1
    • Chen Zhongjin's avatar
      ftrace: Fix invalid address access in lookup_rec() when index is 0 · 7569ee04
      Chen Zhongjin authored
      commit ee92fa44 upstream.
      
      KASAN reported follow problem:
      
       BUG: KASAN: use-after-free in lookup_rec
       Read of size 8 at addr ffff000199270ff0 by task modprobe
       CPU: 2 Comm: modprobe
       Call trace:
        kasan_report
        __asan_load8
        lookup_rec
        ftrace_location
        arch_check_ftrace_location
        check_kprobe_address_safe
        register_kprobe
      
      When checking pg->records[pg->index - 1].ip in lookup_rec(), it can get a
      pg which is newly added to ftrace_pages_start in ftrace_process_locs().
      Before the first pg->index++, index is 0 and accessing pg->records[-1].ip
      will cause this problem.
      
      Don't check the ip when pg->index is 0.
      
      Link: https://lore.kernel.org/linux-trace-kernel/20230309080230.36064-1-chenzhongjin@huawei.com
      
      
      
      Cc: stable@vger.kernel.org
      Fixes: 9644302e ("ftrace: Speed up search by skipping pages by address")
      Suggested-by: default avatarSteven Rostedt (Google) <rostedt@goodmis.org>
      Signed-off-by: default avatarChen Zhongjin <chenzhongjin@huawei.com>
      Signed-off-by: default avatarSteven Rostedt (Google) <rostedt@goodmis.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      7569ee04
    • Steven Rostedt (Google)'s avatar
      tracing: Make tracepoint lockdep check actually test something · 4bc5a4df
      Steven Rostedt (Google) authored
      commit c2679254 upstream.
      
      A while ago where the trace events had the following:
      
         rcu_read_lock_sched_notrace();
         rcu_dereference_sched(...);
         rcu_read_unlock_sched_notrace();
      
      If the tracepoint is enabled, it could trigger RCU issues if called in
      the wrong place. And this warning was only triggered if lockdep was
      enabled. If the tracepoint was never enabled with lockdep, the bug would
      not be caught. To handle this, the above sequence was done when lockdep
      was enabled regardless if the tracepoint was enabled or not (although the
      always enabled code really didn't do anything, it would still trigger a
      warning).
      
      But a lot has changed since that lockdep code was added. One is, that
      sequence no longer triggers any warning. Another is, the tracepoint when
      enabled doesn't even do that sequence anymore.
      
      The main check we care about today is whether RCU is "watching" or not.
      So if lockdep is enabled, always check if rcu_is_watching() which will
      trigger a warning if it is not (tracepoints require RCU to be watching).
      
      Note, that old sequence did add a bit of overhead when lockdep was enabled,
      and with the latest kernel updates, would cause the system to slow down
      enough to trigger kernel "stalled" warnings.
      
      Link: http://lore.kernel.org/lkml/20140806181801.GA4605@redhat.com
      Link: http://lore.kernel.org/lkml/20140807175204.C257CAC5@viggo.jf.intel.com
      Link: https://lore.kernel.org/lkml/20230307184645.521db5c9@gandalf.local.home/
      Link: https://lore.kernel.org/linux-trace-kernel/20230310172856.77406446@gandalf.local.home
      
      
      
      Cc: stable@vger.kernel.org
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Dave Hansen <dave.hansen@linux.intel.com>
      Cc: "Paul E. McKenney" <paulmck@kernel.org>
      Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
      Cc: Joel Fernandes <joel@joelfernandes.org>
      Acked-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
      Acked-by: default avatarPaul E. McKenney <paulmck@kernel.org>
      Fixes: e6753f23 ("tracepoint: Make rcuidle tracepoint callers use SRCU")
      Signed-off-by: default avatarSteven Rostedt (Google) <rostedt@goodmis.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      4bc5a4df
    • Steven Rostedt (Google)'s avatar
      tracing: Check field value in hist_field_name() · 508db45b
      Steven Rostedt (Google) authored
      commit 9f116f76 upstream.
      
      The function hist_field_name() cannot handle being passed a NULL field
      parameter. It should never be NULL, but due to a previous bug, NULL was
      passed to the function and the kernel crashed due to a NULL dereference.
      Mark Rutland reported this to me on IRC.
      
      The bug was fixed, but to prevent future bugs from crashing the kernel,
      check the field and add a WARN_ON() if it is NULL.
      
      Link: https://lkml.kernel.org/r/20230302020810.762384440@goodmis.org
      
      
      
      Cc: stable@vger.kernel.org
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Andrew Morton <akpm@linux-foundation.org>
      Reported-by: default avatarMark Rutland <mark.rutland@arm.com>
      Fixes: c6afad49 ("tracing: Add hist trigger 'sym' and 'sym-offset' modifiers")
      Tested-by: default avatarMark Rutland <mark.rutland@arm.com>
      Signed-off-by: default avatarSteven Rostedt (Google) <rostedt@goodmis.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      508db45b
    • Michael Karcher's avatar
      sh: intc: Avoid spurious sizeof-pointer-div warning · a7971d28
      Michael Karcher authored
      [ Upstream commit 25087082 ]
      
      GCC warns about the pattern sizeof(void*)/sizeof(void), as it looks like
      the abuse of a pattern to calculate the array size. This pattern appears
      in the unevaluated part of the ternary operator in _INTC_ARRAY if the
      parameter is NULL.
      
      The replacement uses an alternate approach to return 0 in case of NULL
      which does not generate the pattern sizeof(void*)/sizeof(void), but still
      emits the warning if _INTC_ARRAY is called with a nonarray parameter.
      
      This patch is required for successful compilation with -Werror enabled.
      
      The idea to use _Generic for type distinction is taken from Comment #7
      in https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108483
      
       by Jakub Jelinek
      
      Signed-off-by: default avatarMichael Karcher <kernel@mkarcher.dialup.fu-berlin.de>
      Acked-by: Randy Dunlap <rdunlap@infradead.org> # build-tested
      Link: https://lore.kernel.org/r/619fa552-c988-35e5-b1d7-fe256c46a272@mkarcher.dialup.fu-berlin.de
      
      
      Signed-off-by: default avatarJohn Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      a7971d28
    • Qu Huang's avatar
      drm/amdkfd: Fix an illegal memory access · 5a3fb3b7
      Qu Huang authored
      
      [ Upstream commit 4fc8fff3 ]
      
      In the kfd_wait_on_events() function, the kfd_event_waiter structure is
      allocated by alloc_event_waiters(), but the event field of the waiter
      structure is not initialized; When copy_from_user() fails in the
      kfd_wait_on_events() function, it will enter exception handling to
      release the previously allocated memory of the waiter structure;
      Due to the event field of the waiters structure being accessed
      in the free_waiters() function, this results in illegal memory access
      and system crash, here is the crash log:
      
      localhost kernel: RIP: 0010:native_queued_spin_lock_slowpath+0x185/0x1e0
      localhost kernel: RSP: 0018:ffffaa53c362bd60 EFLAGS: 00010082
      localhost kernel: RAX: ff3d3d6bff4007cb RBX: 0000000000000282 RCX: 00000000002c0000
      localhost kernel: RDX: ffff9e855eeacb80 RSI: 000000000000279c RDI: ffffe7088f6a21d0
      localhost kernel: RBP: ffffe7088f6a21d0 R08: 00000000002c0000 R09: ffffaa53c362be64
      localhost kernel: R10: ffffaa53c362bbd8 R11: 0000000000000001 R12: 0000000000000002
      localhost kernel: R13: ffff9e7ead15d600 R14: 0000000000000000 R15: ffff9e7ead15d698
      localhost kernel: FS:  0000152a3d111700(0000) GS:ffff9e855ee80000(0000) knlGS:0000000000000000
      localhost kernel: CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      localhost kernel: CR2: 0000152938000010 CR3: 000000044d7a4000 CR4: 00000000003506e0
      localhost kernel: Call Trace:
      localhost kernel: _raw_spin_lock_irqsave+0x30/0x40
      localhost kernel: remove_wait_queue+0x12/0x50
      localhost kernel: kfd_wait_on_events+0x1b6/0x490 [hydcu]
      localhost kernel: ? ftrace_graph_caller+0xa0/0xa0
      localhost kernel: kfd_ioctl+0x38c/0x4a0 [hydcu]
      localhost kernel: ? kfd_ioctl_set_trap_handler+0x70/0x70 [hydcu]
      localhost kernel: ? kfd_ioctl_create_queue+0x5a0/0x5a0 [hydcu]
      localhost kernel: ? ftrace_graph_caller+0xa0/0xa0
      localhost kernel: __x64_sys_ioctl+0x8e/0xd0
      localhost kernel: ? syscall_trace_enter.isra.18+0x143/0x1b0
      localhost kernel: do_syscall_64+0x33/0x80
      localhost kernel: entry_SYSCALL_64_after_hwframe+0x44/0xa9
      localhost kernel: RIP: 0033:0x152a4dff68d7
      
      Allocate the structure with kcalloc, and remove redundant 0-initialization
      and a redundant loop condition check.
      
      Signed-off-by: default avatarQu Huang <qu.huang@linux.dev>
      Signed-off-by: default avatarFelix Kuehling <Felix.Kuehling@amd.com>
      Reviewed-by: default avatarFelix Kuehling <Felix.Kuehling@amd.com>
      Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      5a3fb3b7
    • Baokun Li's avatar
      ext4: fix task hung in ext4_xattr_delete_inode · 64b72f5e
      Baokun Li authored
      [ Upstream commit 0f7bfd6f ]
      
      Syzbot reported a hung task problem:
      ==================================================================
      INFO: task syz-executor232:5073 blocked for more than 143 seconds.
            Not tainted 6.2.0-rc2-syzkaller-00024-g512dee0c00ad #0
      "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
      task:syz-exec232 state:D stack:21024 pid:5073 ppid:5072 flags:0x00004004
      Call Trace:
       <TASK>
       context_switch kernel/sched/core.c:5244 [inline]
       __schedule+0x995/0xe20 kernel/sched/core.c:6555
       schedule+0xcb/0x190 kernel/sched/core.c:6631
       __wait_on_freeing_inode fs/inode.c:2196 [inline]
       find_inode_fast+0x35a/0x4c0 fs/inode.c:950
       iget_locked+0xb1/0x830 fs/inode.c:1273
       __ext4_iget+0x22e/0x3ed0 fs/ext4/inode.c:4861
       ext4_xattr_inode_iget+0x68/0x4e0 fs/ext4/xattr.c:389
       ext4_xattr_inode_dec_ref_all+0x1a7/0xe50 fs/ext4/xattr.c:1148
       ext4_xattr_delete_inode+0xb04/0xcd0 fs/ext4/xattr.c:2880
       ext4_evict_inode+0xd7c/0x10b0 fs/ext4/inode.c:296
       evict+0x2a4/0x620 fs/inode.c:664
       ext4_orphan_cleanup+0xb60/0x1340 fs/ext4/orphan.c:474
       __ext4_fill_super fs/ext4/super.c:5516 [inline]
       ext4_fill_super+0x81cd/0x8700 fs/ext4/super.c:5644
       get_tree_bdev+0x400/0x620 fs/super.c:1282
       vfs_get_tree+0x88/0x270 fs/super.c:1489
       do_new_mount+0x289/0xad0 fs/namespace.c:3145
       do_mount fs/namespace.c:3488 [inline]
       __do_sys_mount fs/namespace.c:3697 [inline]
       __se_sys_mount+0x2d3/0x3c0 fs/namespace.c:3674
       do_syscall_x64 arch/x86/entry/common.c:50 [inline]
       do_syscall_64+0x3d/0xb0 arch/x86/entry/common.c:80
       entry_SYSCALL_64_after_hwframe+0x63/0xcd
      RIP: 0033:0x7fa5406fd5ea
      RSP: 002b:00007ffc7232f968 EFLAGS: 00000202 ORIG_RAX: 00000000000000a5
      RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 00007fa5406fd5ea
      RDX: 0000000020000440 RSI: 0000000020000000 RDI: 00007ffc7232f970
      RBP: 00007ffc7232f970 R08: 00007ffc7232f9b0 R09: 0000000000000432
      R10: 0000000000804a03 R11: 0000000000000202 R12: 0000000000000004
      R13: 0000555556a7a2c0 R14: 00007ffc7232f9b0 R15: 0000000000000000
       </TASK>
      ==================================================================
      
      The problem is that the inode contains an xattr entry with ea_inum of 15
      when cleaning up an orphan inode <15>. When evict inode <15>, the reference
      counting of the corresponding EA inode is decreased. When EA inode <15> is
      found by find_inode_fast() in __ext4_iget(), it is found that the EA inode
      holds the I_FREEING flag and waits for the EA inode to complete deletion.
      As a result, when inode <15> is being deleted, we wait for inode <15> to
      complete the deletion, resulting in an infinite loop and triggering Hung
      Task. To solve this problem, we only need to check whether the ino of EA
      inode and parent is the same before getting EA inode.
      
      Link: https://syzkaller.appspot.com/bug?extid=77d6fcc37bbb92f26048
      
      
      Reported-by: default avatar <syzbot+77d6fcc37bbb92f26048@syzkaller.appspotmail.com>
      Signed-off-by: default avatarBaokun Li <libaokun1@huawei.com>
      Reviewed-by: default avatarJan Kara <jack@suse.cz>
      Link: https://lore.kernel.org/r/20230110133436.996350-1-libaokun1@huawei.com
      
      
      Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      64b72f5e
    • Baokun Li's avatar
      ext4: fail ext4_iget if special inode unallocated · 3aea195a
      Baokun Li authored
      [ Upstream commit 5cd74028 ]
      
      In ext4_fill_super(), EXT4_ORPHAN_FS flag is cleared after
      ext4_orphan_cleanup() is executed. Therefore, when __ext4_iget() is
      called to get an inode whose i_nlink is 0 when the flag exists, no error
      is returned. If the inode is a special inode, a null pointer dereference
      may occur. If the value of i_nlink is 0 for any inodes (except boot loader
      inodes) got by using the EXT4_IGET_SPECIAL flag, the current file system
      is corrupted. Therefore, make the ext4_iget() function return an error if
      it gets such an abnormal special inode.
      
      Link: https://bugzilla.kernel.org/show_bug.cgi?id=199179
      Link: https://bugzilla.kernel.org/show_bug.cgi?id=216541
      Link: https://bugzilla.kernel.org/show_bug.cgi?id=216539
      
      
      Reported-by: default avatarLuís Henriques <lhenriques@suse.de>
      Suggested-by: default avatarTheodore Ts'o <tytso@mit.edu>
      Signed-off-by: default avatarBaokun Li <libaokun1@huawei.com>
      Reviewed-by: default avatarJan Kara <jack@suse.cz>
      Link: https://lore.kernel.org/r/20230107032126.4165860-2-libaokun1@huawei.com
      
      
      Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      3aea195a
    • Yifei Liu's avatar
      jffs2: correct logic when creating a hole in jffs2_write_begin · 38dede42
      Yifei Liu authored
      
      [ Upstream commit 23892d38 ]
      
      Bug description and fix:
      
      1. Write data to a file, say all 1s from offset 0 to 16.
      
      2. Truncate the file to a smaller size, say 8 bytes.
      
      3. Write new bytes (say 2s) from an offset past the original size of the
      file, say at offset 20, for 4 bytes.  This is supposed to create a "hole"
      in the file, meaning that the bytes from offset 8 (where it was truncated
      above) up to the new write at offset 20, should all be 0s (zeros).
      
      4. Flush all caches using "echo 3 > /proc/sys/vm/drop_caches" (or unmount
      and remount) the f/s.
      
      5. Check the content of the file.  It is wrong.  The 1s that used to be
      between bytes 9 and 16, before the truncation, have REAPPEARED (they should
      be 0s).
      
      We wrote a script and helper C program to reproduce the bug
      (reproduce_jffs2_write_begin_issue.sh, write_file.c, and Makefile).  We can
      make them available to anyone.
      
      The above example is shown when writing a small file within the same first
      page.  But the bug happens for larger files, as long as steps 1, 2, and 3
      above all happen within the same page.
      
      The problem was traced to the jffs2_write_begin code, where it goes into an
      'if' statement intended to handle writes past the current EOF (i.e., writes
      that may create a hole).  The code computes a 'pageofs' that is the floor
      of the write position (pos), aligned to the page size boundary.  In other
      words, 'pageofs' will never be larger than 'pos'.  The code then sets the
      internal jffs2_raw_inode->isize to the size of max(current inode size,
      pageofs) but that is wrong: the new file size should be the 'pos', which is
      larger than both the current inode size and pageofs.
      
      Similarly, the code incorrectly sets the internal jffs2_raw_inode->dsize to
      the difference between the pageofs minus current inode size; instead it
      should be the current pos minus the current inode size.  Finally,
      inode->i_size was also set incorrectly.
      
      The patch below fixes this bug.  The bug was discovered using a new tool
      for finding f/s bugs using model checking, called MCFS (Model Checking File
      Systems).
      
      Signed-off-by: default avatarYifei Liu <yifeliu@cs.stonybrook.edu>
      Signed-off-by: default avatarErez Zadok <ezk@cs.stonybrook.edu>
      Signed-off-by: default avatarManish Adkar <madkar@cs.stonybrook.edu>
      Signed-off-by: default avatarRichard Weinberger <richard@nod.at>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      38dede42
    • Tobias Schramm's avatar
      mmc: atmel-mci: fix race between stop command and start of next command · 913e215c
      Tobias Schramm authored
      
      [ Upstream commit eca5bd66 ]
      
      This commit fixes a race between completion of stop command and start of a
      new command.
      Previously the command ready interrupt was enabled before stop command
      was written to the command register. This caused the command ready
      interrupt to fire immediately since the CMDRDY flag is asserted constantly
      while there is no command in progress.
      Consequently the command state machine will immediately advance to the
      next state when the tasklet function is executed again, no matter
      actual completion state of the stop command.
      Thus a new command can then be dispatched immediately, interrupting and
      corrupting the stop command on the CMD line.
      Fix that by dropping the command ready interrupt enable before calling
      atmci_send_stop_cmd. atmci_send_stop_cmd does already enable the
      command ready interrupt, no further writes to ATMCI_IER are necessary.
      
      Signed-off-by: default avatarTobias Schramm <t.schramm@manjaro.org>
      Acked-by: default avatarLudovic Desroches <ludovic.desroches@microchip.com>
      Link: https://lore.kernel.org/r/20221230194315.809903-2-t.schramm@manjaro.org
      
      
      Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      913e215c
    • Linus Torvalds's avatar
      media: m5mols: fix off-by-one loop termination error · 5deeac0b
      Linus Torvalds authored
      
      [ Upstream commit efbcbb12 ]
      
      The __find_restype() function loops over the m5mols_default_ffmt[]
      array, and the termination condition ends up being wrong: instead of
      stopping when the iterator becomes the size of the array it traverses,
      it stops after it has already overshot the array.
      
      Now, in practice this doesn't likely matter, because the code will
      always find the entry it looks for, and will thus return early and never
      hit that last extra iteration.
      
      But it turns out that clang will unroll the loop fully, because it has
      only two iterations (well, three due to the off-by-one bug), and then
      clang will end up just giving up in the middle of the loop unrolling
      when it notices that the code walks past the end of the array.
      
      And that made 'objtool' very unhappy indeed, because the generated code
      just falls off the edge of the universe, and ends up falling through to
      the next function, causing this warning:
      
         drivers/media/i2c/m5mols/m5mols.o: warning: objtool: m5mols_set_fmt() falls through to next function m5mols_get_frame_desc()
      
      Fix the loop ending condition.
      
      Reported-by: default avatarJens Axboe <axboe@kernel.dk>
      Analyzed-by: default avatarMiguel Ojeda <miguel.ojeda.sandonis@gmail.com>
      Analyzed-by: default avatarNick Desaulniers <ndesaulniers@google.com>
      Link: https://lore.kernel.org/linux-block/CAHk-=wgTSdKYbmB1JYM5vmHMcD9J9UZr0mn7BOYM_LudrP+Xvw@mail.gmail.com/
      
      
      Fixes: bc125106 ("[media] Add support for M-5MOLS 8 Mega Pixel camera ISP")
      Cc: HeungJun, Kim <riverful.kim@samsung.com>
      Cc: Sylwester Nawrocki <s.nawrocki@samsung.com>
      Cc: Kyungmin Park <kyungmin.park@samsung.com>
      Cc: Mauro Carvalho Chehab <mchehab@redhat.com>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      5deeac0b
    • Zheng Wang's avatar
      hwmon: (xgene) Fix use after free bug in xgene_hwmon_remove due to race condition · e0a37b43
      Zheng Wang authored
      
      [ Upstream commit cb090e64 ]
      
      In xgene_hwmon_probe, &ctx->workq is bound with xgene_hwmon_evt_work.
      Then it will be started.
      
      If we remove the driver which will call xgene_hwmon_remove to clean up,
      there may be unfinished work.
      
      The possible sequence is as follows:
      
      Fix it by finishing the work before cleanup in xgene_hwmon_remove.
      
      CPU0                  CPU1
      
                          |xgene_hwmon_evt_work
      xgene_hwmon_remove   |
      kfifo_free(&ctx->async_msg_fifo);|
                          |
                          |kfifo_out_spinlocked
                          |//use &ctx->async_msg_fifo
      Fixes: 2ca492e2 ("hwmon: (xgene) Fix crash when alarm occurs before driver probe")
      Signed-off-by: default avatarZheng Wang <zyytlz.wz@163.com>
      Link: https://lore.kernel.org/r/20230310084007.1403388-1-zyytlz.wz@163.com
      
      
      Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      e0a37b43
    • Tony O'Brien's avatar
      hwmon: (adt7475) Fix masking of hysteresis registers · 55d01536
      Tony O'Brien authored
      
      [ Upstream commit 48e81868 ]
      
      The wrong bits are masked in the hysteresis register; indices 0 and 2
      should zero bits [7:4] and preserve bits [3:0], and index 1 should zero
      bits [3:0] and preserve bits [7:4].
      
      Fixes: 1c301fc5 ("hwmon: Add a driver for the ADT7475 hardware monitoring chip")
      Signed-off-by: default avatarTony O'Brien <tony.obrien@alliedtelesis.co.nz>
      Link: https://lore.kernel.org/r/20230222005228.158661-3-tony.obrien@alliedtelesis.co.nz
      
      
      Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      55d01536
    • Tony O'Brien's avatar
      hwmon: (adt7475) Display smoothing attributes in correct order · ad2ae163
      Tony O'Brien authored
      
      [ Upstream commit 5f8d1e3b ]
      
      Throughout the ADT7475 driver, attributes relating to the temperature
      sensors are displayed in the order Remote 1, Local, Remote 2.  Make
      temp_st_show() conform to this expectation so that values set by
      temp_st_store() can be displayed using the correct attribute.
      
      Fixes: 8f05bcc3 ("hwmon: (adt7475) temperature smoothing")
      Signed-off-by: default avatarTony O'Brien <tony.obrien@alliedtelesis.co.nz>
      Link: https://lore.kernel.org/r/20230222005228.158661-2-tony.obrien@alliedtelesis.co.nz
      
      
      Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      ad2ae163
    • Liang He's avatar
      ethernet: sun: add check for the mdesc_grab() · 7b517989
      Liang He authored
      
      [ Upstream commit 90de546d9a0b3c771667af18bb3f80567eabb89b ]
      
      In vnet_port_probe() and vsw_port_probe(), we should
      check the return value of mdesc_grab() as it may
      return NULL which can caused NPD bugs.
      
      Fixes: 5d01fa0c ("ldmvsw: Add ldmvsw.c driver code")
      Fixes: 43fdf274 ("[SPARC64]: Abstract out mdesc accesses for better MD update handling.")
      Signed-off-by: default avatarLiang He <windhl@126.com>
      Reviewed-by: default avatarPiotr Raczynski <piotr.raczynski@intel.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      7b517989
    • Alexandra Winter's avatar
      net/iucv: Fix size of interrupt data · b0d2bb5e
      Alexandra Winter authored
      
      [ Upstream commit 3d87debb ]
      
      iucv_irq_data needs to be 4 bytes larger.
      These bytes are not used by the iucv module, but written by
      the z/VM hypervisor in case a CPU is deconfigured.
      
      Reported as:
      BUG dma-kmalloc-64 (Not tainted): kmalloc Redzone overwritten
      -----------------------------------------------------------------------------
      0x0000000000400564-0x0000000000400567 @offset=1380. First byte 0x80 instead of 0xcc
      Allocated in iucv_cpu_prepare+0x44/0xd0 age=167839 cpu=2 pid=1
      __kmem_cache_alloc_node+0x166/0x450
      kmalloc_node_trace+0x3a/0x70
      iucv_cpu_prepare+0x44/0xd0
      cpuhp_invoke_callback+0x156/0x2f0
      cpuhp_issue_call+0xf0/0x298
      __cpuhp_setup_state_cpuslocked+0x136/0x338
      __cpuhp_setup_state+0xf4/0x288
      iucv_init+0xf4/0x280
      do_one_initcall+0x78/0x390
      do_initcalls+0x11a/0x140
      kernel_init_freeable+0x25e/0x2a0
      kernel_init+0x2e/0x170
      __ret_from_fork+0x3c/0x58
      ret_from_fork+0xa/0x40
      Freed in iucv_init+0x92/0x280 age=167839 cpu=2 pid=1
      __kmem_cache_free+0x308/0x358
      iucv_init+0x92/0x280
      do_one_initcall+0x78/0x390
      do_initcalls+0x11a/0x140
      kernel_init_freeable+0x25e/0x2a0
      kernel_init+0x2e/0x170
      __ret_from_fork+0x3c/0x58
      ret_from_fork+0xa/0x40
      Slab 0x0000037200010000 objects=32 used=30 fp=0x0000000000400640 flags=0x1ffff00000010200(slab|head|node=0|zone=0|
      Object 0x0000000000400540 @offset=1344 fp=0x0000000000000000
      Redzone  0000000000400500: cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc  ................
      Redzone  0000000000400510: cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc  ................
      Redzone  0000000000400520: cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc  ................
      Redzone  0000000000400530: cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc  ................
      Object   0000000000400540: 00 01 00 03 00 00 00 00 00 00 00 00 00 00 00 00  ................
      Object   0000000000400550: f3 86 81 f2 f4 82 f8 82 f0 f0 f0 f0 f0 f0 f0 f2  ................
      Object   0000000000400560: 00 00 00 00 80 00 00 00 cc cc cc cc cc cc cc cc  ................
      Object   0000000000400570: cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc  ................
      Redzone  0000000000400580: cc cc cc cc cc cc cc cc                          ........
      Padding  00000000004005d4: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a  ZZZZZZZZZZZZZZZZ
      Padding  00000000004005e4: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a  ZZZZZZZZZZZZZZZZ
      Padding  00000000004005f4: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a              ZZZZZZZZZZZZ
      CPU: 6 PID: 121030 Comm: 116-pai-crypto. Not tainted 6.3.0-20230221.rc0.git4.99b8246b2d71.300.fc37.s390x+debug #1
      Hardware name: IBM 3931 A01 704 (z/VM 7.3.0)
      Call Trace:
      [<000000032aa034ec>] dump_stack_lvl+0xac/0x100
      [<0000000329f5a6cc>] check_bytes_and_report+0x104/0x140
      [<0000000329f5aa78>] check_object+0x370/0x3c0
      [<0000000329f5ede6>] free_debug_processing+0x15e/0x348
      [<0000000329f5f06a>] free_to_partial_list+0x9a/0x2f0
      [<0000000329f5f4a4>] __slab_free+0x1e4/0x3a8
      [<0000000329f61768>] __kmem_cache_free+0x308/0x358
      [<000000032a91465c>] iucv_cpu_dead+0x6c/0x88
      [<0000000329c2fc66>] cpuhp_invoke_callback+0x156/0x2f0
      [<000000032aa062da>] _cpu_down.constprop.0+0x22a/0x5e0
      [<0000000329c3243e>] cpu_device_down+0x4e/0x78
      [<000000032a61dee0>] device_offline+0xc8/0x118
      [<000000032a61e048>] online_store+0x60/0xe0
      [<000000032a08b6b0>] kernfs_fop_write_iter+0x150/0x1e8
      [<0000000329fab65c>] vfs_write+0x174/0x360
      [<0000000329fab9fc>] ksys_write+0x74/0x100
      [<000000032aa03a5a>] __do_syscall+0x1da/0x208
      [<000000032aa177b2>] system_call+0x82/0xb0
      INFO: lockdep is turned off.
      FIX dma-kmalloc-64: Restoring kmalloc Redzone 0x0000000000400564-0x0000000000400567=0xcc
      FIX dma-kmalloc-64: Object at 0x0000000000400540 not freed
      
      Fixes: 2356f4cb ("[S390]: Rewrite of the IUCV base code, part 2")
      Signed-off-by: default avatarAlexandra Winter <wintera@linux.ibm.com>
      Link: https://lore.kernel.org/r/20230315131435.4113889-1-wintera@linux.ibm.com
      
      
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      b0d2bb5e
    • Szymon Heidrich's avatar
      net: usb: smsc75xx: Move packet length check to prevent kernel panic in skb_pull · 89441504
      Szymon Heidrich authored
      
      [ Upstream commit 43ffe6ca ]
      
      Packet length check needs to be located after size and align_count
      calculation to prevent kernel panic in skb_pull() in case
      rx_cmd_a & RX_CMD_A_RED evaluates to true.
      
      Fixes: d8b22831 ("net: usb: smsc75xx: Limit packet length to skb->len")
      Signed-off-by: default avatarSzymon Heidrich <szymon.heidrich@gmail.com>
      Link: https://lore.kernel.org/r/20230316110540.77531-1-szymon.heidrich@gmail.com
      
      
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      89441504
    • Ido Schimmel's avatar
      ipv4: Fix incorrect table ID in IOCTL path · 1ed6495f
      Ido Schimmel authored
      
      [ Upstream commit 8a2618e1 ]
      
      Commit f96a3d74 ("ipv4: Fix incorrect route flushing when source
      address is deleted") started to take the table ID field in the FIB info
      structure into account when determining if two structures are identical
      or not. This field is initialized using the 'fc_table' field in the
      route configuration structure, which is not set when adding a route via
      IOCTL.
      
      The above can result in user space being able to install two identical
      routes that only differ in the table ID field of their associated FIB
      info.
      
      Fix by initializing the table ID field in the route configuration
      structure in the IOCTL path.
      
      Before the fix:
      
       # ip route add default via 192.0.2.2
       # route add default gw 192.0.2.2
       # ip -4 r show default
       # default via 192.0.2.2 dev dummy10
       # default via 192.0.2.2 dev dummy10
      
      After the fix:
      
       # ip route add default via 192.0.2.2
       # route add default gw 192.0.2.2
       SIOCADDRT: File exists
       # ip -4 r show default
       default via 192.0.2.2 dev dummy10
      
      Audited the code paths to ensure there are no other paths that do not
      properly initialize the route configuration structure when installing a
      route.
      
      Fixes: 5a56a0b3 ("net: Don't delete routes in different VRFs")
      Fixes: f96a3d74 ("ipv4: Fix incorrect route flushing when source address is deleted")
      Reported-by: default avatargaoxingwang <gaoxingwang1@huawei.com>
      Link: https://lore.kernel.org/netdev/20230314144159.2354729-1-gaoxingwang1@huawei.com/
      
      
      Tested-by: default avatargaoxingwang <gaoxingwang1@huawei.com>
      Signed-off-by: default avatarIdo Schimmel <idosch@nvidia.com>
      Reviewed-by: default avatarDavid Ahern <dsahern@kernel.org>
      Link: https://lore.kernel.org/r/20230315124009.4015212-1-idosch@nvidia.com
      
      
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      1ed6495f
    • Liang He's avatar
      block: sunvdc: add check for mdesc_grab() returning NULL · c891037e
      Liang He authored
      
      [ Upstream commit 6030363199e3a6341afb467ddddbed56640cbf6a ]
      
      In vdc_port_probe(), we should check the return value of mdesc_grab() as
      it may return NULL, which can cause potential NPD bug.
      
      Fixes: 43fdf274 ("[SPARC64]: Abstract out mdesc accesses for better MD update handling.")
      Signed-off-by: default avatarLiang He <windhl@126.com>
      Link: https://lore.kernel.org/r/20230315062032.1741692-1-windhl@126.com
      
      
      [axboe: style cleanup]
      Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      c891037e
    • Damien Le Moal's avatar
      nvmet: avoid potential UAF in nvmet_req_complete() · fafcb4b2
      Damien Le Moal authored
      
      [ Upstream commit 6173a77b ]
      
      An nvme target ->queue_response() operation implementation may free the
      request passed as argument. Such implementation potentially could result
      in a use after free of the request pointer when percpu_ref_put() is
      called in nvmet_req_complete().
      
      Avoid such problem by using a local variable to save the sq pointer
      before calling __nvmet_req_complete(), thus avoiding dereferencing the
      req pointer after that function call.
      
      Fixes: a07b4970 ("nvmet: add a generic NVMe target")
      Signed-off-by: default avatarDamien Le Moal <damien.lemoal@opensource.wdc.com>
      Reviewed-by: default avatarChaitanya Kulkarni <kch@nvidia.com>
      Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      fafcb4b2
    • Szymon Heidrich's avatar
      net: usb: smsc75xx: Limit packet length to skb->len · 53966d57
      Szymon Heidrich authored
      
      [ Upstream commit d8b22831 ]
      
      Packet length retrieved from skb data may be larger than
      the actual socket buffer length (up to 9026 bytes). In such
      case the cloned skb passed up the network stack will leak
      kernel memory contents.
      
      Fixes: d0cad871 ("smsc75xx: SMSC LAN75xx USB gigabit ethernet adapter driver")
      Signed-off-by: default avatarSzymon Heidrich <szymon.heidrich@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      53966d57
    • Zheng Wang's avatar
      nfc: st-nci: Fix use after free bug in ndlc_remove due to race condition · 3405eb64
      Zheng Wang authored
      
      [ Upstream commit 5000fe6c ]
      
      This bug influences both st_nci_i2c_remove and st_nci_spi_remove.
      Take st_nci_i2c_remove as an example.
      
      In st_nci_i2c_probe, it called ndlc_probe and bound &ndlc->sm_work
      with llt_ndlc_sm_work.
      
      When it calls ndlc_recv or timeout handler, it will finally call
      schedule_work to start the work.
      
      When we call st_nci_i2c_remove to remove the driver, there
      may be a sequence as follows:
      
      Fix it by finishing the work before cleanup in ndlc_remove
      
      CPU0                  CPU1
      
                          |llt_ndlc_sm_work
      st_nci_i2c_remove   |
        ndlc_remove       |
           st_nci_remove  |
           nci_free_device|
           kfree(ndev)    |
      //free ndlc->ndev   |
                          |llt_ndlc_rcv_queue
                          |nci_recv_frame
                          |//use ndlc->ndev
      
      Fixes: 35630df6 ("NFC: st21nfcb: Add driver for STMicroelectronics ST21NFCB NFC chip")
      Signed-off-by: default avatarZheng Wang <zyytlz.wz@163.com>
      Reviewed-by: default avatarKrzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
      Link: https://lore.kernel.org/r/20230312160837.2040857-1-zyytlz.wz@163.com
      
      
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      3405eb64
    • Heiner Kallweit's avatar
      net: phy: smsc: bail out in lan87xx_read_status if genphy_read_status fails · cf98933c
      Heiner Kallweit authored
      
      [ Upstream commit c22c3bbf ]
      
      If genphy_read_status fails then further access to the PHY may result
      in unpredictable behavior. To prevent this bail out immediately if
      genphy_read_status fails.
      
      Fixes: 4223dbff ("net: phy: smsc: Re-enable EDPD mode for LAN87xx")
      Signed-off-by: default avatarHeiner Kallweit <hkallweit1@gmail.com>
      Reviewed-by: default avatarSimon Horman <simon.horman@corigine.com>
      Link: https://lore.kernel.org/r/026aa4f2-36f5-1c10-ab9f-cdb17dda6ac4@gmail.com
      
      
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      cf98933c
    • Eric Dumazet's avatar
      net: tunnels: annotate lockless accesses to dev->needed_headroom · 51f3bd37
      Eric Dumazet authored
      
      [ Upstream commit 4b397c06 ]
      
      IP tunnels can apparently update dev->needed_headroom
      in their xmit path.
      
      This patch takes care of three tunnels xmit, and also the
      core LL_RESERVED_SPACE() and LL_RESERVED_SPACE_EXTRA()
      helpers.
      
      More changes might be needed for completeness.
      
      BUG: KCSAN: data-race in ip_tunnel_xmit / ip_tunnel_xmit
      
      read to 0xffff88815b9da0ec of 2 bytes by task 888 on cpu 1:
      ip_tunnel_xmit+0x1270/0x1730 net/ipv4/ip_tunnel.c:803
      __gre_xmit net/ipv4/ip_gre.c:469 [inline]
      ipgre_xmit+0x516/0x570 net/ipv4/ip_gre.c:661
      __netdev_start_xmit include/linux/netdevice.h:4881 [inline]
      netdev_start_xmit include/linux/netdevice.h:4895 [inline]
      xmit_one net/core/dev.c:3580 [inline]
      dev_hard_start_xmit+0x127/0x400 net/core/dev.c:3596
      __dev_queue_xmit+0x1007/0x1eb0 net/core/dev.c:4246
      dev_queue_xmit include/linux/netdevice.h:3051 [inline]
      neigh_direct_output+0x17/0x20 net/core/neighbour.c:1623
      neigh_output include/net/neighbour.h:546 [inline]
      ip_finish_output2+0x740/0x840 net/ipv4/ip_output.c:228
      ip_finish_output+0xf4/0x240 net/ipv4/ip_output.c:316
      NF_HOOK_COND include/linux/netfilter.h:291 [inline]
      ip_output+0xe5/0x1b0 net/ipv4/ip_output.c:430
      dst_output include/net/dst.h:444 [inline]
      ip_local_out+0x64/0x80 net/ipv4/ip_output.c:126
      iptunnel_xmit+0x34a/0x4b0 net/ipv4/ip_tunnel_core.c:82
      ip_tunnel_xmit+0x1451/0x1730 net/ipv4/ip_tunnel.c:813
      __gre_xmit net/ipv4/ip_gre.c:469 [inline]
      ipgre_xmit+0x516/0x570 net/ipv4/ip_gre.c:661
      __netdev_start_xmit include/linux/netdevice.h:4881 [inline]
      netdev_start_xmit include/linux/netdevice.h:4895 [inline]
      xmit_one net/core/dev.c:3580 [inline]
      dev_hard_start_xmit+0x127/0x400 net/core/dev.c:3596
      __dev_queue_xmit+0x1007/0x1eb0 net/core/dev.c:4246
      dev_queue_xmit include/linux/netdevice.h:3051 [inline]
      neigh_direct_output+0x17/0x20 net/core/neighbour.c:1623
      neigh_output include/net/neighbour.h:546 [inline]
      ip_finish_output2+0x740/0x840 net/ipv4/ip_output.c:228
      ip_finish_output+0xf4/0x240 net/ipv4/ip_output.c:316
      NF_HOOK_COND include/linux/netfilter.h:291 [inline]
      ip_output+0xe5/0x1b0 net/ipv4/ip_output.c:430
      dst_output include/net/dst.h:444 [inline]
      ip_local_out+0x64/0x80 net/ipv4/ip_output.c:126
      iptunnel_xmit+0x34a/0x4b0 net/ipv4/ip_tunnel_core.c:82
      ip_tunnel_xmit+0x1451/0x1730 net/ipv4/ip_tunnel.c:813
      __gre_xmit net/ipv4/ip_gre.c:469 [inline]
      ipgre_xmit+0x516/0x570 net/ipv4/ip_gre.c:661
      __netdev_start_xmit include/linux/netdevice.h:4881 [inline]
      netdev_start_xmit include/linux/netdevice.h:4895 [inline]
      xmit_one net/core/dev.c:3580 [inline]
      dev_hard_start_xmit+0x127/0x400 net/core/dev.c:3596
      __dev_queue_xmit+0x1007/0x1eb0 net/core/dev.c:4246
      dev_queue_xmit include/linux/netdevice.h:3051 [inline]
      neigh_direct_output+0x17/0x20 net/core/neighbour.c:1623
      neigh_output include/net/neighbour.h:546 [inline]
      ip_finish_output2+0x740/0x840 net/ipv4/ip_output.c:228
      ip_finish_output+0xf4/0x240 net/ipv4/ip_output.c:316
      NF_HOOK_COND include/linux/netfilter.h:291 [inline]
      ip_output+0xe5/0x1b0 net/ipv4/ip_output.c:430
      dst_output include/net/dst.h:444 [inline]
      ip_local_out+0x64/0x80 net/ipv4/ip_output.c:126
      iptunnel_xmit+0x34a/0x4b0 net/ipv4/ip_tunnel_core.c:82
      ip_tunnel_xmit+0x1451/0x1730 net/ipv4/ip_tunnel.c:813
      __gre_xmit net/ipv4/ip_gre.c:469 [inline]
      ipgre_xmit+0x516/0x570 net/ipv4/ip_gre.c:661
      __netdev_start_xmit include/linux/netdevice.h:4881 [inline]
      netdev_start_xmit include/linux/netdevice.h:4895 [inline]
      xmit_one net/core/dev.c:3580 [inline]
      dev_hard_start_xmit+0x127/0x400 net/core/dev.c:3596
      __dev_queue_xmit+0x1007/0x1eb0 net/core/dev.c:4246
      dev_queue_xmit include/linux/netdevice.h:3051 [inline]
      neigh_direct_output+0x17/0x20 net/core/neighbour.c:1623
      neigh_output include/net/neighbour.h:546 [inline]
      ip_finish_output2+0x740/0x840 net/ipv4/ip_output.c:228
      ip_finish_output+0xf4/0x240 net/ipv4/ip_output.c:316
      NF_HOOK_COND include/linux/netfilter.h:291 [inline]
      ip_output+0xe5/0x1b0 net/ipv4/ip_output.c:430
      dst_output include/net/dst.h:444 [inline]
      ip_local_out+0x64/0x80 net/ipv4/ip_output.c:126
      iptunnel_xmit+0x34a/0x4b0 net/ipv4/ip_tunnel_core.c:82
      ip_tunnel_xmit+0x1451/0x1730 net/ipv4/ip_tunnel.c:813
      __gre_xmit net/ipv4/ip_gre.c:469 [inline]
      ipgre_xmit+0x516/0x570 net/ipv4/ip_gre.c:661
      __netdev_start_xmit include/linux/netdevice.h:4881 [inline]
      netdev_start_xmit include/linux/netdevice.h:4895 [inline]
      xmit_one net/core/dev.c:3580 [inline]
      dev_hard_start_xmit+0x127/0x400 net/core/dev.c:3596
      __dev_queue_xmit+0x1007/0x1eb0 net/core/dev.c:4246
      dev_queue_xmit include/linux/netdevice.h:3051 [inline]
      neigh_direct_output+0x17/0x20 net/core/neighbour.c:1623
      neigh_output include/net/neighbour.h:546 [inline]
      ip_finish_output2+0x740/0x840 net/ipv4/ip_output.c:228
      ip_finish_output+0xf4/0x240 net/ipv4/ip_output.c:316
      NF_HOOK_COND include/linux/netfilter.h:291 [inline]
      ip_output+0xe5/0x1b0 net/ipv4/ip_output.c:430
      dst_output include/net/dst.h:444 [inline]
      ip_local_out+0x64/0x80 net/ipv4/ip_output.c:126
      iptunnel_xmit+0x34a/0x4b0 net/ipv4/ip_tunnel_core.c:82
      ip_tunnel_xmit+0x1451/0x1730 net/ipv4/ip_tunnel.c:813
      __gre_xmit net/ipv4/ip_gre.c:469 [inline]
      ipgre_xmit+0x516/0x570 net/ipv4/ip_gre.c:661
      __netdev_start_xmit include/linux/netdevice.h:4881 [inline]
      netdev_start_xmit include/linux/netdevice.h:4895 [inline]
      xmit_one net/core/dev.c:3580 [inline]
      dev_hard_start_xmit+0x127/0x400 net/core/dev.c:3596
      __dev_queue_xmit+0x1007/0x1eb0 net/core/dev.c:4246
      dev_queue_xmit include/linux/netdevice.h:3051 [inline]
      neigh_direct_output+0x17/0x20 net/core/neighbour.c:1623
      neigh_output include/net/neighbour.h:546 [inline]
      ip_finish_output2+0x740/0x840 net/ipv4/ip_output.c:228
      ip_finish_output+0xf4/0x240 net/ipv4/ip_output.c:316
      NF_HOOK_COND include/linux/netfilter.h:291 [inline]
      ip_output+0xe5/0x1b0 net/ipv4/ip_output.c:430
      dst_output include/net/dst.h:444 [inline]
      ip_local_out+0x64/0x80 net/ipv4/ip_output.c:126
      iptunnel_xmit+0x34a/0x4b0 net/ipv4/ip_tunnel_core.c:82
      ip_tunnel_xmit+0x1451/0x1730 net/ipv4/ip_tunnel.c:813
      __gre_xmit net/ipv4/ip_gre.c:469 [inline]
      ipgre_xmit+0x516/0x570 net/ipv4/ip_gre.c:661
      __netdev_start_xmit include/linux/netdevice.h:4881 [inline]
      netdev_start_xmit include/linux/netdevice.h:4895 [inline]
      xmit_one net/core/dev.c:3580 [inline]
      dev_hard_start_xmit+0x127/0x400 net/core/dev.c:3596
      __dev_queue_xmit+0x1007/0x1eb0 net/core/dev.c:4246
      
      write to 0xffff88815b9da0ec of 2 bytes by task 2379 on cpu 0:
      ip_tunnel_xmit+0x1294/0x1730 net/ipv4/ip_tunnel.c:804
      __gre_xmit net/ipv4/ip_gre.c:469 [inline]
      ipgre_xmit+0x516/0x570 net/ipv4/ip_gre.c:661
      __netdev_start_xmit include/linux/netdevice.h:4881 [inline]
      netdev_start_xmit include/linux/netdevice.h:4895 [inline]
      xmit_one net/core/dev.c:3580 [inline]
      dev_hard_start_xmit+0x127/0x400 net/core/dev.c:3596
      __dev_queue_xmit+0x1007/0x1eb0 net/core/dev.c:4246
      dev_queue_xmit include/linux/netdevice.h:3051 [inline]
      neigh_direct_output+0x17/0x20 net/core/neighbour.c:1623
      neigh_output include/net/neighbour.h:546 [inline]
      ip6_finish_output2+0x9bc/0xc50 net/ipv6/ip6_output.c:134
      __ip6_finish_output net/ipv6/ip6_output.c:195 [inline]
      ip6_finish_output+0x39a/0x4e0 net/ipv6/ip6_output.c:206
      NF_HOOK_COND include/linux/netfilter.h:291 [inline]
      ip6_output+0xeb/0x220 net/ipv6/ip6_output.c:227
      dst_output include/net/dst.h:444 [inline]
      NF_HOOK include/linux/netfilter.h:302 [inline]
      mld_sendpack+0x438/0x6a0 net/ipv6/mcast.c:1820
      mld_send_cr net/ipv6/mcast.c:2121 [inline]
      mld_ifc_work+0x519/0x7b0 net/ipv6/mcast.c:2653
      process_one_work+0x3e6/0x750 kernel/workqueue.c:2390
      worker_thread+0x5f2/0xa10 kernel/workqueue.c:2537
      kthread+0x1ac/0x1e0 kernel/kthread.c:376
      ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:308
      
      value changed: 0x0dd4 -> 0x0e14
      
      Reported by Kernel Concurrency Sanitizer on:
      CPU: 0 PID: 2379 Comm: kworker/0:0 Not tainted 6.3.0-rc1-syzkaller-00002-g8ca09d5fa354-dirty #0
      Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 03/02/2023
      Workqueue: mld mld_ifc_work
      
      Fixes: 8eb30be0 ("ipv6: Create ip6_tnl_xmit")
      Reported-by: default avatarsyzbot <syzkaller@googlegroups.com>
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Link: https://lore.kernel.org/r/20230310191109.2384387-1-edumazet@google.com
      
      
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      51f3bd37
    • Daniil Tatianin's avatar
      qed/qed_dev: guard against a possible division by zero · de69dc87
      Daniil Tatianin authored
      
      [ Upstream commit 1a9dc561 ]
      
      Previously we would divide total_left_rate by zero if num_vports
      happened to be 1 because non_requested_count is calculated as
      num_vports - req_count. Guard against this by validating num_vports at
      the beginning and returning an error otherwise.
      
      Found by Linux Verification Center (linuxtesting.org) with the SVACE
      static analysis tool.
      
      Fixes: bcd197c8 ("qed: Add vport WFQ configuration APIs")
      Signed-off-by: default avatarDaniil Tatianin <d-tatianin@yandex-team.ru>
      Reviewed-by: default avatarSimon Horman <simon.horman@corigine.com>
      Link: https://lore.kernel.org/r/20230309201556.191392-1-d-tatianin@yandex-team.ru
      
      
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      de69dc87
    • Fedor Pchelkin's avatar
      nfc: pn533: initialize struct pn533_out_arg properly · 4c20a07e
      Fedor Pchelkin authored
      
      [ Upstream commit 484b7059 ]
      
      struct pn533_out_arg used as a temporary context for out_urb is not
      initialized properly. Its uninitialized 'phy' field can be dereferenced in
      error cases inside pn533_out_complete() callback function. It causes the
      following failure:
      
      general protection fault, probably for non-canonical address 0xdffffc0000000000: 0000 [#1] PREEMPT SMP KASAN
      KASAN: null-ptr-deref in range [0x0000000000000000-0x0000000000000007]
      CPU: 1 PID: 0 Comm: swapper/1 Not tainted 6.2.0-rc3-next-20230110-syzkaller #0
      Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/26/2022
      RIP: 0010:pn533_out_complete.cold+0x15/0x44 drivers/nfc/pn533/usb.c:441
      Call Trace:
       <IRQ>
       __usb_hcd_giveback_urb+0x2b6/0x5c0 drivers/usb/core/hcd.c:1671
       usb_hcd_giveback_urb+0x384/0x430 drivers/usb/core/hcd.c:1754
       dummy_timer+0x1203/0x32d0 drivers/usb/gadget/udc/dummy_hcd.c:1988
       call_timer_fn+0x1da/0x800 kernel/time/timer.c:1700
       expire_timers+0x234/0x330 kernel/time/timer.c:1751
       __run_timers kernel/time/timer.c:2022 [inline]
       __run_timers kernel/time/timer.c:1995 [inline]
       run_timer_softirq+0x326/0x910 kernel/time/timer.c:2035
       __do_softirq+0x1fb/0xaf6 kernel/softirq.c:571
       invoke_softirq kernel/softirq.c:445 [inline]
       __irq_exit_rcu+0x123/0x180 kernel/softirq.c:650
       irq_exit_rcu+0x9/0x20 kernel/softirq.c:662
       sysvec_apic_timer_interrupt+0x97/0xc0 arch/x86/kernel/apic/apic.c:1107
      
      Initialize the field with the pn533_usb_phy currently used.
      
      Found by Linux Verification Center (linuxtesting.org) with Syzkaller.
      
      Fixes: 9dab880d ("nfc: pn533: Wait for out_urb's completion in pn533_usb_send_frame()")
      Reported-by: default avatar <syzbot+1e608ba4217c96d1952f@syzkaller.appspotmail.com>
      Signed-off-by: default avatarFedor Pchelkin <pchelkin@ispras.ru>
      Reviewed-by: default avatarSimon Horman <simon.horman@corigine.com>
      Link: https://lore.kernel.org/r/20230309165050.207390-1-pchelkin@ispras.ru
      
      
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      4c20a07e
    • Breno Leitao's avatar
      tcp: tcp_make_synack() can be called from process context · e23ca307
      Breno Leitao authored
      
      [ Upstream commit bced3f7db95ff2e6ca29dc4d1c9751ab5e736a09 ]
      
      tcp_rtx_synack() now could be called in process context as explained in
      0a375c82 ("tcp: tcp_rtx_synack() can be called from process
      context").
      
      tcp_rtx_synack() might call tcp_make_synack(), which will touch per-CPU
      variables with preemption enabled. This causes the following BUG:
      
          BUG: using __this_cpu_add() in preemptible [00000000] code: ThriftIO1/5464
          caller is tcp_make_synack+0x841/0xac0
          Call Trace:
           <TASK>
           dump_stack_lvl+0x10d/0x1a0
           check_preemption_disabled+0x104/0x110
           tcp_make_synack+0x841/0xac0
           tcp_v6_send_synack+0x5c/0x450
           tcp_rtx_synack+0xeb/0x1f0
           inet_rtx_syn_ack+0x34/0x60
           tcp_check_req+0x3af/0x9e0
           tcp_rcv_state_process+0x59b/0x2030
           tcp_v6_do_rcv+0x5f5/0x700
           release_sock+0x3a/0xf0
           tcp_sendmsg+0x33/0x40
           ____sys_sendmsg+0x2f2/0x490
           __sys_sendmsg+0x184/0x230
           do_syscall_64+0x3d/0x90
      
      Avoid calling __TCP_INC_STATS() with will touch per-cpu variables. Use
      TCP_INC_STATS() which is safe to be called from context switch.
      
      Fixes: 8336886f ("tcp: TCP Fast Open Server - support TFO listeners")
      Signed-off-by: default avatarBreno Leitao <leitao@debian.org>
      Reviewed-by: default avatarEric Dumazet <edumazet@google.com>
      Link: https://lore.kernel.org/r/20230308190745.780221-1-leitao@debian.org
      
      
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      e23ca307
    • Randy Dunlap's avatar
      clk: HI655X: select REGMAP instead of depending on it · 1e6933f7
      Randy Dunlap authored
      
      [ Upstream commit 0ffad67784a097beccf34d297ddd1b0773b3b8a3 ]
      
      REGMAP is a hidden (not user visible) symbol. Users cannot set it
      directly thru "make *config", so drivers should select it instead of
      depending on it if they need it.
      
      Consistently using "select" or "depends on" can also help reduce
      Kconfig circular dependency issues.
      
      Therefore, change the use of "depends on REGMAP" to "select REGMAP".
      
      Fixes: 3a49afb8 ("clk: enable hi655x common clk automatically")
      Signed-off-by: default avatarRandy Dunlap <rdunlap@infradead.org>
      Cc: Riku Voipio <riku.voipio@linaro.org>
      Cc: Stephen Boyd <sboyd@kernel.org>
      Cc: Michael Turquette <mturquette@baylibre.com>
      Cc: linux-clk@vger.kernel.org
      Link: https://lore.kernel.org/r/20230226053953.4681-3-rdunlap@infradead.org
      
      
      Signed-off-by: default avatarStephen Boyd <sboyd@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      1e6933f7
    • Eric Biggers's avatar
      fs: sysfs_emit_at: Remove PAGE_SIZE alignment check · 2a866458
      Eric Biggers authored
      
      From: Eric Biggers <ebiggers@google.com>
      
      [No upstream commit because this fixes a bug in a backport.]
      
      Before upstream commit 59bb4798 ("mm, sl[aou]b: guarantee natural
      alignment for kmalloc(power-of-two)") which went into v5.4, kmalloc did
      *not* always guarantee that PAGE_SIZE allocations are PAGE_SIZE-aligned.
      
      Upstream commit 2efc459d ("sysfs: Add sysfs_emit and sysfs_emit_at
      to format sysfs output") added two WARN()s that trigger when PAGE_SIZE
      allocations are not PAGE_SIZE-aligned.  This was backported to old
      kernels that don't guarantee PAGE_SIZE alignment.
      
      Commit 10ddfb49 ("fs: sysfs_emit: Remove PAGE_SIZE alignment check")
      in 4.19.y, and its equivalent in 4.14.y and 4.9.y, tried to fix this
      bug.  However, only it handled sysfs_emit(), not sysfs_emit_at().
      
      Fix it in sysfs_emit_at() too.
      
      A reproducer is to build the kernel with the following options:
      
      	CONFIG_SLUB=y
      	CONFIG_SLUB_DEBUG=y
      	CONFIG_SLUB_DEBUG_ON=y
      	CONFIG_PM=y
      	CONFIG_SUSPEND=y
      	CONFIG_PM_WAKELOCKS=y
      
      Then run:
      
      	echo foo > /sys/power/wake_lock && cat /sys/power/wake_lock
      
      Fixes: cb1f69d5 ("sysfs: Add sysfs_emit and sysfs_emit_at to format sysfs output")
      Reported-by: default avatarkernel test robot <yujie.liu@intel.com>
      Link: https://lore.kernel.org/r/202303141634.1e64fd76-yujie.liu@intel.com
      
      
      Signed-off-by: default avatarEric Biggers <ebiggers@google.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      2a866458
    • Eric Biggers's avatar
      ext4: fix cgroup writeback accounting with fs-layer encryption · c3c0387c
      Eric Biggers authored
      
      commit ffec85d5 upstream.
      
      When writing a page from an encrypted file that is using
      filesystem-layer encryption (not inline encryption), ext4 encrypts the
      pagecache page into a bounce page, then writes the bounce page.
      
      It also passes the bounce page to wbc_account_cgroup_owner().  That's
      incorrect, because the bounce page is a newly allocated temporary page
      that doesn't have the memory cgroup of the original pagecache page.
      This makes wbc_account_cgroup_owner() not account the I/O to the owner
      of the pagecache page as it should.
      
      Fix this by always passing the pagecache page to
      wbc_account_cgroup_owner().
      
      Fixes: 001e4a87 ("ext4: implement cgroup writeback support")
      Cc: stable@vger.kernel.org
      Reported-by: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
      Signed-off-by: default avatarEric Biggers <ebiggers@google.com>
      Acked-by: default avatarTejun Heo <tj@kernel.org>
      Link: https://lore.kernel.org/r/20230203005503.141557-1-ebiggers@kernel.org
      
      
      Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      c3c0387c
  2. Mar 17, 2023
    • Greg Kroah-Hartman's avatar
    • Eric Dumazet's avatar
      ila: do not generate empty messages in ila_xlat_nl_cmd_get_mapping() · c631e52a
      Eric Dumazet authored
      
      commit 693aa2c0 upstream.
      
      ila_xlat_nl_cmd_get_mapping() generates an empty skb,
      triggerring a recent sanity check [1].
      
      Instead, return an error code, so that user space
      can get it.
      
      [1]
      skb_assert_len
      WARNING: CPU: 0 PID: 5923 at include/linux/skbuff.h:2527 skb_assert_len include/linux/skbuff.h:2527 [inline]
      WARNING: CPU: 0 PID: 5923 at include/linux/skbuff.h:2527 __dev_queue_xmit+0x1bc0/0x3488 net/core/dev.c:4156
      Modules linked in:
      CPU: 0 PID: 5923 Comm: syz-executor269 Not tainted 6.2.0-syzkaller-18300-g2ebd1fbb946d #0
      Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/21/2023
      pstate: 60400005 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
      pc : skb_assert_len include/linux/skbuff.h:2527 [inline]
      pc : __dev_queue_xmit+0x1bc0/0x3488 net/core/dev.c:4156
      lr : skb_assert_len include/linux/skbuff.h:2527 [inline]
      lr : __dev_queue_xmit+0x1bc0/0x3488 net/core/dev.c:4156
      sp : ffff80001e0d6c40
      x29: ffff80001e0d6e60 x28: dfff800000000000 x27: ffff0000c86328c0
      x26: dfff800000000000 x25: ffff0000c8632990 x24: ffff0000c8632a00
      x23: 0000000000000000 x22: 1fffe000190c6542 x21: ffff0000c8632a10
      x20: ffff0000c8632a00 x19: ffff80001856e000 x18: ffff80001e0d5fc0
      x17: 0000000000000000 x16: ffff80001235d16c x15: 0000000000000000
      x14: 0000000000000000 x13: 0000000000000001 x12: 0000000000000001
      x11: ff80800008353a30 x10: 0000000000000000 x9 : 21567eaf25bfb600
      x8 : 21567eaf25bfb600 x7 : 0000000000000001 x6 : 0000000000000001
      x5 : ffff80001e0d6558 x4 : ffff800015c74760 x3 : ffff800008596744
      x2 : 0000000000000001 x1 : 0000000100000000 x0 : 000000000000000e
      Call trace:
      skb_assert_len include/linux/skbuff.h:2527 [inline]
      __dev_queue_xmit+0x1bc0/0x3488 net/core/dev.c:4156
      dev_queue_xmit include/linux/netdevice.h:3033 [inline]
      __netlink_deliver_tap_skb net/netlink/af_netlink.c:307 [inline]
      __netlink_deliver_tap+0x45c/0x6f8 net/netlink/af_netlink.c:325
      netlink_deliver_tap+0xf4/0x174 net/netlink/af_netlink.c:338
      __netlink_sendskb net/netlink/af_netlink.c:1283 [inline]
      netlink_sendskb+0x6c/0x154 net/netlink/af_netlink.c:1292
      netlink_unicast+0x334/0x8d4 net/netlink/af_netlink.c:1380
      nlmsg_unicast include/net/netlink.h:1099 [inline]
      genlmsg_unicast include/net/genetlink.h:433 [inline]
      genlmsg_reply include/net/genetlink.h:443 [inline]
      ila_xlat_nl_cmd_get_mapping+0x620/0x7d0 net/ipv6/ila/ila_xlat.c:493
      genl_family_rcv_msg_doit net/netlink/genetlink.c:968 [inline]
      genl_family_rcv_msg net/netlink/genetlink.c:1048 [inline]
      genl_rcv_msg+0x938/0xc1c net/netlink/genetlink.c:1065
      netlink_rcv_skb+0x214/0x3c4 net/netlink/af_netlink.c:2574
      genl_rcv+0x38/0x50 net/netlink/genetlink.c:1076
      netlink_unicast_kernel net/netlink/af_netlink.c:1339 [inline]
      netlink_unicast+0x660/0x8d4 net/netlink/af_netlink.c:1365
      netlink_sendmsg+0x800/0xae0 net/netlink/af_netlink.c:1942
      sock_sendmsg_nosec net/socket.c:714 [inline]
      sock_sendmsg net/socket.c:734 [inline]
      ____sys_sendmsg+0x558/0x844 net/socket.c:2479
      ___sys_sendmsg net/socket.c:2533 [inline]
      __sys_sendmsg+0x26c/0x33c net/socket.c:2562
      __do_sys_sendmsg net/socket.c:2571 [inline]
      __se_sys_sendmsg net/socket.c:2569 [inline]
      __arm64_sys_sendmsg+0x80/0x94 net/socket.c:2569
      __invoke_syscall arch/arm64/kernel/syscall.c:38 [inline]
      invoke_syscall+0x98/0x2c0 arch/arm64/kernel/syscall.c:52
      el0_svc_common+0x138/0x258 arch/arm64/kernel/syscall.c:142
      do_el0_svc+0x64/0x198 arch/arm64/kernel/syscall.c:193
      el0_svc+0x58/0x168 arch/arm64/kernel/entry-common.c:637
      el0t_64_sync_handler+0x84/0xf0 arch/arm64/kernel/entry-common.c:655
      el0t_64_sync+0x190/0x194 arch/arm64/kernel/entry.S:591
      irq event stamp: 136484
      hardirqs last enabled at (136483): [<ffff800008350244>] __up_console_sem+0x60/0xb4 kernel/printk/printk.c:345
      hardirqs last disabled at (136484): [<ffff800012358d60>] el1_dbg+0x24/0x80 arch/arm64/kernel/entry-common.c:405
      softirqs last enabled at (136418): [<ffff800008020ea8>] softirq_handle_end kernel/softirq.c:414 [inline]
      softirqs last enabled at (136418): [<ffff800008020ea8>] __do_softirq+0xd4c/0xfa4 kernel/softirq.c:600
      softirqs last disabled at (136371): [<ffff80000802b4a4>] ____do_softirq+0x14/0x20 arch/arm64/kernel/irq.c:80
      ---[ end trace 0000000000000000 ]---
      skb len=0 headroom=0 headlen=0 tailroom=192
      mac=(0,0) net=(0,-1) trans=-1
      shinfo(txflags=0 nr_frags=0 gso(size=0 type=0 segs=0))
      csum(0x0 ip_summed=0 complete_sw=0 valid=0 level=0)
      hash(0x0 sw=0 l4=0) proto=0x0010 pkttype=6 iif=0
      dev name=nlmon0 feat=0x0000000000005861
      
      Fixes: 7f00feaf ("ila: Add generic ILA translation facility")
      Reported-by: default avatarsyzbot <syzkaller@googlegroups.com>
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      c631e52a
    • Kang Chen's avatar
      nfc: fdp: add null check of devm_kmalloc_array in fdp_nci_i2c_read_device_properties · 98f49e69
      Kang Chen authored
      
      commit 11f180a5 upstream.
      
      devm_kmalloc_array may fails, *fw_vsc_cfg might be null and cause
      out-of-bounds write in device_property_read_u8_array later.
      
      Fixes: a06347c0 ("NFC: Add Intel Fields Peak NFC solution driver")
      Signed-off-by: default avatarKang Chen <void0red@gmail.com>
      Reviewed-by: default avatarKrzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
      Reviewed-by: default avatarSimon Horman <simon.horman@corigine.com>
      Link: https://lore.kernel.org/r/20230227093037.907654-1-void0red@gmail.com
      
      
      Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      98f49e69
    • Shigeru Yoshida's avatar
      net: caif: Fix use-after-free in cfusbl_device_notify() · 1793da97
      Shigeru Yoshida authored
      
      commit 9781e98a upstream.
      
      syzbot reported use-after-free in cfusbl_device_notify() [1].  This
      causes a stack trace like below:
      
      BUG: KASAN: use-after-free in cfusbl_device_notify+0x7c9/0x870 net/caif/caif_usb.c:138
      Read of size 8 at addr ffff88807ac4e6f0 by task kworker/u4:6/1214
      
      CPU: 0 PID: 1214 Comm: kworker/u4:6 Not tainted 5.19.0-rc3-syzkaller-00146-g92f20ff72066 #0
      Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
      Workqueue: netns cleanup_net
      Call Trace:
       <TASK>
       __dump_stack lib/dump_stack.c:88 [inline]
       dump_stack_lvl+0xcd/0x134 lib/dump_stack.c:106
       print_address_description.constprop.0.cold+0xeb/0x467 mm/kasan/report.c:313
       print_report mm/kasan/report.c:429 [inline]
       kasan_report.cold+0xf4/0x1c6 mm/kasan/report.c:491
       cfusbl_device_notify+0x7c9/0x870 net/caif/caif_usb.c:138
       notifier_call_chain+0xb5/0x200 kernel/notifier.c:87
       call_netdevice_notifiers_info+0xb5/0x130 net/core/dev.c:1945
       call_netdevice_notifiers_extack net/core/dev.c:1983 [inline]
       call_netdevice_notifiers net/core/dev.c:1997 [inline]
       netdev_wait_allrefs_any net/core/dev.c:10227 [inline]
       netdev_run_todo+0xbc0/0x10f0 net/core/dev.c:10341
       default_device_exit_batch+0x44e/0x590 net/core/dev.c:11334
       ops_exit_list+0x125/0x170 net/core/net_namespace.c:167
       cleanup_net+0x4ea/0xb00 net/core/net_namespace.c:594
       process_one_work+0x996/0x1610 kernel/workqueue.c:2289
       worker_thread+0x665/0x1080 kernel/workqueue.c:2436
       kthread+0x2e9/0x3a0 kernel/kthread.c:376
       ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:302
       </TASK>
      
      When unregistering a net device, unregister_netdevice_many_notify()
      sets the device's reg_state to NETREG_UNREGISTERING, calls notifiers
      with NETDEV_UNREGISTER, and adds the device to the todo list.
      
      Later on, devices in the todo list are processed by netdev_run_todo().
      netdev_run_todo() waits devices' reference count become 1 while
      rebdoadcasting NETDEV_UNREGISTER notification.
      
      When cfusbl_device_notify() is called with NETDEV_UNREGISTER multiple
      times, the parent device might be freed.  This could cause UAF.
      Processing NETDEV_UNREGISTER multiple times also causes inbalance of
      reference count for the module.
      
      This patch fixes the issue by accepting only first NETDEV_UNREGISTER
      notification.
      
      Fixes: 7ad65bf6 ("caif: Add support for CAIF over CDC NCM USB interface")
      CC: sjur.brandeland@stericsson.com <sjur.brandeland@stericsson.com>
      Reported-by: default avatar <syzbot+b563d33852b893653a9e@syzkaller.appspotmail.com>
      Link: https://syzkaller.appspot.com/bug?id=c3bfd8e2450adab3bffe4d80821fbbced600407f
      
       [1]
      Signed-off-by: default avatarShigeru Yoshida <syoshida@redhat.com>
      Link: https://lore.kernel.org/r/20230301163913.391304-1-syoshida@redhat.com
      
      
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      1793da97
Loading