Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 2 May 1997 16:05:21 -0700 (PDT)
From:      Bruce Cole <cole@jnx.com>
To:        FreeBSD-gnats-submit@FreeBSD.ORG
Cc:        cole@jnx.com
Subject:   kern/3475: gdb(ptrace?) cause create/modify times on executable to change
Message-ID:  <199705022305.QAA12475@dakine.jnx.com>
Resent-Message-ID: <199705022310.QAA29260@hub.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         3475
>Category:       kern
>Synopsis:       gdb(ptrace?) cause create/modify times on executable to change
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          open
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Fri May  2 16:10:02 PDT 1997
>Last-Modified:
>Originator:     Bruce Cole
>Organization:
Juniper Networks
>Release:        FreeBSD 2.200-Juniper i386
>Environment:

        Problem is seen on kernels based upon 2.2.1-RELEASE.

>Description:

        Gdb'ing an executable and setting a breakpoint often results in
        the creation and modification times on the gdb'd executable changing.
        When you rerun the executable from under gdb, gdb complains that the
        executable has changed (however it hasn't really at all).  When
        the executable is NFS mounted, this can result in the program dying
        due to alleged text segment modification.

	The problem happens even when the user does not have write access
	to the executable that is being debugged!

        It seems that something is going wrong in the kernel.  When ptrace()
        goes to set a breakpoint in the executable, I'd expect a copy on
        write operation to occur, and for the executable's 
	creation/modification dates to remain untouched.

>How-To-Repeat:

Script started on Fri May  2 15:57:12 1997
dakine(cole): cat >! test.c
main()
{
	printf("Hello world\n");
}
dakine(cole): cc -g -o test test.c
dakine(cole): ls -l test
-rwxrwxr-x  1 cole  cole  9790 May  2 15:57 test*
dakine(cole): date
Fri May 02 03:58:00 PM
dakine(cole): gdb test
GDB is free software and you are welcome to distribute copies of it
 under certain conditions; type "show copying" to see the conditions.
There is absolutely no warranty for GDB; type "show warranty" for details.
GDB 4.16 (i386-unknown-freebsd3.0), 
Copyright 1996 Free Software Foundation, Inc...
(gdb) break main
Breakpoint 1 at 0x1598: file test.c, line 3.
(gdb) run
Starting program: /usr/home/cole/test/test -N -f ~/conf/com.conf

Breakpoint 1, main () at test.c:3
3		printf("Hello world\n");
(gdb) 
Suspended
dakine(cole): ls -l test
-rwxrwxr-x  1 cole  cole  9790 May  2 15:57 test*
dakine(cole): sync
dakine(cole): ls -l test
-rwxrwxr-x  1 cole  cole  9790 May  2 15:58 test*
dakine(cole): fg
gdb test
(gdb) run
The program being debugged has been started already.
Start it from the beginning? (y or n) y
`/usr/home/cole/test/test' has changed; re-reading symbols.
Starting program: /usr/home/cole/test/test -N -f ~/conf/com.conf

Breakpoint 1, main () at test.c:3
3		printf("Hello world\n");
(gdb) quit
The program is running.  Quit anyway (and kill it)? (y or n) y
dakine(cole): ^Dexit

Script done on Fri May  2 15:58:20 1997


>Fix:
	
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199705022305.QAA12475>