dead_code.c 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. {
  2. "dead code: start",
  3. .insns = {
  4. BPF_JMP_IMM(BPF_JA, 0, 0, 2),
  5. BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0),
  6. BPF_JMP_IMM(BPF_JA, 0, 0, 2),
  7. BPF_MOV64_IMM(BPF_REG_0, 7),
  8. BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 10, -4),
  9. BPF_EXIT_INSN(),
  10. },
  11. .errstr_unpriv = "R9 !read_ok",
  12. .result_unpriv = REJECT,
  13. .result = ACCEPT,
  14. .retval = 7,
  15. },
  16. {
  17. "dead code: mid 1",
  18. .insns = {
  19. BPF_MOV64_IMM(BPF_REG_0, 7),
  20. BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 0, 1),
  21. BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 10, 0),
  22. BPF_EXIT_INSN(),
  23. },
  24. .result = ACCEPT,
  25. .retval = 7,
  26. },
  27. {
  28. "dead code: mid 2",
  29. .insns = {
  30. BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_prandom_u32),
  31. BPF_JMP_IMM(BPF_JSET, BPF_REG_0, 1, 4),
  32. BPF_JMP_IMM(BPF_JSET, BPF_REG_0, 1, 1),
  33. BPF_JMP_IMM(BPF_JA, 0, 0, 2),
  34. BPF_MOV64_IMM(BPF_REG_0, 7),
  35. BPF_EXIT_INSN(),
  36. BPF_MOV64_IMM(BPF_REG_0, 1),
  37. BPF_EXIT_INSN(),
  38. },
  39. .result = ACCEPT,
  40. .retval = 1,
  41. },
  42. {
  43. "dead code: end 1",
  44. .insns = {
  45. BPF_MOV64_IMM(BPF_REG_0, 7),
  46. BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 10, 1),
  47. BPF_EXIT_INSN(),
  48. BPF_EXIT_INSN(),
  49. },
  50. .result = ACCEPT,
  51. .retval = 7,
  52. },
  53. {
  54. "dead code: end 2",
  55. .insns = {
  56. BPF_MOV64_IMM(BPF_REG_0, 7),
  57. BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 10, 1),
  58. BPF_EXIT_INSN(),
  59. BPF_MOV64_IMM(BPF_REG_0, 12),
  60. BPF_EXIT_INSN(),
  61. },
  62. .result = ACCEPT,
  63. .retval = 7,
  64. },
  65. {
  66. "dead code: end 3",
  67. .insns = {
  68. BPF_MOV64_IMM(BPF_REG_0, 7),
  69. BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 8, 1),
  70. BPF_EXIT_INSN(),
  71. BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 10, 1),
  72. BPF_JMP_IMM(BPF_JA, 0, 0, 1),
  73. BPF_MOV64_IMM(BPF_REG_0, 12),
  74. BPF_JMP_IMM(BPF_JA, 0, 0, -5),
  75. },
  76. .result = ACCEPT,
  77. .retval = 7,
  78. },
  79. {
  80. "dead code: tail of main + func",
  81. .insns = {
  82. BPF_MOV64_IMM(BPF_REG_0, 7),
  83. BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 8, 1),
  84. BPF_EXIT_INSN(),
  85. BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 1),
  86. BPF_EXIT_INSN(),
  87. BPF_MOV64_IMM(BPF_REG_0, 12),
  88. BPF_EXIT_INSN(),
  89. },
  90. .errstr_unpriv = "loading/calling other bpf or kernel functions are allowed for",
  91. .result_unpriv = REJECT,
  92. .result = ACCEPT,
  93. .retval = 7,
  94. },
  95. {
  96. "dead code: tail of main + two functions",
  97. .insns = {
  98. BPF_MOV64_IMM(BPF_REG_0, 7),
  99. BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 8, 1),
  100. BPF_EXIT_INSN(),
  101. BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 1),
  102. BPF_EXIT_INSN(),
  103. BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 1),
  104. BPF_EXIT_INSN(),
  105. BPF_MOV64_IMM(BPF_REG_0, 12),
  106. BPF_EXIT_INSN(),
  107. },
  108. .errstr_unpriv = "loading/calling other bpf or kernel functions are allowed for",
  109. .result_unpriv = REJECT,
  110. .result = ACCEPT,
  111. .retval = 7,
  112. },
  113. {
  114. "dead code: function in the middle and mid of another func",
  115. .insns = {
  116. BPF_MOV64_IMM(BPF_REG_1, 7),
  117. BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 3),
  118. BPF_EXIT_INSN(),
  119. BPF_MOV64_IMM(BPF_REG_0, 12),
  120. BPF_EXIT_INSN(),
  121. BPF_MOV64_IMM(BPF_REG_0, 7),
  122. BPF_JMP_IMM(BPF_JGE, BPF_REG_1, 7, 1),
  123. BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, -5),
  124. BPF_EXIT_INSN(),
  125. },
  126. .errstr_unpriv = "loading/calling other bpf or kernel functions are allowed for",
  127. .result_unpriv = REJECT,
  128. .result = ACCEPT,
  129. .retval = 7,
  130. },
  131. {
  132. "dead code: middle of main before call",
  133. .insns = {
  134. BPF_MOV64_IMM(BPF_REG_1, 2),
  135. BPF_JMP_IMM(BPF_JGE, BPF_REG_1, 2, 1),
  136. BPF_MOV64_IMM(BPF_REG_1, 5),
  137. BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 1),
  138. BPF_EXIT_INSN(),
  139. BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
  140. BPF_EXIT_INSN(),
  141. },
  142. .errstr_unpriv = "loading/calling other bpf or kernel functions are allowed for",
  143. .result_unpriv = REJECT,
  144. .result = ACCEPT,
  145. .retval = 2,
  146. },
  147. {
  148. "dead code: start of a function",
  149. .insns = {
  150. BPF_MOV64_IMM(BPF_REG_1, 2),
  151. BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 1),
  152. BPF_EXIT_INSN(),
  153. BPF_JMP_IMM(BPF_JA, 0, 0, 0),
  154. BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
  155. BPF_EXIT_INSN(),
  156. },
  157. .errstr_unpriv = "loading/calling other bpf or kernel functions are allowed for",
  158. .result_unpriv = REJECT,
  159. .result = ACCEPT,
  160. .retval = 2,
  161. },
  162. {
  163. "dead code: zero extension",
  164. .insns = {
  165. BPF_MOV64_IMM(BPF_REG_0, 0),
  166. BPF_STX_MEM(BPF_W, BPF_REG_10, BPF_REG_0, -4),
  167. BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 0, 1),
  168. BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_10, -4),
  169. BPF_EXIT_INSN(),
  170. },
  171. .result = ACCEPT,
  172. .retval = 0,
  173. },