Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 24 Jul 2000 23:40:06 -0700 (PDT)
From:      "Mark W. Krentel" <krentel@dreamscape.com>
To:        freebsd-bugs@FreeBSD.org
Subject:   Re: kern/19407: Panic running linux binary on ext2fs
Message-ID:  <200007250640.XAA83623@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR kern/19407; it has been noted by GNATS.

From: "Mark W. Krentel" <krentel@dreamscape.com>
To: bde@zeta.org.au
Cc: freebsd-gnats-submit@FreeBSD.ORG
Subject: Re: kern/19407: Panic running linux binary on ext2fs
Date: Tue, 25 Jul 2000 02:32:04 -0400 (EDT)

 > I found some of the problems using these hints.  There were 2 serious bugs
 > in ext2_readdir(): writing far beyond the end of the cookie buffer, and
 > reading a little beyond the end of the directory buffer.
 
 Thanks for looking at the PR!  I tried the patch, but unfortunately
 it didn't make any difference.
 
 Are you able to reproduce the bug?  I can produce it with just the
 simple readdir program (see below).  Readdir prematurely returns NULL
 on both ext2fs and cdrom partitions and thus lists too few files.
 That is, I can produce the bug without even using an ext2fs partition.
 
 > Overrunning the directory buffer can cause panics and wrong results from
 > readdir(3) even for native binaries, but this problem doesn't usually occur
 > for native binaries because they use an adequate buffer size (4K).  Linux
 > binaries trigger the bug by using a too-small buffer size (512 bytes).
 
 What buffers?  Are they something a user program has control over, or
 are they buried within library routines?
 
 I tried bypassing readdir by using open and read on the directory.  I
 wrote a simple hex dump program and compiled it in RH 6.1.  But Linux
 wouldn't run it; read on a directory returned EISDIR (Is a directory).
 Ironically, the Linuxulator did run the program, and read returned the
 entire directory.  So, I guess that narrows the problem to something
 in the readdir library between the levels of read and readdir.
 
 When 4.1 is released, I plan to cvsup to 4.1-R and redo these tests
 more thoroughly.  Maybe your patch is enough to prevent the panic, and
 maybe the readdir problem is separate bug.  I'll let you know.
 
 --Mark
 
 ----------
 
 /*
  * List directory contents with opendir and readdir.
  * Basically the same as "ls -1af".
  */
 
 #include <sys/types.h>
 #include <dirent.h>
 #include <stdio.h>
 
 void my_err(char *mesg)
 {
   printf("Error: %s\n", mesg);
   exit(1);
 }
 
 int main(int argc, char **argv)
 {
   DIR  *dp;
   struct dirent  *de;
   int   n;
 
   if ( argc < 2 ) my_err("missing directory");
 
   if ( (dp = opendir(argv[1])) == NULL )
     my_err("unable to open directory");
 
   n = 0;
   while ( (de = readdir(dp)) != NULL )
     {
       printf("%s\n", de->d_name);
       n++;
     }
 
   printf("Total: %d files\n", n);
 
   return 0;
 }
 


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message




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