Hi, > > The main changes in this series are to refactor shared tracing and assertion > > helpers into a common file, unify both pkey selftests on pkey_assert() and > > per-test tracing for consistent diagnostics, and add missing mmap() return > > checks with MAP_FAILED used throughout for readability and consistency. > > Thanks, I've updated mm.git to this version. > > > v10: > > - Add patch 6/6 to fix a pre-existing cleartid race: remove unused > > settid/cleartid clone flags and wait for the clone child to exit in > > the sigsegv test. > > Below is how v10 altered mm.git. As you mentioned, this is all from > the addition of [patch 6/6]. > > btw, I thought the official way to wait for a child thread to exit is > pthread_join()? Why is that sched_yield() loop used?
Thanks a lot for your question. As I understand it, the primary reason is pthread_create automatically enables rseq on all threads, which corrupts the isolated pkey signal handling kernel context this selftest is designed to exercise. We use raw clone_raw explicitly to avoid rseq interference as noted in the code comment. Besides, pthread_join cannot work here. Since the thread is created via raw clone instead of pthread_create, it is not tracked by libpthread at all, so invoking pthread_join with its TID will return EINVAL. Best regards, Hongfu

