Re: Kernel oops with 6.14 when enabling TLS

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 3/3/25 15:42, Matthew Wilcox wrote:
On Mon, Mar 03, 2025 at 02:27:06PM +0000, Matthew Wilcox wrote:
We have a _lot_ of page types available.  We should mark large kmallocs
as such.  I'll send a patch to do that.

Can you try this?  It should fix the crash, at least.  Not sure why the
frozen patch triggered it.

diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h
index 36d283552f80..df9234e5f478 100644
--- a/include/linux/page-flags.h
+++ b/include/linux/page-flags.h
@@ -925,14 +925,15 @@ FOLIO_FLAG_FALSE(has_hwpoisoned)
  enum pagetype {
  	/* 0x00-0x7f are positive numbers, ie mapcount */
  	/* Reserve 0x80-0xef for mapcount overflow. */
-	PGTY_buddy	= 0xf0,
-	PGTY_offline	= 0xf1,
-	PGTY_table	= 0xf2,
-	PGTY_guard	= 0xf3,
-	PGTY_hugetlb	= 0xf4,
-	PGTY_slab	= 0xf5,
-	PGTY_zsmalloc	= 0xf6,
-	PGTY_unaccepted	= 0xf7,
+	PGTY_buddy		= 0xf0,
+	PGTY_offline		= 0xf1,
+	PGTY_table		= 0xf2,
+	PGTY_guard		= 0xf3,
+	PGTY_hugetlb		= 0xf4,
+	PGTY_slab		= 0xf5,
+	PGTY_zsmalloc		= 0xf6,
+	PGTY_unaccepted		= 0xf7,
+	PGTY_large_kmalloc	= 0xf8,
PGTY_mapcount_underflow = 0xff
  };
@@ -1075,6 +1076,7 @@ PAGE_TYPE_OPS(Zsmalloc, zsmalloc, zsmalloc)
   * Serialized with zone lock.
   */
  PAGE_TYPE_OPS(Unaccepted, unaccepted, unaccepted)
+FOLIO_TYPE_OPS(large_kmalloc, large_kmalloc)
/**
   * PageHuge - Determine if the page belongs to hugetlbfs
diff --git a/mm/slub.c b/mm/slub.c
index 1f50129dcfb3..872e1bab3bd1 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -4241,6 +4241,7 @@ static void *___kmalloc_large_node(size_t size, gfp_t flags, int node)
  		ptr = folio_address(folio);
  		lruvec_stat_mod_folio(folio, NR_SLAB_UNRECLAIMABLE_B,
  				      PAGE_SIZE << order);
+		__folio_set_large_kmalloc(folio);
  	}
ptr = kasan_kmalloc_large(ptr, size, flags);
@@ -4716,6 +4717,11 @@ static void free_large_kmalloc(struct folio *folio, void *object)
  {
  	unsigned int order = folio_order(folio);
+ if (WARN_ON_ONCE(!folio_test_large_kmalloc(folio))) {
+		dump_page(&folio->page, "Not a kmalloc allocation");
+		return;
+	}
+
  	if (WARN_ON_ONCE(order == 0))
  		pr_warn_once("object pointer: 0x%p\n", object);
@@ -4725,6 +4731,7 @@ static void free_large_kmalloc(struct folio *folio, void *object) lruvec_stat_mod_folio(folio, NR_SLAB_UNRECLAIMABLE_B,
  			      -(PAGE_SIZE << order));
+	__folio_clear_large_kmalloc(folio);
  	folio_put(folio);
  }

Still crashes:

[   63.561990] nvme nvme1: queue 0: failed to start TLS: -3
[   63.652070] ------------[ cut here ]------------
[ 63.658068] WARNING: CPU: 6 PID: 5216 at mm/slub.c:4720 free_large_kmalloc+0x89/0xa0 [ 63.667579] Modules linked in: tls(E) nvme_tcp(E) af_packet(E) iscsi_ibft(E) iscsi_boot_sysfs(E) nls_iso8859_1(E) nls_cp437(E) vfat(E) fat(E) ipmi_ssif(E) amd_atl(E) intel_rapl_msr(E) xfs(E) intel_rapl_common(E) amd64_edac(E) edac_mce_amd(E) dax_hmem(E) cxl_acpi(E) tg3(E) cxl_port(E) kvm_amd(E) ipmi_si(E) cxl_core(E) i40e(E) i2c_piix4(E) ipmi_devintf(E) einj(E) kvm(E) acpi_cpufreq(E) wmi_bmof(E) libphy(E) libie(E) k10temp(E) i2c_smbus(E) ipmi_msghandler(E) i2c_designware_platform(E) joydev(E) i2c_designware_core(E) button(E) nvme_fabrics(E) nvme_keyring(E) fuse(E) efi_pstore(E) configfs(E) dmi_sysfs(E) ip_tables(E) x_tables(E) hid_generic(E) usbhid(E) ahci(E) libahci(E) ghash_clmulni_intel(E) libata(E) sha512_ssse3(E) sha256_ssse3(E) sd_mod(E) ast(E) sha1_ssse3(E) scsi_dh_emc(E) drm_client_lib(E) scsi_dh_rdac(E) i2c_algo_bit(E) aesni_intel(E) xhci_pci(E) scsi_dh_alua(E) drm_shmem_helper(E) crypto_simd(E) drm_kms_helper(E) cryptd(E) sg(E) nvme(E) xhci_hcd(E) nvme_core(E) scsi_mod(E) drm(E) nvme_auth(E) scsi_common(E) [ 63.667703] usbcore(E) ccp(E) sp5100_tco(E) wmi(E) btrfs(E) blake2b_generic(E) xor(E) raid6_pq(E) efivarfs(E) [ 63.667717] CPU: 6 UID: 0 PID: 5216 Comm: nvme Kdump: loaded Tainted: G W E 6.14.0-rc4-default+ #308 190df031934d7fa516e6fdc38148e19d2fe48841
[   63.667724] Tainted: [W]=WARN, [E]=UNSIGNED_MODULE
[ 63.667726] Hardware name: Lenovo ThinkSystem SR655V3/SB27B09914, BIOS KAE111E-2.10 04/11/2023
[   63.667728] RIP: 0010:free_large_kmalloc+0x89/0xa0
[ 63.667733] Code: df e8 5b ff ff ff 83 7b 30 ff 74 07 c7 43 30 ff ff ff ff f0 ff 4b 34 74 07 5b 5d e9 2c 08 b4 ff 48 89 df 5b 5d e9 57 05 f8 ff <0f> 0b 48 89 df 48 c7 c6 9e bc 5b 82 5b 5d e9 a4 0b fb ff 0f 1f 40
[   63.842753] RSP: 0018:ff824cf0c3307c08 EFLAGS: 00010202
[ 63.842757] RAX: 00000000000000ff RBX: fffb0b48c0178e80 RCX: ff45d99f856df580 [ 63.842759] RDX: 0000000000000000 RSI: ff45d99f85e3a800 RDI: fffb0b48c0178e80 [ 63.842760] RBP: 00000000fffff000 R08: 0000000000000001 R09: 0000000000000101 [ 63.842762] R10: ff824cf0c3307c90 R11: 0000000000000001 R12: fffb0b48c0178e80 [ 63.842764] R13: ff45d99f85e3a800 R14: ff45d9a1d3622a30 R15: ff45d9a1e9b58000 [ 63.842765] FS: 00007f5f53015800(0000) GS:ff45d9a24d800000(0000) knlGS:0000000000000000
[   63.842767] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 63.842769] CR2: 00007f5f52f50d7e CR3: 00000002538d0001 CR4: 0000000000771ef0
[   63.842771] PKRU: 55555554
[   63.842773] Call Trace:
[   63.842776]  <TASK>
[   63.842781]  ? __warn+0x85/0x130
[   63.934362]  ? free_large_kmalloc+0x89/0xa0
[   63.934369]  ? report_bug+0xf8/0x1e0
[   63.934376]  ? handle_bug+0x50/0xa0
[   63.934381]  ? exc_invalid_op+0x13/0x60
[   63.934385]  ? asm_exc_invalid_op+0x16/0x20
[   63.934394]  ? free_large_kmalloc+0x89/0xa0
[   63.934398]  kfree+0x2a5/0x340
[   63.934403]  ? srso_alias_return_thunk+0x5/0xfbef5
[ 63.934409] ? nvmf_connect_admin_queue+0x105/0x1a0 [nvme_fabrics 18bfa9223bf0bd1ec571f5f45774adcc919a867e] [ 63.987625] ? nvmf_connect_admin_queue+0xa1/0x1a0 [nvme_fabrics 18bfa9223bf0bd1ec571f5f45774adcc919a867e] [ 63.987632] nvmf_connect_admin_queue+0x105/0x1a0 [nvme_fabrics 18bfa9223bf0bd1ec571f5f45774adcc919a867e] [ 63.987641] nvme_tcp_start_queue+0x192/0x310 [nvme_tcp a0629454ac5200d03b72a09e4d2b1e27dfa113e9] [ 63.987649] nvme_tcp_setup_ctrl+0xf8/0x700 [nvme_tcp a0629454ac5200d03b72a09e4d2b1e27dfa113e9] [ 63.987655] ? nvme_change_ctrl_state+0x99/0x1b0 [nvme_core 4c8074fe8bffb31437bcdb2c4a45c7e74861c83b] [ 64.043323] nvme_tcp_create_ctrl+0x2e3/0x4d0 [nvme_tcp a0629454ac5200d03b72a09e4d2b1e27dfa113e9] [ 64.043332] nvmf_dev_write+0x323/0x3d0 [nvme_fabrics 18bfa9223bf0bd1ec571f5f45774adcc919a867e]
[   64.043338]  ? srso_alias_return_thunk+0x5/0xfbef5
[   64.043344]  vfs_write+0xd9/0x430
[   64.043349]  ? syscall_exit_to_user_mode+0xc/0x200
[   64.043355]  ? srso_alias_return_thunk+0x5/0xfbef5
[   64.043358]  ? do_syscall_64+0x81/0x160
[   64.043363]  ? srso_alias_return_thunk+0x5/0xfbef5
[   64.043367]  ksys_write+0x68/0xe0
[   64.043371]  do_syscall_64+0x74/0x160
[   64.108416]  ? srso_alias_return_thunk+0x5/0xfbef5
[   64.108422]  ? exc_page_fault+0x68/0x150
[   64.108428]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
[   64.108433] RIP: 0033:0x7f5f52f216f0
[ 64.108438] Code: 66 2e 0f 1f 84 00 00 00 00 00 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 80 3d 19 c3 0e 00 00 74 17 b8 01 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 58 c3 0f 1f 80 00 00 00 00 48 83 ec 28 48 89 [ 64.108440] RSP: 002b:00007ffe45dc8bb8 EFLAGS: 00000202 ORIG_RAX: 0000000000000001 [ 64.108443] RAX: ffffffffffffffda RBX: 00005608dbad8980 RCX: 00007f5f52f216f0 [ 64.108445] RDX: 00000000000000ed RSI: 00005608dbad8980 RDI: 0000000000000003 [ 64.108447] RBP: 0000000000000003 R08: 00000000000000ed R09: 00005608dbad8980 [ 64.108448] R10: 0000000000000000 R11: 0000000000000202 R12: 00000000000000ed [ 64.108450] R13: 00007f5f5307b008 R14: 00005608dbad1f50 R15: 00005608dbad26d0
[   64.108456]  </TASK>
[   64.108458] ---[ end trace 0000000000000000 ]---
[ 64.108461] page: refcount:0 mapcount:0 mapping:0000000000000000 index:0x2 pfn:0x5e3a
[   64.108465] flags: 0xfffffc0000000(node=0|zone=1|lastcpupid=0x1fffff)
[ 64.108469] raw: 000fffffc0000000 0000000000000000 fffb0b48c0178e90 0000000000000000 [ 64.108472] raw: 0000000000000002 0000000000000000 00000000ffffffff 0000000000000000
[   64.108473] page dumped because: Not a kmalloc allocation
[   64.112317] nvme nvme1: creating 32 I/O queues.
[   66.074182] nvme nvme1: mapped 32/0/0 default/read/poll queues.
[ 66.084156] page: refcount:0 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x5de5
[   66.093770] flags: 0xfffffc0000000(node=0|zone=1|lastcpupid=0x1fffff)
[ 66.101810] raw: 000fffffc0000000 0000000000000000 dead000000000122 0000000000000000 [ 66.111311] raw: 0000000000000000 0000000000000000 00000000ffffffff 0000000000000000
[   66.111314] page dumped because: Not a kmalloc allocation
[ 66.112001] page: refcount:0 mapcount:0 mapping:0000000000000000 index:0xdc pfn:0x5de3
[   66.137452] flags: 0xfffffc0000000(node=0|zone=1|lastcpupid=0x1fffff)
[ 66.137460] raw: 000fffffc0000000 ff45d9a24d93f420 ff45d9a24d93f420 0000000000000000 [ 66.137464] raw: 00000000000000dc 0000000000000000 00000000ffffffff 0000000000000000
[   66.137466] page dumped because: Not a kmalloc allocation
[ 66.138095] page: refcount:0 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x5de5
[   66.180944] flags: 0xfffffc0000000(node=0|zone=1|lastcpupid=0x1fffff)
[ 66.180950] raw: 000fffffc0000000 ff45d9a24da3f420 ff45d9a24da3f420 0000000000000000 [ 66.180953] raw: 0000000000000000 0000000000000000 00000000ffffffff 0000000000000000
[   66.180954] page dumped because: Not a kmalloc allocation
[ 66.181672] BUG: unable to handle page fault for address: ff40e4ea8fa50250
[   66.223318] #PF: supervisor read access in kernel mode
[   66.223320] #PF: error_code(0x0000) - not-present page
[   66.223322] PGD 0
[   66.223325] Oops: Oops: 0000 [#1] PREEMPT SMP NOPTI
[ 66.223330] CPU: 73 UID: 0 PID: 5216 Comm: nvme Kdump: loaded Tainted: G W E 6.14.0-rc4-default+ #308 190df031934d7fa516e6fdc38148e19d2fe48841
[   66.223337] Tainted: [W]=WARN, [E]=UNSIGNED_MODULE
[ 66.223338] Hardware name: Lenovo ThinkSystem SR655V3/SB27B09914, BIOS KAE111E-2.10 04/11/2023
[   66.223340] RIP: 0010:kfree+0xea/0x340
[ 66.223348] Code: b9 92 01 48 89 da 48 29 c2 48 81 fa ff ff 1f 00 77 09 48 85 c0 0f 85 95 01 00 00 48 c7 c7 18 ba 01 00 49 8b 45 00 65 48 03 07 <48> 8b 50 08 4c 39 60 10 0f 85 bb 01 00 00 41 8b 4d 28 48 8b 00 48
[   66.223350] RSP: 0018:ff824cf0c3307bf0 EFLAGS: 00010287
[ 66.223353] RAX: ff40e4ea8fa50248 RBX: ff45d99f85de0400 RCX: 0000000000000001 [ 66.223355] RDX: ff45d99f85de0400 RSI: ffffffffc1b3028a RDI: 000000000001ba18 [ 66.223357] RBP: ff824cf0c3307c40 R08: 0000000000000001 R09: 0000000000000008 [ 66.223359] R10: ff824cf0c3307c58 R11: 0000000000000001 R12: fffb0b48c0177800 [ 66.347600] R13: fffb0b48c024ce88 R14: 0000000000000004 R15: ffffffffc1b3028a [ 66.347604] FS: 00007f5f53015800(0000) GS:ff45d9a1cdb80000(0000) knlGS:0000000000000000
[   66.347607] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 66.347609] CR2: ff40e4ea8fa50250 CR3: 00000002538d0001 CR4: 0000000000771ef0
[   66.347611] PKRU: 55555554
[   66.347613] Call Trace:
[   66.347616]  <TASK>
[   66.347621]  ? __die_body+0x1a/0x60
[   66.347629]  ? page_fault_oops+0x132/0x4b0
[   66.347634]  ? search_module_extables+0x15/0x60
[   66.347640]  ? srso_alias_return_thunk+0x5/0xfbef5
[   66.347644]  ? search_bpf_extables+0x65/0x70
[   66.347649]  ? srso_alias_return_thunk+0x5/0xfbef5
[   66.347654]  ? exc_page_fault+0xb0/0x150
[   66.347660]  ? asm_exc_page_fault+0x22/0x30
[ 66.347667] ? nvmf_connect_io_queue+0xfa/0x1c0 [nvme_fabrics 18bfa9223bf0bd1ec571f5f45774adcc919a867e] [ 66.347676] ? nvmf_connect_io_queue+0xfa/0x1c0 [nvme_fabrics 18bfa9223bf0bd1ec571f5f45774adcc919a867e]
[   66.460070]  ? kfree+0xea/0x340
[   66.460079]  ? srso_alias_return_thunk+0x5/0xfbef5
[ 66.460086] ? nvmf_connect_io_queue+0xfa/0x1c0 [nvme_fabrics 18bfa9223bf0bd1ec571f5f45774adcc919a867e] [ 66.460091] nvmf_connect_io_queue+0xfa/0x1c0 [nvme_fabrics 18bfa9223bf0bd1ec571f5f45774adcc919a867e] [ 66.460102] nvme_tcp_start_queue+0x166/0x310 [nvme_tcp a0629454ac5200d03b72a09e4d2b1e27dfa113e9] [ 66.460111] nvme_tcp_start_io_queues+0x32/0x80 [nvme_tcp a0629454ac5200d03b72a09e4d2b1e27dfa113e9] [ 66.460117] nvme_tcp_setup_ctrl+0x421/0x700 [nvme_tcp a0629454ac5200d03b72a09e4d2b1e27dfa113e9] [ 66.525407] nvme_tcp_create_ctrl+0x2e3/0x4d0 [nvme_tcp a0629454ac5200d03b72a09e4d2b1e27dfa113e9] [ 66.525416] nvmf_dev_write+0x323/0x3d0 [nvme_fabrics 18bfa9223bf0bd1ec571f5f45774adcc919a867e]
[   66.525422]  ? srso_alias_return_thunk+0x5/0xfbef5
[   66.525429]  vfs_write+0xd9/0x430
[   66.525434]  ? syscall_exit_to_user_mode+0xc/0x200
[   66.525441]  ? srso_alias_return_thunk+0x5/0xfbef5
[   66.525443]  ? do_syscall_64+0x81/0x160
[   66.525449]  ? srso_alias_return_thunk+0x5/0xfbef5
[   66.525453]  ksys_write+0x68/0xe0
[   66.585510]  do_syscall_64+0x74/0x160
[   66.585516]  ? srso_alias_return_thunk+0x5/0xfbef5
[   66.585518]  ? exc_page_fault+0x68/0x150
[   66.585523]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
[   66.585528] RIP: 0033:0x7f5f52f216f0
[ 66.585532] Code: 66 2e 0f 1f 84 00 00 00 00 00 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 80 3d 19 c3 0e 00 00 74 17 b8 01 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 58 c3 0f 1f 80 00 00 00 00 48 83 ec 28 48 89 [ 66.585534] RSP: 002b:00007ffe45dc8bb8 EFLAGS: 00000202 ORIG_RAX: 0000000000000001 [ 66.585538] RAX: ffffffffffffffda RBX: 00005608dbad8980 RCX: 00007f5f52f216f0 [ 66.585540] RDX: 00000000000000ed RSI: 00005608dbad8980 RDI: 0000000000000003 [ 66.585541] RBP: 0000000000000003 R08: 00000000000000ed R09: 00005608dbad8980 [ 66.585543] R10: 0000000000000000 R11: 0000000000000202 R12: 00000000000000ed [ 66.585545] R13: 00007f5f5307b008 R14: 00005608dbad1f50 R15: 00005608dbad26d0
[   66.585552]  </TASK>
[ 66.691445] Modules linked in: tls(E) nvme_tcp(E) af_packet(E) iscsi_ibft(E) iscsi_boot_sysfs(E) nls_iso8859_1(E) nls_cp437(E) vfat(E) fat(E) ipmi_ssif(E) amd_atl(E) intel_rapl_msr(E) xfs(E) intel_rapl_common(E) amd64_edac(E) edac_mce_amd(E) dax_hmem(E) cxl_acpi(E) tg3(E) cxl_port(E) kvm_amd(E) ipmi_si(E) cxl_core(E) i40e(E) i2c_piix4(E) ipmi_devintf(E) einj(E) kvm(E) acpi_cpufreq(E) wmi_bmof(E) libphy(E) libie(E) k10temp(E) i2c_smbus(E) ipmi_msghandler(E) i2c_designware_platform(E) joydev(E) i2c_designware_core(E) button(E) nvme_fabrics(E) nvme_keyring(E) fuse(E) efi_pstore(E) configfs(E) dmi_sysfs(E) ip_tables(E) x_tables(E) hid_generic(E) usbhid(E) ahci(E) libahci(E) ghash_clmulni_intel(E) libata(E) sha512_ssse3(E) sha256_ssse3(E) sd_mod(E) ast(E) sha1_ssse3(E) scsi_dh_emc(E) drm_client_lib(E) scsi_dh_rdac(E) i2c_algo_bit(E) aesni_intel(E) xhci_pci(E) scsi_dh_alua(E) drm_shmem_helper(E) crypto_simd(E) drm_kms_helper(E) cryptd(E) sg(E) nvme(E) xhci_hcd(E) nvme_core(E) scsi_mod(E) drm(E) nvme_auth(E) scsi_common(E) [ 66.691553] usbcore(E) ccp(E) sp5100_tco(E) wmi(E) btrfs(E) blake2b_generic(E) xor(E) raid6_pq(E) efivarfs(E)
[   66.793438] CR2: ff40e4ea8fa50250

Cheers,

Hannes
--
Dr. Hannes Reinecke                  Kernel Storage Architect
hare@xxxxxxxx                               +49 911 74053 688
SUSE Software Solutions GmbH, Frankenstr. 146, 90461 Nürnberg
HRB 36809 (AG Nürnberg), GF: I. Totev, A. McDonald, W. Knoblich




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux