diff mbox series

arm64/kernel/entry: refine comment of stack overflow check

Message ID 20191202113702.34158-1-guoheyi@huawei.com (mailing list archive)
State New, archived
Headers show
Series arm64/kernel/entry: refine comment of stack overflow check | expand

Commit Message

Heyi Guo Dec. 2, 2019, 11:37 a.m. UTC
Stack overflow checking can be done by testing
sp & (1 << THREAD_SHIFT)
only for the stacks are aligned to (2 << THREAD_SHIFT) with size of
(1 << THREAD_SIZE), and this is the case when CONFIG_VMAP_STACK is
set.

Fix the code comment to avoid confusion.

Signed-off-by: Heyi Guo <guoheyi@huawei.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will@kernel.org>
---
 arch/arm64/kernel/entry.S | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Mark Rutland Dec. 2, 2019, 12:33 p.m. UTC | #1
On Mon, Dec 02, 2019 at 07:37:02PM +0800, Heyi Guo wrote:
> Stack overflow checking can be done by testing
> sp & (1 << THREAD_SHIFT)
> only for the stacks are aligned to (2 << THREAD_SHIFT) with size of
> (1 << THREAD_SIZE), and this is the case when CONFIG_VMAP_STACK is
> set.

Good point, I was sloppy with this comment.

> 
> Fix the code comment to avoid confusion.
> 
> Signed-off-by: Heyi Guo <guoheyi@huawei.com>
> Cc: Catalin Marinas <catalin.marinas@arm.com>
> Cc: Will Deacon <will@kernel.org>
> ---
>  arch/arm64/kernel/entry.S | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/arm64/kernel/entry.S b/arch/arm64/kernel/entry.S
> index cf3bd2976e57..9e8ba507090f 100644
> --- a/arch/arm64/kernel/entry.S
> +++ b/arch/arm64/kernel/entry.S
> @@ -76,7 +76,8 @@ alternative_else_nop_endif
>  #ifdef CONFIG_VMAP_STACK
>  	/*
>  	 * Test whether the SP has overflowed, without corrupting a GPR.
> -	 * Task and IRQ stacks are aligned to (1 << THREAD_SHIFT).
> +	 * Task and IRQ stacks are aligned to (2 << THREAD_SHIFT) with size of
> +	 * (1 << THREAD_SHIFT).
>  	 */

Can we make that:

	Task and IRQ stacks are aligned so that SP & (1 << THREAD_SHIFT)
	should always be zero.

... which I think is a bit clearer.

With that wording:

Acked-by: Mark Rutland <mark.rutland@arm.com>

Mark.

>  	add	sp, sp, x0			// sp' = sp + x0
>  	sub	x0, sp, x0			// x0' = sp' - x0 = (sp + x0) - x0 = sp
> -- 
> 2.19.1
>
Heyi Guo Dec. 3, 2019, 12:55 a.m. UTC | #2
在 2019/12/2 20:33, Mark Rutland 写道:
> On Mon, Dec 02, 2019 at 07:37:02PM +0800, Heyi Guo wrote:
>> Stack overflow checking can be done by testing
>> sp & (1 << THREAD_SHIFT)
>> only for the stacks are aligned to (2 << THREAD_SHIFT) with size of
>> (1 << THREAD_SIZE), and this is the case when CONFIG_VMAP_STACK is
>> set.
> Good point, I was sloppy with this comment.
>
>> Fix the code comment to avoid confusion.
>>
>> Signed-off-by: Heyi Guo <guoheyi@huawei.com>
>> Cc: Catalin Marinas <catalin.marinas@arm.com>
>> Cc: Will Deacon <will@kernel.org>
>> ---
>>   arch/arm64/kernel/entry.S | 3 ++-
>>   1 file changed, 2 insertions(+), 1 deletion(-)
>>
>> diff --git a/arch/arm64/kernel/entry.S b/arch/arm64/kernel/entry.S
>> index cf3bd2976e57..9e8ba507090f 100644
>> --- a/arch/arm64/kernel/entry.S
>> +++ b/arch/arm64/kernel/entry.S
>> @@ -76,7 +76,8 @@ alternative_else_nop_endif
>>   #ifdef CONFIG_VMAP_STACK
>>   	/*
>>   	 * Test whether the SP has overflowed, without corrupting a GPR.
>> -	 * Task and IRQ stacks are aligned to (1 << THREAD_SHIFT).
>> +	 * Task and IRQ stacks are aligned to (2 << THREAD_SHIFT) with size of
>> +	 * (1 << THREAD_SHIFT).
>>   	 */
> Can we make that:
>
> 	Task and IRQ stacks are aligned so that SP & (1 << THREAD_SHIFT)
> 	should always be zero.
>
> ... which I think is a bit clearer.

Sure :)

Thanks,

Heyi

>
> With that wording:
>
> Acked-by: Mark Rutland <mark.rutland@arm.com>
>
> Mark.
>
>>   	add	sp, sp, x0			// sp' = sp + x0
>>   	sub	x0, sp, x0			// x0' = sp' - x0 = (sp + x0) - x0 = sp
>> -- 
>> 2.19.1
>>
> .
Catalin Marinas Dec. 6, 2019, 1:58 p.m. UTC | #3
On Mon, Dec 02, 2019 at 07:37:02PM +0800, Heyi Guo wrote:
> Stack overflow checking can be done by testing
> sp & (1 << THREAD_SHIFT)
> only for the stacks are aligned to (2 << THREAD_SHIFT) with size of
> (1 << THREAD_SIZE), and this is the case when CONFIG_VMAP_STACK is
> set.
> 
> Fix the code comment to avoid confusion.
> 
> Signed-off-by: Heyi Guo <guoheyi@huawei.com>
> Cc: Catalin Marinas <catalin.marinas@arm.com>
> Cc: Will Deacon <will@kernel.org>

Queued with Mark's suggested update.
diff mbox series

Patch

diff --git a/arch/arm64/kernel/entry.S b/arch/arm64/kernel/entry.S
index cf3bd2976e57..9e8ba507090f 100644
--- a/arch/arm64/kernel/entry.S
+++ b/arch/arm64/kernel/entry.S
@@ -76,7 +76,8 @@  alternative_else_nop_endif
 #ifdef CONFIG_VMAP_STACK
 	/*
 	 * Test whether the SP has overflowed, without corrupting a GPR.
-	 * Task and IRQ stacks are aligned to (1 << THREAD_SHIFT).
+	 * Task and IRQ stacks are aligned to (2 << THREAD_SHIFT) with size of
+	 * (1 << THREAD_SHIFT).
 	 */
 	add	sp, sp, x0			// sp' = sp + x0
 	sub	x0, sp, x0			// x0' = sp' - x0 = (sp + x0) - x0 = sp