1*60802802SEduard Zingerman // SPDX-License-Identifier: GPL-2.0 2*60802802SEduard Zingerman /* Converted from tools/testing/selftests/bpf/verifier/d_path.c */ 3*60802802SEduard Zingerman 4*60802802SEduard Zingerman #include <linux/bpf.h> 5*60802802SEduard Zingerman #include <bpf/bpf_helpers.h> 6*60802802SEduard Zingerman #include "bpf_misc.h" 7*60802802SEduard Zingerman 8*60802802SEduard Zingerman SEC("fentry/dentry_open") 9*60802802SEduard Zingerman __description("d_path accept") 10*60802802SEduard Zingerman __success __retval(0) d_path_accept(void)11*60802802SEduard Zingerman__naked void d_path_accept(void) 12*60802802SEduard Zingerman { 13*60802802SEduard Zingerman asm volatile (" \ 14*60802802SEduard Zingerman r1 = *(u32*)(r1 + 0); \ 15*60802802SEduard Zingerman r2 = r10; \ 16*60802802SEduard Zingerman r2 += -8; \ 17*60802802SEduard Zingerman r6 = 0; \ 18*60802802SEduard Zingerman *(u64*)(r2 + 0) = r6; \ 19*60802802SEduard Zingerman r3 = 8 ll; \ 20*60802802SEduard Zingerman call %[bpf_d_path]; \ 21*60802802SEduard Zingerman r0 = 0; \ 22*60802802SEduard Zingerman exit; \ 23*60802802SEduard Zingerman " : 24*60802802SEduard Zingerman : __imm(bpf_d_path) 25*60802802SEduard Zingerman : __clobber_all); 26*60802802SEduard Zingerman } 27*60802802SEduard Zingerman 28*60802802SEduard Zingerman SEC("fentry/d_path") 29*60802802SEduard Zingerman __description("d_path reject") 30*60802802SEduard Zingerman __failure __msg("helper call is not allowed in probe") d_path_reject(void)31*60802802SEduard Zingerman__naked void d_path_reject(void) 32*60802802SEduard Zingerman { 33*60802802SEduard Zingerman asm volatile (" \ 34*60802802SEduard Zingerman r1 = *(u32*)(r1 + 0); \ 35*60802802SEduard Zingerman r2 = r10; \ 36*60802802SEduard Zingerman r2 += -8; \ 37*60802802SEduard Zingerman r6 = 0; \ 38*60802802SEduard Zingerman *(u64*)(r2 + 0) = r6; \ 39*60802802SEduard Zingerman r3 = 8 ll; \ 40*60802802SEduard Zingerman call %[bpf_d_path]; \ 41*60802802SEduard Zingerman r0 = 0; \ 42*60802802SEduard Zingerman exit; \ 43*60802802SEduard Zingerman " : 44*60802802SEduard Zingerman : __imm(bpf_d_path) 45*60802802SEduard Zingerman : __clobber_all); 46*60802802SEduard Zingerman } 47*60802802SEduard Zingerman 48*60802802SEduard Zingerman char _license[] SEC("license") = "GPL"; 49