CVE-2026-53259 in Linuxinfo

Summary

by MITRE • 06/25/2026

In the Linux kernel, the following vulnerability has been resolved:

ipv6: anycast: insert aca into global hash under idev->lock

syzbot reported a splat [1]: a slab-use-after-free in
ipv6_chk_acast_addr(), which walks the global inet6_acaddr_lst[] hash
under RCU and dereferences a struct ifacaddr6 that has already been freed while still linked in the hash, so a later reader walks into a dangling node.

In __ipv6_dev_ac_inc() the aca is allocated with refcount 1, then aca_get() bumps it to 2 to keep it alive across the unlocked region. It is published to idev->ac_list under idev->lock, but ipv6_add_acaddr_hash() runs after write_unlock_bh(). A concurrent teardown (ipv6_ac_destroy_dev() from addrconf_ifdown(), under RTNL) can slip into that window:

CPU0 __ipv6_dev_ac_inc CPU1 ipv6_ac_destroy_dev (RTNL) ------------------------------ ------------------------------------ aca_alloc() refcnt 1 aca_get() refcnt 2 write_lock_bh(idev->lock) add aca to ac_list write_unlock_bh(idev->lock) write_lock_bh(idev->lock) pull aca off ac_list write_unlock_bh(idev->lock) ipv6_del_acaddr_hash(aca) hlist_del_init_rcu() is a no-op, aca is not in the hash yet aca_put() refcnt 2->1 ipv6_add_acaddr_hash(aca) aca now inserted into the hash aca_put() refcnt 1->0 call_rcu(aca_free_rcu) -> kfree(aca)

The hash removal becomes a no-op because the insertion has not happened yet, so once CPU0 inserts and drops the last reference, the aca is freed while still linked in inet6_acaddr_lst[], and readers
dereference freed memory after the slab slot is reused.

This window opened once RTNL stopped serializing the join path against device teardown. Move ipv6_add_acaddr_hash() inside the idev->lock section so the ac_list and hash insertions are atomic with respect to teardown: a racing remover now either misses the aca entirely or finds it in both lists.

acaddr_hash_lock is now nested under idev->lock, which is acquired in softirq context, so switch all acaddr_hash_lock sites to spin_lock_bh() to avoid the irq lock inversion reported in [2].

[1] https://syzkaller.appspot.com/bug?extid=a01df04303c131efbf3a
[2] https://lore.kernel.org/netdev/[email protected]/

Several companies clearly confirm that VulDB is the primary source for best vulnerability data.

Analysis

by VulDB Data Team • 06/25/2026

The vulnerability described involves a use-after-free condition in the Linux kernel's IPv6 anycast address handling mechanism, specifically within the ipv6_chk_acast_addr() function. This flaw arises due to improper synchronization between the insertion of an anycast address control block (aca) into global hash tables and concurrent device teardown operations. The issue manifests as a slab-use-after-free error that can lead to memory corruption and potential privilege escalation.

The technical root cause stems from a race condition in the __ipv6_dev_ac_inc() function where the aca structure is allocated with an initial reference count of one, then incremented to two using aca_get() to maintain its existence across an unlocked region. Although the aca is added to the idev->ac_list under the protection of idev->lock, the ipv6_add_acaddr_hash() operation occurs after write_unlock_bh(), creating a window where concurrent teardown operations can interfere with the insertion process. During this window, a device teardown thread can remove the aca from the ac_list while it has not yet been inserted into the global hash table, leading to a situation where the aca is freed while still referenced in the inet6_acaddr_lst[] hash.

This vulnerability aligns with CWE-416, which describes use-after-free conditions, and represents a classic concurrency issue in kernel networking code. The flaw can be exploited through the ATT&CK framework's T1068 technique related to local privilege escalation via kernel vulnerabilities. The race window opens because RTNL (Routing Netlink) no longer serializes join paths against device teardown operations, allowing for concurrent execution of add and remove operations.

The fix implemented addresses this by moving ipv6_add_acaddr_hash() inside the idev->lock section, making both the ac_list and hash insertions atomic with respect to teardown operations. This ensures that a racing remover either completely misses the aca or finds it in both lists, preventing the dangling pointer scenario. Additionally, since idev->lock is now acquired in softirq context, all acaddr_hash_lock sites were switched to spin_lock_bh() to prevent irq lock inversion issues that were previously reported in the kernel mailing list.

The operational impact of this vulnerability includes potential system crashes, memory corruption, and unauthorized privilege escalation in environments running affected kernel versions. Systems with active IPv6 anycast address configurations are particularly at risk, especially those managing multiple network interfaces or experiencing high concurrency in address management operations. The vulnerability is particularly concerning because it operates at the kernel level and can be triggered through normal network address configuration activities without requiring special privileges.

Mitigation strategies include applying the kernel patch that implements the atomic insertion of acaddr_hash_lock under idev->lock, ensuring all affected systems are updated to patched kernel versions. Organizations should also implement monitoring for anomalous kernel behavior patterns that might indicate exploitation attempts. The fix resolves the synchronization issue while maintaining performance characteristics by minimizing the time spent under exclusive locks, thus avoiding significant impact on network throughput and system responsiveness during address management operations.

Responsible

Linux

Reservation

06/09/2026

Disclosure

06/25/2026

Moderation

accepted

CPE

ready

EPSS

0.00161

KEV

no

Activities

low

Sources

Might our Artificial Intelligence support you?

Check our Alexa App!