The FLAGS_HAS_TIMEOUT flag was not getting set, causing the restart_block to restart futex_wait() without a timeout after a signal. Commit b41277dc7a18ee332d in 2.6.38 introduced the regression by accidentally removing the the FLAGS_HAS_TIMEOUT assignment from futex_wait() during the setup of the restart block. Restore the originaly behavior. Fixes: https://bugzilla.kernel.org/show_bug.cgi?id=32922
Showing the changes to kernel (1 of 1 file). Show all
Unified · Split
| @@ -1886,7 +1886,7 @@ retry: · 1885 unmodified lines | ||
| 1886 | 1886 | restart->futex.val = val; |
| 1887 | 1887 | restart->futex.time = abs_time->tv64; |
| 1888 | 1888 | restart->futex.bitset = bitset; |
| 1889 | − restart->futex.flags = flags; | |
| 1889 | + restart->futex.flags = flags | FLAGS_HAS_TIMEOUT; | |
| 1890 | 1890 | |
| 1891 | 1891 | ret = -ERESTART_RESTARTBLOCK; |
| 1892 | 1892 | |