From: Borislav Petkov <bp@alien8.de>
To: Ingo Molnar <mingo@kernel.org>
Cc: Denys Vlasenko <dvlasenk@redhat.com>,
Andy Lutomirski <luto@amacapital.net>,
Linus Torvalds <torvalds@linux-foundation.org>,
Steven Rostedt <rostedt@goodmis.org>,
"H. Peter Anvin" <hpa@zytor.com>, Oleg Nesterov <oleg@redhat.com>,
Frederic Weisbecker <fweisbec@gmail.com>,
Alexei Starovoitov <ast@plumgrid.com>,
Will Drewry <wad@chromium.org>, Kees Cook <keescook@chromium.org>,
x86@kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] x86/asm/entry/64: Improve the THREAD_INFO() macro explanation
Date: Tue, 24 Mar 2015 20:20:57 +0100 [thread overview]
Message-ID: <20150324192057.GD11525@pd.tnic> (raw)
In-Reply-To: <20150324184311.GA14760@gmail.com>
On Tue, Mar 24, 2015 at 07:43:11PM +0100, Ingo Molnar wrote:
> From 0229a184997a7d4ad4398ee3ac2f5ae78c1c1a03 Mon Sep 17 00:00:00 2001
> From: Ingo Molnar <mingo@kernel.org>
> Date: Tue, 24 Mar 2015 18:57:13 +0100
> Subject: [PATCH] x86/asm/entry/64: Improve the THREAD_INFO() macro explanation
>
> Explain the background, and add a real example.
>
> Cc: Alexei Starovoitov <ast@plumgrid.com>
> Cc: Andy Lutomirski <luto@amacapital.net>
> Cc: Andy Lutomirski <luto@kernel.org>
> Cc: Borislav Petkov <bp@alien8.de>
> Cc: Borislav Petkov <bp@suse.de>
> Cc: Denys Vlasenko <dvlasenk@redhat.com>
> Cc: Frederic Weisbecker <fweisbec@gmail.com>
> Cc: H. Peter Anvin <hpa@zytor.com>
> Cc: Kees Cook <keescook@chromium.org>
> Cc: Linus Torvalds <torvalds@linux-foundation.org>
> Cc: Oleg Nesterov <oleg@redhat.com>
> Cc: Steven Rostedt <rostedt@goodmis.org>
> Cc: Will Drewry <wad@chromium.org>
> Signed-off-by: Ingo Molnar <mingo@kernel.org>
> ---
> arch/x86/include/asm/thread_info.h | 27 +++++++++++++++++++++++----
> 1 file changed, 23 insertions(+), 4 deletions(-)
>
> diff --git a/arch/x86/include/asm/thread_info.h b/arch/x86/include/asm/thread_info.h
> index ad0ee3423da5..813dfbb867a7 100644
> --- a/arch/x86/include/asm/thread_info.h
> +++ b/arch/x86/include/asm/thread_info.h
> @@ -206,10 +206,29 @@ static inline unsigned long current_stack_pointer(void)
> _ASM_SUB $(THREAD_SIZE),reg ;
>
> /*
> - * ASM operand which evaluates to thread_info address
> - * if it is known that "reg" is exactly "off" bytes below stack top.
> - * Example (fetch thread_info->fieldname):
> - * mov TI_fieldname+THREAD_INFO(reg, off),%eax
> + * ASM operand which evaluates to a 'thread_info' address of
> + * the current task, if it is known that "reg" is exactly "off"
> + * bytes below the top of the stack currently.
> + *
> + * ( The kernel stack's size is known at build time, it is usually
> + * 2 or 4 pages, and the bottom of the kernel stack contains
> + * the thread_info structure. So to access the thread_info very
> + * quickly from assembly code we can calculate down from the
> + * top of the kernel stack to the bottom, using constant,
> + * build-time calculations only. )
> + *
> + * For example, to fetch the current thread_info->flags value into %eax
> + * on x86-64 defconfig kernels, in syscall entry code where RSP is
> + * currently at exactly SIZEOF_PTREGS bytes away from the top of the
> + * stack:
> + *
> + * mov TI_flags+THREAD_INFO(%rsp, SIZEOF_PTREGS), %eax
> + *
> + * will translate to:
> + *
> + * 8b 84 24 b8 c0 ff ff mov -0x3f48(%rsp), %eax
> + *
> + * which is below the current RSP by almost 16K.
> */
> #define THREAD_INFO(reg, off) ((off)-THREAD_SIZE)(reg)
Vehemently-with-both-thumbs-up-acked-by: Borislav Petkov <bp@suse.de>
--
Regards/Gruss,
Boris.
ECO tip #101: Trim your mails when you reply.
--
next prev parent reply other threads:[~2015-03-24 19:22 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-19 17:17 [PATCH 1/5] x86: change THREAD_INFO definition to not depend on KERNEL_STACK_OFFSET Denys Vlasenko
2015-03-19 17:17 ` [PATCH 2/5] x86: get rid of KERNEL_STACK_OFFSET Denys Vlasenko
2015-03-20 16:21 ` Borislav Petkov
2015-03-25 9:10 ` [tip:x86/asm] x86/asm/entry: Get " tip-bot for Denys Vlasenko
2015-03-19 17:17 ` [PATCH 3/5] x86/entry_64.S: use PUSH insns to build pt_regs on stack Denys Vlasenko
2015-03-20 16:35 ` Borislav Petkov
2015-03-25 9:11 ` [tip:x86/asm] x86/asm/entry/64: Use PUSH instructions " tip-bot for Denys Vlasenko
2015-03-19 17:17 ` [PATCH 4/5] x86/entry_64.S: get rid of FIXUP_TOP_OF_STACK/RESTORE_TOP_OF_STACK Denys Vlasenko
2015-03-20 16:38 ` Borislav Petkov
2015-03-25 9:11 ` [tip:x86/asm] x86/asm/entry/64: Get rid of the FIXUP_TOP_OF_STACK /RESTORE_TOP_OF_STACK macros tip-bot for Denys Vlasenko
2015-03-19 17:17 ` [PATCH 5/5] x86/entry_64.S: get rid of int_ret_from_sys_call_fixup Denys Vlasenko
2015-03-20 16:39 ` Borislav Petkov
2015-03-25 9:11 ` [tip:x86/asm] x86/asm/entry/64: Get " tip-bot for Denys Vlasenko
2015-03-20 10:30 ` [PATCH 1/5] x86: change THREAD_INFO definition to not depend on KERNEL_STACK_OFFSET Borislav Petkov
2015-03-20 22:27 ` Andy Lutomirski
2015-03-24 18:09 ` Ingo Molnar
2015-03-24 18:43 ` [PATCH] x86/asm/entry/64: Improve the THREAD_INFO() macro explanation Ingo Molnar
2015-03-24 18:50 ` Denys Vlasenko
2015-03-24 19:07 ` Andy Lutomirski
2015-03-24 19:20 ` Borislav Petkov [this message]
2015-03-25 9:12 ` [tip:x86/asm] " tip-bot for Ingo Molnar
2015-03-24 18:44 ` [PATCH] x86/asm/entry/64: Merge the field offset into the THREAD_INFO() macro Ingo Molnar
2015-03-24 18:50 ` Denys Vlasenko
2015-03-24 19:29 ` Ingo Molnar
2015-03-24 19:34 ` Denys Vlasenko
2015-03-24 19:08 ` Andy Lutomirski
2015-03-25 9:12 ` [tip:x86/asm] " tip-bot for Ingo Molnar
2015-03-24 18:44 ` [PATCH] x86/asm/entry/64: Rename THREAD_INFO() to ASM_ASM_THREAD_INFO_MEMOP() Ingo Molnar
2015-03-24 19:24 ` Borislav Petkov
2015-03-24 19:34 ` Ingo Molnar
2015-03-25 9:13 ` [tip:x86/asm] x86/asm/entry/64: Rename THREAD_INFO() to ASM_THREAD_INFO() tip-bot for Ingo Molnar
2015-03-25 9:10 ` [tip:x86/asm] x86/asm/entry/64: Change the THREAD_INFO() definition to not depend on KERNEL_STACK_OFFSET tip-bot for Denys Vlasenko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20150324192057.GD11525@pd.tnic \
--to=bp@alien8.de \
--cc=ast@plumgrid.com \
--cc=dvlasenk@redhat.com \
--cc=fweisbec@gmail.com \
--cc=hpa@zytor.com \
--cc=keescook@chromium.org \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@amacapital.net \
--cc=mingo@kernel.org \
--cc=oleg@redhat.com \
--cc=rostedt@goodmis.org \
--cc=torvalds@linux-foundation.org \
--cc=wad@chromium.org \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.