• Joe Lawrence's avatar
    selftests/livepatch: better synchronize test_klp_callbacks_busy · 55eb9a6c
    Joe Lawrence authored
    The test_klp_callbacks_busy module conditionally blocks a future
    livepatch transition by busy waiting inside its workqueue function,
    busymod_work_func().  After scheduling this work, a test livepatch is
    loaded, introducing the transition under test.
    
    Both events are marked in the kernel log for later verification, but
    there is no synchronization to ensure that busymod_work_func() logs its
    function entry message before subsequent selftest commands log their own
    messages.  This can lead to a rare test failure due to unexpected
    ordering like:
    
      --- expected
      +++ result
      @@ -1,7 +1,7 @@
       % modprobe test_klp_callbacks_busy block_transition=Y
       test_klp_callbacks_busy: test_klp_callbacks_busy_init
      -test_klp_callbacks_busy: busymod_work_func enter
       % modprobe test_klp_callbacks_demo
      +test_klp_callbacks_busy: busymod_work_func enter
       livepatch: enabling patch 'test_klp_callbacks_demo'
       livepatch: 'test_klp_callbacks_demo': initializing patching transition
       test_klp_callbacks_demo: pre_patch_callback: vmlinux
    
    Force the module init function to wait until busymod_work_func() has
    started (and logged its message), before exiting to the next selftest
    steps.
    
    Fixes: 547840bd ("selftests/livepatch: simplify test-klp-callbacks busy target tests")
    Signed-off-by: default avatarJoe Lawrence <joe.lawrence@redhat.com>
    Reviewed-by: default avatarPetr Mladek <pmladek@suse.com>
    Signed-off-by: default avatarPetr Mladek <pmladek@suse.com>
    Link: https://lore.kernel.org/r/20220602203233.979681-1-joe.lawrence@redhat.com
    55eb9a6c
test_klp_callbacks_busy.c 1.74 KB