a relatively major problem with ext2.

Eric Kjeldergaard kjelderg at gmail.com
Tue Mar 8 18:54:46 PST 2005

After a bit of discussion on the kde list regarding a problem I've
been having with kreadconfig (which uses mmap), I've stumbled (largely
directed by Michael Nottebrock) upon an ext2 bug.  Michael wrote and
posted the following code:

#include <errno.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>

int main(int argc, char ** argv) {
   int fd;
   struct stat sb;
   void * region;

   if ((fd = open(argv[1], O_RDONLY)) < 0) {
       return 1;

   if (fstat(fd, &sb)) {
       return 1;

   region = mmap(NULL, sb.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
   if (region == ((caddr_t) -1)) {
       return 1;


   if (write(1, region, sb.st_size) != sb.st_size) {
       return 1;

   return 0;

Well, this code run on something mounted as an ext2 partition reliably
kernel panics my FreeBSD-CURRENT box.  Hopefully someone can direct me
as to any information they would need to try to sort this out.  The
kernel panic is this (hand typed):

Fatal trap 12: page fault while in kernel mode
fault virtual address = 0x1c
fault code = supervisor write, page not present
instruction pointer = 0x8:0xc04d199d
stack pointer = 0x10:0xe2428b0c
frame pointer = 0x10:0xe2428b64
code segment = base 0x0, limit 0xfffff, type 0x1b
= dpl 0, pres 1, def32 1, gran 1
processor eflags = interrupt enabled, resume, IOPL = 0
current process = 543 (truss)
trap number = 12

In case anyone doesn't wish to sift through the kde mailing list
looking for what the original problem was, it is this:  When
kreadconfig (recent versions) tries to access a file on my
ext2-mounted $HOME, it gets an error trying to mmap.  The error
(discovered via truss) looks a bit like this:

open("/root/.kde/share/config/kpersonalizerrc",0x0,0666) = 4 (0x4)
fstat(4,0xbfbfe650)                              = 0 (0x0)
fstat(4,0xbfbfe510)                              = 0 (0x0)
mmap(0x0,125,(0x1)PROT_READ,(0x2)MAP_PRIVATE,4,0x0) ERR#22 'Invalid argument'

And kreadconfig silently fails and reports the incorrect result.

If I write a signature, my emails will appear more personalised.

More information about the freebsd-current mailing list