Bug 2300479 (CVE-2024-41083)

Summary: CVE-2024-41083 kernel: netfs: Fix netfs_page_mkwrite() to check folio-->mapping is valid
Product: [Other] Security Response Reporter: OSIDB Bzimport <bzimport>
Component: vulnerabilityAssignee: Product Security DevOps Team <prodsec-dev>
Status: NEW --- QA Contact:
Severity: medium Docs Contact:
Priority: medium    
Version: unspecifiedCC: dfreiber, drow, jburrell, vkumar
Target Milestone: ---Keywords: Security
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: kernel 6.9.8, kernel 6.10 Doc Type: If docs needed, set a value
Doc Text:
A flaw was found in `netfs_page_mkwrite()` in the Linux kernel caused by a missing validation check for `folio->mapping` after acquiring the folio lock. This oversight could lead to a NULL pointer dereference, resulting in kernel crashes when handling file operations. The issue arose from interference by `invalidate_inode_pages2_range()` during Direct I/O (DIO) writes.
Story Points: ---
Clone Of: Environment:
Last Closed: Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On: 2301664    
Bug Blocks:    

Description OSIDB Bzimport 2024-07-29 16:20:28 UTC
In the Linux kernel, the following vulnerability has been resolved:

netfs: Fix netfs_page_mkwrite() to check folio->mapping is valid

Fix netfs_page_mkwrite() to check that folio->mapping is valid once it has
taken the folio lock (as filemap_page_mkwrite() does).  Without this,
generic/247 occasionally oopses with something like the following:

    BUG: kernel NULL pointer dereference, address: 0000000000000000
    #PF: supervisor read access in kernel mode
    #PF: error_code(0x0000) - not-present page

    RIP: 0010:trace_event_raw_event_netfs_folio+0x61/0xc0
    ...
    Call Trace:
     <TASK>
     ? __die_body+0x1a/0x60
     ? page_fault_oops+0x6e/0xa0
     ? exc_page_fault+0xc2/0xe0
     ? asm_exc_page_fault+0x22/0x30
     ? trace_event_raw_event_netfs_folio+0x61/0xc0
     trace_netfs_folio+0x39/0x40
     netfs_page_mkwrite+0x14c/0x1d0
     do_page_mkwrite+0x50/0x90
     do_pte_missing+0x184/0x200
     __handle_mm_fault+0x42d/0x500
     handle_mm_fault+0x121/0x1f0
     do_user_addr_fault+0x23e/0x3c0
     exc_page_fault+0xc2/0xe0
     asm_exc_page_fault+0x22/0x30

This is due to the invalidate_inode_pages2_range() issued at the end of the
DIO write interfering with the mmap'd writes.

Comment 1 Mauro Matteo Cascella 2024-07-30 15:01:36 UTC
Upstream advisory:
https://lore.kernel.org/linux-cve-announce/2024072946-CVE-2024-41083-a1d3@gregkh/T

Comment 2 Mauro Matteo Cascella 2024-07-30 15:01:56 UTC
Created kernel tracking bugs for this issue:

Affects: fedora-all [bug 2301664]