Goal Reached Thanks to every supporter — we hit 100%!

Goal: 1000 CNY · Raised: 1000 CNY

100.0%

CVE-2024-43855— md: fix deadlock between mddev_suspend and flush bio

EPSS 0.01% · P3
Get alerts for future matching vulnerabilitiesLog in to subscribe

I. Basic Information for CVE-2024-43855

Vulnerability Information

Have questions about the vulnerability? See if Shenlong's analysis helps!
View Shenlong Deep Dive ↗

Although we use advanced large model technology, its output may still contain inaccurate or outdated information.Shenlong tries to ensure data accuracy, but please verify and judge based on the actual situation.

Vulnerability Title
md: fix deadlock between mddev_suspend and flush bio
Source: NVD (National Vulnerability Database)
Vulnerability Description
In the Linux kernel, the following vulnerability has been resolved: md: fix deadlock between mddev_suspend and flush bio Deadlock occurs when mddev is being suspended while some flush bio is in progress. It is a complex issue. T1. the first flush is at the ending stage, it clears 'mddev->flush_bio' and tries to submit data, but is blocked because mddev is suspended by T4. T2. the second flush sets 'mddev->flush_bio', and attempts to queue md_submit_flush_data(), which is already running (T1) and won't execute again if on the same CPU as T1. T3. the third flush inc active_io and tries to flush, but is blocked because 'mddev->flush_bio' is not NULL (set by T2). T4. mddev_suspend() is called and waits for active_io dec to 0 which is inc by T3. T1 T2 T3 T4 (flush 1) (flush 2) (third 3) (suspend) md_submit_flush_data mddev->flush_bio = NULL; . . md_flush_request . mddev->flush_bio = bio . queue submit_flushes . . . . md_handle_request . . active_io + 1 . . md_flush_request . . wait !mddev->flush_bio . . . . mddev_suspend . . wait !active_io . . . submit_flushes . queue_work md_submit_flush_data . //md_submit_flush_data is already running (T1) . md_handle_request wait resume The root issue is non-atomic inc/dec of active_io during flush process. active_io is dec before md_submit_flush_data is queued, and inc soon after md_submit_flush_data() run. md_flush_request active_io + 1 submit_flushes active_io - 1 md_submit_flush_data md_handle_request active_io + 1 make_request active_io - 1 If active_io is dec after md_handle_request() instead of within submit_flushes(), make_request() can be called directly intead of md_handle_request() in md_submit_flush_data(), and active_io will only inc and dec once in the whole flush process. Deadlock will be fixed. Additionally, the only difference between fixing the issue and before is that there is no return error handling of make_request(). But after previous patch cleaned md_write_start(), make_requst() only return error in raid5_make_request() by dm-raid, see commit 41425f96d7aa ("dm-raid456, md/raid456: fix a deadlock for dm-raid456 while io concurrent with reshape)". Since dm always splits data and flush operation into two separate io, io size of flush submitted by dm always is 0, make_request() will not be called in md_submit_flush_data(). To prevent future modifications from introducing issues, add WARN_ON to ensure make_request() no error is returned in this context.
Source: NVD (National Vulnerability Database)
CVSS Information
N/A
Source: NVD (National Vulnerability Database)
Vulnerability Type
N/A
Source: NVD (National Vulnerability Database)
Vulnerability Title
Linux kernel 安全漏洞
Source: CNNVD (China National Vulnerability Database)
Vulnerability Description
Linux kernel是美国Linux基金会的开源操作系统Linux所使用的内核。 Linux kernel存在安全漏洞,该漏洞源于在mddev_suspend和flush bio之间存在死锁问题。
Source: CNNVD (China National Vulnerability Database)
CVSS Information
N/A
Source: CNNVD (China National Vulnerability Database)
Vulnerability Type
N/A
Source: CNNVD (China National Vulnerability Database)

Affected Products

VendorProductAffected VersionsCPESubscribe
LinuxLinux f9f2d957a8ea93c73182aebf7de30935a58c027d ~ 32226070813140234b6c507084738e8e8385c5c6 -
LinuxLinux 6.8 -

II. Public POCs for CVE-2024-43855

#POC DescriptionSource LinkShenlong Link
AI-Generated POCPremium

No public POC found.

Login to generate AI POC

III. Intelligence Information for CVE-2024-43855

登录查看更多情报信息。

Same Patch Batch · Linux · 2024-08-17 · 109 CVEs total

CVE-2024-43819kvm: s390: Reject memory region operations for ucontrol VMs
CVE-2024-43831media: mediatek: vcodec: Handle invalid decoder vsi
CVE-2024-43832s390/uv: Don't call folio_wait_writeback() without a folio reference
CVE-2024-43830leds: trigger: Unregister sysfs attributes before calling deactivate()
CVE-2024-43829drm/qxl: Add check for drm_cvt_mode
CVE-2024-43828ext4: fix infinite loop when replaying fast_commit
CVE-2024-43827drm/amd/display: Add null check before access structs
CVE-2024-43826nfs: pass explicit offset/count to trace events
CVE-2024-43825iio: Fix the sorting functionality in iio_gts_build_avail_time_table
CVE-2024-43823PCI: keystone: Fix NULL pointer dereference in case of DT error in ks_pcie_setup_rc_app_re
CVE-2024-43824PCI: endpoint: pci-epf-test: Make use of cached 'epc_features' in pci_epf_test_core_init()
CVE-2024-43822ASoc: PCM6240: Return directly after a failed devm_kzalloc() in pcmdevice_i2c_probe()
CVE-2024-43821scsi: lpfc: Fix a possible null pointer dereference
CVE-2024-43820dm-raid: Fix WARN_ON_ONCE check for sync_thread in raid_resume
CVE-2024-42317mm/huge_memory: avoid PMD-size page cache if needed
CVE-2024-42320s390/dasd: fix error checks in dasd_copy_pair_store()
CVE-2024-42319mailbox: mtk-cmdq: Move devm_mbox_controller_register() after devm_pm_runtime_enable()
CVE-2024-42318landlock: Don't lose track of restrictions on cred_transfer
CVE-2024-42321net: flow_dissector: use DEBUG_NET_WARN_ON_ONCE
CVE-2024-42316mm/mglru: fix div-by-zero in vmpressure_calc_level()

Showing top 20 of 109 CVEs. View all on vendor page → →

IV. Related Vulnerabilities

V. Comments for CVE-2024-43855

No comments yet


Leave a comment