Jan Kratochvil 92b52c5
http://sourceware.org/ml/gdb-patches/2012-09/msg00632.html
Jan Kratochvil 92b52c5
Subject: [PATCH 2/4] Add a check to ensure that a type may fit into host memory
Jan Kratochvil 92b52c5
Jan Kratochvil 92b52c5
Jan Kratochvil 92b52c5
--MP_/PnL6l3LUsXWpZ/olqawWlzb
Jan Kratochvil 92b52c5
Content-Type: text/plain; charset=US-ASCII
Jan Kratochvil 92b52c5
Content-Transfer-Encoding: 7bit
Jan Kratochvil 92b52c5
Content-Disposition: inline
Jan Kratochvil 92b52c5
Jan Kratochvil 92b52c5
Hi,
Jan Kratochvil 92b52c5
Jan Kratochvil 92b52c5
This is part two of the bitpos expansion patch.  This implements checks
Jan Kratochvil 92b52c5
in some places in the code to ensure that a type size in ULONGEST is
Jan Kratochvil 92b52c5
small enough to fit into host memory.  Tested for regressions on x86_64
Jan Kratochvil 92b52c5
Fedora 16.
Jan Kratochvil 92b52c5
Jan Kratochvil 92b52c5
Regards,
Jan Kratochvil 92b52c5
Siddhesh
Jan Kratochvil 92b52c5
Jan Kratochvil 92b52c5
--MP_/PnL6l3LUsXWpZ/olqawWlzb
Jan Kratochvil 92b52c5
Content-Type: text/plain
Jan Kratochvil 92b52c5
Content-Transfer-Encoding: quoted-printable
Jan Kratochvil 92b52c5
Content-Disposition: attachment; filename=ChangeLog-ensure_sizet
Jan Kratochvil 92b52c5
Jan Kratochvil 92b52c5
gdb/ChangeLog
Jan Kratochvil 92b52c5
Jan Kratochvil 92b52c5
	* alpha-tdep.c (alpha_push_dummy_call) Check for underflow in
Jan Kratochvil 92b52c5
	SP.
Jan Kratochvil 92b52c5
	* cp-valprint (cp_print_value): Ensure BASECLASS fits into
Jan Kratochvil 92b52c5
	size_t.
Jan Kratochvil 92b52c5
	* dwarf2loc.c (read_pieced_value): Ensure that THIS_SIZE fits
Jan Kratochvil 92b52c5
	into size_t.
Jan Kratochvil 92b52c5
	(write_pieced_value): Likewise.
Jan Kratochvil 92b52c5
	* findcmd.c (parse_find_args): Ensure PATTERN_BUF_SIZE fits into
Jan Kratochvil 92b52c5
	size_t.
Jan Kratochvil 92b52c5
	* p-valprint (pascal_object_print_value): Ensure BASECLASS fits
Jan Kratochvil 92b52c5
	into size_t.
Jan Kratochvil 92b52c5
	* utils.c (ulongest_fits_host_or_error): New function to find if
Jan Kratochvil 92b52c5
	a ULONGEST number fits into size_t.
Jan Kratochvil 92b52c5
	* utils.h: Declare ulongest_fits_host_or_error.
Jan Kratochvil 92b52c5
	* valops.c (search_struct_method): Ensure BASECLASS fits into
Jan Kratochvil 92b52c5
	size_t.
Jan Kratochvil 92b52c5
	* value.c (allocate_value_lazy): Ensure TYPE fits into size_t.
Jan Kratochvil 92b52c5
	(allocate_value_contents): Likewise.
Jan Kratochvil 92b52c5
	(set_value_enclosing_type): Ensure NEW_ENCL_TYPE fits into
Jan Kratochvil 92b52c5
	size_t.
Jan Kratochvil 92b52c5
	* vax-tdep.c (vax_return_value): Ensure that TYPE fits into
Jan Kratochvil 92b52c5
	size_t.
Jan Kratochvil 92b52c5
Jan Kratochvil 92b52c5
--MP_/PnL6l3LUsXWpZ/olqawWlzb
Jan Kratochvil 92b52c5
Content-Type: text/x-patch
Jan Kratochvil 92b52c5
Content-Transfer-Encoding: 7bit
Jan Kratochvil 92b52c5
Content-Disposition: attachment; filename=bitpos-ensure-size_t.patch
Jan Kratochvil 92b52c5
Jan Kratochvil c4c35c2
Index: gdb-7.10.90.20160211/gdb/alpha-tdep.c
Jan Kratochvil 92b52c5
===================================================================
Jan Kratochvil c4c35c2
--- gdb-7.10.90.20160211.orig/gdb/alpha-tdep.c	2016-02-11 20:56:59.224850729 +0100
Jan Kratochvil c4c35c2
+++ gdb-7.10.90.20160211/gdb/alpha-tdep.c	2016-02-11 20:57:05.385891225 +0100
Jan Kratochvil c4c35c2
@@ -413,6 +413,13 @@
Jan Kratochvil 92b52c5
     accumulate_size = 0;
Jan Kratochvil 92b52c5
   else
Jan Kratochvil 92b52c5
     accumulate_size -= sizeof(arg_reg_buffer);
Jan Kratochvil 92b52c5
+
Jan Kratochvil 92b52c5
+  /* Check for underflow.  */
Jan Kratochvil 92b52c5
+  if (sp - accumulate_size > sp)
Jan Kratochvil 92b52c5
+    error (_("Insufficient memory in GDB host for arguments, "
Jan Kratochvil 92b52c5
+	     "need %s bytes, but less than %s bytes available."),
Jan Kratochvil 92b52c5
+	   plongest (accumulate_size), plongest (CORE_ADDR_MAX - sp));
Jan Kratochvil 92b52c5
+
Jan Kratochvil 92b52c5
   sp -= accumulate_size;
Jan Kratochvil 92b52c5
 
Jan Kratochvil 92b52c5
   /* Keep sp aligned to a multiple of 16 as the ABI requires.  */
Jan Kratochvil c4c35c2
Index: gdb-7.10.90.20160211/gdb/cp-valprint.c
Jan Kratochvil 92b52c5
===================================================================
Jan Kratochvil c4c35c2
--- gdb-7.10.90.20160211.orig/gdb/cp-valprint.c	2016-02-11 20:56:59.224850729 +0100
Jan Kratochvil c4c35c2
+++ gdb-7.10.90.20160211/gdb/cp-valprint.c	2016-02-11 20:57:05.385891225 +0100
Jan Kratochvil c4c35c2
@@ -536,6 +536,8 @@
Jan Kratochvil 92b52c5
 		  gdb_byte *buf;
Jan Kratochvil 92b52c5
 		  struct cleanup *back_to;
Jan Kratochvil 92b52c5
 
Jan Kratochvil 92b52c5
+		  ulongest_fits_host_or_error (TYPE_LENGTH (baseclass));
Jan Kratochvil 92b52c5
+
Jan Kratochvil 23f398e
 		  buf = (gdb_byte *) xmalloc (TYPE_LENGTH (baseclass));
Jan Kratochvil 92b52c5
 		  back_to = make_cleanup (xfree, buf);
Jan Kratochvil 92b52c5
 
Jan Kratochvil c4c35c2
Index: gdb-7.10.90.20160211/gdb/dwarf2loc.c
Jan Kratochvil 92b52c5
===================================================================
Jan Kratochvil c4c35c2
--- gdb-7.10.90.20160211.orig/gdb/dwarf2loc.c	2016-02-11 20:56:59.225850736 +0100
Jan Kratochvil c4c35c2
+++ gdb-7.10.90.20160211/gdb/dwarf2loc.c	2016-02-11 20:57:05.386891231 +0100
Jan Kratochvil c4c35c2
@@ -1744,6 +1744,8 @@
Jan Kratochvil 92b52c5
 
Jan Kratochvil 92b52c5
       this_size = (this_size_bits + source_offset_bits % 8 + 7) / 8;
Jan Kratochvil 92b52c5
       source_offset = source_offset_bits / 8;
Jan Kratochvil 92b52c5
+      ulongest_fits_host_or_error (this_size);
Jan Kratochvil 92b52c5
+
Jan Kratochvil 92b52c5
       if (buffer_size < this_size)
Jan Kratochvil 92b52c5
 	{
Jan Kratochvil 92b52c5
 	  buffer_size = this_size;
Jan Kratochvil c4c35c2
@@ -1926,6 +1928,7 @@
Jan Kratochvil 92b52c5
 	}
Jan Kratochvil 92b52c5
       else
Jan Kratochvil 92b52c5
 	{
Jan Kratochvil 92b52c5
+	  ulongest_fits_host_or_error (this_size);
Jan Kratochvil 92b52c5
 	  if (buffer_size < this_size)
Jan Kratochvil 92b52c5
 	    {
Jan Kratochvil 92b52c5
 	      buffer_size = this_size;
Jan Kratochvil c4c35c2
Index: gdb-7.10.90.20160211/gdb/findcmd.c
Jan Kratochvil 92b52c5
===================================================================
Jan Kratochvil c4c35c2
--- gdb-7.10.90.20160211.orig/gdb/findcmd.c	2016-02-11 20:56:59.226850742 +0100
Jan Kratochvil c4c35c2
+++ gdb-7.10.90.20160211/gdb/findcmd.c	2016-02-11 20:57:05.387891238 +0100
Jan Kratochvil c4c35c2
@@ -184,6 +184,7 @@
Jan Kratochvil 92b52c5
 	  size_t current_offset = pattern_buf_end - pattern_buf;
Jan Kratochvil 92b52c5
 
Jan Kratochvil 92b52c5
 	  pattern_buf_size = pattern_buf_size_need * 2;
Jan Kratochvil 92b52c5
+	  ulongest_fits_host_or_error (pattern_buf_size);
Jan Kratochvil 23f398e
 	  pattern_buf = (gdb_byte *) xrealloc (pattern_buf, pattern_buf_size);
Jan Kratochvil 92b52c5
 	  pattern_buf_end = pattern_buf + current_offset;
Jan Kratochvil 92b52c5
 	}
Jan Kratochvil c4c35c2
Index: gdb-7.10.90.20160211/gdb/p-valprint.c
Jan Kratochvil 92b52c5
===================================================================
Jan Kratochvil c4c35c2
--- gdb-7.10.90.20160211.orig/gdb/p-valprint.c	2016-02-11 20:56:59.226850742 +0100
Jan Kratochvil c4c35c2
+++ gdb-7.10.90.20160211/gdb/p-valprint.c	2016-02-11 20:57:05.387891238 +0100
Jan Kratochvil c4c35c2
@@ -769,6 +769,7 @@
Jan Kratochvil 92b52c5
 	      gdb_byte *buf;
Jan Kratochvil 92b52c5
 	      struct cleanup *back_to;
Jan Kratochvil 92b52c5
 
Jan Kratochvil 92b52c5
+	      ulongest_fits_host_or_error (TYPE_LENGTH (baseclass));
Jan Kratochvil 23f398e
 	      buf = (gdb_byte *) xmalloc (TYPE_LENGTH (baseclass));
Jan Kratochvil 92b52c5
 	      back_to = make_cleanup (xfree, buf);
Jan Kratochvil 92b52c5
 
Jan Kratochvil c4c35c2
Index: gdb-7.10.90.20160211/gdb/utils.c
Jan Kratochvil 92b52c5
===================================================================
Jan Kratochvil c4c35c2
--- gdb-7.10.90.20160211.orig/gdb/utils.c	2016-02-11 20:56:59.227850749 +0100
Jan Kratochvil c4c35c2
+++ gdb-7.10.90.20160211/gdb/utils.c	2016-02-11 20:57:05.388891244 +0100
Jan Kratochvil c4c35c2
@@ -2837,6 +2837,18 @@
Jan Kratochvil eb6cb2d
   return addr;
Jan Kratochvil 92b52c5
 }
Jan Kratochvil 92b52c5
 
Jan Kratochvil 92b52c5
+/* Ensure that the input NUM is not larger than the maximum capacity of the
Jan Kratochvil 92b52c5
+   host system.  We choose SIZE_MAX / 8 as a conservative estimate of the size
Jan Kratochvil 92b52c5
+   of a resource that a system may allocate.  */
Jan Kratochvil 92b52c5
+void
Jan Kratochvil 92b52c5
+ulongest_fits_host_or_error (ULONGEST num)
Jan Kratochvil 92b52c5
+{
Jan Kratochvil 92b52c5
+  if (num > SIZE_MAX / 8)
Jan Kratochvil 92b52c5
+    error (_("Insufficient memory in host GDB for object of size %s bytes, "
Jan Kratochvil 92b52c5
+	     "maximum allowed %s bytes."), pulongest (num),
Jan Kratochvil 92b52c5
+	   pulongest (SIZE_MAX / 8));
Jan Kratochvil 92b52c5
+}
Jan Kratochvil 92b52c5
+
Jan Kratochvil 92b52c5
 char *
Jan Kratochvil 92b52c5
 gdb_realpath (const char *filename)
Jan Kratochvil 92b52c5
 {
Jan Kratochvil c4c35c2
Index: gdb-7.10.90.20160211/gdb/valops.c
Jan Kratochvil 92b52c5
===================================================================
Jan Kratochvil c4c35c2
--- gdb-7.10.90.20160211.orig/gdb/valops.c	2016-02-11 20:56:59.228850755 +0100
Jan Kratochvil c4c35c2
+++ gdb-7.10.90.20160211/gdb/valops.c	2016-02-11 20:57:05.389891251 +0100
Jan Kratochvil c4c35c2
@@ -2057,6 +2057,7 @@
Jan Kratochvil 92b52c5
 	      struct cleanup *back_to;
Jan Kratochvil 92b52c5
 	      CORE_ADDR address;
Jan Kratochvil 92b52c5
 
Jan Kratochvil 92b52c5
+	      ulongest_fits_host_or_error (TYPE_LENGTH (baseclass));
Jan Kratochvil 23f398e
 	      tmp = (gdb_byte *) xmalloc (TYPE_LENGTH (baseclass));
Jan Kratochvil 92b52c5
 	      back_to = make_cleanup (xfree, tmp);
Jan Kratochvil 92b52c5
 	      address = value_address (*arg1p);
Jan Kratochvil c4c35c2
Index: gdb-7.10.90.20160211/gdb/value.c
Jan Kratochvil 92b52c5
===================================================================
Jan Kratochvil c4c35c2
--- gdb-7.10.90.20160211.orig/gdb/value.c	2016-02-11 20:56:59.229850762 +0100
Jan Kratochvil c4c35c2
+++ gdb-7.10.90.20160211/gdb/value.c	2016-02-11 20:58:35.095480877 +0100
Jan Kratochvil c4c35c2
@@ -935,6 +935,7 @@
Jan Kratochvil 92b52c5
      description correctly.  */
Jan Kratochvil 92b52c5
   check_typedef (type);
Jan Kratochvil 92b52c5
 
Jan Kratochvil 92b52c5
+  ulongest_fits_host_or_error (TYPE_LENGTH (type));
Jan Kratochvil 23f398e
   val = XCNEW (struct value);
Jan Kratochvil 92b52c5
   val->contents = NULL;
Jan Kratochvil 92b52c5
   val->next = all_values;
Jan Kratochvil c4c35c2
@@ -1034,6 +1035,8 @@
Jan Kratochvil 2c55a54
 static void
Jan Kratochvil 92b52c5
 allocate_value_contents (struct value *val)
Jan Kratochvil 92b52c5
 {
Jan Kratochvil 92b52c5
+  ulongest_fits_host_or_error (TYPE_LENGTH (val->enclosing_type));
Jan Kratochvil 92b52c5
+
Jan Kratochvil 92b52c5
   if (!val->contents)
Jan Kratochvil c4c35c2
     {
Jan Kratochvil c4c35c2
       check_type_length_before_alloc (val->enclosing_type);
Jan Kratochvil c4c35c2
@@ -3090,6 +3093,7 @@
Jan Kratochvil c4c35c2
   if (TYPE_LENGTH (new_encl_type) > TYPE_LENGTH (value_enclosing_type (val)))
Jan Kratochvil c4c35c2
     {
Jan Kratochvil c4c35c2
       check_type_length_before_alloc (new_encl_type);
Jan Kratochvil 92b52c5
+      ulongest_fits_host_or_error (TYPE_LENGTH (new_encl_type));
Jan Kratochvil c4c35c2
       val->contents
Jan Kratochvil c4c35c2
 	= (gdb_byte *) xrealloc (val->contents, TYPE_LENGTH (new_encl_type));
Jan Kratochvil c4c35c2
     }
Jan Kratochvil c4c35c2
Index: gdb-7.10.90.20160211/gdb/vax-tdep.c
Jan Kratochvil 92b52c5
===================================================================
Jan Kratochvil c4c35c2
--- gdb-7.10.90.20160211.orig/gdb/vax-tdep.c	2016-02-11 20:56:59.229850762 +0100
Jan Kratochvil c4c35c2
+++ gdb-7.10.90.20160211/gdb/vax-tdep.c	2016-02-11 20:57:05.391891264 +0100
Jan Kratochvil c4c35c2
@@ -219,6 +219,7 @@
Jan Kratochvil 92b52c5
 	  ULONGEST addr;
Jan Kratochvil 92b52c5
 
Jan Kratochvil 92b52c5
 	  regcache_raw_read_unsigned (regcache, VAX_R0_REGNUM, &addr);
Jan Kratochvil 92b52c5
+	  ulongest_fits_host_or_error (TYPE_LENGTH (type));
Jan Kratochvil 556378e
 	  read_memory (addr, readbuf, len);
Jan Kratochvil 92b52c5
 	}
Jan Kratochvil 92b52c5
 
Jan Kratochvil c4c35c2
Index: gdb-7.10.90.20160211/gdb/defs.h
Jan Kratochvil 92b52c5
===================================================================
Jan Kratochvil c4c35c2
--- gdb-7.10.90.20160211.orig/gdb/defs.h	2016-02-11 20:56:59.229850762 +0100
Jan Kratochvil c4c35c2
+++ gdb-7.10.90.20160211/gdb/defs.h	2016-02-11 20:57:05.391891264 +0100
Jan Kratochvil c4c35c2
@@ -690,4 +690,6 @@
Jan Kratochvil 556378e
 
Jan Kratochvil 556378e
 #include "utils.h"
Jan Kratochvil 92b52c5
 
Jan Kratochvil 92b52c5
+extern void ulongest_fits_host_or_error (ULONGEST num);
Jan Kratochvil 92b52c5
+
Jan Kratochvil 92b52c5
 #endif /* #ifndef DEFS_H */