Bug 14321

Summary: find may clobber memory
Product: gdb Reporter: Jan Kratochvil <jan>
Component: cliAssignee: Not yet assigned to anyone <unassigned>
Status: RESOLVED FIXED    
Severity: normal    
Priority: P2    
Version: HEAD   
Target Milestone: ---   
Host: Target:
Build: Last reconfirmed:

Description Jan Kratochvil 2012-07-01 18:51:04 UTC
GNU gdb (GDB) 7.4.50.20120630-cvs
./gdb ./gdb
(gdb) find main,+100000000,xop_table
memory clobbered past end of allocated block

This code does not expect val_bytes can be huge:
findcmd.c:
      /* Keep it simple and assume size == 'g' when watching for when we
         need to grow the pattern buf.  */
      if ((pattern_buf_end - pattern_buf + max (val_bytes, sizeof (int64_t)))
          > pattern_buf_size)
        {
          size_t current_offset = pattern_buf_end - pattern_buf;

          pattern_buf_size *= 2;
          pattern_buf = xrealloc (pattern_buf, pattern_buf_size);
          pattern_buf_end = pattern_buf + current_offset;
        }
Comment 1 Sourceware Commits 2012-07-06 15:51:43 UTC
CVSROOT:	/cvs/src
Module name:	src
Changes by:	jkratoch@sourceware.org	2012-07-06 15:51:40

Modified files:
	gdb            : ChangeLog findcmd.c 
	gdb/testsuite  : ChangeLog 
	gdb/testsuite/gdb.base: find.exp 

Log message:
	gdb/
	PR 14321
	* findcmd.c (parse_find_args): New variable pattern_buf_size_need.
	Increase buffer sizes to 2x we need, not just 2x of the previous size.
	
	gdb/testsuite/
	PR 14321
	* gdb.base/find.exp
	(find int64_search_buf, +64/8*100, int64_search_buf): New test.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/ChangeLog.diff?cvsroot=src&r1=1.14443&r2=1.14444
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/findcmd.c.diff?cvsroot=src&r1=1.18&r2=1.19
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/testsuite/ChangeLog.diff?cvsroot=src&r1=1.3278&r2=1.3279
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/testsuite/gdb.base/find.exp.diff?cvsroot=src&r1=1.11&r2=1.12
Comment 2 Jan Kratochvil 2012-07-06 15:54:38 UTC
Checked in.