In the Linux kernel, the following vulnerability has been resolved:
LoongArch: BPF: Fix off-by-one error in build_prologue()
Vincent reported that running BPF progs with tailcalls on LoongArch causes kernel hard lockup. Debugging the issues shows that the JITed image missing a jirl instruction at the end of the epilogue.
There are two passes in JIT compiling, the first pass set the flags and the second pass generates JIT code based on those flags. With BPF progs mixing bpf2bpf and tailcalls, buildprologue() generates N insns in the first pass and then generates N+1 insns in the second pass. This makes epilogueoffset off by one and we will jump to some unexpected insn and cause lockup. Fix this by inserting a nop insn.
[
{
"id": "CVE-2025-37893-160ca085",
"deprecated": false,
"signature_version": "v1",
"signature_type": "Line",
"digest": {
"line_hashes": [
"118046354818517068845020350438985388078",
"128694570737138852687850695440813415881",
"201168553520339973092258568358225623504",
"44341026733655088764215987547799637347"
],
"threshold": 0.9
},
"target": {
"file": "arch/loongarch/net/bpf_jit.c"
},
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@48b904de2408af5f936f0e03f48dfcddeab58aa0"
},
{
"id": "CVE-2025-37893-21ce207a",
"deprecated": false,
"signature_version": "v1",
"signature_type": "Function",
"digest": {
"function_hash": "271507830326055921805254403360070249910",
"length": 1423.0
},
"target": {
"file": "arch/loongarch/net/bpf_jit.c",
"function": "build_prologue"
},
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@b3ffad2f02db4aace6799fe0049508b8925eae45"
},
{
"id": "CVE-2025-37893-3a7868ba",
"deprecated": false,
"signature_version": "v1",
"signature_type": "Line",
"digest": {
"line_hashes": [
"278621099165219637864594662759635559",
"98836706297272433898591196880966731423",
"42232319907424878079309936188504955078"
],
"threshold": 0.9
},
"target": {
"file": "arch/loongarch/net/bpf_jit.h"
},
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@7e2586991e36663c9bc48c828b83eab180ad30a9"
},
{
"id": "CVE-2025-37893-3c6b23fe",
"deprecated": false,
"signature_version": "v1",
"signature_type": "Line",
"digest": {
"line_hashes": [
"118046354818517068845020350438985388078",
"128694570737138852687850695440813415881",
"201168553520339973092258568358225623504",
"44341026733655088764215987547799637347"
],
"threshold": 0.9
},
"target": {
"file": "arch/loongarch/net/bpf_jit.c"
},
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@b3ffad2f02db4aace6799fe0049508b8925eae45"
},
{
"id": "CVE-2025-37893-5b1fd6e0",
"deprecated": false,
"signature_version": "v1",
"signature_type": "Function",
"digest": {
"function_hash": "271507830326055921805254403360070249910",
"length": 1423.0
},
"target": {
"file": "arch/loongarch/net/bpf_jit.c",
"function": "build_prologue"
},
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@7e2586991e36663c9bc48c828b83eab180ad30a9"
},
{
"id": "CVE-2025-37893-6649dce6",
"deprecated": false,
"signature_version": "v1",
"signature_type": "Line",
"digest": {
"line_hashes": [
"278621099165219637864594662759635559",
"98836706297272433898591196880966731423",
"42232319907424878079309936188504955078"
],
"threshold": 0.9
},
"target": {
"file": "arch/loongarch/net/bpf_jit.h"
},
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@c74d95a5679741ef428974ab788f5b0758dc78ae"
},
{
"id": "CVE-2025-37893-75cd6873",
"deprecated": false,
"signature_version": "v1",
"signature_type": "Line",
"digest": {
"line_hashes": [
"118046354818517068845020350438985388078",
"128694570737138852687850695440813415881",
"201168553520339973092258568358225623504",
"44341026733655088764215987547799637347"
],
"threshold": 0.9
},
"target": {
"file": "arch/loongarch/net/bpf_jit.c"
},
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@c74d95a5679741ef428974ab788f5b0758dc78ae"
},
{
"id": "CVE-2025-37893-78a0ed7f",
"deprecated": false,
"signature_version": "v1",
"signature_type": "Function",
"digest": {
"function_hash": "271507830326055921805254403360070249910",
"length": 1423.0
},
"target": {
"file": "arch/loongarch/net/bpf_jit.c",
"function": "build_prologue"
},
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@c74d95a5679741ef428974ab788f5b0758dc78ae"
},
{
"id": "CVE-2025-37893-7a5076ea",
"deprecated": false,
"signature_version": "v1",
"signature_type": "Line",
"digest": {
"line_hashes": [
"118046354818517068845020350438985388078",
"128694570737138852687850695440813415881",
"201168553520339973092258568358225623504",
"44341026733655088764215987547799637347"
],
"threshold": 0.9
},
"target": {
"file": "arch/loongarch/net/bpf_jit.c"
},
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@7e2586991e36663c9bc48c828b83eab180ad30a9"
},
{
"id": "CVE-2025-37893-8c5e0b3e",
"deprecated": false,
"signature_version": "v1",
"signature_type": "Function",
"digest": {
"function_hash": "271507830326055921805254403360070249910",
"length": 1423.0
},
"target": {
"file": "arch/loongarch/net/bpf_jit.c",
"function": "build_prologue"
},
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@205a2182c51ffebaef54d643e3745e720cded08b"
},
{
"id": "CVE-2025-37893-9814d4e1",
"deprecated": false,
"signature_version": "v1",
"signature_type": "Line",
"digest": {
"line_hashes": [
"278621099165219637864594662759635559",
"98836706297272433898591196880966731423",
"42232319907424878079309936188504955078"
],
"threshold": 0.9
},
"target": {
"file": "arch/loongarch/net/bpf_jit.h"
},
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@205a2182c51ffebaef54d643e3745e720cded08b"
},
{
"id": "CVE-2025-37893-b087a02f",
"deprecated": false,
"signature_version": "v1",
"signature_type": "Line",
"digest": {
"line_hashes": [
"278621099165219637864594662759635559",
"98836706297272433898591196880966731423",
"42232319907424878079309936188504955078"
],
"threshold": 0.9
},
"target": {
"file": "arch/loongarch/net/bpf_jit.h"
},
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@b3ffad2f02db4aace6799fe0049508b8925eae45"
},
{
"id": "CVE-2025-37893-b7e7b96a",
"deprecated": false,
"signature_version": "v1",
"signature_type": "Line",
"digest": {
"line_hashes": [
"278621099165219637864594662759635559",
"98836706297272433898591196880966731423",
"42232319907424878079309936188504955078"
],
"threshold": 0.9
},
"target": {
"file": "arch/loongarch/net/bpf_jit.h"
},
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@48b904de2408af5f936f0e03f48dfcddeab58aa0"
},
{
"id": "CVE-2025-37893-c3761e67",
"deprecated": false,
"signature_version": "v1",
"signature_type": "Line",
"digest": {
"line_hashes": [
"118046354818517068845020350438985388078",
"128694570737138852687850695440813415881",
"201168553520339973092258568358225623504",
"44341026733655088764215987547799637347"
],
"threshold": 0.9
},
"target": {
"file": "arch/loongarch/net/bpf_jit.c"
},
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@205a2182c51ffebaef54d643e3745e720cded08b"
},
{
"id": "CVE-2025-37893-f24841fe",
"deprecated": false,
"signature_version": "v1",
"signature_type": "Function",
"digest": {
"function_hash": "271507830326055921805254403360070249910",
"length": 1423.0
},
"target": {
"file": "arch/loongarch/net/bpf_jit.c",
"function": "build_prologue"
},
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@48b904de2408af5f936f0e03f48dfcddeab58aa0"
}
]