linux/tools/testing
Amery Hung b99f27e902 selftests/bpf: Fix stdout race condition in traffic monitor
Fix a race condition between the main test_progs thread and the traffic
monitoring thread. The traffic monitor thread tries to print a line
using multiple printf and use flockfile() to prevent the line from being
torn apart. Meanwhile, the main thread doing io redirection can reassign
or close stdout when going through tests. A deadlock as shown below can
happen.

       main                      traffic_monitor_thread
       ====                      ======================
                                 show_transport()
                                 -> flockfile(stdout)

stdio_hijack_init()
-> stdout = open_memstream(log_buf, log_cnt);
   ...
   env.subtest_state->stdout_saved = stdout;

                                    ...
                                    funlockfile(stdout)
stdio_restore_cleanup()
-> fclose(env.subtest_state->stdout_saved);

After the traffic monitor thread lock stdout, A new memstream can be
assigned to stdout by the main thread. Therefore, the traffic monitor
thread later will not be able to unlock the original stdout. As the
main thread tries to access the old stdout, it will hang indefinitely
as it is still locked by the traffic monitor thread.

The deadlock can be reproduced by running test_progs repeatedly with
traffic monitor enabled:

for ((i=1;i<=100;i++)); do
  ./test_progs -a flow_dissector_skb* -m '*'
done

Fix this by only calling printf once and remove flockfile()/funlockfile().

Signed-off-by: Amery Hung <ameryhung@gmail.com>
Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
Link: https://patch.msgid.link/20250213233217.553258-1-ameryhung@gmail.com
2025-02-13 17:06:25 -08:00
..
crypto/chacha20-s390
cxl cxl changes for v6.14 2025-01-29 11:23:22 -08:00
fault-injection
ktest ktest.pl: Fix typo "accesing" 2024-12-18 16:51:50 -05:00
kunit The various patchsets are summarized below. Plus of course many 2025-01-26 18:36:23 -08:00
memblock memblock: updates for 6.12-rc1 2024-09-25 11:35:19 -07:00
nvdimm Get rid of 'remove_new' relic from platform driver struct 2024-12-01 15:12:43 -08:00
radix-tree Xarray: do not return sibling entries from xas_find_marked() 2025-01-24 22:47:27 -08:00
scatterlist
selftests selftests/bpf: Fix stdout race condition in traffic monitor 2025-02-13 17:06:25 -08:00
shared tools: fix atomic_set() definition to set the value correctly 2025-01-12 19:03:35 -08:00
vma tools: add VM_WARN_ON_VMG definition 2025-01-25 20:22:46 -08:00
vsock vsock/test: Add test for connect() retries 2025-01-29 18:50:37 -08:00