Fix use of uninitialized value in linux-arm-low in GDBServer.

Message ID 1443115845-3044-1-git-send-email-antoine.tremblay@ericsson.com
State New, archived
Headers

Commit Message

Antoine Tremblay Sept. 24, 2015, 5:30 p.m. UTC
  In arm_breakpoint_at, an uninitialized unsigned long was used were only
4 bytes would be written to the variable thus polluting the value on 64bit.

This patch changes the value to an unsigned int.

gdb/gdbserver/ChangeLog:
	* linux-arm-low.c (arm_breakpoint_at): Fix insn size.
---
 gdb/gdbserver/linux-arm-low.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
  

Comments

Yao Qi Sept. 25, 2015, 11:10 a.m. UTC | #1
Antoine Tremblay <antoine.tremblay@ericsson.com> writes:

> In arm_breakpoint_at, an uninitialized unsigned long was used were only
> 4 bytes would be written to the variable thus polluting the value on 64bit.

'unsigned long' is 32-bit on arm.  What problem do you want to fix?
  
Antoine Tremblay Sept. 25, 2015, 11:33 a.m. UTC | #2
On 09/25/2015 07:10 AM, Yao Qi wrote:
> Antoine Tremblay <antoine.tremblay@ericsson.com> writes:
>
>> In arm_breakpoint_at, an uninitialized unsigned long was used were only
>> 4 bytes would be written to the variable thus polluting the value on 64bit.
>
> 'unsigned long' is 32-bit on arm.  What problem do you want to fix?
>

Won't this function be used if you're debugging an arm program on aarch64 ?
  
Antoine Tremblay Sept. 25, 2015, 11:42 a.m. UTC | #3
On 09/25/2015 07:33 AM, Antoine Tremblay wrote:
>
>
> On 09/25/2015 07:10 AM, Yao Qi wrote:
>> Antoine Tremblay <antoine.tremblay@ericsson.com> writes:
>>
>>> In arm_breakpoint_at, an uninitialized unsigned long was used were only
>>> 4 bytes would be written to the variable thus polluting the value on
>>> 64bit.
>>
>> 'unsigned long' is 32-bit on arm.  What problem do you want to fix?
>>
>
> Won't this function be used if you're debugging an arm program on aarch64 ?
>
Looking at it more , I don't think so, sorry for the noise it just 
jumped to me as I was fixing a similar issue elsewhere.
  
Pedro Alves Sept. 29, 2015, 2:05 p.m. UTC | #4
On 09/25/2015 12:42 PM, Antoine Tremblay wrote:
> 
> 
> On 09/25/2015 07:33 AM, Antoine Tremblay wrote:
>>
>>
>> On 09/25/2015 07:10 AM, Yao Qi wrote:
>>> Antoine Tremblay <antoine.tremblay@ericsson.com> writes:
>>>
>>>> In arm_breakpoint_at, an uninitialized unsigned long was used were only
>>>> 4 bytes would be written to the variable thus polluting the value on
>>>> 64bit.
>>>
>>> 'unsigned long' is 32-bit on arm.  What problem do you want to fix?
>>>
>>
>> Won't this function be used if you're debugging an arm program on aarch64 ?
>>
> Looking at it more , I don't think so, sorry for the noise it just 
> jumped to me as I was fixing a similar issue elsewhere.
> 

Note that gnulib gives us stdint.h everywhere nowadays, so in these
cases the best/clearest would be to use uint32_t, etc.

Thanks,
Pedro Alves
  

Patch

diff --git a/gdb/gdbserver/linux-arm-low.c b/gdb/gdbserver/linux-arm-low.c
index a277bb6..b594e57 100644
--- a/gdb/gdbserver/linux-arm-low.c
+++ b/gdb/gdbserver/linux-arm-low.c
@@ -272,7 +272,7 @@  arm_breakpoint_at (CORE_ADDR where)
   else
     {
       /* ARM mode.  */
-      unsigned long insn;
+      unsigned int insn;
 
       (*the_target->read_memory) (where, (unsigned char *) &insn, 4);
       if (insn == arm_breakpoint)