Bug 14321 - find may clobber memory
Summary: find may clobber memory
Status: RESOLVED FIXED
Alias: None
Product: gdb
Classification: Unclassified
Component: cli (show other bugs)
Version: HEAD
: P2 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2012-07-01 18:51 UTC by Jan Kratochvil
Modified: 2012-07-06 15:54 UTC (History)
0 users

See Also:
Host:
Target:
Build:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
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.