Merge tag 'locking_urgent_for_v6.16_rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull locking fixes from Borislav Petkov: - Make sure the switch to the global hash is requested always under a lock so that two threads requesting that simultaneously cannot get to inconsistent state - Reject negative NUMA nodes earlier in the futex NUMA interface handling code - Selftests fixes * tag 'locking_urgent_for_v6.16_rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: futex: Verify under the lock if hash can be replaced futex: Handle invalid node numbers supplied by user selftests/futex: Set the home_node in futex_numa_mpol selftests/futex: getopt() requires int as return value.
This commit is contained in:
+12
-2
@@ -583,8 +583,8 @@ int get_futex_key(u32 __user *uaddr, unsigned int flags, union futex_key *key,
|
||||
if (futex_get_value(&node, naddr))
|
||||
return -EFAULT;
|
||||
|
||||
if (node != FUTEX_NO_NODE &&
|
||||
(node >= MAX_NUMNODES || !node_possible(node)))
|
||||
if ((node != FUTEX_NO_NODE) &&
|
||||
((unsigned int)node >= MAX_NUMNODES || !node_possible(node)))
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
@@ -1629,6 +1629,16 @@ again:
|
||||
mm->futex_phash_new = NULL;
|
||||
|
||||
if (fph) {
|
||||
if (cur && (!cur->hash_mask || cur->immutable)) {
|
||||
/*
|
||||
* If two threads simultaneously request the global
|
||||
* hash then the first one performs the switch,
|
||||
* the second one returns here.
|
||||
*/
|
||||
free = fph;
|
||||
mm->futex_phash_new = new;
|
||||
return -EBUSY;
|
||||
}
|
||||
if (cur && !new) {
|
||||
/*
|
||||
* If we have an existing hash, but do not yet have
|
||||
|
||||
Reference in New Issue
Block a user