mirror of
https://gitlab.com/apparmor/apparmor
synced 2025-08-29 13:28:19 +00:00
Fix aa-logprof crash on ptrace garbage log events
(garbage) ptrace events like ... apparmor="DENIED" operation="ptrace" profile="/bin/netstat" pid=1962 comm="netstat" target="" cause an empty name2 field, which leads to a crash in the tools. This patch lets logparser.py ignore such garbage log events, which also avoids the crash. As usual, add some testcases. test-libapparmor-test_multi.py needs some special handling to ignore the empty name2 field in one of the testcases. References: https://bugs.launchpad.net/apparmor/+bug/1689667 Acked-by: Seth Arnold <seth.arnold@canonical.com> for trunk and 2.11. Older releases can't handle ptrace log events and therefore can't crash ;-)
This commit is contained in:
parent
7dce13ab4a
commit
13567b2ae0
@ -0,0 +1 @@
|
|||||||
|
type=AVC msg=audit(1494272099.261:3455): apparmor="DENIED" operation="ptrace" profile="/bin/netstat" pid=1962 comm="netstat" target=""
|
@ -0,0 +1,11 @@
|
|||||||
|
START
|
||||||
|
File: ptrace_garbage_lp1689667_1.in
|
||||||
|
Event type: AA_RECORD_DENIED
|
||||||
|
Audit ID: 1494272099.261:3455
|
||||||
|
Operation: ptrace
|
||||||
|
Profile: /bin/netstat
|
||||||
|
Command: netstat
|
||||||
|
Name2:
|
||||||
|
PID: 1962
|
||||||
|
Epoch: 1494272099
|
||||||
|
Audit subid: 3455
|
@ -0,0 +1,2 @@
|
|||||||
|
/bin/netstat {
|
||||||
|
}
|
@ -0,0 +1 @@
|
|||||||
|
type=AVC msg=audit(1494272099.261:3455): apparmor="DENIED" operation="ptrace" profile="/bin/netstat" pid=1962 comm="netstat" target=8022C0FF81A0FFFF8022C0FF81A0FFFF1080CBFF81A0FFFF1080CBFF81A0FFFF2080CBFF81A0FFFF2080CBFF81A0FFFF9E03
|
@ -0,0 +1,10 @@
|
|||||||
|
START
|
||||||
|
File: ptrace_garbage_lp1689667_2.in
|
||||||
|
Event type: AA_RECORD_INVALID
|
||||||
|
Audit ID: 1494272099.261:3455
|
||||||
|
Operation: ptrace
|
||||||
|
Profile: /bin/netstat
|
||||||
|
Command: netstat
|
||||||
|
PID: 1962
|
||||||
|
Epoch: 1494272099
|
||||||
|
Audit subid: 3455
|
@ -338,6 +338,10 @@ class ReadLog:
|
|||||||
return(e['pid'], e['parent'], 'unknown_hat',
|
return(e['pid'], e['parent'], 'unknown_hat',
|
||||||
[profile, hat, aamode, hat])
|
[profile, hat, aamode, hat])
|
||||||
elif e['operation'] == 'ptrace':
|
elif e['operation'] == 'ptrace':
|
||||||
|
if not e['peer']:
|
||||||
|
self.debug_logger.debug('ignored garbage ptrace event with empty peer')
|
||||||
|
return None
|
||||||
|
|
||||||
return(e['pid'], e['parent'], 'ptrace',
|
return(e['pid'], e['parent'], 'ptrace',
|
||||||
[profile, hat, prog, aamode, e['denied_mask'], e['peer']])
|
[profile, hat, prog, aamode, e['denied_mask'], e['peer']])
|
||||||
elif e['operation'] == 'signal':
|
elif e['operation'] == 'signal':
|
||||||
|
@ -66,6 +66,8 @@ class TestLibapparmorTestMulti(AATest):
|
|||||||
pass
|
pass
|
||||||
elif parsed_items['operation'] == 'exec' and label in ['sock_type', 'family', 'protocol']:
|
elif parsed_items['operation'] == 'exec' and label in ['sock_type', 'family', 'protocol']:
|
||||||
pass # XXX 'exec' + network? really?
|
pass # XXX 'exec' + network? really?
|
||||||
|
elif parsed_items['operation'] == 'ptrace' and label == 'name2' and params.endswith('/ptrace_garbage_lp1689667_1'):
|
||||||
|
pass # libapparmor would better qualify this case as invalid event
|
||||||
elif not parsed_items.get(label, None):
|
elif not parsed_items.get(label, None):
|
||||||
raise Exception('parsed_items[%s] not set' % label)
|
raise Exception('parsed_items[%s] not set' % label)
|
||||||
elif not expected.get(label, None):
|
elif not expected.get(label, None):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user