Add a new field, "prog_flags", and an initial flag value BPF_F_STRICT_ALIGNMENT. When set, the verifier will enforce strict pointer alignment regardless of the setting of CONFIG_EFFICIENT_UNALIGNED_ACCESS. The verifier, in this mode, will also use a fixed value of "2" in place of NET_IP_ALIGN. This facilitates test cases that will exercise and validate this part of the verifier even when run on architectures where alignment doesn't matter.
Showing the changes to include/uapi (1 of 6 files). Show all
Unified · Split
| @@ -132,6 +132,13 @@ enum bpf_attach_type { · 131 unmodified lines | ||
| 132 | 132 | */ |
| 133 | 133 | #define BPF_F_ALLOW_OVERRIDE (1U << 0) |
| 134 | 134 | |
| 135 | +/* If BPF_F_STRICT_ALIGNMENT is used in BPF_PROG_LOAD command, the | |
| 136 | + * verifier will perform strict alignment checking as if the kernel | |
| 137 | + * has been built with CONFIG_EFFICIENT_UNALIGNED_ACCESS not set, | |
| 138 | + * and NET_IP_ALIGN defined to 2. | |
| 139 | + */ | |
| 140 | +#define BPF_F_STRICT_ALIGNMENT (1U << 0) | |
| 141 | + | |
| 135 | 142 | #define BPF_PSEUDO_MAP_FD 1 |
| 136 | 143 | |
| 137 | 144 | /* flags for BPF_MAP_UPDATE_ELEM command */ |
| @@ -177,6 +184,7 @@ union bpf_attr { · 39 unmodified lines | ||
| 177 | 184 | __u32 log_size; /* size of user buffer */ |
| 178 | 185 | __aligned_u64 log_buf; /* user supplied buffer */ |
| 179 | 186 | __u32 kern_version; /* checked when prog_type=kprobe */ |
| 187 | + __u32 prog_flags; | |
| 180 | 188 | }; |
| 181 | 189 | |
| 182 | 190 | struct { /* anonymous struct used by BPF_OBJ_* commands */ |