On Mon, Dec 09, 2024 at 10:57:28PM +0800, Kuan-Wei Chiu wrote:
The comparison function cmpworker() does not comply with the C standard's requirements for qsort() comparison functions. Specifically, it returns 0 when w1->tid < w2->tid, which is incorrect. According to the standard, the function must return a negative value in such cases to preserve proper ordering.
This violation causes undefined behavior, potentially leading to issues such as memory corruption in certain versions of glibc [1].
Fix the issue by returning -1 when w1->tid < w2->tid, ensuring compliance with the C standard and preventing undefined behavior.
I reviewed my commit message again and thought it might be clearer to explicitly mention, as in the previous patch, that the issue stems from violating symmetry and transitivity. The current cmpworker() can result in x > y but y = x, leading to undefined behavior. I'll wait for review comments before updating the patch description.
Regards, Kuan-Wei