Linux: bpf: reject BPF_PSEUDO_FUNC reference to the main program
What fixes it
- 314c8caa9cb64ad60c5b969fe9a3e2dcdccf156fLinuxCVE List
- 8cb75f7ada25b1cf25f2f74dec3ba649b9064a09LinuxCVE List
- 118212417ba0120d99f84154799f8880f07411f4LinuxCVE List
- 92f0bd0e2b632c6565ac2214a4d7d2ed37e5b9f6LinuxCVE List
- 374b2c5561db80fcdd7cdce44af37a49416f61c7LinuxCVE 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 BPF_PSEUDO_FUNC reference to the main program
fixups.c:jit_subprogs() rewrites BPF_PSEUDO_FUNC loads to contain real function addresses. This function is invoked from bpf_jit_subprogs() only when env->subprog_cnt > 1. Meaning that for any program like below:
int main(void *ctx) { void *ptr = main; ... bpf_timer_set_callback(..., ptr); ... }
The 'ptr' won't be ever converted to contain an address. In combination with e.g. bpf_timer_set_callback() this would lead to a function call at a bogus address.
Instead of complicating the implementation, just assume that no useful program needs main to be a sync or async callback and reject BPF_PSEUDO_FUNC loads for the main subprogram.
Text from CVE List
Affected versions 16
- Linuxaffected: 69c087ba6225b574afb6e505b72cb75242a3d844 before c74750dca96f40a1adb9d334f5a3152f44b270c3CVE List
- Linuxaffected: 69c087ba6225b574afb6e505b72cb75242a3d844 before 314c8caa9cb64ad60c5b969fe9a3e2dcdccf156fCVE List
- Linuxaffected: 69c087ba6225b574afb6e505b72cb75242a3d844 before 8cb75f7ada25b1cf25f2f74dec3ba649b9064a09CVE List
- Linuxaffected: 69c087ba6225b574afb6e505b72cb75242a3d844 before 118212417ba0120d99f84154799f8880f07411f4CVE List
- Linuxaffected: 69c087ba6225b574afb6e505b72cb75242a3d844 before d6c39774ae093c9f7009cc4ae918f18fc1af7ae7CVE List
- Linuxaffected: 69c087ba6225b574afb6e505b72cb75242a3d844 before 92f0bd0e2b632c6565ac2214a4d7d2ed37e5b9f6CVE List
- Linuxaffected: 69c087ba6225b574afb6e505b72cb75242a3d844 before 374b2c5561db80fcdd7cdce44af37a49416f61c7CVE List
- Linuxaffected: 5.13CVE List
- Linuxunaffected: all versions before 5.13CVE List
- Linuxunaffected: 5.15.222 through 5.15.*CVE List
- Linuxunaffected: 6.1.189 through 6.1.*CVE List
- Linuxunaffected: 6.6.158 through 6.6.*CVE List
- Linuxunaffected: 6.12.111 through 6.12.*CVE List
- Linuxunaffected: 6.18.53 through 6.18.*CVE List
- Linuxunaffected: 7.2.7 through 7.2.*CVE List
- Linuxunaffected: 7.3CVE List
References 7
- git.kernel.org/stable/c/c74750dca96f40a1adb9d334f5a3152f44b270c3Referencevia CVE List
- git.kernel.org/stable/c/314c8caa9cb64ad60c5b969fe9a3e2dcdccf156fReferencevia CVE List
- git.kernel.org/stable/c/8cb75f7ada25b1cf25f2f74dec3ba649b9064a09Referencevia CVE List
- git.kernel.org/stable/c/118212417ba0120d99f84154799f8880f07411f4Referencevia CVE List
- git.kernel.org/stable/c/d6c39774ae093c9f7009cc4ae918f18fc1af7ae7Referencevia CVE List
- git.kernel.org/stable/c/92f0bd0e2b632c6565ac2214a4d7d2ed37e5b9f6Referencevia CVE List
- git.kernel.org/stable/c/374b2c5561db80fcdd7cdce44af37a49416f61c7Referencevia CVE List