Linux: bpf: Reject tail calls directly from callback frames
What fixes it
- 617c8266e49f45747f71e74177646a63f72b7025LinuxCVE List
- 96d31b28263c429a56e4de85bcf744a5c320b3a3LinuxCVE List
- 266aa4ad0b2e82397cd9045752c9bff03d98edddLinuxCVE List
- 6.18.53LinuxCVE List
A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.
Description
In the Linux kernel, the following vulnerability has been resolved:
bpf: Reject tail calls directly from callback frames
A tail call from a non-zero frame is modeled as a return from that frame. The verifier makes R0 unknown and calls prepare_func_exit() for the taken branch.
When the current frame is a synchronous callback, prepare_func_exit() enforces the callback return-value contract and marks R0 precise. Since the tail-call path synthesized R0 rather than deriving it from an instruction, precision backtracking reaches the callback-calling instruction with R0 still requested and triggers the "callback unexpected regs" verifier bug. A CAP_BPF task can therefore cause a WARN and an -EFAULT BPF_PROG_LOAD.
Tail calls reachable from callbacks are already rejected later by check_max_stack_depth(). Reject a tail call made directly by a callback before constructing the inconsistent return state, using the existing diagnostic. Tail calls from ordinary subprograms keep their current behavior.
Text from CVE List
Affected versions 9
- Linuxaffected: a6c22c91b6284e4713c0cf5b20ab3c9c71b77ae8 before 617c8266e49f45747f71e74177646a63f72b7025CVE List
- Linuxaffected: e3245f8990431950d20631c72236d4e8cb2dcde8 before 96d31b28263c429a56e4de85bcf744a5c320b3a3CVE List
- Linuxaffected: e3245f8990431950d20631c72236d4e8cb2dcde8 before 266aa4ad0b2e82397cd9045752c9bff03d98edddCVE List
- Linuxaffected: 6.18.2 before 6.18.53CVE List
- Linuxaffected: 6.19CVE List
- Linuxunaffected: all versions before 6.19CVE List
- Linuxunaffected: 6.18.53 through 6.18.*CVE List
- Linuxunaffected: 7.2.7 through 7.2.*CVE List
- Linuxunaffected: 7.3CVE List