Bug 1224949 (CVE-2023-52849) - VUL-0: CVE-2023-52849: kernel: cxl/mem: Fix shutdown order
Summary: VUL-0: CVE-2023-52849: kernel: cxl/mem: Fix shutdown order
Status: NEW
Alias: CVE-2023-52849
Product: SUSE Security Incidents
Classification: Novell Products
Component: Incidents (show other bugs)
Version: unspecified
Hardware: Other Other
: P3 - Medium : Normal
Target Milestone: ---
Assignee: Hannes Reinecke
QA Contact: Security Team bot
URL: https://smash.suse.de/issue/407157/
Whiteboard: CVSSv3.1:SUSE:CVE-2023-52849:4.4:(AV:...
Keywords:
Depends on:
Blocks:
 
Reported: 2024-05-22 12:13 UTC by SMASH SMASH
Modified: 2024-07-08 15:00 UTC (History)
5 users (show)

See Also:
Found By: Security Response Team
Services Priority:
Business Priority:
Blocker: ---
Marketing QA Status: ---
IT Deployment: ---


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description SMASH SMASH 2024-05-22 12:13:21 UTC
In the Linux kernel, the following vulnerability has been resolved:

cxl/mem: Fix shutdown order

Ira reports that removing cxl_mock_mem causes a crash with the following
trace:

 BUG: kernel NULL pointer dereference, address: 0000000000000044
 [..]
 RIP: 0010:cxl_region_decode_reset+0x7f/0x180 [cxl_core]
 [..]
 Call Trace:
  <TASK>
  cxl_region_detach+0xe8/0x210 [cxl_core]
  cxl_decoder_kill_region+0x27/0x40 [cxl_core]
  cxld_unregister+0x29/0x40 [cxl_core]
  devres_release_all+0xb8/0x110
  device_unbind_cleanup+0xe/0x70
  device_release_driver_internal+0x1d2/0x210
  bus_remove_device+0xd7/0x150
  device_del+0x155/0x3e0
  device_unregister+0x13/0x60
  devm_release_action+0x4d/0x90
  ? __pfx_unregister_port+0x10/0x10 [cxl_core]
  delete_endpoint+0x121/0x130 [cxl_core]
  devres_release_all+0xb8/0x110
  device_unbind_cleanup+0xe/0x70
  device_release_driver_internal+0x1d2/0x210
  bus_remove_device+0xd7/0x150
  device_del+0x155/0x3e0
  ? lock_release+0x142/0x290
  cdev_device_del+0x15/0x50
  cxl_memdev_unregister+0x54/0x70 [cxl_core]

This crash is due to the clearing out the cxl_memdev's driver context
(@cxlds) before the subsystem is done with it. This is ultimately due to
the region(s), that this memdev is a member, being torn down and expecting
to be able to de-reference @cxlds, like here:

static int cxl_region_decode_reset(struct cxl_region *cxlr, int count)
...
                if (cxlds->rcd)
                        goto endpoint_reset;
...

Fix it by keeping the driver context valid until memdev-device
unregistration, and subsequently the entire stack of related
dependencies, unwinds.

References:
http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2023-52849
https://git.kernel.org/pub/scm/linux/security/vulns.git/plain/cve/published/2023/CVE-2023-52849.mbox
https://git.kernel.org/stable/c/20bd0198bebdd706bd4614b3933ef70d7c19618f
https://git.kernel.org/stable/c/7c7371b41a14e86f53e7dbe5baa7b1d3e0ab324b
https://git.kernel.org/stable/c/cad22a757029c3a1985c221a2d4a6491ad4035ae
https://git.kernel.org/stable/c/0ca074f7d788627a4e0b047ca5fbdb5fc567220c
https://git.kernel.org/stable/c/88d3917f82ed4215a2154432c26de1480a61b209
https://www.cve.org/CVERecord?id=CVE-2023-52849