@@ -218,4 +218,29 @@ __naked void null_check_8_null_bind(void)
218
218
: __clobber_all );
219
219
}
220
220
221
+ #define narrow_load (type , ctx , field ) \
222
+ SEC(type) \
223
+ __description("narrow load on field " #field " of " #ctx) \
224
+ __failure __msg("invalid bpf_context access") \
225
+ __naked void invalid_narrow_load##ctx##field(void) \
226
+ { \
227
+ asm volatile (" \
228
+ r1 = *(u32 *)(r1 + %[off]); \
229
+ r0 = 0; \
230
+ exit;" \
231
+ : \
232
+ : __imm_const(off, offsetof(struct ctx, field) + 4) \
233
+ : __clobber_all); \
234
+ }
235
+
236
+ narrow_load ("cgroup/getsockopt" , bpf_sockopt , sk );
237
+ narrow_load ("cgroup/getsockopt" , bpf_sockopt , optval );
238
+ narrow_load ("cgroup/getsockopt" , bpf_sockopt , optval_end );
239
+ narrow_load ("tc" , __sk_buff , sk );
240
+ narrow_load ("cgroup/bind4" , bpf_sock_addr , sk );
241
+ narrow_load ("sockops" , bpf_sock_ops , sk );
242
+ narrow_load ("sockops" , bpf_sock_ops , skb_data );
243
+ narrow_load ("sockops" , bpf_sock_ops , skb_data_end );
244
+ narrow_load ("sockops" , bpf_sock_ops , skb_hwtstamp );
245
+
221
246
char _license [] SEC ("license" ) = "GPL" ;
0 commit comments