mirror of
https://gitee.com/bianbu-linux/linux-6.6
synced 2025-04-24 14:07:52 -04:00
Merge branch 'exec-update-lock-for-v5.11' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace
Pull exec-update-lock update from Eric Biederman: "The key point of this is to transform exec_update_mutex into a rw_semaphore so readers can be separated from writers. This makes it easier to understand what the holders of the lock are doing, and makes it harder to contend or deadlock on the lock. The real deadlock fix wound up in perf_event_open" * 'exec-update-lock-for-v5.11' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace: exec: Transform exec_update_mutex into a rw_semaphore
This commit is contained in:
commit
d01e7f10da
8 changed files with 44 additions and 43 deletions
12
fs/exec.c
12
fs/exec.c
|
@ -966,8 +966,8 @@ EXPORT_SYMBOL(read_code);
|
|||
|
||||
/*
|
||||
* Maps the mm_struct mm into the current task struct.
|
||||
* On success, this function returns with the mutex
|
||||
* exec_update_mutex locked.
|
||||
* On success, this function returns with exec_update_lock
|
||||
* held for writing.
|
||||
*/
|
||||
static int exec_mmap(struct mm_struct *mm)
|
||||
{
|
||||
|
@ -982,7 +982,7 @@ static int exec_mmap(struct mm_struct *mm)
|
|||
if (old_mm)
|
||||
sync_mm_rss(old_mm);
|
||||
|
||||
ret = mutex_lock_killable(&tsk->signal->exec_update_mutex);
|
||||
ret = down_write_killable(&tsk->signal->exec_update_lock);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
@ -996,7 +996,7 @@ static int exec_mmap(struct mm_struct *mm)
|
|||
mmap_read_lock(old_mm);
|
||||
if (unlikely(old_mm->core_state)) {
|
||||
mmap_read_unlock(old_mm);
|
||||
mutex_unlock(&tsk->signal->exec_update_mutex);
|
||||
up_write(&tsk->signal->exec_update_lock);
|
||||
return -EINTR;
|
||||
}
|
||||
}
|
||||
|
@ -1395,7 +1395,7 @@ int begin_new_exec(struct linux_binprm * bprm)
|
|||
return 0;
|
||||
|
||||
out_unlock:
|
||||
mutex_unlock(&me->signal->exec_update_mutex);
|
||||
up_write(&me->signal->exec_update_lock);
|
||||
out:
|
||||
return retval;
|
||||
}
|
||||
|
@ -1436,7 +1436,7 @@ void setup_new_exec(struct linux_binprm * bprm)
|
|||
* some architectures like powerpc
|
||||
*/
|
||||
me->mm->task_size = TASK_SIZE;
|
||||
mutex_unlock(&me->signal->exec_update_mutex);
|
||||
up_write(&me->signal->exec_update_lock);
|
||||
mutex_unlock(&me->signal->cred_guard_mutex);
|
||||
}
|
||||
EXPORT_SYMBOL(setup_new_exec);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue