{"resultsPerPage":1,"startIndex":0,"totalResults":1,"format":"NVD_CVE","version":"2.0","timestamp":"2026-05-09T05:56:10.499","vulnerabilities":[{"cve":{"id":"CVE-2025-38407","sourceIdentifier":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","published":"2025-07-25T14:15:32.317","lastModified":"2025-11-19T18:19:03.110","vulnStatus":"Analyzed","cveTags":[],"descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nriscv: cpu_ops_sbi: Use static array for boot_data\n\nSince commit 6b9f29b81b15 (\"riscv: Enable pcpu page first chunk\nallocator\"), if NUMA is enabled, the page percpu allocator may be used\non very sparse configurations, or when requested on boot with\npercpu_alloc=page.\n\nIn that case, percpu data gets put in the vmalloc area. However,\nsbi_hsm_hart_start() needs the physical address of a sbi_hart_boot_data,\nand simply assumes that __pa() would work. This causes the just started\nhart to immediately access an invalid address and hang.\n\nFortunately, struct sbi_hart_boot_data is not too large, so we can\nsimply allocate an array for boot_data statically, putting it in the\nkernel image.\n\nThis fixes NUMA=y SMP boot on Sophgo SG2042.\n\nTo reproduce on QEMU: Set CONFIG_NUMA=y and CONFIG_DEBUG_VIRTUAL=y, then\nrun with:\n\n  qemu-system-riscv64 -M virt -smp 2 -nographic \\\n    -kernel arch/riscv/boot/Image \\\n    -append \"percpu_alloc=page\"\n\nKernel output:\n\n[    0.000000] Booting Linux on hartid 0\n[    0.000000] Linux version 6.16.0-rc1 (dram@sakuya) (riscv64-unknown-linux-gnu-gcc (GCC) 14.2.1 20250322, GNU ld (GNU Binutils) 2.44) #11 SMP Tue Jun 24 14:56:22 CST 2025\n...\n[    0.000000] percpu: 28 4K pages/cpu s85784 r8192 d20712\n...\n[    0.083192] smp: Bringing up secondary CPUs ...\n[    0.086722] ------------[ cut here ]------------\n[    0.086849] virt_to_phys used for non-linear address: (____ptrval____) (0xff2000000001d080)\n[    0.088001] WARNING: CPU: 0 PID: 1 at arch/riscv/mm/physaddr.c:14 __virt_to_phys+0xae/0xe8\n[    0.088376] Modules linked in:\n[    0.088656] CPU: 0 UID: 0 PID: 1 Comm: swapper/0 Not tainted 6.16.0-rc1 #11 NONE\n[    0.088833] Hardware name: riscv-virtio,qemu (DT)\n[    0.088948] epc : __virt_to_phys+0xae/0xe8\n[    0.089001]  ra : __virt_to_phys+0xae/0xe8\n[    0.089037] epc : ffffffff80021eaa ra : ffffffff80021eaa sp : ff2000000004bbc0\n[    0.089057]  gp : ffffffff817f49c0 tp : ff60000001d60000 t0 : 5f6f745f74726976\n[    0.089076]  t1 : 0000000000000076 t2 : 705f6f745f747269 s0 : ff2000000004bbe0\n[    0.089095]  s1 : ff2000000001d080 a0 : 0000000000000000 a1 : 0000000000000000\n[    0.089113]  a2 : 0000000000000000 a3 : 0000000000000000 a4 : 0000000000000000\n[    0.089131]  a5 : 0000000000000000 a6 : 0000000000000000 a7 : 0000000000000000\n[    0.089155]  s2 : ffffffff8130dc00 s3 : 0000000000000001 s4 : 0000000000000001\n[    0.089174]  s5 : ffffffff8185eff8 s6 : ff2000007f1eb000 s7 : ffffffff8002a2ec\n[    0.089193]  s8 : 0000000000000001 s9 : 0000000000000001 s10: 0000000000000000\n[    0.089211]  s11: 0000000000000000 t3 : ffffffff8180a9f7 t4 : ffffffff8180a9f7\n[    0.089960]  t5 : ffffffff8180a9f8 t6 : ff2000000004b9d8\n[    0.089984] status: 0000000200000120 badaddr: ffffffff80021eaa cause: 0000000000000003\n[    0.090101] [<ffffffff80021eaa>] __virt_to_phys+0xae/0xe8\n[    0.090228] [<ffffffff8001d796>] sbi_cpu_start+0x6e/0xe8\n[    0.090247] [<ffffffff8001a5da>] __cpu_up+0x1e/0x8c\n[    0.090260] [<ffffffff8002a32e>] bringup_cpu+0x42/0x258\n[    0.090277] [<ffffffff8002914c>] cpuhp_invoke_callback+0xe0/0x40c\n[    0.090292] [<ffffffff800294e0>] __cpuhp_invoke_callback_range+0x68/0xfc\n[    0.090320] [<ffffffff8002a96a>] _cpu_up+0x11a/0x244\n[    0.090334] [<ffffffff8002aae6>] cpu_up+0x52/0x90\n[    0.090384] [<ffffffff80c09350>] bringup_nonboot_cpus+0x78/0x118\n[    0.090411] [<ffffffff80c11060>] smp_init+0x34/0xb8\n[    0.090425] [<ffffffff80c01220>] kernel_init_freeable+0x148/0x2e4\n[    0.090442] [<ffffffff80b83802>] kernel_init+0x1e/0x14c\n[    0.090455] [<ffffffff800124ca>] ret_from_fork_kernel+0xe/0xf0\n[    0.090471] [<ffffffff80b8d9c2>] ret_from_fork_kernel_asm+0x16/0x18\n[    0.090560] ---[ end trace 0000000000000000 ]---\n[    1.179875] CPU1: failed to come online\n[    1.190324] smp: Brought up 1 node, 1 CPU"},{"lang":"es","value":"En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: riscv: cpu_ops_sbi: Usar una matriz estática para boot_data. Desde el commit 6b9f29b81b15 (\"riscv: Habilitar el asignador de primer fragmento de página pcpu\"), si NUMA está habilitado, el asignador de páginas por CPU puede usarse en configuraciones muy dispersas o cuando se solicita al arrancar con percpu_alloc=page. En ese caso, los datos por CPU se colocan en el área vmalloc. Sin embargo, sbi_hsm_hart_start() necesita la dirección física de sbi_hart_boot_data y simplemente asume que __pa() funcionaría. Esto provoca que el hart recién iniciado acceda inmediatamente a una dirección no válida y se cuelgue. Afortunadamente, la estructura sbi_hart_boot_data no es demasiado grande, por lo que podemos asignar una matriz estáticamente para boot_data, colocándola en la imagen del kernel. Esto soluciona el problema del arranque SMP con NUMA=y en Sophgo SG2042. Para reproducir en QEMU: Establezca CONFIG_NUMA=y y CONFIG_DEBUG_VIRTUAL=y, luego ejecute con: qemu-system-riscv64 -M virt -smp 2 -nographic \\ -kernel arch/riscv/boot/Image \\ -append \"percpu_alloc=page\" Salida del kernel: [ 0.000000] Booting Linux on hartid 0 [ 0.000000] Linux version 6.16.0-rc1 (dram@sakuya) (riscv64-unknown-linux-gnu-gcc (GCC) 14.2.1 20250322, GNU ld (GNU Binutils) 2.44) #11 SMP Tue Jun 24 14:56:22 CST 2025 ... [ 0.000000] percpu: 28 4K pages/cpu s85784 r8192 d20712 ... [ 0.083192] smp: Bringing up secondary CPUs ... [ 0.086722] ------------[ cut here ]------------ [ 0.086849] virt_to_phys used for non-linear address: (____ptrval____) (0xff2000000001d080) [ 0.088001] WARNING: CPU: 0 PID: 1 at arch/riscv/mm/physaddr.c:14 __virt_to_phys+0xae/0xe8 [ 0.088376] Modules linked in: [ 0.088656] CPU: 0 UID: 0 PID: 1 Comm: swapper/0 Not tainted 6.16.0-rc1 #11 NONE [ 0.088833] Hardware name: riscv-virtio,qemu (DT) [ 0.088948] epc : __virt_to_phys+0xae/0xe8 [ 0.089001] ra : __virt_to_phys+0xae/0xe8 [ 0.089037] epc : ffffffff80021eaa ra : ffffffff80021eaa sp : ff2000000004bbc0 [ 0.089057] gp : ffffffff817f49c0 tp : ff60000001d60000 t0 : 5f6f745f74726976 [ 0.089076] t1 : 0000000000000076 t2 : 705f6f745f747269 s0 : ff2000000004bbe0 [ 0.089095] s1 : ff2000000001d080 a0 : 0000000000000000 a1 : 0000000000000000 [ 0.089113] a2 : 0000000000000000 a3 : 0000000000000000 a4 : 0000000000000000 [ 0.089131] a5 : 0000000000000000 a6 : 0000000000000000 a7 : 0000000000000000 [ 0.089155] s2 : ffffffff8130dc00 s3 : 0000000000000001 s4 : 0000000000000001 [ 0.089174] s5 : ffffffff8185eff8 s6 : ff2000007f1eb000 s7 : ffffffff8002a2ec [ 0.089193] s8 : 0000000000000001 s9 : 0000000000000001 s10: 0000000000000000 [ 0.089211] s11: 0000000000000000 t3 : ffffffff8180a9f7 t4 : ffffffff8180a9f7 [ 0.089960] t5 : ffffffff8180a9f8 t6 : ff2000000004b9d8 [ 0.089984] status: 0000000200000120 badaddr: ffffffff80021eaa cause: 0000000000000003 [ 0.090101] [] __virt_to_phys+0xae/0xe8 [ 0.090228] [] sbi_cpu_start+0x6e/0xe8 [ 0.090247] [] __cpu_up+0x1e/0x8c [ 0.090260] [] bringup_cpu+0x42/0x258 [ 0.090277] [] cpuhp_invoke_callback+0xe0/0x40c [ 0.090292] [] __cpuhp_invoke_callback_range+0x68/0xfc [ 0.090320] [] _cpu_up+0x11a/0x244 [ 0.090334] [] cpu_up+0x52/0x90 [ 0.090384] [] bringup_nonboot_cpus+0x78/0x118 [ 0.090411] [] smp_init+0x34/0xb8 [ 0.090425] [] kernel_init_freeable+0x148/0x2e4 [ 0.090442] [] kernel_init+0x1e/0x14c [ 0.090455] [] ret_from_fork_kernel+0xe/0xf0 [ 0.090471] [] ret_from_fork_kernel_asm+0x16/0x18 [ 0.090560] ---[ end trace 0000000000000000 ]--- [ 1.179875] CPU1: failed to come online [ 1.190324] smp: Brought up 1 node, 1 CPU"}],"metrics":{"cvssMetricV31":[{"source":"nvd@nist.gov","type":"Primary","cvssData":{"version":"3.1","vectorString":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H","baseScore":5.5,"baseSeverity":"MEDIUM","attackVector":"LOCAL","attackComplexity":"LOW","privilegesRequired":"LOW","userInteraction":"NONE","scope":"UNCHANGED","confidentialityImpact":"NONE","integrityImpact":"NONE","availabilityImpact":"HIGH"},"exploitabilityScore":1.8,"impactScore":3.6}]},"weaknesses":[{"source":"nvd@nist.gov","type":"Primary","description":[{"lang":"en","value":"NVD-CWE-noinfo"}]}],"configurations":[{"nodes":[{"operator":"OR","negate":false,"cpeMatch":[{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.8","versionEndExcluding":"6.12.37","matchCriteriaId":"366673BD-D793-4DB6-9C97-ADF13DFEBA1F"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.13","versionEndExcluding":"6.15.6","matchCriteriaId":"6E0BB4E0-44BC-4645-83A8-6EA232CE624C"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:6.16:rc1:*:*:*:*:*:*","matchCriteriaId":"6D4894DB-CCFE-4602-B1BF-3960B2E19A01"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:6.16:rc2:*:*:*:*:*:*","matchCriteriaId":"09709862-E348-4378-8632-5A7813EDDC86"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:6.16:rc3:*:*:*:*:*:*","matchCriteriaId":"415BF58A-8197-43F5-B3D7-D1D63057A26E"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:6.16:rc4:*:*:*:*:*:*","matchCriteriaId":"A0517869-312D-4429-80C2-561086E1421C"}]}]}],"references":[{"url":"https://git.kernel.org/stable/c/02c725cd55eb5052b88eeaa3f60a391ef4dcaec5","source":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":["Patch"]},{"url":"https://git.kernel.org/stable/c/2b29be967ae456fc09c320d91d52278cf721be1e","source":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":["Patch"]},{"url":"https://git.kernel.org/stable/c/f5fe094f35a37adea40b2fd52c99bb1333be9b07","source":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":["Patch"]}]}}]}