diff options
author | Ulrich Weigand <uweigand@de.ibm.com> | 2005-05-16 10:24:37 +0000 |
---|---|---|
committer | Ulrich Weigand <uweigand@de.ibm.com> | 2005-05-16 10:24:37 +0000 |
commit | 48d93c7500d9f0cee303e547f773ded6e325c6f6 (patch) | |
tree | 26913240a8107a30a27b281f1fec8c923c23c786 /gdb/gdbserver | |
parent | 1b0ba102266620a8d82e08315e921ab4d7f9972d (diff) | |
download | gdb-48d93c7500d9f0cee303e547f773ded6e325c6f6.zip gdb-48d93c7500d9f0cee303e547f773ded6e325c6f6.tar.gz gdb-48d93c7500d9f0cee303e547f773ded6e325c6f6.tar.bz2 |
* linux-low.c (fetch_register): Ensure buffer size is a multiple
of sizeof (PTRACE_XFER_TYPE).
(usr_store_inferior_registers): Likewise. Zero out excess bytes.
Diffstat (limited to 'gdb/gdbserver')
-rw-r--r-- | gdb/gdbserver/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/gdbserver/linux-low.c | 17 |
2 files changed, 17 insertions, 6 deletions
diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index 311d3ec..90aa0d2 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,3 +1,9 @@ +2005-05-16 Ulrich Weigand <uweigand@de.ibm.com> + + * linux-low.c (fetch_register): Ensure buffer size is a multiple + of sizeof (PTRACE_XFER_TYPE). + (usr_store_inferior_registers): Likewise. Zero out excess bytes. + 2005-05-12 Orjan Friberg <orjanf@axis.com> * target.h (struct target_ops): Add insert_watchpoint, diff --git a/gdb/gdbserver/linux-low.c b/gdb/gdbserver/linux-low.c index c7dab4c..3795cb6 100644 --- a/gdb/gdbserver/linux-low.c +++ b/gdb/gdbserver/linux-low.c @@ -1095,7 +1095,7 @@ static void fetch_register (int regno) { CORE_ADDR regaddr; - register int i; + int i, size; char *buf; if (regno >= the_low_target.num_regs) @@ -1106,8 +1106,10 @@ fetch_register (int regno) regaddr = register_addr (regno); if (regaddr == -1) return; - buf = alloca (register_size (regno)); - for (i = 0; i < register_size (regno); i += sizeof (PTRACE_XFER_TYPE)) + size = (register_size (regno) + sizeof (PTRACE_XFER_TYPE) - 1) + & - sizeof (PTRACE_XFER_TYPE); + buf = alloca (size); + for (i = 0; i < size; i += sizeof (PTRACE_XFER_TYPE)) { errno = 0; *(PTRACE_XFER_TYPE *) (buf + i) = @@ -1147,7 +1149,7 @@ static void usr_store_inferior_registers (int regno) { CORE_ADDR regaddr; - int i; + int i, size; char *buf; if (regno >= 0) @@ -1162,9 +1164,12 @@ usr_store_inferior_registers (int regno) if (regaddr == -1) return; errno = 0; - buf = alloca (register_size (regno)); + size = (register_size (regno) + sizeof (PTRACE_XFER_TYPE) - 1) + & - sizeof (PTRACE_XFER_TYPE); + buf = alloca (size); + memset (buf, 0, size); collect_register (regno, buf); - for (i = 0; i < register_size (regno); i += sizeof (PTRACE_XFER_TYPE)) + for (i = 0; i < size; i += sizeof (PTRACE_XFER_TYPE)) { errno = 0; ptrace (PTRACE_POKEUSER, inferior_pid, (PTRACE_ARG3_TYPE) regaddr, |