I just checked the code - see aa.py do_logprof_pass(). Shortened quote
(comments removed):
log_reader = apparmor.logparser.ReadLog(pid, filename, existing_profiles,
profile_dir, log)
log = log_reader.read_log(logmark)
for root in log:
handle_children('', '', root)
for pid in sorted(profile_changes.keys()):
set_process(pid, profile_changes[pid])
collapse_log()
So it seems first the full log is read, then handle_children processes
the log entries, set_process() changes the profiles of running processes
(if they have null-XY subprofiles) and finally collapse_log() is called.
handle_children() loops over all log events, so it should be easy to
change it to get one call per log entry.
handle_children() changes profile_changes at various places, so integrating
set_process() causes some work. The solution is probably to change all
"profile_changes[pid] = ..." to call a helper function that
- checks if profile_changes[pid] is already set and, if it is, is identical to
the new value
- if there is a real change, call set_process() for that pid
- and of course include profile_changes[pid] = ...
After that, integrating collapse_log() shouldn't be too hard.
With this change, only events that cause questions for profile changes
will be kept in memory.
** Changed in: apparmor
Status: Incomplete => Triaged
--
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/387657
Title:
aa-logprof: doesn't handle large logs
To manage notifications about this bug go to:
https://bugs.launchpad.net/apparmor/+bug/387657/+subscriptions
--
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs