cfg.c 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. {
  2. "unreachable",
  3. .insns = {
  4. BPF_EXIT_INSN(),
  5. BPF_EXIT_INSN(),
  6. },
  7. .errstr = "unreachable",
  8. .result = REJECT,
  9. },
  10. {
  11. "unreachable2",
  12. .insns = {
  13. BPF_JMP_IMM(BPF_JA, 0, 0, 1),
  14. BPF_JMP_IMM(BPF_JA, 0, 0, 0),
  15. BPF_EXIT_INSN(),
  16. },
  17. .errstr = "unreachable",
  18. .result = REJECT,
  19. },
  20. {
  21. "out of range jump",
  22. .insns = {
  23. BPF_JMP_IMM(BPF_JA, 0, 0, 1),
  24. BPF_EXIT_INSN(),
  25. },
  26. .errstr = "jump out of range",
  27. .result = REJECT,
  28. },
  29. {
  30. "out of range jump2",
  31. .insns = {
  32. BPF_JMP_IMM(BPF_JA, 0, 0, -2),
  33. BPF_EXIT_INSN(),
  34. },
  35. .errstr = "jump out of range",
  36. .result = REJECT,
  37. },
  38. {
  39. "loop (back-edge)",
  40. .insns = {
  41. BPF_JMP_IMM(BPF_JA, 0, 0, -1),
  42. BPF_EXIT_INSN(),
  43. },
  44. .errstr = "unreachable insn 1",
  45. .errstr_unpriv = "back-edge",
  46. .result = REJECT,
  47. },
  48. {
  49. "loop2 (back-edge)",
  50. .insns = {
  51. BPF_MOV64_REG(BPF_REG_1, BPF_REG_0),
  52. BPF_MOV64_REG(BPF_REG_2, BPF_REG_0),
  53. BPF_MOV64_REG(BPF_REG_3, BPF_REG_0),
  54. BPF_JMP_IMM(BPF_JA, 0, 0, -4),
  55. BPF_EXIT_INSN(),
  56. },
  57. .errstr = "unreachable insn 4",
  58. .errstr_unpriv = "back-edge",
  59. .result = REJECT,
  60. },
  61. {
  62. "conditional loop",
  63. .insns = {
  64. BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
  65. BPF_MOV64_REG(BPF_REG_2, BPF_REG_0),
  66. BPF_MOV64_REG(BPF_REG_3, BPF_REG_0),
  67. BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 0, -3),
  68. BPF_EXIT_INSN(),
  69. },
  70. .errstr = "infinite loop detected",
  71. .errstr_unpriv = "back-edge",
  72. .result = REJECT,
  73. },