From archie@packetdesign.com  Wed Dec  4 11:59:02 2002
Return-Path: <archie@packetdesign.com>
Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125])
	by hub.freebsd.org (Postfix) with ESMTP id D4CBD37B401
	for <FreeBSD-gnats-submit@freebsd.org>; Wed,  4 Dec 2002 11:59:02 -0800 (PST)
Received: from mailman.packetdesign.com (dns.packetdesign.com [65.192.41.10])
	by mx1.FreeBSD.org (Postfix) with ESMTP id 60EA443EAF
	for <FreeBSD-gnats-submit@freebsd.org>; Wed,  4 Dec 2002 11:59:02 -0800 (PST)
	(envelope-from archie@packetdesign.com)
Received: from bubba.packetdesign.com (bubba.packetdesign.com [192.168.0.223])
	by mailman.packetdesign.com (8.12.3/8.12.3) with ESMTP id gB4Jx2nL067669
	for <FreeBSD-gnats-submit@freebsd.org>; Wed, 4 Dec 2002 11:59:02 -0800 (PST)
	(envelope-from archie@packetdesign.com)
Received: from bubba.packetdesign.com (localhost [127.0.0.1])
	by bubba.packetdesign.com (8.12.6/8.12.6) with ESMTP id gB4Jx1mD068578
	for <FreeBSD-gnats-submit@freebsd.org>; Wed, 4 Dec 2002 11:59:01 -0800 (PST)
	(envelope-from archie@bubba.packetdesign.com)
Received: (from archie@localhost)
	by bubba.packetdesign.com (8.12.6/8.12.6/Submit) id gB4Jx15C068577;
	Wed, 4 Dec 2002 11:59:01 -0800 (PST)
Message-Id: <200212041959.gB4Jx15C068577@bubba.packetdesign.com>
Date: Wed, 4 Dec 2002 11:59:01 -0800 (PST)
From: Archie Cobbs <archie@packetdesign.com>
Reply-To: Archie Cobbs <archie@packetdesign.com>
To: FreeBSD-gnats-submit@freebsd.org
Cc:
Subject: Pages marked read-only via mprotect() are zeroed in core files
X-Send-Pr-Version: 3.113
X-GNATS-Notify:

>Number:         45994
>Category:       kern
>Synopsis:       Pages marked read-only via mprotect() are zeroed in core files
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Wed Dec 04 12:00:00 PST 2002
>Closed-Date:    Mon Dec 16 11:24:46 PST 2002
>Last-Modified:  Mon Dec 16 11:24:46 PST 2002
>Originator:     Archie Cobbs
>Release:        FreeBSD 4.7-PRERELEASE i386
>Organization:
Packet Design
>Environment:

FYI this also happens on -current.

System: FreeBSD bubba.packetdesign.com 4.7-PRERELEASE FreeBSD 4.7-PRERELEASE #0: Sat Sep 14 10:55:14 PDT 2002 archie@bubba.packetdesign.com:/usr/obj/usr/src/sys/BUBBA i386

>Description:

	Program marks a page read-only via mprotect(2).
	Program gets a fatal signal and dumps core.
	GDB is then run on the core file.

	Problem: the mprotected()'ed page is all zeroes, even though
	the page had non-zero contents when the program was actually
	running.

	If the program is run directly under GDB, this does not happen.

>How-To-Repeat:

$ cat > mprotect.c

#include <stdlib.h>
#include <stdio.h>
#include <signal.h>
#include <err.h>

#include <sys/types.h>
#include <sys/mman.h>

#define PGPROTECT       4096

static char     buf[PGPROTECT+1]  __attribute__ ((aligned(PGPROTECT)));

static void
sighandler(int signum)
{
        switch (signum) {
        case SIGBUS:
        case SIGSEGV:
#if 0
                /* Uncomment this and buf is dumped properly in the core file */
                if (mprotect(buf, PGPROTECT, PROT_READ | PROT_WRITE) == -1)
                        err(1, "mprotect");
#endif
                abort();
        }
}

int
main(int argc, char *argv[])
{
        int prot_mode = PROT_READ;
        int len;

        signal(SIGBUS, sighandler);
        signal(SIGSEGV, sighandler);

        strcpy(buf, "This is a test");
        len = strlen(buf);

        if (mprotect(buf, PGPROTECT, prot_mode) == -1)
                err(1, "mprotect(PROT_READ)");

        printf("buf: %s\n", buf);
        buf[len] = '!';

        printf("buf: %s\n", buf);
        return (0);
}

^D
$ cc -g -Wall -o mprotect mprotect.c
$ ./mprotect
buf: This is a test
Abort(core dumped)
$ gdb mprotect mprotect.core
GNU gdb 4.18 (FreeBSD)
Copyright 1998 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or 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.
This GDB was configured as "i386-unknown-freebsd"...Deprecated bfd_read called at /usr/src/gnu/usr.bin/binutils/gdb/../../../../contrib/gdb/gdb/dbxread.c line 2627 in elfstab_build_psymtabs
Deprecated bfd_read called at /usr/src/gnu/usr.bin/binutils/gdb/../../../../contrib/gdb/gdb/dbxread.c line 933 in fill_symbuf

Core was generated by `mprotect'.
Program terminated with signal 6, Abort trap.
Reading symbols from /usr/lib/libc.so.4...done.
Reading symbols from /usr/libexec/ld-elf.so.1...done.
#0  0x2809c50c in kill () from /usr/lib/libc.so.4
(gdb) x/16b buf
0x804b000 <buf>:        0x00    0x00    0x00    0x00    0x00    0x00    0x00   0x00
0x804b008 <buf+8>:      0x00    0x00    0x00    0x00    0x00    0x00    0x00   0x00
(gdb) 


>Fix:

Unknown.


>Release-Note:
>Audit-Trail:

From: "Peter Edwards" <pmedwards@eircom.net>
To: archie@packetdesign.com, freebsd-gnats-submit@freebsd.org
Cc:  
Subject: Re: kern/45994: Pages marked read-only via mprotect are zeroed in core files
Date: Mon, 9 Dec 2002 20:55:47 +0000

 Hi,
 sys/kern/imgact_elf.c's each_writable_segment iterates over the processes
 vm map, and works out what pages need to go into the core file. It ignores
 any vm entries that are not read/write, as well as those marked with a 
 "no coredump" flag.
 
 In order to get the elf image activator to dump read-only data in the core
 file, you need to allow this to output readonly segments.
 
 The patch below does that, by adding a debug sysctl, "debug.elf_bigcore".
 However, note that this will dump _any_ segment that is readonly, including
 text segments and read-only segments from executables. This will make the
 core files quite large, particularly for programs that load a lot of shared
 libraries. It might, however, allow you to debug a problem more easily than
 you were able to before, so I hope its useful.
 
 I imagine a more complete fix is to start using MAP_NOCORE properly, so
 that both the dynamic linker and the kernel itself use it on readonly
 sections of loaded executables.
 
 If anyone agrees, I'm willing to submit patches to elf_imgact and rtld_elf
 to do that: I just don't want to do the grunt-work if no one's interested.
 -- 
 Peter Edwards.
 
 diff -u -r1.73.2.11 imgact_elf.c
 --- imgact_elf.c        9 Sep 2002 17:38:47 -0000       1.73.2.11
 +++ imgact_elf.c        9 Dec 2002 20:22:59 -0000
 @@ -79,7 +79,10 @@
  static int exec_elf_imgact __P((struct image_params *imgp));
  
  static int elf_trace = 0;
 +static int elf_bigcore = 0;
 +
  SYSCTL_INT(_debug, OID_AUTO, elf_trace, CTLFLAG_RW, &elf_trace, 0, "");
 +SYSCTL_INT(_debug, OID_AUTO, elf_bigcore, CTLFLAG_RW, &elf_bigcore, 0, "");
  
  static struct sysentvec elf_freebsd_sysvec = {
          SYS_MAXSYSCALL,
 @@ -493,6 +496,11 @@
          * From this point on, we may have resources that need to be freed.
          */
  
 +       if ((error = exec_extract_strings(imgp)) != 0)
 +               goto fail;
 +
 +       exec_new_vmspace(imgp);
 +
         /*
          * Yeah, I'm paranoid.  There is every reason in the world to get
          * VTEXT now since from here on out, there are places we can have
 @@ -503,11 +511,6 @@
         imgp->vp->v_flag |= VTEXT;
         simple_unlock(&imgp->vp->v_interlock);
  
 -       if ((error = exec_extract_strings(imgp)) != 0)
 -               goto fail;
 -
 -       exec_new_vmspace(imgp);
 -
         vmspace = imgp->proc->p_vmspace;
  
         for (i = 0; i < hdr->e_phnum; i++) {
 @@ -887,6 +890,7 @@
                 vm_object_t obj;
  
                 if ((entry->eflags & MAP_ENTRY_IS_SUB_MAP) ||
 +                   !elf_bigcore &&
                     (entry->protection & (VM_PROT_READ|VM_PROT_WRITE)) !=
                     (VM_PROT_READ|VM_PROT_WRITE))
                         continue;
 
 
 
 
 

From: Archie Cobbs <archie@packetdesign.com>
To: Peter Edwards <pmedwards@eircom.net>
Cc: freebsd-gnats-submit@freebsd.org
Subject: Re: kern/45994: Pages marked read-only via mprotect are zeroed in
 core files
Date: Mon, 09 Dec 2002 15:03:37 -0800

 Peter Edwards wrote:
 > sys/kern/imgact_elf.c's each_writable_segment iterates over the processes
 > vm map, and works out what pages need to go into the core file. It ignores
 > any vm entries that are not read/write, as well as those marked with a 
 > "no coredump" flag.
 > 
 > In order to get the elf image activator to dump read-only data in the core
 > file, you need to allow this to output readonly segments.
 > 
 > The patch below does that, by adding a debug sysctl, "debug.elf_bigcore".
 > However, note that this will dump _any_ segment that is readonly, including
 > text segments and read-only segments from executables. This will make the
 > core files quite large, particularly for programs that load a lot of shared
 > libraries. It might, however, allow you to debug a problem more easily than
 > you were able to before, so I hope its useful.
 
 Thanks!
 
 > I imagine a more complete fix is to start using MAP_NOCORE properly, so
 > that both the dynamic linker and the kernel itself use it on readonly
 > sections of loaded executables.
 > 
 > If anyone agrees, I'm willing to submit patches to elf_imgact and rtld_elf
 > to do that: I just don't want to do the grunt-work if no one's interested.
 
 I think this is a necessary change, so I at least would be interested.
 
 There are lots of important uses for mapping pages read-only, e.g., when
 using malloc debugging libraries such as electric fence, etc. Moreover,
 the current behavior is broken, plain and simple.
 
 It sounds like the MAP_NOCORE change would not cost any performance,
 in which case I don't see why anyone would object to it.
 
 Thanks!
 -Archie
 
 __________________________________________________________________________
 Archie Cobbs     *     Packet Design     *     http://www.packetdesign.com
 

From: "Peter Edwards" <pmedwards@eircom.net>
To: Archie Cobbs <archie@packetdesign.com>,
	Peter Edwards <pmedwards@eircom.net>
Cc: freebsd-gnats-submit@freebsd.org
Subject: Re: kern/45994: Pages marked read-only via mprotect are zeroed in core files
Date: Tue, 10 Dec 2002 18:58:30 +0000

 This is a multi-part message in MIME format.
 ---------O55DF2D7B4YK0IC6O5NW1WAD
 Content-Type: text/plain
 Content-Transfer-Encoding: 7bit
 
 Ok.
 I had a quick look, and it was easier than I thought.
 The following patch (which should be applied _instead_ of the noddy one I
 previously posted) Does the following
 
 1: Update rtld_elf's map_object to set MAP_NOCORE when mmap()ing readonly
 sections.
 
 2: Causes elf_load_section (kern/imgact_elf.c) to do the same (by passing
 MAP_DISABLE_COREDUMP to the "COW" flags of vm_map_insert())
 
 3: Reverses the polarity of the sysctl from the old patch, so, by default
 the corefiles _include_ readonly pages.
 
 A quick test shows that both a static and dynamic executable produce
 corefiles of the same size, irrespective of the setting of this flag, and
 a simple program that mmaps a chunk of anonymous readonly data is grows
 and shrinks by the size of the extra mmaped data, depending on the setting
 of the sysctl.
 
 Archie, I'd appreciate any feedback if you install this patch. I'll be
 running a kernel with it here, anyway. Reviews from any VM hackers would
 be probably an idea, before committing :-)
 Cheers,
 Peter.
 
 
 ---------O55DF2D7B4YK0IC6O5NW1WAD
 Content-Type: application/octet-stream
 Content-Disposition: attachment; filename="coredump.diff"
 Content-Transfer-Encoding: base64
 
 SW5kZXg6IGxpYmV4ZWMvcnRsZC1lbGYvbWFwX29iamVjdC5jCj09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9wdWIvRnJlZUJTRC9kZXZlbG9w
 bWVudC9GcmVlQlNELUNWUy9zcmMvbGliZXhlYy9ydGxkLWVsZi9tYXBfb2Jq
 ZWN0LmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNy4yLjEKZGlmZiAtdSAt
 cjEuNy4yLjEgbWFwX29iamVjdC5jCi0tLSBsaWJleGVjL3J0bGQtZWxmL21h
 cF9vYmplY3QuYwkyOSBOb3YgMjAwMiAxNjowNToxNCAtMDAwMAkxLjcuMi4x
 CisrKyBsaWJleGVjL3J0bGQtZWxmL21hcF9vYmplY3QuYwkxMCBEZWMgMjAw
 MiAxNTowMjo1OSAtMDAwMApAQCAtMzcsNyArMzcsOCBAQAogCiAjaW5jbHVk
 ZSAicnRsZC5oIgogCi1zdGF0aWMgaW50IHByb3RmbGFncyhpbnQpOwkvKiBF
 bGYgZmxhZ3MgLT4gbW1hcCBwcm90ZWN0aW9uICovCitzdGF0aWMgaW50IGNv
 bnZlcnRfcHJvdChpbnQpOwkvKiBFbGYgZmxhZ3MgLT4gbW1hcCBwcm90ZWN0
 aW9uICovCitzdGF0aWMgaW50IGNvbnZlcnRfZmxhZ3MoaW50KTsgLyogRWxm
 IGZsYWdzIC0+IG1tYXAgZmxhZ3MgKi8KIAogLyoKICAqIE1hcCBhIHNoYXJl
 ZCBvYmplY3QgaW50byBtZW1vcnkuICBUaGUgImZkIiBhcmd1bWVudCBpcyBh
 IGZpbGUgZGVzY3JpcHRvciwKQEAgLTc0LDYgKzc1LDcgQEAKICAgICBFbGZf
 QWRkciBkYXRhX3ZsaW1pdDsKICAgICBjYWRkcl90IGRhdGFfYWRkcjsKICAg
 ICBpbnQgZGF0YV9wcm90OworICAgIGludCBkYXRhX2ZsYWdzOwogICAgIEVs
 Zl9BZGRyIGNsZWFyX3ZhZGRyOwogICAgIGNhZGRyX3QgY2xlYXJfYWRkcjsK
 ICAgICBjYWRkcl90IGNsZWFyX3BhZ2U7CkBAIC0xODgsOCArMTkwLDggQEAK
 ICAgICBtYXBzaXplID0gYmFzZV92bGltaXQgLSBiYXNlX3ZhZGRyOwogICAg
 IGJhc2VfYWRkciA9IHUuaGRyLmVfdHlwZSA9PSBFVF9FWEVDID8gKGNhZGRy
 X3QpIGJhc2VfdmFkZHIgOiBOVUxMOwogCi0gICAgbWFwYmFzZSA9IG1tYXAo
 YmFzZV9hZGRyLCBtYXBzaXplLCBwcm90ZmxhZ3Moc2Vnc1swXS0+cF9mbGFn
 cyksCi0gICAgICBNQVBfUFJJVkFURSwgZmQsIGJhc2Vfb2Zmc2V0KTsKKyAg
 ICBtYXBiYXNlID0gbW1hcChiYXNlX2FkZHIsIG1hcHNpemUsIGNvbnZlcnRf
 cHJvdChzZWdzWzBdLT5wX2ZsYWdzKSwKKyAgICAgIGNvbnZlcnRfZmxhZ3Mo
 c2Vnc1swXS0+cF9mbGFncyksIGZkLCBiYXNlX29mZnNldCk7CiAgICAgaWYg
 KG1hcGJhc2UgPT0gKGNhZGRyX3QpIC0xKSB7CiAJX3J0bGRfZXJyb3IoIiVz
 OiBtbWFwIG9mIGVudGlyZSBhZGRyZXNzIHNwYWNlIGZhaWxlZDogJXMiLAog
 CSAgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKQEAgLTIwOCwxMCArMjEwLDEx
 IEBACiAJZGF0YV92YWRkciA9IHRydW5jX3BhZ2Uoc2Vnc1tpXS0+cF92YWRk
 cik7CiAJZGF0YV92bGltaXQgPSByb3VuZF9wYWdlKHNlZ3NbaV0tPnBfdmFk
 ZHIgKyBzZWdzW2ldLT5wX2ZpbGVzeik7CiAJZGF0YV9hZGRyID0gbWFwYmFz
 ZSArIChkYXRhX3ZhZGRyIC0gYmFzZV92YWRkcik7Ci0JZGF0YV9wcm90ID0g
 cHJvdGZsYWdzKHNlZ3NbaV0tPnBfZmxhZ3MpOworCWRhdGFfcHJvdCA9IGNv
 bnZlcnRfcHJvdChzZWdzW2ldLT5wX2ZsYWdzKTsKKwlkYXRhX2ZsYWdzID0g
 Y29udmVydF9mbGFncyhzZWdzW2ldLT5wX2ZsYWdzKSB8IE1BUF9GSVhFRDsK
 IAkvKiBEbyBub3QgY2FsbCBtbWFwIG9uIHRoZSBmaXJzdCBzZWdtZW50IC0g
 dGhpcyBpcyByZWR1bmRhbnQgKi8KIAlpZiAoaSAmJiBtbWFwKGRhdGFfYWRk
 ciwgZGF0YV92bGltaXQgLSBkYXRhX3ZhZGRyLCBkYXRhX3Byb3QsCi0JICBN
 QVBfUFJJVkFURXxNQVBfRklYRUQsIGZkLCBkYXRhX29mZnNldCkgPT0gKGNh
 ZGRyX3QpIC0xKSB7CisJICBkYXRhX2ZsYWdzLCBmZCwgZGF0YV9vZmZzZXQp
 ID09IChjYWRkcl90KSAtMSkgewogCSAgICBfcnRsZF9lcnJvcigiJXM6IG1t
 YXAgb2YgZGF0YSBmYWlsZWQ6ICVzIiwgcGF0aCwgc3RyZXJyb3IoZXJybm8p
 KTsKIAkgICAgcmV0dXJuIE5VTEw7CiAJfQpAQCAtMzE0LDcgKzMxNyw3IEBA
 CiAgKiBmbGFncyBmb3IgTU1BUC4KICAqLwogc3RhdGljIGludAotcHJvdGZs
 YWdzKGludCBlbGZmbGFncykKK2NvbnZlcnRfcHJvdChpbnQgZWxmZmxhZ3Mp
 CiB7CiAgICAgaW50IHByb3QgPSAwOwogICAgIGlmIChlbGZmbGFncyAmIFBG
 X1IpCkBAIC0zMjQsNCArMzI3LDE4IEBACiAgICAgaWYgKGVsZmZsYWdzICYg
 UEZfWCkKIAlwcm90IHw9IFBST1RfRVhFQzsKICAgICByZXR1cm4gcHJvdDsK
 K30KKworc3RhdGljIGludAorY29udmVydF9mbGFncyhpbnQgZWxmZmxhZ3Mp
 Cit7CisgICAgaW50IGZsYWdzID0gTUFQX1BSSVZBVEU7IC8qIEFsbCBtYXBw
 aW5ncyBhcmUgcHJpdmF0ZSAqLworCisgICAgLyoKKyAgICAgKiBSZWFkb25s
 eSBtYXBwaW5ncyBhcmUgbWFya2VkICJNQVBfTk9DT1JFIiwgYmVjYXVzZSB0
 aGV5IGNhbiBiZQorICAgICAqIHJlY29uc3RydWN0ZWQgYnkgYSBkZWJ1Z2dl
 ci4KKyAgICAgKi8KKyAgICBpZiAoIShlbGZmbGFncyAmIFBGX1cpKQorCWZs
 YWdzIHw9IE1BUF9OT0NPUkU7CisgICAgcmV0dXJuIGZsYWdzOwogfQpJbmRl
 eDogc3lzL2tlcm4vaW1nYWN0X2VsZi5jCj09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT0KUkNTIGZpbGU6IC9wdWIvRnJlZUJTRC9kZXZlbG9wbWVudC9GcmVlQlNE
 LUNWUy9zcmMvc3lzL2tlcm4vaW1nYWN0X2VsZi5jLHYKcmV0cmlldmluZyBy
 ZXZpc2lvbiAxLjczLjIuMTEKZGlmZiAtdSAtcjEuNzMuMi4xMSBpbWdhY3Rf
 ZWxmLmMKLS0tIHN5cy9rZXJuL2ltZ2FjdF9lbGYuYwk5IFNlcCAyMDAyIDE3
 OjM4OjQ3IC0wMDAwCTEuNzMuMi4xMQorKysgc3lzL2tlcm4vaW1nYWN0X2Vs
 Zi5jCTEwIERlYyAyMDAyIDE4OjQ4OjQ3IC0wMDAwCkBAIC03OSw3ICs3OSwx
 MCBAQAogc3RhdGljIGludCBleGVjX2VsZl9pbWdhY3QgX19QKChzdHJ1Y3Qg
 aW1hZ2VfcGFyYW1zICppbWdwKSk7CiAKIHN0YXRpYyBpbnQgZWxmX3RyYWNl
 ID0gMDsKK3N0YXRpYyBpbnQgZWxmX2R1bXByZWFkb25seSA9IDA7CisKIFNZ
 U0NUTF9JTlQoX2RlYnVnLCBPSURfQVVUTywgZWxmX3RyYWNlLCBDVExGTEFH
 X1JXLCAmZWxmX3RyYWNlLCAwLCAiIik7CitTWVNDVExfSU5UKF9kZWJ1Zywg
 T0lEX0FVVE8sIGVsZl9kdW1wcmVhZG9ubHksIENUTEZMQUdfUlcsICZlbGZf
 ZHVtcHJlYWRvbmx5LCAwLCAiIik7CiAKIHN0YXRpYyBzdHJ1Y3Qgc3lzZW50
 dmVjIGVsZl9mcmVlYnNkX3N5c3ZlYyA9IHsKICAgICAgICAgU1lTX01BWFNZ
 U0NBTEwsCkBAIC0xODUsNyArMTg4LDcgQEAKIHsKIAlzaXplX3QgbWFwX2xl
 bjsKIAl2bV9vZmZzZXRfdCBtYXBfYWRkcjsKLQlpbnQgZXJyb3IsIHJ2Owor
 CWludCBlcnJvciwgcnYsIGNvdzsKIAlzaXplX3QgY29weV9sZW47CiAJdm1f
 b2JqZWN0X3Qgb2JqZWN0OwogCXZtX29mZnNldF90IGZpbGVfYWRkcjsKQEAg
 LTIyNSw2ICsyMjgsMTEgQEAKIAogCWlmIChtYXBfbGVuICE9IDApIHsKIAkJ
 dm1fb2JqZWN0X3JlZmVyZW5jZShvYmplY3QpOworCisJCS8qIGNvdyBmbGFn
 czogZG9uJ3QgZHVtcCByZWFkb25seSBzZWN0aW9ucyBpbiBjb3JlICovCisJ
 CWNvdyA9IE1BUF9DT1BZX09OX1dSSVRFIHwgTUFQX1BSRUZBVUxUIHwKKwkJ
 ICAgIChwcm90ICYgVk1fUFJPVF9XUklURSA/IDAgOiBNQVBfRElTQUJMRV9D
 T1JFRFVNUCk7CisKIAkJdm1fbWFwX2xvY2soJnZtc3BhY2UtPnZtX21hcCk7
 CiAJCXJ2ID0gdm1fbWFwX2luc2VydCgmdm1zcGFjZS0+dm1fbWFwLAogCQkJ
 CSAgICAgIG9iamVjdCwKQEAgLTIzMyw3ICsyNDEsNyBAQAogCQkJCSAgICAg
 IG1hcF9hZGRyICsgbWFwX2xlbiwvKiB2aXJ0dWFsIGVuZCAqLwogCQkJCSAg
 ICAgIHByb3QsCiAJCQkJICAgICAgVk1fUFJPVF9BTEwsCi0JCQkJICAgICAg
 TUFQX0NPUFlfT05fV1JJVEUgfCBNQVBfUFJFRkFVTFQpOworCQkJCSAgICAg
 IGNvdyk7CiAJCXZtX21hcF91bmxvY2soJnZtc3BhY2UtPnZtX21hcCk7CiAJ
 CWlmIChydiAhPSBLRVJOX1NVQ0NFU1MpIHsKIAkJCXZtX29iamVjdF9kZWFs
 bG9jYXRlKG9iamVjdCk7CkBAIC00OTMsNiArNTAxLDExIEBACiAJICogRnJv
 bSB0aGlzIHBvaW50IG9uLCB3ZSBtYXkgaGF2ZSByZXNvdXJjZXMgdGhhdCBu
 ZWVkIHRvIGJlIGZyZWVkLgogCSAqLwogCisJaWYgKChlcnJvciA9IGV4ZWNf
 ZXh0cmFjdF9zdHJpbmdzKGltZ3ApKSAhPSAwKQorCQlnb3RvIGZhaWw7CisK
 KwlleGVjX25ld192bXNwYWNlKGltZ3ApOworCiAJLyoKIAkgKiBZZWFoLCBJ
 J20gcGFyYW5vaWQuICBUaGVyZSBpcyBldmVyeSByZWFzb24gaW4gdGhlIHdv
 cmxkIHRvIGdldAogCSAqIFZURVhUIG5vdyBzaW5jZSBmcm9tIGhlcmUgb24g
 b3V0LCB0aGVyZSBhcmUgcGxhY2VzIHdlIGNhbiBoYXZlCkBAIC01MDMsMTEg
 KzUxNiw2IEBACiAJaW1ncC0+dnAtPnZfZmxhZyB8PSBWVEVYVDsKIAlzaW1w
 bGVfdW5sb2NrKCZpbWdwLT52cC0+dl9pbnRlcmxvY2spOwogCi0JaWYgKChl
 cnJvciA9IGV4ZWNfZXh0cmFjdF9zdHJpbmdzKGltZ3ApKSAhPSAwKQotCQln
 b3RvIGZhaWw7Ci0KLQlleGVjX25ld192bXNwYWNlKGltZ3ApOwotCiAJdm1z
 cGFjZSA9IGltZ3AtPnByb2MtPnBfdm1zcGFjZTsKIAogCWZvciAoaSA9IDA7
 IGkgPCBoZHItPmVfcGhudW07IGkrKykgewpAQCAtODg3LDggKzg5NSw5IEBA
 CiAJCXZtX29iamVjdF90IG9iajsKIAogCQlpZiAoKGVudHJ5LT5lZmxhZ3Mg
 JiBNQVBfRU5UUllfSVNfU1VCX01BUCkgfHwKKwkJICAgIChlbGZfZHVtcHJl
 YWRvbmx5ICYmCiAJCSAgICAoZW50cnktPnByb3RlY3Rpb24gJiAoVk1fUFJP
 VF9SRUFEfFZNX1BST1RfV1JJVEUpKSAhPQotCQkgICAgKFZNX1BST1RfUkVB
 RHxWTV9QUk9UX1dSSVRFKSkKKwkJICAgIChWTV9QUk9UX1JFQUR8Vk1fUFJP
 VF9XUklURSkpKQogCQkJY29udGludWU7CiAKIAkJLyoKQEAgLTg5Niw4ICs5
 MDUsMTAgQEAKIAkJKiogTUFQX05PQ09SRSBpcyBzZXQgaW4gbW1hcCgyKSBv
 ciBNQURWX05PQ09SRSBpbgogCQkqKiBtYWR2aXNlKDIpLgogCQkqLwotCQlp
 ZiAoZW50cnktPmVmbGFncyAmIE1BUF9FTlRSWV9OT0NPUkVEVU1QKQorCQlp
 ZiAoZW50cnktPmVmbGFncyAmIE1BUF9FTlRSWV9OT0NPUkVEVU1QKSB7CisJ
 CQlwcmludGYoImV4Y2x1ZGluZyBNQVBfRU5UUllfTk9DT1JFRFVNUCBzZWdt
 ZW50Iik7CiAJCQljb250aW51ZTsKKwkJfQogCiAJCWlmICgob2JqID0gZW50
 cnktPm9iamVjdC52bV9vYmplY3QpID09IE5VTEwpCiAJCQljb250aW51ZTsK
 
 ---------O55DF2D7B4YK0IC6O5NW1WAD--
State-Changed-From-To: open->closed 
State-Changed-By: dillon 
State-Changed-When: Mon Dec 16 11:12:55 PST 2002 
State-Changed-Why:  
Committed modified version of patch to -current, will MFC to stable in 
7 days. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=45994 
>Unformatted:
