Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 27 Jan 2008 18:41:36 GMT
From:      Patrick Lamaiziere <patpr@davenulle.org>
To:        freebsd-gnats-submit@FreeBSD.org
Subject:   misc/120055: kdump segfaults on freebsd6_mmap syscall
Message-ID:  <200801271841.m0RIfaO2065209@www.freebsd.org>
Resent-Message-ID: <200801271850.m0RIo0tQ030617@freefall.freebsd.org>

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

>Number:         120055
>Category:       misc
>Synopsis:       kdump segfaults on freebsd6_mmap syscall
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Sun Jan 27 18:50:00 UTC 2008
>Closed-Date:
>Last-Modified:
>Originator:     Patrick Lamaiziere
>Release:        RELENG_7_0
>Organization:
>Environment:
FreeBSD roxette.lamaiziere.net 7.0-RC1 FreeBSD 7.0-RC1 #0: Fri Jan 25 18:06:03 CET 2008     patrick@roxette.lamaiziere.net:/usr/obj/usr/src/sys/ROXETTE  i386

>Description:
kdump crashs with a segfault when dumping the content of the syscall freebsd6_mmap :

$ kdump
 69472 bash     CALL freebsd6_mmap(0x3,0xbfbfdeb8,<invalid>672202704,MAP_SHARED|[CUT],0,0,...
<SEGFAULT>

I've inserted some printf() in /usr/src/usr.bin/kdump/kdump.c and the problem is that ktr->narg is equal to 3 when ktrsyscall() is called for this syscall.

Line 305,/usr/src/usr.bin/kdump/kdump.c
void
ktrsyscall(struct ktr_syscall *ktr)
{
   int narg = ktr->ktr_narg;
   register_t *ip;
[CUT]
#ifdef SYS_freebsd6_mmap
   } else if (ktr->ktr_code == SYS_freebsd6_mmap) {
             print_number(ip,narg,c);
             print_number(ip,narg,c);
             (void)putchar(',');
             mmapprotname ((int)*ip);
             (void)putchar(',');
             ip++;
             narg--;
             mmapflagsname ((int)*ip);
             ip++;
             narg--;

Here narg = -1 because the macro print_number() decrements narg.
So a after, it loops until it segfaults:
[CUT]
  while (narg) {
                 print_number(ip,narg,c);
               }
 (void)putchar(')');

For a fix, a "while (narg>0)" will be safer but i don't know if this is a bug on the call, a bug on ktrace or only a bug in kdump.

Regards.
>How-To-Repeat:
The krace.out (gziped) can be found here :

http://user.lamaiziere.net/patrick/ktrace.out.gz
>Fix:


>Release-Note:
>Audit-Trail:
>Unformatted:



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