{"id":"CVE-2024-43834","summary":"xdp: fix invalid wait context of page_pool_destroy()","details":"In the Linux kernel, the following vulnerability has been resolved:\n\nxdp: fix invalid wait context of page_pool_destroy()\n\nIf the driver uses a page pool, it creates a page pool with\npage_pool_create().\nThe reference count of page pool is 1 as default.\nA page pool will be destroyed only when a reference count reaches 0.\npage_pool_destroy() is used to destroy page pool, it decreases a\nreference count.\nWhen a page pool is destroyed, -\u003edisconnect() is called, which is\nmem_allocator_disconnect().\nThis function internally acquires mutex_lock().\n\nIf the driver uses XDP, it registers a memory model with\nxdp_rxq_info_reg_mem_model().\nThe xdp_rxq_info_reg_mem_model() internally increases a page pool\nreference count if a memory model is a page pool.\nNow the reference count is 2.\n\nTo destroy a page pool, the driver should call both page_pool_destroy()\nand xdp_unreg_mem_model().\nThe xdp_unreg_mem_model() internally calls page_pool_destroy().\nOnly page_pool_destroy() decreases a reference count.\n\nIf a driver calls page_pool_destroy() then xdp_unreg_mem_model(), we\nwill face an invalid wait context warning.\nBecause xdp_unreg_mem_model() calls page_pool_destroy() with\nrcu_read_lock().\nThe page_pool_destroy() internally acquires mutex_lock().\n\nSplat looks like:\n=============================\n[ BUG: Invalid wait context ]\n6.10.0-rc6+ #4 Tainted: G W\n-----------------------------\nethtool/1806 is trying to lock:\nffffffff90387b90 (mem_id_lock){+.+.}-{4:4}, at: mem_allocator_disconnect+0x73/0x150\nother info that might help us debug this:\ncontext-{5:5}\n3 locks held by ethtool/1806:\nstack backtrace:\nCPU: 0 PID: 1806 Comm: ethtool Tainted: G W 6.10.0-rc6+ #4 f916f41f172891c800f2fed\nHardware name: ASUS System Product Name/PRIME Z690-P D4, BIOS 0603 11/01/2021\nCall Trace:\n\u003cTASK\u003e\ndump_stack_lvl+0x7e/0xc0\n__lock_acquire+0x1681/0x4de0\n? _printk+0x64/0xe0\n? __pfx_mark_lock.part.0+0x10/0x10\n? __pfx___lock_acquire+0x10/0x10\nlock_acquire+0x1b3/0x580\n? mem_allocator_disconnect+0x73/0x150\n? __wake_up_klogd.part.0+0x16/0xc0\n? __pfx_lock_acquire+0x10/0x10\n? dump_stack_lvl+0x91/0xc0\n__mutex_lock+0x15c/0x1690\n? mem_allocator_disconnect+0x73/0x150\n? __pfx_prb_read_valid+0x10/0x10\n? mem_allocator_disconnect+0x73/0x150\n? __pfx_llist_add_batch+0x10/0x10\n? console_unlock+0x193/0x1b0\n? lockdep_hardirqs_on+0xbe/0x140\n? __pfx___mutex_lock+0x10/0x10\n? tick_nohz_tick_stopped+0x16/0x90\n? __irq_work_queue_local+0x1e5/0x330\n? irq_work_queue+0x39/0x50\n? __wake_up_klogd.part.0+0x79/0xc0\n? mem_allocator_disconnect+0x73/0x150\nmem_allocator_disconnect+0x73/0x150\n? __pfx_mem_allocator_disconnect+0x10/0x10\n? mark_held_locks+0xa5/0xf0\n? rcu_is_watching+0x11/0xb0\npage_pool_release+0x36e/0x6d0\npage_pool_destroy+0xd7/0x440\nxdp_unreg_mem_model+0x1a7/0x2a0\n? __pfx_xdp_unreg_mem_model+0x10/0x10\n? kfree+0x125/0x370\n? bnxt_free_ring.isra.0+0x2eb/0x500\n? bnxt_free_mem+0x5ac/0x2500\nxdp_rxq_info_unreg+0x4a/0xd0\nbnxt_free_mem+0x1356/0x2500\nbnxt_close_nic+0xf0/0x3b0\n? __pfx_bnxt_close_nic+0x10/0x10\n? ethnl_parse_bit+0x2c6/0x6d0\n? __pfx___nla_validate_parse+0x10/0x10\n? __pfx_ethnl_parse_bit+0x10/0x10\nbnxt_set_features+0x2a8/0x3e0\n__netdev_update_features+0x4dc/0x1370\n? ethnl_parse_bitset+0x4ff/0x750\n? __pfx_ethnl_parse_bitset+0x10/0x10\n? __pfx___netdev_update_features+0x10/0x10\n? mark_held_locks+0xa5/0xf0\n? _raw_spin_unlock_irqrestore+0x42/0x70\n? __pm_runtime_resume+0x7d/0x110\nethnl_set_features+0x32d/0xa20\n\nTo fix this problem, it uses rhashtable_lookup_fast() instead of\nrhashtable_lookup() with rcu_read_lock().\nUsing xa without rcu_read_lock() here is safe.\nxa is freed by __xdp_mem_allocator_rcu_free() and this is called by\ncall_rcu() of mem_xa_remove().\nThe mem_xa_remove() is called by page_pool_destroy() if a reference\ncount reaches 0.\nThe xa is already protected by the reference count mechanism well in the\ncontrol plane.\nSo removing rcu_read_lock() for page_pool_destroy() is safe.","modified":"2026-10-28T02:30:22.013406615Z","published":"2024-08-17T09:21:51.583Z","related":["SUSE-SU-2024:3190-1","SUSE-SU-2024:3194-1","SUSE-SU-2024:3195-1","SUSE-SU-2024:3209-1","SUSE-SU-2024:3383-1","SUSE-SU-2024:3483-1","SUSE-SU-2025:20044-1","SUSE-SU-2025:20047-1"],"database_specific":{"osv_generated_from":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2024/43xxx/CVE-2024-43834.json","cna_assigner":"Linux"},"references":[{"type":"WEB","url":"https://cert-portal.siemens.com/productcert/html/ssa-265688.html"},{"type":"WEB","url":"https://git.kernel.org/stable/c/12144069209eec7f2090ce9afa15acdcc2c2a537"},{"type":"WEB","url":"https://git.kernel.org/stable/c/3fc1be360b99baeea15cdee3cf94252cd3a72d26"},{"type":"WEB","url":"https://git.kernel.org/stable/c/59a931c5b732ca5fc2ca727f5a72aeabaafa85ec"},{"type":"WEB","url":"https://git.kernel.org/stable/c/6c390ef198aa69795427a5cb5fd7cb4bc7e6cd7a"},{"type":"WEB","url":"https://git.kernel.org/stable/c/be9d08ff102df3ac4f66e826ea935cf3af63a4bd"},{"type":"WEB","url":"https://git.kernel.org/stable/c/bf0ce5aa5f2525ed1b921ba36de96e458e77f482"},{"type":"WEB","url":"https://lists.debian.org/debian-lts-announce/2024/10/msg00003.html"},{"type":"WEB","url":"https://lists.debian.org/debian-lts-announce/2025/01/msg00001.html"},{"type":"ADVISORY","url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2024/43xxx/CVE-2024-43834.json"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2024-43834"},{"type":"PACKAGE","url":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git"}],"affected":[{"ranges":[{"type":"GIT","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","events":[{"introduced":"c3f812cea0d7006469d1cf33a4a9f0a12bb4b3a3"},{"fixed":"be9d08ff102df3ac4f66e826ea935cf3af63a4bd"},{"fixed":"6c390ef198aa69795427a5cb5fd7cb4bc7e6cd7a"},{"fixed":"3fc1be360b99baeea15cdee3cf94252cd3a72d26"},{"fixed":"bf0ce5aa5f2525ed1b921ba36de96e458e77f482"},{"fixed":"12144069209eec7f2090ce9afa15acdcc2c2a537"},{"fixed":"59a931c5b732ca5fc2ca727f5a72aeabaafa85ec"}]},{"type":"GIT","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","events":[{"introduced":"5.3.18"},{"fixed":"5.4"}]},{"type":"GIT","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","events":[{"introduced":"5.4.5"},{"fixed":"5.5"}]},{"type":"GIT","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","events":[{"introduced":"bf22306d92ca59c59dc4aa3bab14768948193d56"}]},{"type":"GIT","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","events":[{"introduced":"05f646cb2174d1a4e032b60b99097f5c4b522616"}]}],"versions":["v5.3.18","v5.4.302","v5.4.301","v5.4.300","v5.4.299","v5.4.298","v5.4.297","v5.4.296","v5.4.295","v5.4.294","v5.4.293","v5.4.292","v5.4.291","v5.4.290","v5.4.289","v5.4.288","v5.4.287","v5.4.286","v5.4.285","v5.4.284","v5.4.283","v5.4.282","v5.4.281","v5.4.280","v5.4.279","v5.4.278","v5.4.277","v5.4.276","v5.4.275","v5.4.274","v5.4.273","v5.4.272","v5.4.271","v5.4.270","v5.4.269","v5.4.268","v5.4.267","v5.4.266","v5.4.265","v5.4.264","v5.4.263","v5.4.262","v5.4.261","v5.4.260","v5.4.259","v5.4.258","v5.4.257","v5.4.256","v5.4.255","v5.4.254","v5.4.253","v5.4.252","v5.4.251","v5.4.250","v5.4.249","v5.4.248","v5.4.247","v5.4.246","v5.4.245","v5.4.244","v5.4.243","v5.4.242","v5.4.241","v5.4.240","v5.4.239","v5.4.238","v5.4.237","v5.4.236","v5.4.235","v5.4.234","v5.4.233","v5.4.232","v5.4.231","v5.4.230","v5.4.229","v5.4.228","v5.4.227","v5.4.226","v5.4.225","v5.4.224","v5.4.223","v5.4.222","v5.4.221","v5.4.220","v5.4.219","v5.4.218","v5.4.217","v5.4.216","v5.4.215","v5.4.214","v5.4.213","v5.4.212","v5.4.211","v5.4.210","v5.4.209","v5.4.208","v5.4.207","v5.4.206","v5.4.205","v5.4.204","v5.4.203","v5.4.202","v5.4.201","v5.4.200","v5.4.199","v5.4.198","v5.4.197","v5.4.196","v5.4.195","v5.4.194","v5.4.193","v5.4.192","v5.4.191","v5.4.190","v5.4.189","v5.4.188","v5.4.187","v5.4.186","v5.4.185","v5.4.184","v5.4.183","v5.4.182","v5.4.181","v5.4.180","v5.4.179","v5.4.178","v5.4.177","v5.4.176","v5.4.175","v5.4.174","v5.4.173","v5.4.172","v5.4.171","v5.4.170","v5.4.169","v5.4.168","v5.4.167","v5.4.166","v5.4.165","v5.4.164","v5.4.163","v5.4.162","v5.4.161","v5.4.160","v5.4.159","v5.4.158","v5.4.157","v5.4.156","v5.4.155","v5.4.154","v5.4.153","v5.4.152","v5.4.151","v5.4.150","v5.4.149","v5.4.148","v5.4.147","v5.4.146","v5.4.145","v5.4.144","v5.4.143","v5.4.142","v5.4.141","v5.4.140","v5.4.139","v5.4.138","v5.4.137","v5.4.136","v5.4.135","v5.4.134","v5.4.133","v5.4.132","v5.4.131","v5.4.130","v5.4.129","v5.4.128","v5.4.127","v5.4.126","v5.4.125","v5.4.124","v5.4.123","v5.4.122","v5.4.121","v5.4.120","v5.4.119","v5.4.118","v5.4.117","v5.4.116","v5.4.115","v5.4.114","v5.4.113","v5.4.112","v5.4.111","v5.4.110","v5.4.109","v5.4.108","v5.4.107","v5.4.106","v5.4.105","v5.4.104","v5.4.103","v5.4.102","v5.4.101","v5.4.100","v5.4.99","v5.4.98","v5.4.97","v5.4.96","v5.4.95","v5.4.94","v5.4.93","v5.4.92","v5.4.91","v5.4.90","v5.4.89","v5.4.88","v5.4.87","v5.4.86","v5.4.85","v5.4.84","v5.4.83","v5.4.82","v5.4.81","v5.4.80","v5.4.79","v5.4.78","v5.4.77","v5.4.76","v5.4.75","v5.4.74","v5.4.73","v5.4.72","v5.4.71","v5.4.70","v5.4.69","v5.4.68","v5.4.67","v5.4.66","v5.4.65","v5.4.64","v5.4.63","v5.4.62","v5.4.61","v5.4.60","v5.4.59","v5.4.58","v5.4.57","v5.4.56","v5.4.55","v5.4.54","v5.4.53","v5.4.52","v5.4.51","v5.4.50","v5.4.49","v5.4.48","v5.4.47","v5.4.46","v5.4.45","v5.4.44","v5.4.43","v5.4.42","v5.4.41","v5.4.40","v5.4.39","v5.4.38","v5.4.37","v5.4.36","v5.4.35","v5.4.34","v5.4.33","v5.4.32","v5.4.31","v5.4.30","v5.4.29","v5.4.28","v5.4.27","v5.4.26","v5.4.25","v5.4.24","v5.4.23","v5.4.22","v5.4.21","v5.4.20","v5.4.19","v5.4.18","v5.4.17","v5.4.16","v5.4.15","v5.4.14","v5.4.13","v5.4.12","v5.4.11","v5.4.10","v5.4.9","v5.4.8","v5.4.7","v5.4.6","v5.4.5"],"database_specific":{"source":"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2024-43834.json"}},{"package":{"name":"Kernel","ecosystem":"Linux"},"ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"5.5.0"},{"fixed":"5.10.224"}]},{"type":"ECOSYSTEM","events":[{"introduced":"5.11.0"},{"fixed":"5.15.165"}]},{"type":"ECOSYSTEM","events":[{"introduced":"5.16.0"},{"fixed":"6.1.103"}]},{"type":"ECOSYSTEM","events":[{"introduced":"6.2.0"},{"fixed":"6.6.44"}]},{"type":"ECOSYSTEM","events":[{"introduced":"6.7.0"},{"fixed":"6.10.3"}]}],"database_specific":{"source":"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2024-43834.json"}}],"schema_version":"1.9.2"}