• Daniel Latypov's avatar
    kunit: tool: fix unintentional statefulness in run_kernel() · 7af29141
    Daniel Latypov authored
    This is a bug that has been present since the first version of this
    code.
    Using [] as a default parameter is dangerous, since it's mutable.
    
    Example using the REPL:
    >>> def bad(param = []):
    ...     param.append(len(param))
    ...     print(param)
    ...
    >>> bad()
    [0]
    >>> bad()
    [0, 1]
    
    This wasn't a concern in the past since it would just keep appending the
    same values to it.
    
    E.g. before, `args` would just grow in size like:
      [mem=1G', 'console=tty']
      [mem=1G', 'console=tty', mem=1G', 'console=tty']
    
    But with now filter_glob, this is more dangerous, e.g.
      run_kernel(filter_glob='my-test*') # default modified here
      run_kernel()			     # filter_glob still applies here!
    That earlier `filter_glob` will affect all subsequent calls that don't
    specify `args`.
    
    Note: currently the kunit tool only calls run_kernel() at most once, so
    it's not possible to trigger any negative side-effects right now.
    
    Fixes: 6ebf5866 ("kunit: tool: add Python wrappers for running KUnit tests")
    Signed-off-by: default avatarDaniel Latypov <dlatypov@google.com>
    Reviewed-by: default avatarBrendan Higgins <brendanhiggins@google.com>
    Signed-off-by: default avatarShuah Khan <skhan@linuxfoundation.org>
    7af29141
kunit_kernel.py 6.98 KB