CVE: CVE-2024-54031
Published: 2025-01-15
Description: In the Linux kernel, the following vulnerability has been resolved:

netfilter: nft_set_hash: unaligned atomic read on struct nft_set_ext

Access to genmask field in struct nft_set_ext results in unaligned
atomic read:

[   72.130109] Unable to handle kernel paging request at virtual address ffff0000c2bb708c
[   72.131036] Mem abort info:
[   72.131213]   ESR = 0x[PII_REDACTED]000021
[   72.131446]   EC = 0x25: DABT (current EL), IL = 32 bits
[   72.132209]   SET = 0, FnV = 0
[   72.133216]   EA = 0, S1PTW = 0
[   72.134080]   FSC = 0x21: alignment fault
[   72.135593] Data abort info:
[   72.137194]   ISV = 0, ISS = 0x00000021, ISS2 = 0x00000000
[   72.142351]   CM = 0, WnR = 0, TnD = 0, TagAccess = 0
[   72.145989]   GCS = 0, Overlay = 0, DirtyBit = 0, Xs = 0
[   72.150115] swapper pgtable: 4k pages, 48-bit VAs, pgdp=[PII_REDACTED]d27000
[   72.154893] [ffff0000c2bb708c] pgd=[PII_REDACTED], p4d=180000023ffff403, pud=180000023f84b403, pmd=180000023f835403,
+pte=[PII_REDACTED]bb7707
[   72.163021] Internal error: Oops: [PII_REDACTED] [#1] SMP
[...]
[   72.170041] CPU: 7 UID: 0 PID: 54 Comm: kworker/7:0 Tainted: G            E      6.13.0-rc3+ #2
[   72.170509] Tainted: [E]=UNSIGNED_MODULE
[   72.170720] Hardware name: QEMU QEMU Virtual Machine, BIOS edk2-stable202302-for-qemu 03/01/2023
[   72.171192] Workqueue: events_power_efficient nft_rhash_gc [nf_tables]
[   72.171552] pstate: 21400005 (nzCv daif +PAN -UAO -TCO +DIT -SSBS BTYPE=--)
[   72.171915] pc : nft_rhash_gc+0x200/0x2d8 [nf_tables]
[   72.172166] lr : nft_rhash_gc+0x128/0x2d8 [nf_tables]
[   72.172546] sp : ffff800081f2bce0
[   72.172724] x29: ffff800081f2bd40 x28: ffff0000c2bb708c x27: [PII_REDACTED]
[   72.173078] x26: ffff0000c6780ef0 x25: ffff0000c643df00 x24: ffff0000c6778f78
[   72.173431] x23:[PII_REDACTED]00001a x22: ffff0000c4b1f000 x21: ffff0000c6780f78
[   72.173782] x20: ffff0000c2bb70dc x19: ffff0000c2bb7080 x18: [PII_REDACTED]
[   72.174135] x17: ffff0000c0a4e1c0 x16: [PII_REDACTED] x15: 0000ac26d173b978
[   72.174485] x14: ffffffffffffffff x13: [PII_REDACTED] x12: ffff0000c6780ef0
[   72.174841] x11: [PII_REDACTED] x10: ffff800081f2bcf8 x9 : ffff0000c3000000
[   72.175193] x8 :[PII_REDACTED]0004be x7 : [PII_REDACTED] x6 : [PII_REDACTED]
[   72.175544] x5 : [PII_REDACTED] x4 : ffff0000c3000010 x3 : [PII_REDACTED]
[   72.175871] x2 :[PII_REDACTED]003a98 x1 : ffff0000c2bb708c x0 : [PII_REDACTED]
[   72.176207] Call trace:
[   72.176316]  nft_rhash_gc+0x200/0x2d8 [nf_tables] (P)
[   72.176653]  process_one_work+0x178/0x3d0
[   72.176831]  worker_thread+0x200/0x3f0
[   72.176995]  kthread+0xe8/0xf8
[   72.177130]  ret_from_fork+0x10/0x20
[   72.177289] Code: 54fff984 d503201f d2[PII_REDACTED]3261 (f820303f)
[   72.177557] ---[ end trace [PII_REDACTED] ]---

Align struct nft_set_ext to word size to address this and
documentation it.

pahole reports that this increases the size of elements for rhash and
pipapo in 8 bytes on x86_64.
CVSS Score: 5.5 (MEDIUM)
References: https://git.kernel.org/stable/c/277f00b0c2dca8794cf[PII_REDACTED]bdc4174911f; https://git.kernel.org/stable/c/352f8eaaabd008f09d1e176194edc261a7304084; https://git.kernel.org/stable/c/4f49349c1963e507aa37c1ec05178faeb0103959