On 01/28/2017 04:23 PM, Christian Boltz wrote:
> Hello,
> 
> aa.py has a global variable "pid", but it also has several functions
> that use "pid" as a local variable name. do_logprof_pass() even uses
> both - first, it passes the global variable to ReadLog, and then it
> creates a local variable in the "for pid in ..." loop.
> 
> This patch renames the global variable to log_pid to get rid of the
> confusion.
> 
> Note that the global variable is only handed over to ReadLog, and the
> only case where its previous content _might_ be used is aa-genprof which
> does multipe do_logprof_pass() runs.
> 
> Maybe we could even get rid of this variable in aa.py and make it local
> to the ReadLog class, but I'm not sure if that would affect aa-genprof
> in interesting[tm] ways. (Feedback welcome.)
> 
> To help you to decide if keeping the variable state is needed between
> do_logprof_pass() runs, I'll paste the IRC log with all details after
> the patch.
> 
> 
Acked-by: John Johansen <john.johan...@canonical.com>

As for the question? I need to spend some more time with the code before
I can answer


> 
> [ 01-rename-global-variable-pid.diff ]
> 
> === modified file ./utils/apparmor/aa.py
> --- utils/apparmor/aa.py        2017-01-29 00:33:26.144842133 +0100
> +++ utils/apparmor/aa.py        2017-01-29 00:33:08.076936440 +0100
> @@ -105,7 +105,7 @@
>  extras = hasher()  # Inactive profiles from extras
>  ### end our
>  log = []
> -pid = dict()
> +log_pid = dict()  # handed over to ReadLog, gets filled in logparser.py. The 
> only case the previous content of this variable _might_(?) be used is 
> aa-genprof (multiple do_logprof_pass() runs)
>  
>  profile_changes = hasher()
>  prelog = hasher()
> @@ -1857,7 +1857,7 @@
>      elif os.path.isdir(logfile):
>          raise AppArmorException(_('%s is a directory. Please specify a file 
> as logfile') % logfile)
>  
> -def do_logprof_pass(logmark='', passno=0, pid=pid):
> +def do_logprof_pass(logmark='', passno=0, log_pid=log_pid):
>      # set up variables for this pass
>  #    transitions = hasher()
>      global log
> @@ -1885,7 +1885,7 @@
>      ##    if not repo_cfg['repository'].get('enabled', False) or 
> repo_cfg['repository]['enabled'] not in ['yes', 'no']:
>      ##    UI_ask_to_enable_repo()
>  
> -    log_reader = apparmor.logparser.ReadLog(pid, logfile, existing_profiles, 
> profile_dir, log)
> +    log_reader = apparmor.logparser.ReadLog(log_pid, logfile, 
> existing_profiles, profile_dir, log)
>      log = log_reader.read_log(logmark)
>      #read_log(logmark)
> 
> 
> 
> IRC log about the variable:
> 
> [23:19:31] <cboltz> for additional fun - one of the log lines manages to 
> crash my local copy of aa-logprof
> [23:19:45] <cboltz> (no need to worry, the code in bzr doesn't crash)
> [23:22:25] <cboltz> ah, found it - now I know that the "pid" variable in 
> aa.py isn't unused ;-)
> [23:27:01] <cboltz> to make things funnier, several functions in aa.py have a 
> _local_ "pid" variable that doesn't have to do anything with the global 
> variable
> [23:27:37] <cboltz> one even first uses the global one, and then locally 
> overwrites it :-/
> [23:38:27] <jjohansen> :(
> [23:38:57] <cboltz> oh, I can even top that ;-)
> [23:39:12] <cboltz> it seems the global one has exactly one usage:
> [23:39:20] <cboltz> it's handed over to logparser.py
> [23:39:30] <cboltz> but it seems nothing in aa.py cares about its content
> [23:39:36] <jjohansen> I have no doubt you can, cboltz harbinger of bugs
> [23:39:53] <cboltz> so maybe we can drop it in aa.py and simply add it in 
> logparser.py
> [23:40:16] <jjohansen> wfm
> [00:13:49] <cboltz> maybe it won't, but I'm not totally sure ;-)
> [00:14:02] <cboltz> there is one case where the variable gets used again - 
> aa-genprof
> [00:14:28] <cboltz> (every "(s)can logfile" will call logparser.py, which can 
> then see the previous variable content)
> [00:14:57] <cboltz> now the interesting question is if this is needed or not
> [00:16:09] <cboltz> I'd _guess_ it could be helpful to track long-running 
> execs to "translate" null-* to the right profile name, but I'm not really 
> sure about it
> [00:22:22] <cboltz> OTOH, we have profile_changes[] which is meant to track 
> exactly that
> [00:22:24] <cboltz> hmmm....
> [00:44:12] * cboltz wonders if he finally scared jjohansen
> [00:54:13] <jjohansen> cboltz: heh, not as bad as my son driving
> [00:54:14] <jjohansen> :)
> [00:55:48] <cboltz> ;-)
> [00:56:27] <cboltz> for the variable - for now, I'll send a patch to rename 
> it to get rid of the confusion
> [00:56:47] <cboltz> the patch description will also include the question if 
> it's needed in aa.py at all
> [00:57:30] <cboltz> I'll simply paste the IRC log into the mail so that 
> everybody can see all details ;-)
> [00:58:24] <jjohansen> hahaha
> [00:59:16] <cboltz> I wonder if I should add "sponsored by Aspirin" ;-)
> [01:03:13] <jjohansen> you could have a nice little side business if Asprin 
> was sponsoring all the bugs you find
> [01:03:35] <cboltz> little? ;-)
> [01:04:21] <jjohansen> hehehe
> 
>  
> 
> Regards,
> 
> Christian Boltz
> 
> 
> 


-- 
AppArmor mailing list
AppArmor@lists.ubuntu.com
Modify settings or unsubscribe at: 
https://lists.ubuntu.com/mailman/listinfo/apparmor

Reply via email to