@@ -275,7 +275,6 @@ static inline int match_net_rules(int type, int protocol, u32 eventID) {
275
275
if (!inner ) {
276
276
return 0 ;
277
277
}
278
-
279
278
u32 zero = 0 ;
280
279
bufs_k * z = bpf_map_lookup_elem (& bufk , & zero );
281
280
if (z == NULL )
@@ -312,11 +311,8 @@ static inline int match_net_rules(int type, int protocol, u32 eventID) {
312
311
fromSourceCheck = false;
313
312
314
313
void * ptr = & src_buf -> buf [* src_offset ];
315
-
316
- if (fromSourceCheck ) {
317
- bpf_probe_read_str (p -> source , MAX_STRING_SIZE , ptr );
318
-
319
- if (type == SOCK_STREAM && (protocol == IPPROTO_TCP || protocol == 0 )) {
314
+
315
+ if (type == SOCK_STREAM && (protocol == IPPROTO_TCP || protocol == 0 )) {
320
316
p0 = sock_proto ;
321
317
p1 = IPPROTO_TCP ;
322
318
} else if (type == SOCK_DGRAM &&
@@ -335,23 +331,22 @@ static inline int match_net_rules(int type, int protocol, u32 eventID) {
335
331
p1 = protocol ;
336
332
}
337
333
334
+ if (fromSourceCheck ) {
335
+ bpf_probe_read_str (p -> source , MAX_STRING_SIZE , ptr );
338
336
p -> path [0 ] = p0 ;
339
337
p -> path [1 ] = p1 ;
340
-
338
+ bpf_probe_read_str ( store -> source , MAX_STRING_SIZE , p -> source );
341
339
val = bpf_map_lookup_elem (inner , p );
342
-
343
340
if (val ) {
344
341
match = true;
345
342
goto decision ;
346
343
}
347
-
348
- val = bpf_map_lookup_elem (inner , p );
349
344
}
345
+ // check for rules without fromSource
350
346
bpf_map_update_elem (& bufk , & one , z , BPF_ANY );
351
-
352
347
p -> path [0 ] = p0 ;
353
348
p -> path [1 ] = p1 ;
354
-
349
+
355
350
val = bpf_map_lookup_elem (inner , p );
356
351
357
352
if (val ) {
@@ -361,17 +356,20 @@ static inline int match_net_rules(int type, int protocol, u32 eventID) {
361
356
362
357
decision :
363
358
359
+ bpf_probe_read_str (store -> path , MAX_STRING_SIZE , p -> path );
364
360
if (match ) {
365
361
if (val && (val -> processmask & RULE_DENY )) {
366
362
retval = - EPERM ;
367
363
goto ringbuf ;
368
364
}
369
365
}
370
366
371
- bpf_map_update_elem (& bufk , & one , z , BPF_ANY );
372
- p -> path [0 ] = dnet ;
367
+ bpf_map_update_elem (& bufk , & one , z , BPF_ANY );
368
+ p -> path [0 ] = dnet ;
369
+
373
370
struct data_t * allow = bpf_map_lookup_elem (inner , p );
374
371
372
+
375
373
if (allow ) {
376
374
if (!match ) {
377
375
if (allow -> processmask == BLOCK_POSTURE ) {
@@ -393,8 +391,8 @@ static inline int match_net_rules(int type, int protocol, u32 eventID) {
393
391
__builtin_memset (task_info -> data .source , 0 , sizeof (task_info -> data .source ));
394
392
395
393
init_context (task_info );
396
- bpf_probe_read_str (& task_info -> data .path , MAX_STRING_SIZE , p -> path );
397
- bpf_probe_read_str (& task_info -> data .source , MAX_STRING_SIZE , p -> source );
394
+ bpf_probe_read_str (& task_info -> data .path , MAX_STRING_SIZE , store -> path );
395
+ bpf_probe_read_str (& task_info -> data .source , MAX_STRING_SIZE , store -> source );
398
396
399
397
task_info -> event_id = eventID ;
400
398
0 commit comments