core.c (1724c7c0c9494dcbdd7f630f29e1e8427cb231d1) | core.c (6bdc9c4c31c81688e19cb186d49be01bbb6a1618) |
---|---|
1/* 2 * Linux Socket Filter - Kernel level socket filtering 3 * 4 * Based on the design of the Berkeley Packet Filter. The new 5 * internal format has been designed by PLUMgrid: 6 * 7 * Copyright (c) 2011 - 2014 PLUMgrid, http://plumgrid.com 8 * --- 581 unchanged lines hidden (view full) --- 590 *to++ = BPF_ALU64_IMM(BPF_MOV, BPF_REG_AX, imm_rnd ^ from->imm); 591 *to++ = BPF_ALU64_IMM(BPF_XOR, BPF_REG_AX, imm_rnd); 592 *to++ = BPF_ALU64_REG(from->code, from->dst_reg, BPF_REG_AX); 593 break; 594 595 case BPF_JMP | BPF_JEQ | BPF_K: 596 case BPF_JMP | BPF_JNE | BPF_K: 597 case BPF_JMP | BPF_JGT | BPF_K: | 1/* 2 * Linux Socket Filter - Kernel level socket filtering 3 * 4 * Based on the design of the Berkeley Packet Filter. The new 5 * internal format has been designed by PLUMgrid: 6 * 7 * Copyright (c) 2011 - 2014 PLUMgrid, http://plumgrid.com 8 * --- 581 unchanged lines hidden (view full) --- 590 *to++ = BPF_ALU64_IMM(BPF_MOV, BPF_REG_AX, imm_rnd ^ from->imm); 591 *to++ = BPF_ALU64_IMM(BPF_XOR, BPF_REG_AX, imm_rnd); 592 *to++ = BPF_ALU64_REG(from->code, from->dst_reg, BPF_REG_AX); 593 break; 594 595 case BPF_JMP | BPF_JEQ | BPF_K: 596 case BPF_JMP | BPF_JNE | BPF_K: 597 case BPF_JMP | BPF_JGT | BPF_K: |
598 case BPF_JMP | BPF_JLT | BPF_K: |
|
598 case BPF_JMP | BPF_JGE | BPF_K: | 599 case BPF_JMP | BPF_JGE | BPF_K: |
600 case BPF_JMP | BPF_JLE | BPF_K: |
|
599 case BPF_JMP | BPF_JSGT | BPF_K: | 601 case BPF_JMP | BPF_JSGT | BPF_K: |
602 case BPF_JMP | BPF_JSLT | BPF_K: |
|
600 case BPF_JMP | BPF_JSGE | BPF_K: | 603 case BPF_JMP | BPF_JSGE | BPF_K: |
604 case BPF_JMP | BPF_JSLE | BPF_K: |
|
601 case BPF_JMP | BPF_JSET | BPF_K: 602 /* Accommodate for extra offset in case of a backjump. */ 603 off = from->off; 604 if (off < 0) 605 off -= 2; 606 *to++ = BPF_ALU64_IMM(BPF_MOV, BPF_REG_AX, imm_rnd ^ from->imm); 607 *to++ = BPF_ALU64_IMM(BPF_XOR, BPF_REG_AX, imm_rnd); 608 *to++ = BPF_JMP_REG(from->code, from->dst_reg, BPF_REG_AX, off); --- 219 unchanged lines hidden (view full) --- 828 /* Jumps */ 829 [BPF_JMP | BPF_JA] = &&JMP_JA, 830 [BPF_JMP | BPF_JEQ | BPF_X] = &&JMP_JEQ_X, 831 [BPF_JMP | BPF_JEQ | BPF_K] = &&JMP_JEQ_K, 832 [BPF_JMP | BPF_JNE | BPF_X] = &&JMP_JNE_X, 833 [BPF_JMP | BPF_JNE | BPF_K] = &&JMP_JNE_K, 834 [BPF_JMP | BPF_JGT | BPF_X] = &&JMP_JGT_X, 835 [BPF_JMP | BPF_JGT | BPF_K] = &&JMP_JGT_K, | 605 case BPF_JMP | BPF_JSET | BPF_K: 606 /* Accommodate for extra offset in case of a backjump. */ 607 off = from->off; 608 if (off < 0) 609 off -= 2; 610 *to++ = BPF_ALU64_IMM(BPF_MOV, BPF_REG_AX, imm_rnd ^ from->imm); 611 *to++ = BPF_ALU64_IMM(BPF_XOR, BPF_REG_AX, imm_rnd); 612 *to++ = BPF_JMP_REG(from->code, from->dst_reg, BPF_REG_AX, off); --- 219 unchanged lines hidden (view full) --- 832 /* Jumps */ 833 [BPF_JMP | BPF_JA] = &&JMP_JA, 834 [BPF_JMP | BPF_JEQ | BPF_X] = &&JMP_JEQ_X, 835 [BPF_JMP | BPF_JEQ | BPF_K] = &&JMP_JEQ_K, 836 [BPF_JMP | BPF_JNE | BPF_X] = &&JMP_JNE_X, 837 [BPF_JMP | BPF_JNE | BPF_K] = &&JMP_JNE_K, 838 [BPF_JMP | BPF_JGT | BPF_X] = &&JMP_JGT_X, 839 [BPF_JMP | BPF_JGT | BPF_K] = &&JMP_JGT_K, |
840 [BPF_JMP | BPF_JLT | BPF_X] = &&JMP_JLT_X, 841 [BPF_JMP | BPF_JLT | BPF_K] = &&JMP_JLT_K, |
|
836 [BPF_JMP | BPF_JGE | BPF_X] = &&JMP_JGE_X, 837 [BPF_JMP | BPF_JGE | BPF_K] = &&JMP_JGE_K, | 842 [BPF_JMP | BPF_JGE | BPF_X] = &&JMP_JGE_X, 843 [BPF_JMP | BPF_JGE | BPF_K] = &&JMP_JGE_K, |
844 [BPF_JMP | BPF_JLE | BPF_X] = &&JMP_JLE_X, 845 [BPF_JMP | BPF_JLE | BPF_K] = &&JMP_JLE_K, |
|
838 [BPF_JMP | BPF_JSGT | BPF_X] = &&JMP_JSGT_X, 839 [BPF_JMP | BPF_JSGT | BPF_K] = &&JMP_JSGT_K, | 846 [BPF_JMP | BPF_JSGT | BPF_X] = &&JMP_JSGT_X, 847 [BPF_JMP | BPF_JSGT | BPF_K] = &&JMP_JSGT_K, |
848 [BPF_JMP | BPF_JSLT | BPF_X] = &&JMP_JSLT_X, 849 [BPF_JMP | BPF_JSLT | BPF_K] = &&JMP_JSLT_K, |
|
840 [BPF_JMP | BPF_JSGE | BPF_X] = &&JMP_JSGE_X, 841 [BPF_JMP | BPF_JSGE | BPF_K] = &&JMP_JSGE_K, | 850 [BPF_JMP | BPF_JSGE | BPF_X] = &&JMP_JSGE_X, 851 [BPF_JMP | BPF_JSGE | BPF_K] = &&JMP_JSGE_K, |
852 [BPF_JMP | BPF_JSLE | BPF_X] = &&JMP_JSLE_X, 853 [BPF_JMP | BPF_JSLE | BPF_K] = &&JMP_JSLE_K, |
|
842 [BPF_JMP | BPF_JSET | BPF_X] = &&JMP_JSET_X, 843 [BPF_JMP | BPF_JSET | BPF_K] = &&JMP_JSET_K, 844 /* Program return */ 845 [BPF_JMP | BPF_EXIT] = &&JMP_EXIT, 846 /* Store instructions */ 847 [BPF_STX | BPF_MEM | BPF_B] = &&STX_MEM_B, 848 [BPF_STX | BPF_MEM | BPF_H] = &&STX_MEM_H, 849 [BPF_STX | BPF_MEM | BPF_W] = &&STX_MEM_W, --- 218 unchanged lines hidden (view full) --- 1068 } 1069 CONT; 1070 JMP_JGT_K: 1071 if (DST > IMM) { 1072 insn += insn->off; 1073 CONT_JMP; 1074 } 1075 CONT; | 854 [BPF_JMP | BPF_JSET | BPF_X] = &&JMP_JSET_X, 855 [BPF_JMP | BPF_JSET | BPF_K] = &&JMP_JSET_K, 856 /* Program return */ 857 [BPF_JMP | BPF_EXIT] = &&JMP_EXIT, 858 /* Store instructions */ 859 [BPF_STX | BPF_MEM | BPF_B] = &&STX_MEM_B, 860 [BPF_STX | BPF_MEM | BPF_H] = &&STX_MEM_H, 861 [BPF_STX | BPF_MEM | BPF_W] = &&STX_MEM_W, --- 218 unchanged lines hidden (view full) --- 1080 } 1081 CONT; 1082 JMP_JGT_K: 1083 if (DST > IMM) { 1084 insn += insn->off; 1085 CONT_JMP; 1086 } 1087 CONT; |
1088 JMP_JLT_X: 1089 if (DST < SRC) { 1090 insn += insn->off; 1091 CONT_JMP; 1092 } 1093 CONT; 1094 JMP_JLT_K: 1095 if (DST < IMM) { 1096 insn += insn->off; 1097 CONT_JMP; 1098 } 1099 CONT; |
|
1076 JMP_JGE_X: 1077 if (DST >= SRC) { 1078 insn += insn->off; 1079 CONT_JMP; 1080 } 1081 CONT; 1082 JMP_JGE_K: 1083 if (DST >= IMM) { 1084 insn += insn->off; 1085 CONT_JMP; 1086 } 1087 CONT; | 1100 JMP_JGE_X: 1101 if (DST >= SRC) { 1102 insn += insn->off; 1103 CONT_JMP; 1104 } 1105 CONT; 1106 JMP_JGE_K: 1107 if (DST >= IMM) { 1108 insn += insn->off; 1109 CONT_JMP; 1110 } 1111 CONT; |
1112 JMP_JLE_X: 1113 if (DST <= SRC) { 1114 insn += insn->off; 1115 CONT_JMP; 1116 } 1117 CONT; 1118 JMP_JLE_K: 1119 if (DST <= IMM) { 1120 insn += insn->off; 1121 CONT_JMP; 1122 } 1123 CONT; |
|
1088 JMP_JSGT_X: 1089 if (((s64) DST) > ((s64) SRC)) { 1090 insn += insn->off; 1091 CONT_JMP; 1092 } 1093 CONT; 1094 JMP_JSGT_K: 1095 if (((s64) DST) > ((s64) IMM)) { 1096 insn += insn->off; 1097 CONT_JMP; 1098 } 1099 CONT; | 1124 JMP_JSGT_X: 1125 if (((s64) DST) > ((s64) SRC)) { 1126 insn += insn->off; 1127 CONT_JMP; 1128 } 1129 CONT; 1130 JMP_JSGT_K: 1131 if (((s64) DST) > ((s64) IMM)) { 1132 insn += insn->off; 1133 CONT_JMP; 1134 } 1135 CONT; |
1136 JMP_JSLT_X: 1137 if (((s64) DST) < ((s64) SRC)) { 1138 insn += insn->off; 1139 CONT_JMP; 1140 } 1141 CONT; 1142 JMP_JSLT_K: 1143 if (((s64) DST) < ((s64) IMM)) { 1144 insn += insn->off; 1145 CONT_JMP; 1146 } 1147 CONT; |
|
1100 JMP_JSGE_X: 1101 if (((s64) DST) >= ((s64) SRC)) { 1102 insn += insn->off; 1103 CONT_JMP; 1104 } 1105 CONT; 1106 JMP_JSGE_K: 1107 if (((s64) DST) >= ((s64) IMM)) { 1108 insn += insn->off; 1109 CONT_JMP; 1110 } 1111 CONT; | 1148 JMP_JSGE_X: 1149 if (((s64) DST) >= ((s64) SRC)) { 1150 insn += insn->off; 1151 CONT_JMP; 1152 } 1153 CONT; 1154 JMP_JSGE_K: 1155 if (((s64) DST) >= ((s64) IMM)) { 1156 insn += insn->off; 1157 CONT_JMP; 1158 } 1159 CONT; |
1160 JMP_JSLE_X: 1161 if (((s64) DST) <= ((s64) SRC)) { 1162 insn += insn->off; 1163 CONT_JMP; 1164 } 1165 CONT; 1166 JMP_JSLE_K: 1167 if (((s64) DST) <= ((s64) IMM)) { 1168 insn += insn->off; 1169 CONT_JMP; 1170 } 1171 CONT; |
|
1112 JMP_JSET_X: 1113 if (DST & SRC) { 1114 insn += insn->off; 1115 CONT_JMP; 1116 } 1117 CONT; 1118 JMP_JSET_K: 1119 if (DST & IMM) { --- 253 unchanged lines hidden (view full) --- 1373const struct bpf_func_proto bpf_get_prandom_u32_proto __weak; 1374const struct bpf_func_proto bpf_get_smp_processor_id_proto __weak; 1375const struct bpf_func_proto bpf_get_numa_node_id_proto __weak; 1376const struct bpf_func_proto bpf_ktime_get_ns_proto __weak; 1377 1378const struct bpf_func_proto bpf_get_current_pid_tgid_proto __weak; 1379const struct bpf_func_proto bpf_get_current_uid_gid_proto __weak; 1380const struct bpf_func_proto bpf_get_current_comm_proto __weak; | 1172 JMP_JSET_X: 1173 if (DST & SRC) { 1174 insn += insn->off; 1175 CONT_JMP; 1176 } 1177 CONT; 1178 JMP_JSET_K: 1179 if (DST & IMM) { --- 253 unchanged lines hidden (view full) --- 1433const struct bpf_func_proto bpf_get_prandom_u32_proto __weak; 1434const struct bpf_func_proto bpf_get_smp_processor_id_proto __weak; 1435const struct bpf_func_proto bpf_get_numa_node_id_proto __weak; 1436const struct bpf_func_proto bpf_ktime_get_ns_proto __weak; 1437 1438const struct bpf_func_proto bpf_get_current_pid_tgid_proto __weak; 1439const struct bpf_func_proto bpf_get_current_uid_gid_proto __weak; 1440const struct bpf_func_proto bpf_get_current_comm_proto __weak; |
1441const struct bpf_func_proto bpf_sock_map_update_proto __weak; |
|
1381 1382const struct bpf_func_proto * __weak bpf_get_trace_printk_proto(void) 1383{ 1384 return NULL; 1385} 1386 1387u64 __weak 1388bpf_event_output(struct bpf_map *map, u64 flags, void *meta, u64 meta_size, --- 53 unchanged lines hidden --- | 1442 1443const struct bpf_func_proto * __weak bpf_get_trace_printk_proto(void) 1444{ 1445 return NULL; 1446} 1447 1448u64 __weak 1449bpf_event_output(struct bpf_map *map, u64 flags, void *meta, u64 meta_size, --- 53 unchanged lines hidden --- |