From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: "Luiz Augusto von Dentz" <luiz.von.dentz@intel.com>,
"Sönke Huster" <soenke.huster@eknoes.de>,
"Marcel Holtmann" <marcel@holtmann.org>,
"Sasha Levin" <sashal@kernel.org>,
johan.hedberg@gmail.com, luiz.dentz@gmail.com,
davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com,
linux-bluetooth@vger.kernel.org, netdev@vger.kernel.org
Subject: [PATCH AUTOSEL 5.15 91/98] Bluetooth: Fix use after free in hci_send_acl
Date: Fri, 1 Apr 2022 10:37:35 -0400 [thread overview]
Message-ID: <20220401143742.1952163-91-sashal@kernel.org> (raw)
In-Reply-To: <20220401143742.1952163-1-sashal@kernel.org>
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
[ Upstream commit f63d24baff787e13b723d86fe036f84bdbc35045 ]
This fixes the following trace caused by receiving
HCI_EV_DISCONN_PHY_LINK_COMPLETE which does call hci_conn_del without
first checking if conn->type is in fact AMP_LINK and in case it is
do properly cleanup upper layers with hci_disconn_cfm:
==================================================================
BUG: KASAN: use-after-free in hci_send_acl+0xaba/0xc50
Read of size 8 at addr ffff88800e404818 by task bluetoothd/142
CPU: 0 PID: 142 Comm: bluetoothd Not tainted
5.17.0-rc5-00006-gda4022eeac1a #7
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS
rel-1.14.0-0-g155821a1990b-prebuilt.qemu.org 04/01/2014
Call Trace:
<TASK>
dump_stack_lvl+0x45/0x59
print_address_description.constprop.0+0x1f/0x150
kasan_report.cold+0x7f/0x11b
hci_send_acl+0xaba/0xc50
l2cap_do_send+0x23f/0x3d0
l2cap_chan_send+0xc06/0x2cc0
l2cap_sock_sendmsg+0x201/0x2b0
sock_sendmsg+0xdc/0x110
sock_write_iter+0x20f/0x370
do_iter_readv_writev+0x343/0x690
do_iter_write+0x132/0x640
vfs_writev+0x198/0x570
do_writev+0x202/0x280
do_syscall_64+0x38/0x90
entry_SYSCALL_64_after_hwframe+0x44/0xae
RSP: 002b:00007ffce8a099b8 EFLAGS: 00000246 ORIG_RAX: 0000000000000014
Code: 0f 00 f7 d8 64 89 02 48 c7 c0 ff ff ff ff eb b8 0f 1f 00 f3
0f 1e fa 64 8b 04 25 18 00 00 00 85 c0 75 10 b8 14 00 00 00 0f 05
<48> 3d 00 f0 ff ff 77 51 c3 48 83 ec 28 89 54 24 1c 48 89 74 24 10
RDX: 0000000000000001 RSI: 00007ffce8a099e0 RDI: 0000000000000015
RAX: ffffffffffffffda RBX: 00007ffce8a099e0 RCX: 00007f788fc3cf77
R10: 00007ffce8af7080 R11: 0000000000000246 R12: 000055e4ccf75580
RBP: 0000000000000015 R08: 0000000000000002 R09: 0000000000000001
</TASK>
R13: 000055e4ccf754a0 R14: 000055e4ccf75cd0 R15: 000055e4ccf4a6b0
Allocated by task 45:
kasan_save_stack+0x1e/0x40
__kasan_kmalloc+0x81/0xa0
hci_chan_create+0x9a/0x2f0
l2cap_conn_add.part.0+0x1a/0xdc0
l2cap_connect_cfm+0x236/0x1000
le_conn_complete_evt+0x15a7/0x1db0
hci_le_conn_complete_evt+0x226/0x2c0
hci_le_meta_evt+0x247/0x450
hci_event_packet+0x61b/0xe90
hci_rx_work+0x4d5/0xc50
process_one_work+0x8fb/0x15a0
worker_thread+0x576/0x1240
kthread+0x29d/0x340
ret_from_fork+0x1f/0x30
Freed by task 45:
kasan_save_stack+0x1e/0x40
kasan_set_track+0x21/0x30
kasan_set_free_info+0x20/0x30
__kasan_slab_free+0xfb/0x130
kfree+0xac/0x350
hci_conn_cleanup+0x101/0x6a0
hci_conn_del+0x27e/0x6c0
hci_disconn_phylink_complete_evt+0xe0/0x120
hci_event_packet+0x812/0xe90
hci_rx_work+0x4d5/0xc50
process_one_work+0x8fb/0x15a0
worker_thread+0x576/0x1240
kthread+0x29d/0x340
ret_from_fork+0x1f/0x30
The buggy address belongs to the object at ffff88800c0f0500
The buggy address is located 24 bytes inside of
which belongs to the cache kmalloc-128 of size 128
The buggy address belongs to the page:
128-byte region [ffff88800c0f0500, ffff88800c0f0580)
flags: 0x100000000000200(slab|node=0|zone=1)
page:00000000fe45cd86 refcount:1 mapcount:0
mapping:0000000000000000 index:0x0 pfn:0xc0f0
raw: 0000000000000000 0000000080100010 00000001ffffffff
0000000000000000
raw: 0100000000000200 ffffea00003a2c80 dead000000000004
ffff8880078418c0
page dumped because: kasan: bad access detected
ffff88800c0f0400: 00 00 00 00 00 00 00 00 00 00 00 00 00 fc fc fc
Memory state around the buggy address:
>ffff88800c0f0500: fa fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
ffff88800c0f0480: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
ffff88800c0f0580: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
^
==================================================================
ffff88800c0f0600: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
Reported-by: Sönke Huster <soenke.huster@eknoes.de>
Tested-by: Sönke Huster <soenke.huster@eknoes.de>
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
net/bluetooth/hci_event.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
index 868a22df3285..e984a8b4b914 100644
--- a/net/bluetooth/hci_event.c
+++ b/net/bluetooth/hci_event.c
@@ -5153,8 +5153,9 @@ static void hci_disconn_phylink_complete_evt(struct hci_dev *hdev,
hci_dev_lock(hdev);
hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle);
- if (hcon) {
+ if (hcon && hcon->type == AMP_LINK) {
hcon->state = BT_CLOSED;
+ hci_disconn_cfm(hcon, ev->reason);
hci_conn_del(hcon);
}
--
2.34.1
next prev parent reply other threads:[~2022-04-01 15:02 UTC|newest]
Thread overview: 98+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-04-01 14:36 [PATCH AUTOSEL 5.15 01/98] drm: Add orientation quirk for GPD Win Max Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 02/98] ath5k: fix OOB in ath5k_eeprom_read_pcal_info_5111 Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 03/98] drm/amd/display: Add signal type check when verify stream backends same Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 04/98] drm/amd/amdgpu/amdgpu_cs: fix refcount leak of a dma_fence obj Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 05/98] drm/amd/display: Fix memory leak Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 06/98] drm/amd/display: Use PSR version selected during set_psr_caps Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 07/98] usb: gadget: tegra-xudc: Do not program SPARAM Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 08/98] usb: gadget: tegra-xudc: Fix control endpoint's definitions Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 09/98] usb: cdnsp: fix cdnsp_decode_trb function to properly handle ret value Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 10/98] ptp: replace snprintf with sysfs_emit Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 11/98] drm/amdkfd: Don't take process mutex for svm ioctls Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 12/98] powerpc: dts: t104xrdb: fix phy type for FMAN 4/5 Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 13/98] ath11k: fix kernel panic during unload/load ath11k modules Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 14/98] ath11k: pci: fix crash on suspend if board file is not found Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 15/98] ath11k: mhi: use mhi_sync_power_up() Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 16/98] net/smc: Send directly when TCP_CORK is cleared Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 17/98] drm/bridge: Add missing pm_runtime_put_sync Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 18/98] bpf: Make dst_port field in struct bpf_sock 16-bit wide Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 19/98] scsi: mvsas: Replace snprintf() with sysfs_emit() Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 20/98] scsi: bfa: " Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 21/98] drm/v3d: fix missing unlock Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 22/98] power: supply: axp20x_battery: properly report current when discharging Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 23/98] mt76: mt7921: fix crash when startup fails Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 24/98] mt76: dma: initialize skip_unmap in mt76_dma_rx_fill Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 25/98] cfg80211: don't add non transmitted BSS to 6GHz scanned channels Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 26/98] libbpf: Fix build issue with llvm-readelf Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 27/98] ipv6: make mc_forwarding atomic Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 28/98] net: initialize init_net earlier Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 29/98] powerpc: Set crashkernel offset to mid of RMA region Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 30/98] drm/amdgpu: Fix recursive locking warning Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 31/98] scsi: smartpqi: Fix kdump issue when controller is locked up Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 32/98] PCI: aardvark: Fix support for MSI interrupts Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 33/98] iommu/arm-smmu-v3: fix event handling soft lockup Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 34/98] usb: ehci: add pci device support for Aspeed platforms Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 35/98] PCI: endpoint: Fix alignment fault error in copy tests Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 36/98] tcp: Don't acquire inet_listen_hashbucket::lock with disabled BH Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 37/98] PCI: pciehp: Add Qualcomm quirk for Command Completed erratum Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 38/98] scsi: mpi3mr: Fix reporting of actual data transfer size Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 39/98] scsi: mpi3mr: Fix memory leaks Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 40/98] powerpc/set_memory: Avoid spinlock recursion in change_page_attr() Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 41/98] power: supply: axp288-charger: Set Vhold to 4.4V Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 42/98] net/mlx5e: Disable TX queues before registering the netdev Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 43/98] usb: dwc3: pci: Set the swnode from inside dwc3_pci_quirks() Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 44/98] iwlwifi: mvm: Correctly set fragmented EBS Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 45/98] iwlwifi: mvm: Passively scan non PSC channels only when requested so Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 46/98] iwlwifi: mvm: move only to an enabled channel Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 47/98] drm/msm/dsi: Remove spurious IRQF_ONESHOT flag Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 48/98] ipv4: Invalidate neighbour for broadcast address upon address addition Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 49/98] dm ioctl: prevent potential spectre v1 gadget Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 50/98] dm: requeue IO if mapping table not yet available Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 51/98] drm/amdkfd: make CRAT table missing message informational only Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 52/98] vfio/pci: Stub vfio_pci_vga_rw when !CONFIG_VFIO_PCI_VGA Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 53/98] scsi: pm8001: Fix pm80xx_pci_mem_copy() interface Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 54/98] scsi: pm8001: Fix pm8001_mpi_task_abort_resp() Sasha Levin
2022-04-01 14:36 ` [PATCH AUTOSEL 5.15 55/98] scsi: pm8001: Fix task leak in pm8001_send_abort_all() Sasha Levin
2022-04-01 14:37 ` [PATCH AUTOSEL 5.15 56/98] scsi: pm8001: Fix tag leaks on error Sasha Levin
2022-04-01 14:37 ` [PATCH AUTOSEL 5.15 57/98] scsi: pm8001: Fix memory leak in pm8001_chip_fw_flash_update_req() Sasha Levin
2022-04-01 14:37 ` [PATCH AUTOSEL 5.15 58/98] mt76: mt7915: fix injected MPDU transmission to not use HW A-MSDU Sasha Levin
2022-04-01 14:37 ` [PATCH AUTOSEL 5.15 59/98] drm/simpledrm: Add "panel orientation" property on non-upright mounted LCD panels Sasha Levin
2022-04-01 14:37 ` [PATCH AUTOSEL 5.15 60/98] powerpc/64s/hash: Make hash faults work in NMI context Sasha Levin
2022-04-01 14:37 ` [PATCH AUTOSEL 5.15 61/98] mt76: mt7615: Fix assigning negative values to unsigned variable Sasha Levin
2022-04-01 14:37 ` [PATCH AUTOSEL 5.15 62/98] scsi: aha152x: Fix aha152x_setup() __setup handler return value Sasha Levin
2022-04-01 14:37 ` [PATCH AUTOSEL 5.15 63/98] scsi: hisi_sas: Free irq vectors in order for v3 HW Sasha Levin
2022-04-01 14:37 ` [PATCH AUTOSEL 5.15 64/98] scsi: hisi_sas: Limit users changing debugfs BIST count value Sasha Levin
2022-04-01 14:37 ` [PATCH AUTOSEL 5.15 65/98] net/smc: correct settings of RMB window update limit Sasha Levin
2022-04-01 14:37 ` [PATCH AUTOSEL 5.15 66/98] mips: ralink: fix a refcount leak in ill_acc_of_setup() Sasha Levin
2022-04-01 14:37 ` [PATCH AUTOSEL 5.15 67/98] macvtap: advertise link netns via netlink Sasha Levin
2022-04-01 14:37 ` [PATCH AUTOSEL 5.15 68/98] tuntap: add sanity checks about msg_controllen in sendmsg Sasha Levin
2022-04-01 14:37 ` [PATCH AUTOSEL 5.15 69/98] iommu/iova: Improve 32-bit free space estimate Sasha Levin
2022-04-01 14:37 ` [PATCH AUTOSEL 5.15 70/98] Bluetooth: Fix not checking for valid hdev on bt_dev_{info,warn,err,dbg} Sasha Levin
2022-04-01 14:37 ` [PATCH AUTOSEL 5.15 71/98] Bluetooth: use memset avoid memory leaks Sasha Levin
2022-04-01 14:37 ` [PATCH AUTOSEL 5.15 72/98] bnxt_en: Eliminate unintended link toggle during FW reset Sasha Levin
2022-04-01 14:37 ` [PATCH AUTOSEL 5.15 73/98] PCI: endpoint: Fix misused goto label Sasha Levin
2022-04-01 14:37 ` [PATCH AUTOSEL 5.15 74/98] MIPS: fix fortify panic when copying asm exception handlers Sasha Levin
2022-04-01 14:37 ` [PATCH AUTOSEL 5.15 75/98] powerpc/code-patching: Pre-map patch area Sasha Levin
2022-04-01 14:37 ` [PATCH AUTOSEL 5.15 76/98] powerpc/64e: Tie PPC_BOOK3E_64 to PPC_FSL_BOOK3E Sasha Levin
2022-04-01 14:37 ` [PATCH AUTOSEL 5.15 77/98] powerpc/secvar: fix refcount leak in format_show() Sasha Levin
2022-04-01 14:37 ` [PATCH AUTOSEL 5.15 78/98] scsi: libfc: Fix use after free in fc_exch_abts_resp() Sasha Levin
2022-04-01 14:37 ` [PATCH AUTOSEL 5.15 79/98] can: isotp: set default value for N_As to 50 micro seconds Sasha Levin
2022-04-01 14:37 ` [PATCH AUTOSEL 5.15 80/98] can: etas_es58x: es58x_fd_rx_event_msg(): initialize rx_event_msg before calling es58x_check_msg_len() Sasha Levin
2022-04-01 14:37 ` [PATCH AUTOSEL 5.15 81/98] riscv: Fixed misaligned memory access. Fixed pointer comparison Sasha Levin
2022-04-01 14:37 ` [PATCH AUTOSEL 5.15 82/98] net: account alternate interface name memory Sasha Levin
2022-04-01 14:37 ` [PATCH AUTOSEL 5.15 83/98] net: limit altnames to 64k total Sasha Levin
2022-04-01 14:37 ` [PATCH AUTOSEL 5.15 84/98] net/mlx5e: Remove overzealous validations in netlink EEPROM query Sasha Levin
2022-04-01 14:37 ` [PATCH AUTOSEL 5.15 85/98] platform/x86: hp-wmi: Fix SW_TABLET_MODE detection method Sasha Levin
2022-04-01 14:37 ` [PATCH AUTOSEL 5.15 86/98] net: sfp: add 2500base-X quirk for Lantech SFP module Sasha Levin
2022-04-01 14:37 ` [PATCH AUTOSEL 5.15 87/98] usb: dwc3: omap: fix "unbalanced disables for smps10_out1" on omap5evm Sasha Levin
2022-04-01 14:37 ` [PATCH AUTOSEL 5.15 88/98] mt76: fix monitor mode crash with sdio driver Sasha Levin
2022-04-01 14:37 ` [PATCH AUTOSEL 5.15 89/98] xtensa: fix DTC warning unit_address_format Sasha Levin
2022-04-01 14:37 ` [PATCH AUTOSEL 5.15 90/98] MIPS: ingenic: correct unit node address Sasha Levin
2022-04-01 14:37 ` Sasha Levin [this message]
2022-04-01 14:37 ` [PATCH AUTOSEL 5.15 92/98] netfilter: conntrack: revisit gc autotuning Sasha Levin
2022-04-01 14:37 ` [PATCH AUTOSEL 5.15 93/98] netlabel: fix out-of-bounds memory accesses Sasha Levin
2022-04-01 14:37 ` [PATCH AUTOSEL 5.15 94/98] ceph: fix inode reference leakage in ceph_get_snapdir() Sasha Levin
2022-04-01 14:37 ` [PATCH AUTOSEL 5.15 95/98] ceph: fix memory leak in ceph_readdir when note_last_dentry returns error Sasha Levin
2022-04-01 14:37 ` [PATCH AUTOSEL 5.15 96/98] lib/Kconfig.debug: add ARCH dependency for FUNCTION_ALIGN option Sasha Levin
2022-04-01 14:37 ` [PATCH AUTOSEL 5.15 97/98] init/main.c: return 1 from handled __setup() functions Sasha Levin
2022-04-01 14:37 ` [PATCH AUTOSEL 5.15 98/98] minix: fix bug when opening a file with O_DIRECT Sasha Levin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220401143742.1952163-91-sashal@kernel.org \
--to=sashal@kernel.org \
--cc=davem@davemloft.net \
--cc=johan.hedberg@gmail.com \
--cc=kuba@kernel.org \
--cc=linux-bluetooth@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=luiz.dentz@gmail.com \
--cc=luiz.von.dentz@intel.com \
--cc=marcel@holtmann.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=soenke.huster@eknoes.de \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).