@@ -48,6 +48,32 @@ static const struct bpf_map_ops * const bpf_map_types[] = {
48
48
#undef BPF_MAP_TYPE
49
49
};
50
50
51
+ static int check_uarg_tail_zero (void __user * uaddr ,
52
+ size_t expected_size ,
53
+ size_t actual_size )
54
+ {
55
+ unsigned char __user * addr ;
56
+ unsigned char __user * end ;
57
+ unsigned char val ;
58
+ int err ;
59
+
60
+ if (actual_size <= expected_size )
61
+ return 0 ;
62
+
63
+ addr = uaddr + expected_size ;
64
+ end = uaddr + actual_size ;
65
+
66
+ for (; addr < end ; addr ++ ) {
67
+ err = get_user (val , addr );
68
+ if (err )
69
+ return err ;
70
+ if (val )
71
+ return - E2BIG ;
72
+ }
73
+
74
+ return 0 ;
75
+ }
76
+
51
77
static struct bpf_map * find_and_alloc_map (union bpf_attr * attr )
52
78
{
53
79
struct bpf_map * map ;
@@ -1246,32 +1272,6 @@ static int bpf_map_get_fd_by_id(const union bpf_attr *attr)
1246
1272
return fd ;
1247
1273
}
1248
1274
1249
- static int check_uarg_tail_zero (void __user * uaddr ,
1250
- size_t expected_size ,
1251
- size_t actual_size )
1252
- {
1253
- unsigned char __user * addr ;
1254
- unsigned char __user * end ;
1255
- unsigned char val ;
1256
- int err ;
1257
-
1258
- if (actual_size <= expected_size )
1259
- return 0 ;
1260
-
1261
- addr = uaddr + expected_size ;
1262
- end = uaddr + actual_size ;
1263
-
1264
- for (; addr < end ; addr ++ ) {
1265
- err = get_user (val , addr );
1266
- if (err )
1267
- return err ;
1268
- if (val )
1269
- return - E2BIG ;
1270
- }
1271
-
1272
- return 0 ;
1273
- }
1274
-
1275
1275
static int bpf_prog_get_info_by_fd (struct bpf_prog * prog ,
1276
1276
const union bpf_attr * attr ,
1277
1277
union bpf_attr __user * uattr )
0 commit comments