** Changed in: linux (Ubuntu Focal) Importance: Undecided => Medium ** Changed in: linux (Ubuntu Focal) Status: In Progress => Fix Committed
-- You received this bug notification because you are a member of Kernel Packages, which is subscribed to linux in Ubuntu. https://bugs.launchpad.net/bugs/2081085 Title: wbt:wbt_* trace event NULL pointer dereference with GENHD_FL_HIDDEN disks Status in linux package in Ubuntu: Invalid Status in linux source package in Focal: Fix Committed Bug description: [Impact] Systems with storage devices that utilize the GENHD_FL_HIDDEN flag, such as NVMe disks declaring support for multiple controllers (aka native multipathing), will have a request queue with backing_dev_info->dev set to NULL. When tracing is enabled with any of the wbt:wbt_* events enabled, a NULL pointer dereference will occur in the corresponding trace function called from wb_timer_fn. This occurs when the trace function attempts to access the device's name with dev_name. On a DGXA100 system, this can be reproduced by running the following, where /dev/nvme0n1 is one of the 4 NVMe disks in the system that support native multipathing: $ echo 1 | sudo tee /sys/kernel/tracing/events/wbt/enable $ echo 1 | sudo tee /sys/kernel/tracing/tracing_on $ sudo dd if=/dev/zero of=/dev/nvme0n1 A NULL pointer dereference will occur and the system will become unresponsive. [Fix] The upstream commit d51cfc53ade318 ("bdi: use bdi_dev_name() to get device name") resolves this by changing the wbt:wbt_* trace functions to use the bdi_dev_name function instead of dev_name. The bdi_dev_name function safely handles the case where the supplied device is NULL. [Test Case] Verified that the commit d51cfc53ade318 ("bdi: use bdi_dev_name() to get device name") resolves the issue on DGXA100 when applied to the "Ubuntu-5.4.0-196.216" tag. The reproducer no longer causes a NULL pointer dereference or otherwise crash the system. [Regression Potential] There is a low risk of a regression: * In the focal K5.4 kernel, the bdi_dev_name function is used in other trace event functions for the same purpose of catching the case where bdi->dev is NULL. * This change is already present in kernel versions 5.7 and newer. [Other] The patch d51cfc53ade318 ("bdi: use bdi_dev_name() to get device name") is already present in Jammy K5.15 and newer. ----- Originally found via kernel regression testing and reported here by @cypressyew: https://bugs.launchpad.net/ubuntu-kernel-tests/+bug/2072972. [ 1073.837085] BUG: kernel NULL pointer dereference, address: 0000000000000050 [ 1073.844858] #PF: supervisor read access in kernel mode [ 1073.850589] #PF: error_code(0x0000) - not-present page [ 1073.856318] PGD 0 P4D 0 [ 1073.859141] Oops: 0000 [#1] SMP NOPTI [ 1073.863226] CPU: 9 PID: 0 Comm: swapper/9 Tainted: P OE 5.4.0-196-generic #216-Ubuntu [ 1073.873319] Hardware name: NVIDIA DGXA100 920-23687-2530-000/DGXA100, BIOS 1.25 08/31/2023 [ 1073.882547] RIP: 0010:trace_event_raw_event_wbt_timer+0x6f/0x100 [ 1073.889248] Code: 59 80 e5 02 0f 85 8f 00 00 00 4c 89 e6 ba 34 00 00 00 48 8d 7d a0 e8 00 aa c9 ff 49 89 c4 48 85 c0 74 37 49 8b 87 b8 03 00 00 <48> 8b 70 50 48 85 f6 74 45 49 8d 7c 24 08 ba 20 00 00 00 e8 c9 18 [ 1073.910200] RSP: 0018:ffffaf08598a8da0 EFLAGS: 00010282 [ 1073.916029] RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000080000100 [ 1073.923988] RDX: ffff970f0ba9501c RSI: 0000000000000100 RDI: ffff970f0ba95018 [ 1073.931947] RBP: ffffaf08598a8e08 R08: ffff970f0ba95010 R09: 0000000000000100 [ 1073.939906] R10: ffffcf083fdc9a58 R11: 0000000000000386 R12: ffff970f0ba9501c [ 1073.947864] R13: 0000000000000000 R14: 0000000000000001 R15: ffff976efdfba000 [ 1073.955824] FS: 0000000000000000(0000) GS:ffff970f0f640000(0000) knlGS:0000000000000000 [ 1073.964850] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 1073.971259] CR2: 0000000000000050 CR3: 0000001f7de80000 CR4: 0000000000340ee0 [ 1073.979217] Call Trace: [ 1073.981942] <IRQ> [ 1073.984188] ? show_regs.cold+0x1a/0x1f [ 1073.988456] ? __die+0x90/0xd9 [ 1073.991862] ? no_context.isra.0+0x12c/0x320 [ 1073.996626] ? update_group_capacity+0x2c/0x1d0 [ 1074.001679] ? __bad_area_nosemaphore+0x45/0x1a0 [ 1074.006829] ? bad_area_nosemaphore+0x16/0x20 [ 1074.011687] ? do_user_addr_fault+0x267/0x440 [ 1074.016547] ? __enqueue_entity+0x96/0xa0 [ 1074.021018] ? enqueue_entity+0x139/0x670 [ 1074.025490] ? __do_page_fault+0x58/0x90 [ 1074.029861] ? do_page_fault+0x2c/0xe0 [ 1074.034044] ? page_fault+0x34/0x40 [ 1074.037933] ? trace_event_raw_event_wbt_timer+0x6f/0x100 [ 1074.043954] ? enqueue_entity+0x139/0x670 [ 1074.048426] wb_timer_fn+0x1d6/0x3c0 [ 1074.052413] ? blk_mq_tag_update_depth+0x100/0x100 [ 1074.057755] blk_stat_timer_fn+0x13a/0x140 [ 1074.062326] call_timer_fn+0x32/0x130 [ 1074.066409] __run_timers.part.0+0x180/0x280 [ 1074.071174] ? tick_sched_handle+0x33/0x60 [ 1074.075740] ? tick_sched_timer+0x3d/0x80 [ 1074.080211] ? recalibrate_cpu_khz+0x10/0x10 [ 1074.084971] ? ktime_get+0x3e/0xa0 [ 1074.088765] ? native_apic_msr_write+0x2b/0x30 [ 1074.093719] run_timer_softirq+0x2a/0x50 [ 1074.098091] __do_softirq+0xd1/0x2c1 [ 1074.102078] irq_exit+0xae/0xb0 [ 1074.105580] smp_apic_timer_interrupt+0x7b/0x140 [ 1074.110728] apic_timer_interrupt+0xf/0x20 [ 1074.115295] </IRQ> [ 1074.117634] RIP: 0010:native_safe_halt+0xe/0x10 [ 1074.122685] Code: 7b ff ff ff eb bd 90 90 90 90 90 90 e9 07 00 00 00 0f 00 2d e6 0c 50 00 f4 c3 66 90 e9 07 00 00 00 0f 00 2d d6 0c 50 00 fb f4 <c3> 90 0f 1f 44 00 00 55 48 89 e5 41 55 41 54 53 e8 dd 3e 61 ff 65 [ 1074.143638] RSP: 0018:ffffaf0840387e70 EFLAGS: 00000246 ORIG_RAX: ffffffffffffff13 [ 1074.152083] RAX: ffffffff90d0ab70 RBX: 0000000000000009 RCX: 0000000000000001 [ 1074.160042] RDX: 0000000000065c72 RSI: 0000000000000083 RDI: 0000000000000009 [ 1074.168002] RBP: ffffaf0840387e90 R08: 0000000000000001 R09: 0000000000022f80 [ 1074.175962] R10: ffff980f3fed5328 R11: 0000000000000000 R12: 0000000000000009 [ 1074.183920] R13: ffff970f0bff5e00 R14: 0000000000000000 R15: 0000000000000000 [ 1074.191882] ? __cpuidle_text_start+0x8/0x8 [ 1074.196546] ? default_idle+0x20/0x140 [ 1074.200726] arch_cpu_idle+0x15/0x20 [ 1074.204711] default_idle_call+0x23/0x30 [ 1074.209085] do_idle+0x1fb/0x270 [ 1074.212683] ? complete+0x49/0x50 [ 1074.216376] cpu_startup_entry+0x20/0x30 [ 1074.220750] start_secondary+0x178/0x1d0 [ 1074.225126] secondary_startup_64+0xa4/0xb0 [ 1074.229789] Modules linked in: nls_iso8859_1 dm_multipath scsi_dh_rdac scsi_dh_emc scsi_dh_alua amd64_edac_mod edac_mce_amd kvm_amd kvm nvidia_uvm(O) nvidia_drm(PO) nvidia_modeset(PO) ipmi_ssif nvidia(PO) input_leds mlx5_ib(OE) ib_uverbs(OE) binfmt_misc ib_core(OE) ccp k10temp ipmi_si ipmi_devintf ipmi_msghandler mac_hid sch_fq_codel msr ramoops reed_solomon efi_pstore ip_tables x_tables autofs4 btrfs zstd_compress raid10 raid456 async_raid6_recov async_memcpy async_pq async_xor async_tx xor raid6_pq libcrc32c raid1 raid0 multipath linear ses enclosure crct10dif_pclmul crc32_pclmul ghash_clmulni_intel aesni_intel mlx5_core(OE) ast crypto_simd drm_vram_helper cryptd glue_helper ttm drm_kms_helper pci_hyperv_intf syscopyarea mlxdevm(OE) auxiliary(OE) sysfillrect mpt3sas hid_generic igb uas tls sysimgblt usbhid raid_class mlxfw(OE) psample scsi_transport_sas usb_storage dca hid fb_sys_fops i2c_algo_bit nvme mlx_compat(OE) drm nvme_core i2c_piix4 [ 1074.323033] CR2: 0000000000000050 [ 1074.326858] ---[ end trace f3c3dea0291e7e7a ]--- [ 1074.472012] RIP: 0010:trace_event_raw_event_wbt_timer+0x6f/0x100 [ 1074.478714] Code: 59 80 e5 02 0f 85 8f 00 00 00 4c 89 e6 ba 34 00 00 00 48 8d 7d a0 e8 00 aa c9 ff 49 89 c4 48 85 c0 74 37 49 8b 87 b8 03 00 00 <48> 8b 70 50 48 85 f6 74 45 49 8d 7c 24 08 ba 20 00 00 00 e8 c9 18 [ 1074.499668] RSP: 0018:ffffaf08598a8da0 EFLAGS: 00010282 [ 1074.505497] RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000080000100 [ 1074.513459] RDX: ffff970f0ba9501c RSI: 0000000000000100 RDI: ffff970f0ba95018 [ 1074.521418] RBP: ffffaf08598a8e08 R08: ffff970f0ba95010 R09: 0000000000000100 [ 1074.529378] R10: ffffcf083fdc9a58 R11: 0000000000000386 R12: ffff970f0ba9501c [ 1074.537336] R13: 0000000000000000 R14: 0000000000000001 R15: ffff976efdfba000 [ 1074.545297] FS: 0000000000000000(0000) GS:ffff970f0f640000(0000) knlGS:0000000000000000 [ 1074.554325] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 1074.560733] CR2: 0000000000000050 CR3: 0000001f7de80000 CR4: 0000000000340ee0 [ 1074.568695] Kernel panic - not syncing: Fatal exception in interrupt [ 1074.578317] Kernel Offset: 0xf200000 from 0xffffffff81000000 (relocation range: 0xffffffff80000000-0xffffffffbfffffff) [ 1075.126325] ---[ end Kernel panic - not syncing: Fatal exception in interrupt ]--- To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/2081085/+subscriptions -- Mailing list: https://launchpad.net/~kernel-packages Post to : kernel-packages@lists.launchpad.net Unsubscribe : https://launchpad.net/~kernel-packages More help : https://help.launchpad.net/ListHelp