* [Query] Stack Overflow in "arch/arm/kernel/unwind.c" while unwinding frame
@ 2013-09-24 5:23 Anurag Aggarwal
2013-09-24 6:28 ` Jean Pihet
0 siblings, 1 reply; 5+ messages in thread
From: Anurag Aggarwal @ 2013-09-24 5:23 UTC (permalink / raw)
To: linux-kernel
Hi All,
While executing unwind backtrace instructions in ARM, in the function
unwind_exec_insn()
there are chances that SP overflows from stack.
For example while executing instruction with opcode 0xAE, vsp can go
beyond stack to area that has not been allocated till now.
unsigned long *vsp = (unsigned long *)ctrl->vrs[SP];
int reg;
/* pop R4-R[4+bbb] */
for (reg = 4; reg <= 4 + (insn & 7); reg++)
ctrl->vrs[reg] = *vsp++;
The above scenario can happen while executing any of the unwind instruction.
One of the ways to fix the problem is to check for vsp with stack
limits before we increment it, but doing it for all the instructions
seems a little bad.
I just want to know that if anyone has faced the problem before
I am working on Linux kernel for Android phones and I saw one case
when this happened.
I am new to Linux Kernel so not sure if this is the right place to ask
the question.
--
Anurag Aggarwal
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [Query] Stack Overflow in "arch/arm/kernel/unwind.c" while unwinding frame
2013-09-24 5:23 [Query] Stack Overflow in "arch/arm/kernel/unwind.c" while unwinding frame Anurag Aggarwal
@ 2013-09-24 6:28 ` Jean Pihet
2013-09-24 6:29 ` Anurag Aggarwal
2013-10-02 18:11 ` Catalin Marinas
0 siblings, 2 replies; 5+ messages in thread
From: Jean Pihet @ 2013-09-24 6:28 UTC (permalink / raw)
To: Anurag Aggarwal, linux
Cc: linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org
Hi,
Adding Russell and l.a.k ML.
Another question: is this linked to the following build warning?
CC arch/arm/kernel/return_address.o
arch/arm/kernel/return_address.c:63:2: warning: #warning "TODO:
return_address should use unwind tables"
Regards,
Jean
On 24 September 2013 07:23, Anurag Aggarwal <anurag19aggarwal@gmail.com> wrote:
> Hi All,
>
> While executing unwind backtrace instructions in ARM, in the function
> unwind_exec_insn()
> there are chances that SP overflows from stack.
>
>
> For example while executing instruction with opcode 0xAE, vsp can go
> beyond stack to area that has not been allocated till now.
>
> unsigned long *vsp = (unsigned long *)ctrl->vrs[SP];
> int reg;
>
> /* pop R4-R[4+bbb] */
> for (reg = 4; reg <= 4 + (insn & 7); reg++)
> ctrl->vrs[reg] = *vsp++;
>
> The above scenario can happen while executing any of the unwind instruction.
>
> One of the ways to fix the problem is to check for vsp with stack
> limits before we increment it, but doing it for all the instructions
> seems a little bad.
>
> I just want to know that if anyone has faced the problem before
>
> I am working on Linux kernel for Android phones and I saw one case
> when this happened.
>
> I am new to Linux Kernel so not sure if this is the right place to ask
> the question.
>
>
> --
> Anurag Aggarwal
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [Query] Stack Overflow in "arch/arm/kernel/unwind.c" while unwinding frame
2013-09-24 6:28 ` Jean Pihet
@ 2013-09-24 6:29 ` Anurag Aggarwal
2013-10-02 18:11 ` Catalin Marinas
1 sibling, 0 replies; 5+ messages in thread
From: Anurag Aggarwal @ 2013-09-24 6:29 UTC (permalink / raw)
To: Jean Pihet
Cc: linux, linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org
Hi Jean,
I don't think that it is related to the warning that you have suggested
On Tue, Sep 24, 2013 at 11:58 AM, Jean Pihet <jean.pihet@linaro.org> wrote:
> Hi,
>
> Adding Russell and l.a.k ML.
>
> Another question: is this linked to the following build warning?
> CC arch/arm/kernel/return_address.o
> arch/arm/kernel/return_address.c:63:2: warning: #warning "TODO:
> return_address should use unwind tables"
>
> Regards,
> Jean
>
> On 24 September 2013 07:23, Anurag Aggarwal <anurag19aggarwal@gmail.com> wrote:
>> Hi All,
>>
>> While executing unwind backtrace instructions in ARM, in the function
>> unwind_exec_insn()
>> there are chances that SP overflows from stack.
>>
>>
>> For example while executing instruction with opcode 0xAE, vsp can go
>> beyond stack to area that has not been allocated till now.
>>
>> unsigned long *vsp = (unsigned long *)ctrl->vrs[SP];
>> int reg;
>>
>> /* pop R4-R[4+bbb] */
>> for (reg = 4; reg <= 4 + (insn & 7); reg++)
>> ctrl->vrs[reg] = *vsp++;
>>
>> The above scenario can happen while executing any of the unwind instruction.
>>
>> One of the ways to fix the problem is to check for vsp with stack
>> limits before we increment it, but doing it for all the instructions
>> seems a little bad.
>>
>> I just want to know that if anyone has faced the problem before
>>
>> I am working on Linux kernel for Android phones and I saw one case
>> when this happened.
>>
>> I am new to Linux Kernel so not sure if this is the right place to ask
>> the question.
>>
>>
>> --
>> Anurag Aggarwal
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>> Please read the FAQ at http://www.tux.org/lkml/
--
Anurag Aggarwal
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [Query] Stack Overflow in "arch/arm/kernel/unwind.c" while unwinding frame
2013-09-24 6:28 ` Jean Pihet
2013-09-24 6:29 ` Anurag Aggarwal
@ 2013-10-02 18:11 ` Catalin Marinas
2013-10-06 7:14 ` Anurag Aggarwal
1 sibling, 1 reply; 5+ messages in thread
From: Catalin Marinas @ 2013-10-02 18:11 UTC (permalink / raw)
To: Anurag Aggarwal
Cc: Jean Pihet, linux@arm.linux.org.uk, linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org
On 24 September 2013 07:23, Anurag Aggarwal <anurag19aggarwal@gmail.com> wrote:
> While executing unwind backtrace instructions in ARM, in the function
> unwind_exec_insn()
> there are chances that SP overflows from stack.
>
>
> For example while executing instruction with opcode 0xAE, vsp can go
> beyond stack to area that has not been allocated till now.
>
> unsigned long *vsp = (unsigned long *)ctrl->vrs[SP];
> int reg;
>
> /* pop R4-R[4+bbb] */
> for (reg = 4; reg <= 4 + (insn & 7); reg++)
> ctrl->vrs[reg] = *vsp++;
>
> The above scenario can happen while executing any of the unwind instruction.
>
> One of the ways to fix the problem is to check for vsp with stack
> limits before we increment it, but doing it for all the instructions
> seems a little bad.
>
> I just want to know that if anyone has faced the problem before
I haven't seen it but I think with some stack (or unwind bytecode)
corruption it could happen.
I think we could place some checks only when vsp is assigned and return
-URC_FAILURE, together with some warning.
--
Catalin
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [Query] Stack Overflow in "arch/arm/kernel/unwind.c" while unwinding frame
2013-10-02 18:11 ` Catalin Marinas
@ 2013-10-06 7:14 ` Anurag Aggarwal
0 siblings, 0 replies; 5+ messages in thread
From: Anurag Aggarwal @ 2013-10-06 7:14 UTC (permalink / raw)
To: Catalin Marinas
Cc: Jean Pihet, linux@arm.linux.org.uk, linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org
>From what I saw, it happened when the next page is not mapped to
physical memory.
I don't think that stack corruption can cause this.
>From what I could understand about of the code there is not check if
the memory beyond stack is physically mapped or not.
To handle the problem I thought that checks can also be added in
unwind_exec_insn() function for stack overflow.
On Wed, Oct 2, 2013 at 11:41 PM, Catalin Marinas
<catalin.marinas@arm.com> wrote:
> On 24 September 2013 07:23, Anurag Aggarwal <anurag19aggarwal@gmail.com> wrote:
>> While executing unwind backtrace instructions in ARM, in the function
>> unwind_exec_insn()
>> there are chances that SP overflows from stack.
>>
>>
>> For example while executing instruction with opcode 0xAE, vsp can go
>> beyond stack to area that has not been allocated till now.
>>
>> unsigned long *vsp = (unsigned long *)ctrl->vrs[SP];
>> int reg;
>>
>> /* pop R4-R[4+bbb] */
>> for (reg = 4; reg <= 4 + (insn & 7); reg++)
>> ctrl->vrs[reg] = *vsp++;
>>
>> The above scenario can happen while executing any of the unwind instruction.
>>
>> One of the ways to fix the problem is to check for vsp with stack
>> limits before we increment it, but doing it for all the instructions
>> seems a little bad.
>>
>> I just want to know that if anyone has faced the problem before
>
> I haven't seen it but I think with some stack (or unwind bytecode)
> corruption it could happen.
>
> I think we could place some checks only when vsp is assigned and return
> -URC_FAILURE, together with some warning.
>
> --
> Catalin
--
Anurag Aggarwal
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2013-10-06 7:14 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-09-24 5:23 [Query] Stack Overflow in "arch/arm/kernel/unwind.c" while unwinding frame Anurag Aggarwal
2013-09-24 6:28 ` Jean Pihet
2013-09-24 6:29 ` Anurag Aggarwal
2013-10-02 18:11 ` Catalin Marinas
2013-10-06 7:14 ` Anurag Aggarwal
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox