high CVSS 7.8

CVE-2024-56678·Kernel vulnerability

In the Linux kernel, the following vulnerability has been resolved: powerpc/mm/fault: Fix kfence page fault reporting copy_from_kernel_nofault() can be called when doing read of /proc/kcore. /proc/kcore can have some unmapped kfence objects which when read via copy_from_kernel_nofault() can cause page faults. Since *_nofault() functions define their own fixup table for handling fault, use that instead of asking kfence to handle such faults. Hence we search the exception tables for the nip which generated the fault. If there is an entry then we let the fixup table handler handle the page fault by returning an error from within ___do_page_fault(). This can be easily triggered if someone tries to do dd from /proc/kcore. eg. dd if=/proc/kcore of=/dev/null bs=1M Some example false negatives: =============================== BUG: KFENCE: invalid read in copy_from_kernel_nofault+0x9c/0x1a0 Invalid read at 0xc0000000fdff0000: copy_from_kernel_nofault+0x9c/0x1a0 0xc00000000665f950 read_kcore_iter+0x57c/0xa04 proc_reg_read_iter+0xe4/0x16c vfs_read+0x320/0x3ec ksys_read+0x90/0x154 system_call_exception+0x120/0x310 system_call_vectored_common+0x15c/0x2ec BUG: KFENCE: use-after-free read in copy_from_kernel_nofault+0x9c/0x1a0 Use-after-free read at 0xc0000000fe050000 (in kfence-#2): copy_from_kernel_nofault+0x9c/0x1a0 0xc00000000665f950 read_kcore_iter+0x57c/0xa04 proc_reg_read_iter+0xe4/0x16c vfs_read+0x320/0x3ec ksys_read+0x90/0x154 system_call_exception+0x120/0x310 system_call_vectored_common+0x15c/0x2ec

Severity
high
Software
Kernel
Fixed in
6.12.2
Published
2024-12-28

Affected versions

From: 6.12

Until: 6.12.2

Fixed in: 6.12.2

How to fix this CVE

Update your Linux kernel to version 6.12.2 or later to fix a page fault handling issue in the PowerPC memory management subsystem. This vulnerability affects systems running kernel versions 6.12 through 6.12.1 and can be triggered by accessing /proc/kcore. Apply the patch immediately to prevent potential denial of service conditions on affected PowerPC architectures.

sudo dnf check-update kernel && sudo dnf update kernel

Defensia detects this vulnerability

How to check if you are affected

  1. Check your current kernel version with: uname -r (should show 6.12.2 or higher for patched systems)
  2. Verify if kfence is enabled in your kernel config: cat /proc/cmdline | grep -i kfence or cat /boot/config-$(uname -r) | grep CONFIG_KFENCE
  3. Search system logs for KFENCE-related page faults: grep -i 'KFENCE.*invalid read\|KFENCE.*use-after-free' /var/log/kern.log /var/log/messages
  4. Confirm the patch is applied by checking: grep -i '06dbbb4d5f7126b6307ab807cbf04ecfc459b933' /proc/version or verifying kernel release date matches 6.12.2+

FAQ

What is CVE-2024-56678?

This vulnerability is a page fault handling defect in the Linux kernel's PowerPC memory management that causes kfence to report false-positive memory violations when copy_from_kernel_nofault() reads unmapped kfence objects. The issue occurs specifically when reading from /proc/kcore and can generate spurious invalid-read or use-after-free warnings.

Is CVE-2024-56678 being actively exploited?

No, this vulnerability is not listed in CISA's Known Exploited Vulnerabilities catalog and no public exploits are available. However, it can be easily triggered through normal system operations like reading /proc/kcore.

What versions of Kernel are affected by CVE-2024-56678?

Linux kernel versions 6.12 through 6.12.1 on PowerPC architectures are affected. The fix is available in kernel version 6.12.2 and later.

How do I check if my server is vulnerable to CVE-2024-56678?

Run 'uname -r' to check your kernel version. If it shows 6.12.0 or 6.12.1, you are vulnerable. Additionally, check if kfence is enabled with 'cat /proc/cmdline | grep kfence' — if kfence is active on a PowerPC system with kernel 6.12.x, the risk is higher.

Does Defensia detect CVE-2024-56678?

Yes — Defensia's CVE advisory scanner compares installed package versions against the NVD database. If the Linux kernel is installed on a monitored server running versions 6.12 through 6.12.1, CVE-2024-56678 will appear in your dashboard with remediation steps.

Related Kernel CVEs

CVE-2024-42256CVSS 9.8In the Linux kernel, the following vulnerability has been resolved: cifs: Fix server re-repick on subrequest retry When a subrequest is marked for needing retry, netfs will call cifs_prepare_write() which will make cifs repick the server for the op before renegotiating credits; it then calls cifs_issue_write() which invokes smb2_async_writev() - which re-repicks the server. If a different server is then selected, this causes the increment of server->in_flight to happen against one record and the decrement to happen against another, leading to misaccounting. Fix this by just removing the repick code in smb2_async_writev(). As this is only called from netfslib-driven code, cifs_prepare_write() should always have been called first, and so server should never be NULL and the preparatory step is repeated in the event that we do a retry. The problem manifests as a warning looking something like: WARNING: CPU: 4 PID: 72896 at fs/smb/client/smb2ops.c:97 smb2_add_credits+0x3f0/0x9e0 [cifs] ... RIP: 0010:smb2_add_credits+0x3f0/0x9e0 [cifs] ... smb2_writev_callback+0x334/0x560 [cifs] cifs_demultiplex_thread+0x77a/0x11b0 [cifs] kthread+0x187/0x1d0 ret_from_fork+0x34/0x60 ret_from_fork_asm+0x1a/0x30 Which may be triggered by a number of different xfstests running against an Azure server in multichannel mode. generic/249 seems the most repeatable, but generic/215, generic/249 and generic/308 may also show it.
CVE-2024-36031CVSS 9.8In the Linux kernel, the following vulnerability has been resolved: keys: Fix overwrite of key expiration on instantiation The expiry time of a key is unconditionally overwritten during instantiation, defaulting to turn it permanent. This causes a problem for DNS resolution as the expiration set by user-space is overwritten to TIME64_MAX, disabling further DNS updates. Fix this by restoring the condition that key_set_expiry is only called when the pre-parser sets a specific expiry.
CVE-2024-38612CVSS 9.8In the Linux kernel, the following vulnerability has been resolved: ipv6: sr: fix invalid unregister error path The error path of seg6_init() is wrong in case CONFIG_IPV6_SEG6_LWTUNNEL is not defined. In that case if seg6_hmac_init() fails, the genl_unregister_family() isn't called. This issue exist since commit 46738b1317e1 ("ipv6: sr: add option to control lwtunnel support"), and commit 5559cea2d5aa ("ipv6: sr: fix possible use-after-free and null-ptr-deref") replaced unregister_pernet_subsys() with genl_unregister_family() in this error path.
CVE-2024-38623CVSS 9.8In the Linux kernel, the following vulnerability has been resolved: fs/ntfs3: Use variable length array instead of fixed size Should fix smatch warning: ntfs_set_label() error: __builtin_memcpy() 'uni->name' too small (20 vs 256)
CVE-2021-47548CVSS 9.8In the Linux kernel, the following vulnerability has been resolved: ethernet: hisilicon: hns: hns_dsaf_misc: fix a possible array overflow in hns_dsaf_ge_srst_by_port() The if statement: if (port >= DSAF_GE_NUM) return; limits the value of port less than DSAF_GE_NUM (i.e., 8). However, if the value of port is 6 or 7, an array overflow could occur: port_rst_off = dsaf_dev->mac_cb[port]->port_rst_off; because the length of dsaf_dev->mac_cb is DSAF_MAX_PORT_NUM (i.e., 6). To fix this possible array overflow, we first check port and if it is greater than or equal to DSAF_MAX_PORT_NUM, the function returns.

References

Track CVEs across your fleet automatically

Defensia scans your Linux servers and tells you exactly which ones are running vulnerable versions — including CVE-2024-56678. Free for 1 server.

Get started free