File Index
Files and directories
Sign in
FILE

verifier_may_goto_1.c

File preview with syntax highlighting.

linux-6.19.14/tools/testing/selftests/bpf/progs/verifier_may_goto_1.c C
  1// SPDX-License-Identifier: GPL-2.0
  2/* Copyright (c) 2025 Meta Platforms, Inc. and affiliates. */
  3
  4#include <linux/bpf.h>
  5#include <bpf/bpf_helpers.h>
  6#include "../../../include/linux/filter.h"
  7#include "bpf_misc.h"
  8
  9SEC("raw_tp")
 10__description("may_goto 0")
 11__arch_x86_64
 12__arch_s390x
 13__arch_arm64
 14__xlated("0: r0 = 1")
 15__xlated("1: exit")
 16__success
 17__naked void may_goto_simple(void)
 18{
 19	asm volatile (
 20	".8byte %[may_goto];"
 21	"r0 = 1;"
 22	".8byte %[may_goto];"
 23	"exit;"
 24	:
 25	: __imm_insn(may_goto, BPF_RAW_INSN(BPF_JMP | BPF_JCOND, 0, 0, 0 /* offset */, 0))
 26	: __clobber_all);
 27}
 28
 29SEC("raw_tp")
 30__description("batch 2 of may_goto 0")
 31__arch_x86_64
 32__arch_s390x
 33__arch_arm64
 34__xlated("0: r0 = 1")
 35__xlated("1: exit")
 36__success
 37__naked void may_goto_batch_0(void)
 38{
 39	asm volatile (
 40	".8byte %[may_goto1];"
 41	".8byte %[may_goto1];"
 42	"r0 = 1;"
 43	".8byte %[may_goto1];"
 44	".8byte %[may_goto1];"
 45	"exit;"
 46	:
 47	: __imm_insn(may_goto1, BPF_RAW_INSN(BPF_JMP | BPF_JCOND, 0, 0, 0 /* offset */, 0))
 48	: __clobber_all);
 49}
 50
 51SEC("raw_tp")
 52__description("may_goto batch with offsets 2/1/0")
 53__arch_x86_64
 54__arch_s390x
 55__arch_arm64
 56__xlated("0: r0 = 1")
 57__xlated("1: exit")
 58__success
 59__naked void may_goto_batch_1(void)
 60{
 61	asm volatile (
 62	".8byte %[may_goto1];"
 63	".8byte %[may_goto2];"
 64	".8byte %[may_goto3];"
 65	"r0 = 1;"
 66	".8byte %[may_goto1];"
 67	".8byte %[may_goto2];"
 68	".8byte %[may_goto3];"
 69	"exit;"
 70	:
 71	: __imm_insn(may_goto1, BPF_RAW_INSN(BPF_JMP | BPF_JCOND, 0, 0, 2 /* offset */, 0)),
 72	  __imm_insn(may_goto2, BPF_RAW_INSN(BPF_JMP | BPF_JCOND, 0, 0, 1 /* offset */, 0)),
 73	  __imm_insn(may_goto3, BPF_RAW_INSN(BPF_JMP | BPF_JCOND, 0, 0, 0 /* offset */, 0))
 74	: __clobber_all);
 75}
 76
 77SEC("raw_tp")
 78__description("may_goto batch with offsets 2/0")
 79__arch_x86_64
 80__arch_s390x
 81__arch_arm64
 82__xlated("0: *(u64 *)(r10 -16) = 65535")
 83__xlated("1: *(u64 *)(r10 -8) = 0")
 84__xlated("2: r11 = *(u64 *)(r10 -16)")
 85__xlated("3: if r11 == 0x0 goto pc+6")
 86__xlated("4: r11 -= 1")
 87__xlated("5: if r11 != 0x0 goto pc+2")
 88__xlated("6: r11 = -16")
 89__xlated("7: call unknown")
 90__xlated("8: *(u64 *)(r10 -16) = r11")
 91__xlated("9: r0 = 1")
 92__xlated("10: r0 = 2")
 93__xlated("11: exit")
 94__success
 95__naked void may_goto_batch_2(void)
 96{
 97	asm volatile (
 98	".8byte %[may_goto1];"
 99	".8byte %[may_goto3];"
100	"r0 = 1;"
101	"r0 = 2;"
102	"exit;"
103	:
104	: __imm_insn(may_goto1, BPF_RAW_INSN(BPF_JMP | BPF_JCOND, 0, 0, 2 /* offset */, 0)),
105	  __imm_insn(may_goto3, BPF_RAW_INSN(BPF_JMP | BPF_JCOND, 0, 0, 0 /* offset */, 0))
106	: __clobber_all);
107}
108
109char _license[] SEC("license") = "GPL";
~/ Read-only file preview.