Messages in this thread | | | Date | Tue, 7 Apr 2015 22:39:59 -0400 | Subject | Re: [PATCH 3/8] x86/asm/entry: Zero EXTRA_REGS for stub32_execve[at] too | From | Brian Gerst <> |
| |
On Tue, Apr 7, 2015 at 4:43 PM, Denys Vlasenko <dvlasenk@redhat.com> wrote: > The change which affected how execve clears EXTRA_REGS missed > 32-bit execve syscalls. > > Fix this by using 64-bit execve stub epilogue for them too. > > Run-tested. > > Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com> > CC: Linus Torvalds <torvalds@linux-foundation.org> > CC: Steven Rostedt <rostedt@goodmis.org> > CC: Ingo Molnar <mingo@kernel.org> > CC: Borislav Petkov <bp@alien8.de> > CC: "H. Peter Anvin" <hpa@zytor.com> > CC: Andy Lutomirski <luto@amacapital.net> > CC: Oleg Nesterov <oleg@redhat.com> > CC: Frederic Weisbecker <fweisbec@gmail.com> > CC: Alexei Starovoitov <ast@plumgrid.com> > CC: Will Drewry <wad@chromium.org> > CC: Kees Cook <keescook@chromium.org> > CC: x86@kernel.org > CC: linux-kernel@vger.kernel.org > --- > arch/x86/ia32/ia32entry.S | 2 -- > arch/x86/kernel/entry_64.S | 15 +++++++++++++++ > 2 files changed, 15 insertions(+), 2 deletions(-) > > diff --git a/arch/x86/ia32/ia32entry.S b/arch/x86/ia32/ia32entry.S > index 5d8f987..a821b1c 100644 > --- a/arch/x86/ia32/ia32entry.S > +++ b/arch/x86/ia32/ia32entry.S > @@ -571,8 +571,6 @@ GLOBAL(\label) > > PTREGSCALL stub32_rt_sigreturn, sys32_rt_sigreturn > PTREGSCALL stub32_sigreturn, sys32_sigreturn > - PTREGSCALL stub32_execve, compat_sys_execve > - PTREGSCALL stub32_execveat, compat_sys_execveat > PTREGSCALL stub32_fork, sys_fork > PTREGSCALL stub32_vfork, sys_vfork > > diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S > index 1b0793c..8e3ba38 100644 > --- a/arch/x86/kernel/entry_64.S > +++ b/arch/x86/kernel/entry_64.S > @@ -461,6 +461,21 @@ ENTRY(stub_x32_execveat) > END(stub_x32_execveat) > #endif > > +#ifdef CONFIG_IA32_EMULATION > +ENTRY(stub32_execve) > + CFI_STARTPROC > + call compat_sys_execve > + jmp return_from_execve > + CFI_ENDPROC > +END(stub32_execve) > +ENTRY(stub32_execveat) > + CFI_STARTPROC > + call compat_sys_execveat > + jmp return_from_execve > + CFI_ENDPROC > +END(stub32_execveat) > +#endif > + > /* > * sigreturn is special because it needs to restore all registers on return. > * This cannot be done with SYSRET, so use the IRET return path instead.
The X32 and IA32 stubs are now identical and should be merged.
-- Brian Gerst
| |