Pull locking fixes from Borislav Petkov: - Make sure sanity checks down in the mutex lock path happen on the correct type of task so that they don't trigger falsely - Use the write unsafe user access pairs when writing a futex value to prevent an error on PowerPC which does user read and write accesses differently * tag 'locking_urgent_for_v6.17_rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: locking: Fix __clear_task_blocked_on() warning from __ww_mutex_wound() path futex: Use user_write_access_begin/_end() in futex_put_value()
Showing the changes to kernel (2 of 3 files). Show all
Unified · Split
| @@ -319,13 +319,13 @@ static __always_inline int futex_put_value(u32 val, u32 __user *to) · 318 unmodified lines | ||
| 319 | 319 | { |
| 320 | 320 | if (can_do_masked_user_access()) |
| 321 | 321 | to = masked_user_access_begin(to); |
| 322 | − else if (!user_read_access_begin(to, sizeof(*to))) | |
| 322 | + else if (!user_write_access_begin(to, sizeof(*to))) | |
| 323 | 323 | return -EFAULT; |
| 324 | 324 | unsafe_put_user(val, to, Efault); |
| 325 | − user_read_access_end(); | |
| 325 | + user_write_access_end(); | |
| 326 | 326 | return 0; |
| 327 | 327 | Efault: |
| 328 | − user_read_access_end(); | |
| 328 | + user_write_access_end(); | |
| 329 | 329 | return -EFAULT; |
| 330 | 330 | } |
| 331 | 331 | |
| @@ -342,8 +342,12 @@ static bool __ww_mutex_wound(struct MUTEX *lock, · 341 unmodified lines | ||
| 342 | 342 | * When waking up the task to wound, be sure to clear the |
| 343 | 343 | * blocked_on pointer. Otherwise we can see circular |
| 344 | 344 | * blocked_on relationships that can't resolve. |
| 345 | + * | |
| 346 | + * NOTE: We pass NULL here instead of lock, because we | |
| 347 | + * are waking the mutex owner, who may be currently | |
| 348 | + * blocked on a different mutex. | |
| 345 | 349 | */ |
| 346 | − __clear_task_blocked_on(owner, lock); | |
| 350 | + __clear_task_blocked_on(owner, NULL); | |
| 347 | 351 | wake_q_add(wake_q, owner); |
| 348 | 352 | } |
| 349 | 353 | return true; |