@@ -273,6 +273,7 @@ loop:
273
273
274
274
switch eventCause {
275
275
case PTRACE_EVENT_SECCOMP :
276
+ var extraInfo string = ""
276
277
allow := true
277
278
// Linux syscall convention for x86_64 arch:
278
279
// - rax: syscall number
@@ -364,37 +365,48 @@ loop:
364
365
// rsi is flags
365
366
mode := int (regs .Rdx )
366
367
allow = policyInst .CheckPathOp (path , policy .OP_OPEN , mode )
368
+ extraInfo = path
367
369
case id_Access :
368
370
pathPtr := uintptr (regs .Rdi )
369
371
path := utils .ReadString (result .pid , pathPtr )
370
372
mode := int (regs .Rsi )
371
373
allow = policyInst .CheckPathOp (path , policy .OP_ACCESS , mode )
374
+ extraInfo = path
372
375
case id_Fchmodat :
373
376
pathPtr := uintptr (regs .Rsi )
374
377
path := utils .ReadString (result .pid , pathPtr )
375
378
path = utils .GetAbsPathAs (path , result .pid )
376
379
mode := int (regs .Rdx )
377
380
allow = policyInst .CheckPathOp (path , policy .OP_CHMOD , mode )
381
+ extraInfo = path
378
382
case id_Chmod :
379
383
pathPtr := uintptr (regs .Rdi )
380
384
path := utils .ReadString (result .pid , pathPtr )
381
385
path = utils .GetAbsPathAs (path , result .pid )
382
386
mode := int (regs .Rsi )
383
387
allow = policyInst .CheckPathOp (path , policy .OP_CHMOD , mode )
388
+ extraInfo = path
384
389
default :
385
390
allow = true
386
391
}
387
392
if ! allow {
388
393
if debug || watch {
389
394
syscallName , _ := seccomp .ScmpSyscall (syscallId ).GetName ()
390
395
color .Set (color .FgRed )
391
- l .Printf ("blocked syscall %s\n " , syscallName )
396
+ if extraInfo != "" {
397
+ l .Printf ("blocked syscall %s (%s)" , syscallName , extraInfo )
398
+ } else {
399
+ l .Printf ("blocked syscall %s" , syscallName )
400
+ }
392
401
color .Unset ()
393
402
}
394
- // Skip the system call with permission error
395
- regs .Orig_rax = 0xFFFFFFFFFFFFFFFF // -1
396
- regs .Rax = 0xFFFFFFFFFFFFFFFF - uint64 (syscall .EPERM ) + 1
397
- syscall .PtraceSetRegs (result .pid , & regs )
403
+ // If we are not in the watch mode...
404
+ if ! watch {
405
+ // Block the system call with permission error
406
+ regs .Orig_rax = 0xFFFFFFFFFFFFFFFF // -1
407
+ regs .Rax = 0xFFFFFFFFFFFFFFFF - uint64 (syscall .EPERM ) + 1
408
+ syscall .PtraceSetRegs (result .pid , & regs )
409
+ }
398
410
} else {
399
411
if debug {
400
412
syscallName , _ := seccomp .ScmpSyscall (syscallId ).GetName ()
@@ -509,7 +521,9 @@ func main() {
509
521
l .Printf ("Debug mode is set." )
510
522
}
511
523
if watch {
512
- l .Printf ("Watch mode is set." )
524
+ color .Set (color .FgYellow )
525
+ l .Printf ("WATCH MODE: all syscalls are ALLOWED but it shows which ones will be blocked by the current policy." )
526
+ color .Unset ()
513
527
}
514
528
515
529
if ! childMode {
0 commit comments