In the Linux kernel, the following vulnerability has been resolved:
bpf, arm64: Fix trampoline for BPFTRAMPFCALLORIG
When BPFTRAMPFCALLORIG is set, the trampoline calls _bpftrampenter() and _bpftrampexit() functions, passing them the struct bpftrampimage *im pointer as an argument in R0.
The trampoline generation code uses emitaddrmovi64() to emit instructions for moving the bpftrampimage address into R0, but emitaddrmovi64() assumes the address to be in the vmalloc() space and uses only 48 bits. Because bpftrampimage is allocated using kzalloc(), its address can use more than 48-bits, in this case the trampoline will pass an invalid address to _bpftramp_enter/exit() causing a kernel crash.
Fix this by using emita64movi64() in place of emitaddrmovi64() as it can work with addresses that are greater than 48-bits.