{"id":14897,"date":"2026-09-04T19:02:17","date_gmt":"2026-09-04T11:02:17","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-63825"},"modified":"2026-09-04T19:02:17","modified_gmt":"2026-09-04T11:02:17","slug":"cve-2026-63825","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-63825","title":{"rendered":"CVE-2026-63825 [CRITICAL] &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\ngcov: use atomic coun"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>gcov: use atomic counter updates to fix concurrent access crashes<\/p>\n<p>GCC&#8217;s GCOV instrumentation can merge global branch counters with loop<br \/>\ninduction variables as an optimization.  In inflate_fast(), the inner copy<br \/>\nloops get transformed so that the GCOV counter value is loaded multiple<br \/>\ntimes to compute the loop base address, start index, and end bound.  Since<br \/>\nGCOV counters are global (not per-CPU), concurrent execution on different<br \/>\nCPUs causes the counter to change between loads, producing inconsistent<br \/>\nvalues and out-of-bounds memory writes.<\/p>\n<p>The crash manifests during IPComp (IP Payload Compression) processing when<br \/>\ninflate_fast() runs concurrently on multiple CPUs:<\/p>\n<p>  BUG: unable to handle page fault for address: ffffd0a3c0902ffa<br \/>\n  RIP: inflate_fast+1431<br \/>\n  Call Trace:<br \/>\n   zlib_inflate<br \/>\n   __deflate_decompress<br \/>\n   crypto_comp_decompress<br \/>\n   ipcomp_decompress [xfrm_ipcomp]<br \/>\n   ipcomp_input [xfrm_ipcomp]<br \/>\n   xfrm_input<\/p>\n<p>At the crash point, the compiler generated three loads from the same<br \/>\nglobal GCOV counter (__gcov0.inflate_fast+216) to compute base, start, and<br \/>\nend for an indexed loop.  Another CPU modified the counter between loads,<br \/>\nmaking the values inconsistent &#8211; the write went 3.4 MB past a 65 KB<br \/>\nbuffer.<\/p>\n<p>Add -fprofile-update=prefer-atomic to CFLAGS_GCOV at the global level in<br \/>\nthe top-level Makefile, guarded by a try-run compile test.  The test<br \/>\ncompiles a minimal program with and without -fprofile-update=prefer-atomic<br \/>\nusing the full KBUILD_CFLAGS, then compares undefined symbols in the<br \/>\nresulting object files.  If prefer-atomic introduces new undefined<br \/>\nreferences (such as __atomic_fetch_add_8 on i386 or __aarch64_ldadd8_relax<br \/>\non arm64 with outline-atomics), the flag is not added &#8212; the kernel does<br \/>\nnot link against libatomic.<\/p>\n<p>On architectures where GCC inlines 64-bit atomic counter updates (x86_64,<br \/>\ns390, &#8230;) the test passes and the flag is enabled, preventing the<br \/>\ncompiler from merging counters with loop induction variables and fixing<br \/>\nthe observed concurrent-access crash.<\/p>\n<p>On architectures where the flag would introduce libatomic dependencies, it<br \/>\nis silently omitted and behaviour is no worse than before this patch.<\/p>\n<p>Move the CFLAGS_GCOV block from its original position (before the arch<br \/>\nMakefile include) to after the core KBUILD_CFLAGS assignments but before<br \/>\nthe scripts\/Makefile.gcc-plugins include.  This placement ensures the<br \/>\ntry-run test sees arch-specific flags (-m32, -march=,<br \/>\n-mno-outline-atomics) while avoiding GCC plugin flags (-fplugin=) that<br \/>\nwould break the test on clean builds when plugin shared objects do not yet<br \/>\nexist.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>gcov: use atomic counter updates to fix concurrent access crashes<\/p>\n<p>GCC&#8217;s GCOV instrumentation can merge global branch counters with<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-14897","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/14897","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=14897"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=14897"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=14897"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}