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 ---