On Sat, Feb 29, 2020 at 2:23 AM Patricia Alfonso trishalfonso@google.com wrote:
On Thu, Feb 27, 2020 at 3:44 AM 'Patricia Alfonso' via kasan-dev kasan-dev@googlegroups.com wrote:
Integrate KASAN into KUnit testing framework.
- Fail tests when KASAN reports an error that is not expected
- Use KUNIT_EXPECT_KASAN_FAIL to expect a KASAN error in KASAN tests
- KUnit struct added to current task to keep track of the current test
from KASAN code
- Booleans representing if a KASAN report is expected and if a KASAN
report is found added to kunit struct
- This prints "line# has passed" or "line# has failed"
Signed-off-by: Patricia Alfonso trishalfonso@google.com
If anyone has any suggestions on how best to print the failure messages, please share!
One issue I have found while testing this is the allocation fails in kmalloc_pagealloc_oob_right() sometimes, but not consistently. This does cause the test to fail on the KUnit side, as expected, but it seems to skip all the tests before this one because the output starts with this failure instead of with the first test, kmalloc_oob_right().
I don't follow this... we don't check output in any way, so how does output affect execution?...
I'm sorry. I think I was just reading the results wrong before - no wonder I was confused!
I just recreated the error and it does work as expected.
--- a/tools/testing/kunit/kunit_kernel.py +++ b/tools/testing/kunit/kunit_kernel.py @@ -141,7 +141,7 @@ class LinuxSourceTree(object): return True
def run_kernel(self, args=[], timeout=None, build_dir=''):
args.extend(['mem=256M'])
args.extend(['mem=256M', 'kasan_multi_shot'])
This is better done somewhere else (different default value if KASAN_TEST is enabled or something). Or overridden in the KASAN tests. Not everybody uses tools/testing/kunit/kunit_kernel.py and this seems to be a mandatory part now. This means people will always hit this, be confused, figure out they need to flip the value, and only then be able to run kunit+kasan.
I agree. Is the best way to do this with "bool multishot = kasan_save_enable_multi_shot();" and "kasan_restore_multi_shot(multishot);" inside test_kasan.c like what was done in the tests before?
This will fix KASAN tests, but not non-KASAN tests running under KUNIT and triggering KASAN reports. You set kasan_multi_shot for all KUNIT tests. I am reading this as that we don't want to abort on the first test that triggered a KASAN report. Or not?