Vulnerabilities

With the aim of informing, warning and helping professionals with the latest security vulnerabilities in technology systems, we have made a database available for users interested in this information, which is in Spanish and includes all of the latest documented and recognised vulnerabilities.

This repository, with over 75,000 registers, is based on the information from the NVD (National Vulnerability Database) – by virtue of a partnership agreement – through which INCIBE translates the included information into Spanish.

On occasions this list will show vulnerabilities that have still not been translated, as they are added while the INCIBE team is still carrying out the translation process. The CVE  (Common Vulnerabilities and Exposures) Standard for Information Security Vulnerability Names is used with the aim to support the exchange of information between different tools and databases.

All vulnerabilities collected are linked to different information sources, as well as available patches or solutions provided by manufacturers and developers. It is possible to carry out advanced searches, as there is the option to select different criteria to narrow down the results, some examples being vulnerability types, manufacturers and impact levels, among others.

Through RSS feeds or Newsletters we can be informed daily about the latest vulnerabilities added to the repository. Below there is a list, updated daily, where you can discover the latest vulnerabilities.

CVE-2026-63808

Publication date:
19/07/2026
In the Linux kernel, the following vulnerability has been resolved:<br /> <br /> exfat: fix potential use-after-free in exfat_find_dir_entry()<br /> <br /> In exfat_find_dir_entry(), the buffer_head obtained from<br /> exfat_get_dentry() is released with brelse(bh) before the fall-through<br /> TYPE_EXTEND branch reads the directory entry through ep (which points<br /> into bh-&gt;b_data):<br /> <br /> brelse(bh);<br /> if (entry_type == TYPE_EXTEND) {<br /> ...<br /> len = exfat_extract_uni_name(ep, entry_uniname);<br /> ...<br /> }<br /> <br /> After brelse() drops our reference, nothing guarantees that the<br /> underlying page backing bh-&gt;b_data remains valid for the subsequent<br /> exfat_extract_uni_name() read. This is the same pattern fixed in<br /> commit fc961522ddbd ("exfat: Fix potential use after free in<br /> exfat_load_upcase_table()").<br /> <br /> Move brelse(bh) so it runs after ep is no longer dereferenced on<br /> each branch.<br /> <br /> Confirmed on QEMU x86_64 with CONFIG_KASAN=y + CONFIG_DEBUG_PAGEALLOC=y<br /> + CONFIG_PAGE_POISONING=y on linux-next, using a crafted exFAT image<br /> (long filename with same-hash collisions forcing the TYPE_EXTEND path).<br /> With a debug-only invalidate_bdev() inserted between brelse(bh) and<br /> the ep read to make the stale-deref window deterministic, the<br /> unpatched kernel faults:<br /> <br /> BUG: KASAN: use-after-free in exfat_find_dir_entry+0x133b/0x15a0<br /> BUG: unable to handle page fault for address: ffff88801a5fa0c2<br /> Oops: 0000 [#1] SMP DEBUG_PAGEALLOC KASAN NOPTI<br /> RIP: 0010:exfat_find_dir_entry+0x1188/0x15a0<br /> <br /> With this patch applied, the same instrumented harness completes<br /> cleanly under the same sanitizer stack. I have not reproduced a<br /> crash on an uninstrumented kernel under ordinary reclaim; the<br /> instrumented A/B establishes the lifetime violation and that the<br /> patch closes it, not an unaided triggerability claim.
Severity CVSS v4.0: Pending analysis
Last modification:
20/07/2026

CVE-2026-63809

Publication date:
19/07/2026
In the Linux kernel, the following vulnerability has been resolved:<br /> <br /> bpf: use kvfree() for replaced sysctl write buffer<br /> <br /> proc_sys_call_handler() allocates its temporary sysctl buffer with<br /> kvzalloc() and passes it to __cgroup_bpf_run_filter_sysctl(). Since<br /> kvzalloc() may fall back to vmalloc() for large allocations, freeing<br /> that buffer with kfree() is wrong and can corrupt memory.<br /> <br /> Use kvfree() to safely handle both kmalloc and kvzalloc()/vmalloc<br /> allocations.<br /> <br /> The bug was first flagged by an experimental analysis tool we are<br /> developing for kernel memory-management bugs while analyzing<br /> v6.13-rc1. The tool is still under development and is not yet publicly<br /> available. Manual inspection confirms that the bug is still<br /> present in v7.1-rc5.<br /> <br /> Reproduced the bug based on v7.1-rc4 in a QEMU x86_64 guest booted with<br /> KASAN and CONFIG_FAILSLAB enabled. To exercise the replacement path, the<br /> test tree also included the accompanying fix for the stale ret == 1<br /> check in __cgroup_bpf_run_filter_sysctl(). The reproducer confines<br /> failslab injections to the proc_sys_call_handler() range, uses<br /> stacktrace-depth=32, and injects fail-nth=1 while writing 8191 bytes to<br /> /proc/sys/kernel/domainname from a task in the target cgroup. Under<br /> that setup, fail-nth=1 triggered the fault:<br /> <br /> BUG: unable to handle page fault for address: ffffeb0200024d48<br /> #PF: supervisor read access in kernel mode<br /> #PF: error_code(0x0000) - not-present page<br /> PGD 0 P4D 0<br /> Oops: Oops: 0000 SMP KASAN NOPTI<br /> CPU: 2 UID: 0 PID: 209 Comm: repro_proc_sys_ Not tainted 7.1.0-rc4-00686-g97625979a5d4 PREEMPT(lazy)<br /> Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.15.0-1 04/01/2014<br /> RIP: 0010:kfree+0x6e/0x510<br /> ...<br /> Call Trace:<br /> <br /> ? __cgroup_bpf_run_filter_sysctl+0x626/0xc30<br /> __cgroup_bpf_run_filter_sysctl+0x74d/0xc30<br /> ? __pfx___cgroup_bpf_run_filter_sysctl+0x10/0x10<br /> ? srso_return_thunk+0x5/0x5f<br /> ? __kvmalloc_node_noprof+0x345/0x870<br /> ? proc_sys_call_handler+0x250/0x480<br /> ? srso_return_thunk+0x5/0x5f<br /> proc_sys_call_handler+0x3a2/0x480<br /> ? __pfx_proc_sys_call_handler+0x10/0x10<br /> ? srso_return_thunk+0x5/0x5f<br /> ? selinux_file_permission+0x39f/0x500<br /> ? srso_return_thunk+0x5/0x5f<br /> ? lock_is_held_type+0x9e/0x120<br /> vfs_write+0x98e/0x1000<br /> ...<br /> <br /> <br /> With this fix applied on top of the same test setup, rerunning the<br /> reproducer with fail-nth=1 yields no corresponding Oops reports.
Severity CVSS v4.0: Pending analysis
Last modification:
20/07/2026

CVE-2026-63798

Publication date:
19/07/2026
In the Linux kernel, the following vulnerability has been resolved:<br /> <br /> irqchip/imgpdc: Fix resource leak, add missing chained handler cleanup on remove<br /> <br /> The driver allocates domain generic chips using<br /> irq_alloc_domain_generic_chips() during probe and sets up chained<br /> handlers using irq_set_chained_handler_and_data(). However, on driver<br /> removal, the generic chips are not freed and the chained handlers are<br /> not removed.<br /> <br /> The generic chips remain on the global gc_list and may later be accessed by<br /> generic interrupt chip suspend, resume, or shutdown callbacks after the<br /> driver has been removed, potentially resulting in a use-after-free and<br /> kernel crash.<br /> <br /> The chained handlers that were installed in probe for peripheral and<br /> syswake interrupts are also left dangling, which can lead to spurious<br /> interrupts accessing freed memory.<br /> <br /> Fix these issues by:<br /> <br /> - Setting IRQ_DOMAIN_FLAG_DESTROY_GC flag in domain-&gt;flags, so the<br /> core code automatically removes generic chips when irq_domain_remove()<br /> is called<br /> <br /> - Clearing all chained handlers with NULL in pdc_intc_remove()
Severity CVSS v4.0: Pending analysis
Last modification:
19/07/2026

CVE-2026-63796

Publication date:
19/07/2026
In the Linux kernel, the following vulnerability has been resolved:<br /> <br /> ocfs2: reject oversized group bitmap descriptors<br /> <br /> ocfs2_validate_gd_parent() only bounds bg_bits against the parent<br /> allocator&amp;#39;s chain geometry. A malicious descriptor can still claim a<br /> bg_size/bg_bits pair that exceeds the bitmap bytes that physically fit in<br /> the group descriptor block, so later bitmap scans and bit updates can run<br /> past bg_bitmap.<br /> <br /> Add a physical-cap check based on ocfs2_group_bitmap_size() for the parent<br /> allocator type and reject descriptors whose bg_size or bg_bits exceed that<br /> capacity. Keep the existing chain geometry check so both the on-disk<br /> bitmap layout and the allocator metadata must agree before the descriptor<br /> is used.<br /> <br /> Validation reproduced this kernel report:<br /> KASAN use-after-free in _find_next_bit+0x7f/0xc0<br /> Read of size 8<br /> Call trace:<br /> dump_stack_lvl+0x66/0xa0 (?:?)<br /> print_report+0xd0/0x630 (?:?)<br /> _find_next_bit+0x7f/0xc0 (?:?)<br /> srso_alias_return_thunk+0x5/0xfbef5 (?:?)<br /> __virt_addr_valid+0x188/0x2f0 (?:?)<br /> kasan_report+0xe4/0x120 (?:?)<br /> ocfs2_find_max_contig_free_bits+0x35/0x70 (fs/ocfs2/suballoc.c:1375)<br /> ocfs2_block_group_set_bits+0x472/0x4b0 (fs/ocfs2/suballoc.c:1457)<br /> ocfs2_cluster_group_search+0x16b/0x440 (fs/ocfs2/suballoc.c:86)<br /> ocfs2_bg_discontig_fix_result+0x1ef/0x230 (fs/ocfs2/suballoc.c:1786)<br /> ocfs2_search_chain+0x8f8/0x10a0 (fs/ocfs2/suballoc.c:1886)<br /> get_page_from_freelist+0x70e/0x2370 (?:?)<br /> lock_release+0xc6/0x290 (?:?)<br /> do_raw_spin_unlock+0x9a/0x100 (?:?)<br /> kasan_unpoison+0x27/0x60 (?:?)<br /> __bfs+0x147/0x240 (?:?)<br /> get_page_from_freelist+0x83d/0x2370 (?:?)<br /> ocfs2_claim_suballoc_bits+0x38c/0xe70 (fs/ocfs2/suballoc.c:96)<br /> sched_domains_numa_masks_clear+0x70/0xd0 (?:?)<br /> check_irq_usage+0xe8/0xb70 (?:?)<br /> __ocfs2_claim_clusters+0x18d/0x4c0 (fs/ocfs2/suballoc.c:2497)<br /> check_path+0x24/0x50 (?:?)<br /> rcu_is_watching+0x20/0x50 (?:?)<br /> check_prev_add+0xfd/0xd00 (?:?)<br /> ocfs2_add_clusters_in_btree+0x17d/0x810 (fs/ocfs2/suballoc.c:?)<br /> __folio_batch_add_and_move+0x1f5/0x3d0 (?:?)<br /> ocfs2_add_inode_data+0xd9/0x120 (fs/ocfs2/suballoc.c:?)<br /> filemap_add_folio+0x105/0x1f0 (?:?)<br /> ocfs2_write_begin_nolock+0x29f7/0x2f80 (fs/ocfs2/suballoc.c:3043)<br /> ocfs2_read_inode_block+0xb5/0x110 (fs/ocfs2/suballoc.c:?)<br /> down_write+0xf5/0x180 (?:?)<br /> ocfs2_write_begin+0x180/0x240 (fs/ocfs2/suballoc.c:?)<br /> __mark_inode_dirty+0x758/0x9a0 (?:?)<br /> inode_to_bdi+0x41/0x90 (?:?)<br /> balance_dirty_pages_ratelimited_flags+0xf8/0x1d0 (?:?)<br /> generic_perform_write+0x252/0x440 (?:?)<br /> mnt_put_write_access_file+0x16/0x70 (?:?)<br /> file_update_time_flags+0xe4/0x200 (?:?)<br /> ocfs2_file_write_iter+0x80a/0x1320 (fs/ocfs2/suballoc.c:?)<br /> lock_acquire+0x184/0x2f0 (?:?)<br /> ksys_write+0xd2/0x170 (?:?)<br /> apparmor_file_permission+0xf5/0x310 (?:?)<br /> read_zero+0x8d/0x140 (?:?)<br /> lock_is_held_type+0x8f/0x100 (?:?)
Severity CVSS v4.0: Pending analysis
Last modification:
20/07/2026

CVE-2026-63797

Publication date:
19/07/2026
In the Linux kernel, the following vulnerability has been resolved:<br /> <br /> rpmsg: char: Fix use-after-free on probe error path<br /> <br /> rpmsg_chrdev_probe() stores the newly allocated eptdev in the default<br /> endpoint&amp;#39;s priv pointer before calling rpmsg_chrdev_eptdev_add(). If<br /> rpmsg_chrdev_eptdev_add() then fails, its error path frees eptdev while<br /> the default endpoint may still dispatch callbacks with the stale priv<br /> pointer.<br /> <br /> Avoid publishing eptdev through the default endpoint until<br /> rpmsg_chrdev_eptdev_add() succeeds. Messages received before the priv<br /> pointer is published should be ignored by rpmsg_ept_cb(). Flow-control<br /> updates can hit rpmsg_ept_flow_cb() in the same window, so make both<br /> callbacks return success when priv is NULL.
Severity CVSS v4.0: Pending analysis
Last modification:
20/07/2026

CVE-2026-63799

Publication date:
19/07/2026
In the Linux kernel, the following vulnerability has been resolved:<br /> <br /> sched/mmcid: Fix OOB clear_bit when CID is MM_CID_UNSET in fixup path<br /> <br /> In mm_cid_fixup_cpus_to_tasks(), when rq-&gt;curr has the target mm and<br /> mm_cid.active is set, the CID is checked with cid_in_transit() before<br /> setting the transition bit. In per-CPU mode a newly forked or exec&amp;#39;d<br /> task can be running with mm_cid.cid == MM_CID_UNSET because CIDs are<br /> assigned lazily on schedule-in. With cid_in_transit() the guard passes<br /> for MM_CID_UNSET (no transit bit), converts it to MM_CID_UNSET |<br /> MM_CID_TRANSIT and stores it back; later mm_cid_schedout() feeds this<br /> to clear_bit() with MM_CID_UNSET as the bit number, triggering an<br /> out-of-bounds write.<br /> <br /> Symptoms: this is genuine memory corruption, but a bounded out-of-bounds<br /> write, not an arbitrary one. MM_CID_UNSET is the fixed sentinel BIT(31),<br /> so once the bad value reaches mm_cid_schedout() the cid_from_transit_cid()<br /> strip leaves MM_CID_UNSET, which fails the "cid clear_bit(MM_CID_UNSET,<br /> mm_cidmask(mm)). The cid bitmap is embedded in the mm_struct slab object<br /> (after cpu_bitmap and mm_cpus_allowed) and is only num_possible_cpus()<br /> bits wide, so clearing bit 31 is a deterministic OOB bit-clear at a<br /> fixed offset of 2^31 / 8 == 256 MiB past the bitmap base. The address is<br /> not attacker-influenced (fixed sentinel -&gt; fixed offset) and the op only<br /> clears a single bit; what sits 256 MiB further along the direct map is<br /> whatever kernel object happens to live there, so this corrupts one bit of<br /> unpredictable kernel memory -- it is not an arbitrary-address or<br /> arbitrary-value write.<br /> <br /> It triggers only in per-CPU CID mode, when a CPU is running an active<br /> task of the target mm whose cid is still MM_CID_UNSET -- the<br /> fork()/execve() window before that task&amp;#39;s next schedule-in assigns it a<br /> real CID -- and a per-CPU -&gt; per-task fixup walks over it (the mode<br /> fallback driven by a thread exit, sched_mm_cid_exit(), or by the deferred<br /> max_cids recompute in mm_cid_work_fn()).<br /> <br /> In practice syzkaller surfaced it as a KASAN use-after-free reported in<br /> __schedule -&gt; mm_cid_switch_to, where the offending clear_bit() is inlined<br /> via mm_cid_schedout() -&gt; mm_drop_cid().<br /> <br /> Guard the transition-bit assignment against MM_CID_UNSET, in addition to<br /> the existing cid_in_transit() check, so the bit is only set on a genuine<br /> task-owned CID. A CPU-owned (MM_CID_ONCPU) CID of a running active task<br /> is handled by the cid_on_cpu(pcp-&gt;cid) branch above and never reaches<br /> this path, so excluding MM_CID_UNSET (and the already-transitioning case)<br /> is sufficient.
Severity CVSS v4.0: Pending analysis
Last modification:
20/07/2026

CVE-2026-63800

Publication date:
19/07/2026
In the Linux kernel, the following vulnerability has been resolved:<br /> <br /> pNFS: Fix use-after-free in pnfs_update_layout()<br /> <br /> When hitting the NFS_LAYOUT_RETURN branch in pnfs_update_layout(),<br /> the code calls pnfs_prepare_to_retry_layoutget(lo). If it succeeds,<br /> pnfs_put_layout_hdr(lo) is called before trace_pnfs_update_layout(),<br /> which still references &amp;#39;lo&amp;#39;. This results in a use-after-free when the<br /> tracepoint accesses lo&amp;#39;s fields.<br /> <br /> Fix this by moving the tracepoint call before pnfs_put_layout_hdr(lo).
Severity CVSS v4.0: Pending analysis
Last modification:
20/07/2026

CVE-2026-63801

Publication date:
19/07/2026
In the Linux kernel, the following vulnerability has been resolved:<br /> <br /> tipc: fix slab-use-after-free Read in tipc_aead_decrypt_done<br /> <br /> tipc_aead_decrypt() goes straight from tipc_bearer_hold(b) to<br /> crypto_aead_decrypt(req) without taking a reference on the netns, unlike<br /> the encrypt path. When crypto_aead_decrypt() is offloaded asynchronously<br /> (e.g. the SIMD aead wrapper queuing to cryptd), the cryptd worker runs<br /> tipc_aead_decrypt_done() later. If the bearer&amp;#39;s netns is torn down in the<br /> meantime, cleanup_net() -&gt; tipc_exit_net() -&gt; tipc_crypto_stop() frees the<br /> per-netns tipc_crypto, and the completion then reads it:<br /> tipc_aead_decrypt_done() dereferences aead-&gt;crypto-&gt;stats and<br /> aead-&gt;crypto-&gt;net, and tipc_crypto_rcv_complete() dereferences<br /> aead-&gt;crypto-&gt;aead[] and the node table -- reading freed memory.<br /> <br /> Decoded KASAN splat (v7.1-rc7, CONFIG_KASAN_INLINE + TIPC + TIPC_CRYPTO):<br /> <br /> BUG: KASAN: slab-use-after-free in tipc_aead_decrypt_done (net/tipc/crypto.c:999)<br /> Read of size 8 at addr ffff8881056258a8 by task kworker/u16:2/51<br /> Workqueue: events_unbound<br /> Call Trace:<br /> tipc_aead_decrypt_done (net/tipc/crypto.c:999)<br /> process_one_work (kernel/workqueue.c:3314)<br /> worker_thread (kernel/workqueue.c:3397 kernel/workqueue.c:3478)<br /> kthread (kernel/kthread.c:436)<br /> ret_from_fork (arch/x86/kernel/process.c:158)<br /> ret_from_fork_asm (arch/x86/entry/entry_64.S:245)<br /> <br /> Allocated by task 169:<br /> __kasan_kmalloc (mm/kasan/common.c:398 mm/kasan/common.c:415)<br /> tipc_crypto_start (net/tipc/crypto.c:1502)<br /> tipc_init_net (net/tipc/core.c:72)<br /> ops_init (net/core/net_namespace.c:137)<br /> setup_net (net/core/net_namespace.c:446)<br /> copy_net_ns (net/core/net_namespace.c:579)<br /> create_new_namespaces (kernel/nsproxy.c:132)<br /> __x64_sys_unshare (kernel/fork.c:3316)<br /> do_syscall_64 (arch/x86/entry/syscall_64.c:63)<br /> entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:121)<br /> <br /> Freed by task 8:<br /> kfree (mm/slub.c:6566)<br /> tipc_exit_net (net/tipc/core.c:119)<br /> cleanup_net (net/core/net_namespace.c:704)<br /> process_one_work (kernel/workqueue.c:3314)<br /> kthread (kernel/kthread.c:436)<br /> <br /> This is the same class of bug that commit e279024617134 ("net/tipc: fix<br /> slab-use-after-free Read in tipc_aead_encrypt_done") fixed for the encrypt<br /> side. The encrypt path takes maybe_get_net(aead-&gt;crypto-&gt;net) before<br /> crypto_aead_encrypt() and drops it with put_net() on the synchronous<br /> return paths and in tipc_aead_encrypt_done(); the -EINPROGRESS/-EBUSY<br /> return keeps the reference for the async callback to release. The decrypt<br /> path was left without the equivalent guard.<br /> <br /> Mirror the encrypt-side fix on the decrypt path: take a net reference<br /> before crypto_aead_decrypt() (failing with -ENODEV and the matching<br /> bearer put if it cannot be acquired), keep it across the<br /> -EINPROGRESS/-EBUSY async return, and drop it with put_net() on the<br /> synchronous success/error return and at the end of<br /> tipc_aead_decrypt_done().<br /> <br /> Reproduced under KASAN on v7.1-rc7: a UDP bearer with a cluster key is<br /> flooded with crafted encrypted frames from an unknown peer (driving the<br /> cluster-key decrypt path) while the bearer&amp;#39;s netns is repeatedly torn<br /> down. The completion must run asynchronously to outlive<br /> tipc_crypto_stop(); on x86 the stock aesni gcm(aes) now decrypts<br /> synchronously, so the async path was exercised via cryptd offload. The<br /> unguarded aead-&gt;crypto dereference in tipc_aead_decrypt_done() is the<br /> unpatched upstream path; tipc_aead_decrypt() still lacks<br /> maybe_get_net(aead-&gt;crypto-&gt;net), so the completion can outlive the free<br /> on any config where crypto_aead_decrypt() goes async.<br /> <br /> Found by 0sec automated security-research tooling (https://0sec.ai).
Severity CVSS v4.0: Pending analysis
Last modification:
20/07/2026

CVE-2026-63802

Publication date:
19/07/2026
In the Linux kernel, the following vulnerability has been resolved:<br /> <br /> blk-cgroup: fix UAF in __blkcg_rstat_flush()<br /> <br /> When multiple blkgs in the same blkcg are released concurrently,<br /> a use-after-free can occur. The race happens when one blkg&amp;#39;s<br /> __blkcg_rstat_flush() removes another blkg&amp;#39;s iostat entries via<br /> llist_del_all(). The second blkg sees an empty list and proceeds<br /> to free itself while the first is still iterating over its entries.<br /> <br /> Move the flush from __blkg_release() (RCU callback) to blkg_release()<br /> (before call_rcu). This ensures the RCU grace period waits for any<br /> concurrent flush&amp;#39;s rcu_read_lock() section to complete before freeing.
Severity CVSS v4.0: Pending analysis
Last modification:
20/07/2026

CVE-2026-63803

Publication date:
19/07/2026
In the Linux kernel, the following vulnerability has been resolved:<br /> <br /> hdlc_ppp: sync per-proto timers before freeing hdlc state<br /> <br /> Each PPP control protocol (LCP/IPCP/IPV6CP) embedded in struct ppp<br /> registers a timer via timer_setup(). That struct ppp is the<br /> hdlc-&gt;state allocation, which detach_hdlc_protocol() frees with kfree()<br /> in both teardown paths: unregister_hdlc_device() and the re-attach inside<br /> attach_hdlc_protocol().<br /> <br /> The ppp proto never registered a .detach callback, so<br /> detach_hdlc_protocol() performs no timer synchronization before the<br /> kfree(). The only cancel, timer_delete(&amp;proto-&gt;timer) in ppp_cp_event(),<br /> is partial (it does not wait for a running callback) and only runs on the<br /> -&gt;CLOSED transition; ppp_stop()/ppp_close() do not sync either. A<br /> ppp_timer callback already executing (blocked on ppp-&gt;lock) survives the<br /> kfree and then dereferences proto-&gt;state / ppp-&gt;lock in freed memory,<br /> leading to a use-after-free.<br /> <br /> Fix this by adding a .detach helper that calls timer_shutdown_sync() on<br /> every per-proto timer. detach_hdlc_protocol() invokes proto-&gt;detach(dev)<br /> before kfree(hdlc-&gt;state), so timer_shutdown_sync()<br /> now runs on both free paths.<br /> timer_shutdown_sync() is used instead of timer_delete_sync() because the<br /> keepalive path re-arms the timer through add_timer()/mod_timer() and<br /> shutdown blocks any re-activation during teardown.<br /> <br /> Initialize the per-protocol timers in ppp_ioctl() when the protocol is<br /> attached, and remove the now-redundant timer_setup() from ppp_start(), so<br /> that the timers are initialized exactly once at attach time and<br /> ppp_timer_release() never operates on uninitialized timer_list<br /> structures. attach_hdlc_protocol() uses kmalloc() (not kzalloc), so<br /> struct ppp&amp;#39;s protos[i].timer is uninitialized garbage until the first<br /> timer_setup(); without this init-at-attach, attaching the PPP protocol<br /> without ever bringing the device up would leave timer_shutdown_sync()<br /> operating on uninitialized memory in .detach. Moving the init out of<br /> ppp_start() (which only runs on NETDEV_UP) into the attach path makes the<br /> initialization unconditional and avoids initializing the same timer_list<br /> twice.<br /> <br /> This bug was found by static analysis.
Severity CVSS v4.0: Pending analysis
Last modification:
20/07/2026

CVE-2026-63794

Publication date:
19/07/2026
In the Linux kernel, the following vulnerability has been resolved:<br /> <br /> KVM: SVM: Fix page overflow in sev_dbg_crypt() for ENCRYPT path<br /> <br /> In sev_dbg_crypt(), the per-iteration transfer length is bounded by<br /> the source page offset (PAGE_SIZE - s_off) but not by the destination<br /> page offset (PAGE_SIZE - d_off). When d_off &gt; s_off, the encrypt<br /> path (__sev_dbg_encrypt_user) performs a read-modify-write using a<br /> single-page intermediate buffer (dst_tpage):<br /> <br /> 1. __sev_dbg_decrypt() expands the size to round_up(len + (d_off &amp; 15), 16)<br /> before issuing the PSP command. If len + (d_off &amp; 15) &gt; PAGE_SIZE,<br /> the PSP writes beyond the end of the 4096-byte dst_tpage allocation.<br /> <br /> 2. The subsequent memcpy()/copy_from_user() into<br /> page_address(dst_tpage) + (d_off &amp; 15) of &amp;#39;len&amp;#39; bytes overflows<br /> by up to 15 bytes under the same condition.<br /> <br /> Trigger example: s_off = 0, d_off = 1, debug.len = PAGE_SIZE -<br /> the PSP is instructed to write round_up(4097, 16) = 4112 bytes to<br /> a 4096-byte buffer.<br /> <br /> Fix by also bounding len by (PAGE_SIZE - d_off), the same check that<br /> sev_send_update_data() already performs for its single-page guest<br /> region.<br /> <br /> ==================================================================<br /> BUG: KASAN: slab-use-after-free in sev_dbg_crypt+0x993/0xd10 [kvm_amd]<br /> Write of size 4095 at addr ff110062293bb009 by task sev_dbg_test/228214<br /> <br /> CPU: 96 UID: 0 PID: 228214 Comm: sev_dbg_test Tainted: G U W 7.0.0-smp--5ce9b0c48211-dbg #156 PREEMPTLAZY<br /> Tainted: [U]=USER, [W]=WARN<br /> Hardware name: Google Astoria/astoria, BIOS 0.20250817.1-0 08/25/2025<br /> Call Trace:<br /> <br /> dump_stack_lvl+0x54/0x70<br /> print_report+0xbc/0x260<br /> kasan_report+0xa2/0xd0<br /> kasan_check_range+0x25f/0x2c0<br /> __asan_memcpy+0x40/0x70<br /> sev_dbg_crypt+0x993/0xd10 [kvm_amd]<br /> sev_mem_enc_ioctl+0x33c/0x450 [kvm_amd]<br /> kvm_vm_ioctl+0x65d/0x6d0 [kvm]<br /> __se_sys_ioctl+0xb2/0x100<br /> do_syscall_64+0xe8/0x870<br /> entry_SYSCALL_64_after_hwframe+0x4b/0x53<br /> <br /> <br /> The buggy address belongs to the physical page:<br /> page: refcount:1 mapcount:0 mapping:0000000000000000 index:0x7fe72b6a0 pfn:0x62293bb<br /> memcg:ff11000112827d82<br /> flags: 0x1400000000000000(node=1|zone=1)<br /> raw: 1400000000000000 0000000000000000 dead000000000122 0000000000000000<br /> raw: 00000007fe72b6a0 0000000000000000 00000001ffffffff ff11000112827d82<br /> page dumped because: kasan: bad access detected<br /> <br /> Memory state around the buggy address:<br /> ff110062293bbf00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00<br /> ff110062293bbf80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00<br /> &gt;ff110062293bc000: fa fb fb fb fb fb fb fb fc fc fc fc fc fc fc fc<br /> ^<br /> ff110062293bc080: fa fb fb fb fb fb fb fb fc fc fc fc fc fc fc fc<br /> ff110062293bc100: fa fb fb fb fb fb fb fb fc fc fc fc fc fc fc fc<br /> ==================================================================<br /> Disabling lock debugging due to kernel taint<br /> <br /> [sean: add sample KASAN splat, Fixes, and stable@]
Severity CVSS v4.0: Pending analysis
Last modification:
19/07/2026

CVE-2026-53403

Publication date:
19/07/2026
In the Linux kernel, the following vulnerability has been resolved:<br /> <br /> fbdev: Fix fb_new_modelist to prevent null-ptr-deref in fb_videomode_to_var<br /> <br /> info-&gt;var, a framebuffer&amp;#39;s current mode, is expected to have a matching<br /> entry in info-&gt;modelist. var_to_display() relies on this and treats a<br /> failed fb_match_mode() as "This should not happen". fb_set_var() keeps it<br /> true by adding the mode to the list on every change, and<br /> do_register_framebuffer() does the same at registration.<br /> <br /> store_modes() replaces the modelist from userspace. fb_new_modelist()<br /> validates the new modes but does not check that info-&gt;var still has a<br /> match. It relies on fbcon_new_modelist() to re-point consoles, but that<br /> only handles consoles mapped to the framebuffer. With fbcon unbound there<br /> are none, so info-&gt;var is left describing a mode that is no longer in the<br /> list.<br /> <br /> A later console takeover runs var_to_display(), where fb_match_mode()<br /> returns NULL and leaves fb_display[i].mode NULL. fbcon_switch() passes it<br /> to display_to_var(), and fb_videomode_to_var() dereferences the NULL mode.<br /> <br /> Keep the current mode in the list in fb_new_modelist(), the same way<br /> fb_set_var() does.
Severity CVSS v4.0: Pending analysis
Last modification:
20/07/2026