mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-01-19 04:46:12 +07:00
x86: tls prevent_tail_call
Fix a kernel bug (vmware boot problem) reported by Tomasz Grobelny,
which occurs with certain .config variants and gccs.
The x86 TLS cleanup in commit efd1ca52d0
made the sys_set_thread_area and sys_get_thread_area functions ripe for
tail call optimization. If the compiler chooses to use it for them, it
can clobber the user trap frame because these are asmlinkage functions.
Reported-by: Tomasz Grobelny <tomasz@grobelny.oswiecenia.net>
Signed-off-by: Roland McGrath <roland@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
c0f4133b8f
commit
3d00daf446
@ -91,7 +91,9 @@ int do_set_thread_area(struct task_struct *p, int idx,
|
||||
|
||||
asmlinkage int sys_set_thread_area(struct user_desc __user *u_info)
|
||||
{
|
||||
return do_set_thread_area(current, -1, u_info, 1);
|
||||
int ret = do_set_thread_area(current, -1, u_info, 1);
|
||||
prevent_tail_call(ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@ -139,7 +141,9 @@ int do_get_thread_area(struct task_struct *p, int idx,
|
||||
|
||||
asmlinkage int sys_get_thread_area(struct user_desc __user *u_info)
|
||||
{
|
||||
return do_get_thread_area(current, -1, u_info);
|
||||
int ret = do_get_thread_area(current, -1, u_info);
|
||||
prevent_tail_call(ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int regset_tls_active(struct task_struct *target,
|
||||
|
Loading…
Reference in New Issue
Block a user