Skip to content

Conversation

@bmastbergen
Copy link
Collaborator

Background

456264b28773c ip6mr: Fix skb_under_panic in ip6mr_cache_report() addresses CVE-2023-53365

9070c051c61de wifi: brcmfmac: fix use-after-free bug in brcmf_netdev_start_xmit() addresses CVE-2022-50408

cffdec228a713 Bluetooth: L2CAP: Fix use-after-free addresses CVE-2023-53305
b837f835eabb0 Bluetooth: L2CAP: Fix user-after-free addresses CVE-2022-50386

Both of the bluetooth fixes above call the function l2cap_chan_hold_unless_zero() which this kernel didn't have. 60f1692d8feb5 Bluetooth: L2CAP: Fix use-after-free caused by l2cap_chan_put was added as a prereq do get that function. That commit had 3 bugfixes of its own:

dcd9e0a158c6e Bluetooth: L2CAP: fix use-after-free in l2cap_conn_del() has CVE-2022-3640 associated with it. f02ba3ae337f6 Bluetooth: L2CAP: Fix build errors in some archs
59f1178f7bea8 Bluetooth: L2CAP: Fix l2cap_global_chan_by_psm regression

Which is how we end up with 8 commits addressing 5 CVE.

Commits

commit 60f1692d8feb508a4f6db59099e1c831075f4466
Author: Brett Mastbergen <bmastbergen@ciq.com>
Date:   Thu Dec 11 10:56:33 2025 -0500

    Bluetooth: L2CAP: Fix use-after-free caused by l2cap_chan_put

    jira VULN-155527
    cve-pre CVE-2022-50386
    commit-author Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    commit d0be8347c623e0ac4202a1d4e0373882821f56b0
commit 59f1178f7bea82ed8b735dcab039351bced2aedc
Author: Brett Mastbergen <bmastbergen@ciq.com>
Date:   Thu Dec 11 11:04:32 2025 -0500

    Bluetooth: L2CAP: Fix l2cap_global_chan_by_psm regression

    jira VULN-155527
    cve-pre CVE-2022-50386
    commit-author Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    commit 332f1795ca202489c665a75e62e18ff6284de077
commit f02ba3ae337f68e272e500350093fb838bb0b429
Author: Brett Mastbergen <bmastbergen@ciq.com>
Date:   Thu Dec 11 11:14:31 2025 -0500

    Bluetooth: L2CAP: Fix build errors in some archs

    jira VULN-155527
    cve-pre CVE-2022-50386
    commit-author Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    commit fc5ae5b44eb26db973a6d4cfa0f75fe0650a95c6
commit b837f835eabb0781957d7c128ed583deea1e7e8b
Author: Brett Mastbergen <bmastbergen@ciq.com>
Date:   Thu Dec 11 10:45:47 2025 -0500

    Bluetooth: L2CAP: Fix user-after-free

    jira VULN-155527
    cve CVE-2022-50386
    commit-author Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    commit 35fcbc4243aad7e7d020b7c1dfb14bb888b20a4f
commit dcd9e0a158c6e33ac0164f478e4ccb2cadfd5b7c
Author: Brett Mastbergen <bmastbergen@ciq.com>
Date:   Thu Dec 11 11:05:37 2025 -0500

    Bluetooth: L2CAP: fix use-after-free in l2cap_conn_del()

    jira VULN-7664
    cve CVE-2022-3640
    commit-author Zhengchao Shao <shaozhengchao@huawei.com>
    commit 0d0e2d032811280b927650ff3c15fe5020e82533
commit cffdec228a7136bc73e8b639d28ca4cccd597ce6
Author: Brett Mastbergen <bmastbergen@ciq.com>
Date:   Thu Dec 11 10:45:57 2025 -0500

    Bluetooth: L2CAP: Fix use-after-free

    jira VULN-155015
    cve CVE-2023-53305
    commit-author Zhengping Jiang <jiangzp@google.com>
    commit f752a0b334bb95fe9b42ecb511e0864e2768046f
commit 9070c051c61de79120d3dc51f41b33d07e4c3cca
Author: Brett Mastbergen <bmastbergen@ciq.com>
Date:   Thu Dec 11 10:45:53 2025 -0500

    wifi: brcmfmac: fix use-after-free bug in brcmf_netdev_start_xmit()

    jira VULN-155632
    cve CVE-2022-50408
    commit-author Alexander Coffin <alex.coffin@matician.com>
    commit 3f42faf6db431e04bf942d2ebe3ae88975723478
commit 456264b28773c29d13db5c3652ab7afd61cb38f8
Author: Brett Mastbergen <bmastbergen@ciq.com>
Date:   Thu Dec 11 10:46:03 2025 -0500

    ip6mr: Fix skb_under_panic in ip6mr_cache_report()

    jira VULN-155436
    cve CVE-2023-53365
    commit-author Yue Haibing <yuehaibing@huawei.com>
    commit 30e0191b16e8a58e4620fa3e2839ddc7b9d4281c

Build Log

Running make mrproper...
  CLEAN   scripts/basic
  CLEAN   scripts/kconfig
  CLEAN   include/config
  CLEAN   .config .config.old
[TIMER]{MRPROPER}: 8s
x86_64 architecture detected, copying config
‘configs/kernel-3.10.0-x86_64.config’ -> ‘.config’
Setting Local Version for build
CONFIG_LOCALVERSION="-bmastbergen_ciqcbr7_9_many-vulns-2025-12-11-456264b"
Making olddefconfig
--
  HOSTLD  scripts/kconfig/conf
scripts/kconfig/conf --olddefconfig Kconfig
#
# configuration written to .config
#
Starting Build
scripts/kconfig/conf --silentoldconfig Kconfig
  SYSHDR  arch/x86/syscalls/../include/generated/uapi/asm/unistd_32.h
  SYSHDR  arch/x86/syscalls/../include/generated/uapi/asm/unistd_64.h
  SYSHDR  arch/x86/syscalls/../include/generated/uapi/asm/unistd_x32.h
  SYSHDR  arch/x86/syscalls/../include/generated/asm/unistd_32_ia32.h
--
  H16TOFW firmware/edgeport/down2.fw
  IHEX2FW firmware/whiteheat_loader.fw
  IHEX2FW firmware/whiteheat.fw
  IHEX2FW firmware/keyspan_pda/keyspan_pda.fw
  IHEX2FW firmware/keyspan_pda/xircom_pgs.fw
[TIMER]{BUILD}: 494s
Making Modules
  INSTALL arch/x86/crypto/ablk_helper.ko
  INSTALL arch/x86/crypto/aesni-intel.ko
  INSTALL arch/x86/crypto/blowfish-x86_64.ko
  INSTALL arch/x86/crypto/camellia-aesni-avx2.ko
--
  INSTALL /lib/firmware/whiteheat_loader.fw
  INSTALL /lib/firmware/whiteheat.fw
  INSTALL /lib/firmware/keyspan_pda/keyspan_pda.fw
  INSTALL /lib/firmware/keyspan_pda/xircom_pgs.fw
  DEPMOD  3.10.0-bmastbergen_ciqcbr7_9_many-vulns-2025-12-11-456264b+
[TIMER]{MODULES}: 13s
Making Install
sh ./arch/x86/boot/install.sh 3.10.0-bmastbergen_ciqcbr7_9_many-vulns-2025-12-11-456264b+ arch/x86/boot/bzImage \
	System.map "/boot"
[TIMER]{INSTALL}: 44s
Checking kABI
kABI check passed
Setting Default Kernel to /boot/vmlinuz-3.10.0-bmastbergen_ciqcbr7_9_many-vulns-2025-12-11-456264b+ and Index to 0
Hopefully Grub2.0 took everything ... rebooting after time metrices
[TIMER]{MRPROPER}: 8s
[TIMER]{BUILD}: 494s
[TIMER]{MODULES}: 13s
[TIMER]{INSTALL}: 44s
[TIMER]{TOTAL} 567s
Rebooting in 10 seconds

Testing

selftest-3.10.0-1160.119.1.el7_9.ciqcbr.11.1.x86_64-1.log

selftest-3.10.0-bmastbergen_ciqcbr7_9_many-vulns-2025-12-11-456264b+-1.log

brett@lycia ~/ciq/many-79-vulns-2025-12-11/kselftest-logs
 % grep ^ok selftest-3.10.0-1160.119.1.el7_9.ciqcbr.11.1.x86_64-1.log | wc -l
4
brett@lycia ~/ciq/many-79-vulns-2025-12-11/kselftest-logs
 % grep ^ok selftest-3.10.0-bmastbergen_ciqcbr7_9_many-vulns-2025-12-11-456264b+-1.log | wc -l
4
brett@lycia ~/ciq/many-79-vulns-2025-12-11/kselftest-logs
 % grep ok <(diff -adU0 <(grep ^ok selftest-3.10.0-1160.119.1.el7_9.ciqcbr.11.1.x86_64-1.log | sort -h) <(grep ^ok selftest-3.10.0-bmastbergen_ciqcbr7_9_many-vulns-2025-12-11-456264b+-1.log | sort -h))

brett@lycia ~/ciq/many-79-vulns-2025-12-11/kselftest-logs
 %

jira VULN-155527
cve-pre CVE-2022-50386
commit-author Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
commit d0be834

This fixes the following trace which is caused by hci_rx_work starting up
*after* the final channel reference has been put() during sock_close() but
*before* the references to the channel have been destroyed, so instead
the code now rely on kref_get_unless_zero/l2cap_chan_hold_unless_zero to
prevent referencing a channel that is about to be destroyed.

  refcount_t: increment on 0; use-after-free.
  BUG: KASAN: use-after-free in refcount_dec_and_test+0x20/0xd0
  Read of size 4 at addr ffffffc114f5bf18 by task kworker/u17:14/705

  CPU: 4 PID: 705 Comm: kworker/u17:14 Tainted: G S      W
  4.14.234-00003-g1fb6d0bd49a4-dirty #28
  Hardware name: Qualcomm Technologies, Inc. SM8150 V2 PM8150
  Google Inc. MSM sm8150 Flame DVT (DT)
  Workqueue: hci0 hci_rx_work
  Call trace:
   dump_backtrace+0x0/0x378
   show_stack+0x20/0x2c
   dump_stack+0x124/0x148
   print_address_description+0x80/0x2e8
   __kasan_report+0x168/0x188
   kasan_report+0x10/0x18
   __asan_load4+0x84/0x8c
   refcount_dec_and_test+0x20/0xd0
   l2cap_chan_put+0x48/0x12c
   l2cap_recv_frame+0x4770/0x6550
   l2cap_recv_acldata+0x44c/0x7a4
   hci_acldata_packet+0x100/0x188
   hci_rx_work+0x178/0x23c
   process_one_work+0x35c/0x95c
   worker_thread+0x4cc/0x960
   kthread+0x1a8/0x1c4
   ret_from_fork+0x10/0x18

	Cc: stable@kernel.org
	Reported-by: Lee Jones <lee.jones@linaro.org>
	Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
	Tested-by: Lee Jones <lee.jones@linaro.org>
	Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
(cherry picked from commit d0be834)
	Signed-off-by: Brett Mastbergen <bmastbergen@ciq.com>
jira VULN-155527
cve-pre CVE-2022-50386
commit-author Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
commit 332f179

The patch d0be834: "Bluetooth: L2CAP: Fix use-after-free caused
by l2cap_chan_put" from Jul 21, 2022, leads to the following Smatch
static checker warning:

        net/bluetooth/l2cap_core.c:1977 l2cap_global_chan_by_psm()
        error: we previously assumed 'c' could be null (see line 1996)

Fixes: d0be834 ("Bluetooth: L2CAP: Fix use-after-free caused by l2cap_chan_put")
	Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
	Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
(cherry picked from commit 332f179)
	Signed-off-by: Brett Mastbergen <bmastbergen@ciq.com>
jira VULN-155527
cve-pre CVE-2022-50386
commit-author Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
commit fc5ae5b

This attempts to fix the follow errors:

In function 'memcmp',
    inlined from 'bacmp' at ./include/net/bluetooth/bluetooth.h:347:9,
    inlined from 'l2cap_global_chan_by_psm' at
    net/bluetooth/l2cap_core.c:2003:15:
./include/linux/fortify-string.h:44:33: error: '__builtin_memcmp'
specified bound 6 exceeds source size 0 [-Werror=stringop-overread]
   44 | #define __underlying_memcmp     __builtin_memcmp
      |                                 ^
./include/linux/fortify-string.h:420:16: note: in expansion of macro
'__underlying_memcmp'
  420 |         return __underlying_memcmp(p, q, size);
      |                ^~~~~~~~~~~~~~~~~~~
In function 'memcmp',
    inlined from 'bacmp' at ./include/net/bluetooth/bluetooth.h:347:9,
    inlined from 'l2cap_global_chan_by_psm' at
    net/bluetooth/l2cap_core.c:2004:15:
./include/linux/fortify-string.h:44:33: error: '__builtin_memcmp'
specified bound 6 exceeds source size 0 [-Werror=stringop-overread]
   44 | #define __underlying_memcmp     __builtin_memcmp
      |                                 ^
./include/linux/fortify-string.h:420:16: note: in expansion of macro
'__underlying_memcmp'
  420 |         return __underlying_memcmp(p, q, size);
      |                ^~~~~~~~~~~~~~~~~~~

Fixes: 332f179 ("Bluetooth: L2CAP: Fix l2cap_global_chan_by_psm regression")
	Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
(cherry picked from commit fc5ae5b)
	Signed-off-by: Brett Mastbergen <bmastbergen@ciq.com>
jira VULN-155527
cve CVE-2022-50386
commit-author Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
commit 35fcbc4

This uses l2cap_chan_hold_unless_zero() after calling
__l2cap_get_chan_blah() to prevent the following trace:

Bluetooth: l2cap_core.c:static void l2cap_chan_destroy(struct kref
*kref)
Bluetooth: chan 0000000023c4974d
Bluetooth: parent 00000000ae861c08
==================================================================
BUG: KASAN: use-after-free in __mutex_waiter_is_first
kernel/locking/mutex.c:191 [inline]
BUG: KASAN: use-after-free in __mutex_lock_common
kernel/locking/mutex.c:671 [inline]
BUG: KASAN: use-after-free in __mutex_lock+0x278/0x400
kernel/locking/mutex.c:729
Read of size 8 at addr ffff888006a49b08 by task kworker/u3:2/389

Link: https://lore.kernel.org/lkml/20220622082716.478486-1-lee.jones@linaro.org
	Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
	Signed-off-by: Sungwoo Kim <iam@sung-woo.kim>
(cherry picked from commit 35fcbc4)
	Signed-off-by: Brett Mastbergen <bmastbergen@ciq.com>
jira VULN-7664
cve CVE-2022-3640
commit-author Zhengchao Shao <shaozhengchao@huawei.com>
commit 0d0e2d0

When l2cap_recv_frame() is invoked to receive data, and the cid is
L2CAP_CID_A2MP, if the channel does not exist, it will create a channel.
However, after a channel is created, the hold operation of the channel
is not performed. In this case, the value of channel reference counting
is 1. As a result, after hci_error_reset() is triggered, l2cap_conn_del()
invokes the close hook function of A2MP to release the channel. Then
 l2cap_chan_unlock(chan) will trigger UAF issue.

The process is as follows:
Receive data:
l2cap_data_channel()
    a2mp_channel_create()  --->channel ref is 2
    l2cap_chan_put()       --->channel ref is 1

Triger event:
    hci_error_reset()
        hci_dev_do_close()
        ...
        l2cap_disconn_cfm()
            l2cap_conn_del()
                l2cap_chan_hold()    --->channel ref is 2
                l2cap_chan_del()     --->channel ref is 1
                a2mp_chan_close_cb() --->channel ref is 0, release channel
                l2cap_chan_unlock()  --->UAF of channel

The detailed Call Trace is as follows:
BUG: KASAN: use-after-free in __mutex_unlock_slowpath+0xa6/0x5e0
Read of size 8 at addr ffff8880160664b8 by task kworker/u11:1/7593
Workqueue: hci0 hci_error_reset
Call Trace:
 <TASK>
 dump_stack_lvl+0xcd/0x134
 print_report.cold+0x2ba/0x719
 kasan_report+0xb1/0x1e0
 kasan_check_range+0x140/0x190
 __mutex_unlock_slowpath+0xa6/0x5e0
 l2cap_conn_del+0x404/0x7b0
 l2cap_disconn_cfm+0x8c/0xc0
 hci_conn_hash_flush+0x11f/0x260
 hci_dev_close_sync+0x5f5/0x11f0
 hci_dev_do_close+0x2d/0x70
 hci_error_reset+0x9e/0x140
 process_one_work+0x98a/0x1620
 worker_thread+0x665/0x1080
 kthread+0x2e4/0x3a0
 ret_from_fork+0x1f/0x30
 </TASK>

Allocated by task 7593:
 kasan_save_stack+0x1e/0x40
 __kasan_kmalloc+0xa9/0xd0
 l2cap_chan_create+0x40/0x930
 amp_mgr_create+0x96/0x990
 a2mp_channel_create+0x7d/0x150
 l2cap_recv_frame+0x51b8/0x9a70
 l2cap_recv_acldata+0xaa3/0xc00
 hci_rx_work+0x702/0x1220
 process_one_work+0x98a/0x1620
 worker_thread+0x665/0x1080
 kthread+0x2e4/0x3a0
 ret_from_fork+0x1f/0x30

Freed by task 7593:
 kasan_save_stack+0x1e/0x40
 kasan_set_track+0x21/0x30
 kasan_set_free_info+0x20/0x30
 ____kasan_slab_free+0x167/0x1c0
 slab_free_freelist_hook+0x89/0x1c0
 kfree+0xe2/0x580
 l2cap_chan_put+0x22a/0x2d0
 l2cap_conn_del+0x3fc/0x7b0
 l2cap_disconn_cfm+0x8c/0xc0
 hci_conn_hash_flush+0x11f/0x260
 hci_dev_close_sync+0x5f5/0x11f0
 hci_dev_do_close+0x2d/0x70
 hci_error_reset+0x9e/0x140
 process_one_work+0x98a/0x1620
 worker_thread+0x665/0x1080
 kthread+0x2e4/0x3a0
 ret_from_fork+0x1f/0x30

Last potentially related work creation:
 kasan_save_stack+0x1e/0x40
 __kasan_record_aux_stack+0xbe/0xd0
 call_rcu+0x99/0x740
 netlink_release+0xe6a/0x1cf0
 __sock_release+0xcd/0x280
 sock_close+0x18/0x20
 __fput+0x27c/0xa90
 task_work_run+0xdd/0x1a0
 exit_to_user_mode_prepare+0x23c/0x250
 syscall_exit_to_user_mode+0x19/0x50
 do_syscall_64+0x42/0x80
 entry_SYSCALL_64_after_hwframe+0x63/0xcd

Second to last potentially related work creation:
 kasan_save_stack+0x1e/0x40
 __kasan_record_aux_stack+0xbe/0xd0
 call_rcu+0x99/0x740
 netlink_release+0xe6a/0x1cf0
 __sock_release+0xcd/0x280
 sock_close+0x18/0x20
 __fput+0x27c/0xa90
 task_work_run+0xdd/0x1a0
 exit_to_user_mode_prepare+0x23c/0x250
 syscall_exit_to_user_mode+0x19/0x50
 do_syscall_64+0x42/0x80
 entry_SYSCALL_64_after_hwframe+0x63/0xcd

Fixes: d0be834 ("Bluetooth: L2CAP: Fix use-after-free caused by l2cap_chan_put")
	Signed-off-by: Zhengchao Shao <shaozhengchao@huawei.com>
	Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
(cherry picked from commit 0d0e2d0)
	Signed-off-by: Brett Mastbergen <bmastbergen@ciq.com>
jira VULN-155015
cve CVE-2023-53305
commit-author Zhengping Jiang <jiangzp@google.com>
commit f752a0b

Fix potential use-after-free in l2cap_le_command_rej.

	Signed-off-by: Zhengping Jiang <jiangzp@google.com>
	Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
	Signed-off-by: Jakub Kicinski <kuba@kernel.org>
(cherry picked from commit f752a0b)
	Signed-off-by: Brett Mastbergen <bmastbergen@ciq.com>
jira VULN-155632
cve CVE-2022-50408
commit-author Alexander Coffin <alex.coffin@matician.com>
commit 3f42faf

> ret = brcmf_proto_tx_queue_data(drvr, ifp->ifidx, skb);

may be schedule, and then complete before the line

> ndev->stats.tx_bytes += skb->len;

[   46.912801] ==================================================================
[   46.920552] BUG: KASAN: use-after-free in brcmf_netdev_start_xmit+0x718/0x8c8 [brcmfmac]
[   46.928673] Read of size 4 at addr ffffff803f5882e8 by task systemd-resolve/328
[   46.935991]
[   46.937514] CPU: 1 PID: 328 Comm: systemd-resolve Tainted: G           O      5.4.199-[REDACTED] #1
[   46.947255] Hardware name: [REDACTED]
[   46.954568] Call trace:
[   46.957037]  dump_backtrace+0x0/0x2b8
[   46.960719]  show_stack+0x24/0x30
[   46.964052]  dump_stack+0x128/0x194
[   46.967557]  print_address_description.isra.0+0x64/0x380
[   46.972877]  __kasan_report+0x1d4/0x240
[   46.976723]  kasan_report+0xc/0x18
[   46.980138]  __asan_report_load4_noabort+0x18/0x20
[   46.985027]  brcmf_netdev_start_xmit+0x718/0x8c8 [brcmfmac]
[   46.990613]  dev_hard_start_xmit+0x1bc/0xda0
[   46.994894]  sch_direct_xmit+0x198/0xd08
[   46.998827]  __qdisc_run+0x37c/0x1dc0
[   47.002500]  __dev_queue_xmit+0x1528/0x21f8
[   47.006692]  dev_queue_xmit+0x24/0x30
[   47.010366]  neigh_resolve_output+0x37c/0x678
[   47.014734]  ip_finish_output2+0x598/0x2458
[   47.018927]  __ip_finish_output+0x300/0x730
[   47.023118]  ip_output+0x2e0/0x430
[   47.026530]  ip_local_out+0x90/0x140
[   47.030117]  igmpv3_sendpack+0x14c/0x228
[   47.034049]  igmpv3_send_cr+0x384/0x6b8
[   47.037895]  igmp_ifc_timer_expire+0x4c/0x118
[   47.042262]  call_timer_fn+0x1cc/0xbe8
[   47.046021]  __run_timers+0x4d8/0xb28
[   47.049693]  run_timer_softirq+0x24/0x40
[   47.053626]  __do_softirq+0x2c0/0x117c
[   47.057387]  irq_exit+0x2dc/0x388
[   47.060715]  __handle_domain_irq+0xb4/0x158
[   47.064908]  gic_handle_irq+0x58/0xb0
[   47.068581]  el0_irq_naked+0x50/0x5c
[   47.072162]
[   47.073665] Allocated by task 328:
[   47.077083]  save_stack+0x24/0xb0
[   47.080410]  __kasan_kmalloc.isra.0+0xc0/0xe0
[   47.084776]  kasan_slab_alloc+0x14/0x20
[   47.088622]  kmem_cache_alloc+0x15c/0x468
[   47.092643]  __alloc_skb+0xa4/0x498
[   47.096142]  igmpv3_newpack+0x158/0xd78
[   47.099987]  add_grhead+0x210/0x288
[   47.103485]  add_grec+0x6b0/0xb70
[   47.106811]  igmpv3_send_cr+0x2e0/0x6b8
[   47.110657]  igmp_ifc_timer_expire+0x4c/0x118
[   47.115027]  call_timer_fn+0x1cc/0xbe8
[   47.118785]  __run_timers+0x4d8/0xb28
[   47.122457]  run_timer_softirq+0x24/0x40
[   47.126389]  __do_softirq+0x2c0/0x117c
[   47.130142]
[   47.131643] Freed by task 180:
[   47.134712]  save_stack+0x24/0xb0
[   47.138041]  __kasan_slab_free+0x108/0x180
[   47.142146]  kasan_slab_free+0x10/0x18
[   47.145904]  slab_free_freelist_hook+0xa4/0x1b0
[   47.150444]  kmem_cache_free+0x8c/0x528
[   47.154292]  kfree_skbmem+0x94/0x108
[   47.157880]  consume_skb+0x10c/0x5a8
[   47.161466]  __dev_kfree_skb_any+0x88/0xa0
[   47.165598]  brcmu_pkt_buf_free_skb+0x44/0x68 [brcmutil]
[   47.171023]  brcmf_txfinalize+0xec/0x190 [brcmfmac]
[   47.176016]  brcmf_proto_bcdc_txcomplete+0x1c0/0x210 [brcmfmac]
[   47.182056]  brcmf_sdio_sendfromq+0x8dc/0x1e80 [brcmfmac]
[   47.187568]  brcmf_sdio_dpc+0xb48/0x2108 [brcmfmac]
[   47.192529]  brcmf_sdio_dataworker+0xc8/0x238 [brcmfmac]
[   47.197859]  process_one_work+0x7fc/0x1a80
[   47.201965]  worker_thread+0x31c/0xc40
[   47.205726]  kthread+0x2d8/0x370
[   47.208967]  ret_from_fork+0x10/0x18
[   47.212546]
[   47.214051] The buggy address belongs to the object at ffffff803f588280
[   47.214051]  which belongs to the cache skbuff_head_cache of size 208
[   47.227086] The buggy address is located 104 bytes inside of
[   47.227086]  208-byte region [ffffff803f588280, ffffff803f588350)
[   47.238814] The buggy address belongs to the page:
[   47.243618] page:ffffffff00dd6200 refcount:1 mapcount:0 mapping:ffffff804b6bf800 index:0xffffff803f589900 compound_mapcount: 0
[   47.255007] flags: 0x10200(slab|head)
[   47.258689] raw: 0000000000010200 ffffffff00dfa980 0000000200000002 ffffff804b6bf800
[   47.266439] raw: ffffff803f589900 0000000080190018 00000001ffffffff 0000000000000000
[   47.274180] page dumped because: kasan: bad access detected
[   47.279752]
[   47.281251] Memory state around the buggy address:
[   47.286051]  ffffff803f588180: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
[   47.293277]  ffffff803f588200: fb fb fc fc fc fc fc fc fc fc fc fc fc fc fc fc
[   47.300502] >ffffff803f588280: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
[   47.307723]                                                           ^
[   47.314343]  ffffff803f588300: fb fb fb fb fb fb fb fb fb fb fc fc fc fc fc fc
[   47.321569]  ffffff803f588380: fc fc fc fc fc fc fc fc fb fb fb fb fb fb fb fb
[   47.328789] ==================================================================

	Signed-off-by: Alexander Coffin <alex.coffin@matician.com>
	Signed-off-by: Kalle Valo <kvalo@kernel.org>
Link: https://lore.kernel.org/r/20220808174925.3922558-1-alex.coffin@matician.com
(cherry picked from commit 3f42faf)
	Signed-off-by: Brett Mastbergen <bmastbergen@ciq.com>
jira VULN-155436
cve CVE-2023-53365
commit-author Yue Haibing <yuehaibing@huawei.com>
commit 30e0191

skbuff: skb_under_panic: text:ffffffff88771f69 len:56 put:-4
 head:ffff88805f86a800 data:ffff887f5f86a850 tail:0x88 end:0x2c0 dev:pim6reg
 ------------[ cut here ]------------
 kernel BUG at net/core/skbuff.c:192!
 invalid opcode: 0000 [#1] PREEMPT SMP KASAN
 CPU: 2 PID: 22968 Comm: kworker/2:11 Not tainted 6.5.0-rc3-00044-g0a8db05b571a #236
 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.15.0-1 04/01/2014
 Workqueue: ipv6_addrconf addrconf_dad_work
 RIP: 0010:skb_panic+0x152/0x1d0
 Call Trace:
  <TASK>
  skb_push+0xc4/0xe0
  ip6mr_cache_report+0xd69/0x19b0
  reg_vif_xmit+0x406/0x690
  dev_hard_start_xmit+0x17e/0x6e0
  __dev_queue_xmit+0x2d6a/0x3d20
  vlan_dev_hard_start_xmit+0x3ab/0x5c0
  dev_hard_start_xmit+0x17e/0x6e0
  __dev_queue_xmit+0x2d6a/0x3d20
  neigh_connected_output+0x3ed/0x570
  ip6_finish_output2+0x5b5/0x1950
  ip6_finish_output+0x693/0x11c0
  ip6_output+0x24b/0x880
  NF_HOOK.constprop.0+0xfd/0x530
  ndisc_send_skb+0x9db/0x1400
  ndisc_send_rs+0x12a/0x6c0
  addrconf_dad_completed+0x3c9/0xea0
  addrconf_dad_work+0x849/0x1420
  process_one_work+0xa22/0x16e0
  worker_thread+0x679/0x10c0
  ret_from_fork+0x28/0x60
  ret_from_fork_asm+0x11/0x20

When setup a vlan device on dev pim6reg, DAD ns packet may sent on reg_vif_xmit().
reg_vif_xmit()
    ip6mr_cache_report()
        skb_push(skb, -skb_network_offset(pkt));//skb_network_offset(pkt) is 4
And skb_push declared as:
	void *skb_push(struct sk_buff *skb, unsigned int len);
		skb->data -= len;
		//0xffff88805f86a84c - 0xfffffffc = 0xffff887f5f86a850
skb->data is set to 0xffff887f5f86a850, which is invalid mem addr, lead to skb_push() fails.

Fixes: 14fb64e ("[IPV6] MROUTE: Support PIM-SM (SSM).")
	Signed-off-by: Yue Haibing <yuehaibing@huawei.com>
	Reviewed-by: Eric Dumazet <edumazet@google.com>
	Signed-off-by: David S. Miller <davem@davemloft.net>
(cherry picked from commit 30e0191)
	Signed-off-by: Brett Mastbergen <bmastbergen@ciq.com>
@github-actions
Copy link

🔍 Upstream Linux Kernel Commit Check

  • ⚠️ PR commit 59f1178f7bea (Bluetooth: L2CAP: Fix l2cap_global_chan_by_psm regression) references upstream commit
    332f1795ca20 which has been referenced by a Fixes: tag in the upstream
    Linux kernel:
    b840304fb46c Bluetooth: L2CAP: Fix build errors in some archs (Luiz Augusto von Dentz)
  • ❌ PR commit dcd9e0a158c6 (Bluetooth: L2CAP: fix use-after-free in l2cap_conn_del()) references CVE-2022-3640 but
    upstream commit 0d0e2d032811 is associated with CVE-2022-49909

This is an automated message from the kernel commit checker workflow.

@github-actions
Copy link

🔍 Interdiff Analysis

  • ⚠️ PR commit 60f1692d8feb (Bluetooth: L2CAP: Fix use-after-free caused by l2cap_chan_put) → upstream d0be8347c623
    Differences found:
diff -u b/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
--- b/net/bluetooth/l2cap_core.c
+++ b/net/bluetooth/l2cap_core.c
@@ -132,7 +137,7 @@ INTERDIFF: rejected hunk from patch2, cannot diff context
 }
 
 /* Find channel with given DCID.
- * Returns locked channel.
+ * Returns a reference locked channel.
  */
 static struct l2cap_chan *l2cap_get_chan_by_dcid(struct l2cap_conn *conn,
 						 u16 cid)
@@ -135,7 +140,7 @@ INTERDIFF: rejected hunk from patch1, cannot diff context
 }
 
 /* Find channel with given DCID.
- * Returns locked channel.
+ * Returns a reference locked channel.
  */
 static struct l2cap_chan *l2cap_get_chan_by_dcid(struct l2cap_conn *conn,
 						 u16 cid)
@@ -512,4 +512,4 @@
 
 void l2cap_chan_put(struct l2cap_chan *c)
 {
-	BT_DBG("chan %p orig refcnt %u", c, kref_read(&c->kref));
+	BT_DBG("chan %p orig refcnt %d", c, kref_read(&c->kref));

This is an automated interdiff check for backported commits.

@bmastbergen
Copy link
Collaborator Author

bmastbergen commented Dec 12, 2025

🔍 Upstream Linux Kernel Commit Check

  • ⚠️ PR commit 59f1178f7bea (Bluetooth: L2CAP: Fix l2cap_global_chan_by_psm regression) references upstream commit
    332f1795ca20 which has been referenced by a Fixes: tag in the upstream
    Linux kernel:
    b840304fb46c Bluetooth: L2CAP: Fix build errors in some archs (Luiz Augusto von Dentz)

Weirdly b840304fb46c Bluetooth: L2CAP: Fix build errors in some archs is identical to fc5ae5b44eb2 Bluetooth: L2CAP: Fix build errors in some archs which is in this PR. The same changeset was made to upstream twice, so I can only apply one of them.

  • ❌ PR commit dcd9e0a158c6 (Bluetooth: L2CAP: fix use-after-free in l2cap_conn_del()) references CVE-2022-3640 but
    upstream commit 0d0e2d032811 is associated with CVE-2022-49909

This is an automated message from the kernel commit checker workflow.

CVE-2022-49909 was created by the kernel folks, but was rejected, I assume because they discovered that CVE-2022-3640 already existed for the same issue.

@bmastbergen bmastbergen requested a review from a team December 12, 2025 17:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

2 participants