Eek! (within seconds of hitting send I realize how dumb I was).

Greg Alexander (galexand@sietch.bloomington.in.us)
Tue, 1 Apr 1997 17:29:48 -0500 (EST)


I stupidly left my ulimit -c 0 in place, causing no dumb, causing no bug. I
feel _really_ dumb now. Sorry, all, for the noise, and special sorry to
Mr. Stenback for being so rude.

Greg Alexander
http://www.cia-g.com/~sietch/
----
Anyone who cannot cope with mathematics is not fully human. At best he is a
tolerable subhuman who has learned to wear shoes, bathe and not make messes
in the house.
-- Paul Erdos
also -- Lazarus Long, "Time Enough for Love"

---------- Forwarded message ----------
Date: Tue, 1 Apr 1997 17:26:54 -0500 (EST)
From: Greg Alexander <galexand@sietch.bloomington.in.us>
To: Johnny Stenback <jst@UWasa.Fi>
Cc: linux-kernel@vger.rutgers.edu
Subject: Re: 2.0000

On Wed, 2 Apr 1997, Johnny Stenback wrote:

> > > Oh yearh.. I know, kernel hacking is good... But Linux will never be a real
> > > commercially-supported OS, if a release kernel will not be released...
> > >
> > > So, we want 2.0.30 or .31 or any release. Is there a chance to hope ? :)
> >
> > When it works absolutely perfectly. 2.0.x is assumed to be _very_ stable. It
> > is important that remains true
> >
> >
>
> In that case someone with the knowledge should take a look at the mmap
> problem caused by the program posted recently by John Carter or by the
> program listed below...
>
> #include <stdio.h>
> #include <unistd.h>
> #include <sys/mman.h>
> #include <sys/types.h>
> #include <sys/stat.h>
> #include <fcntl.h>
> #include <string.h>
> #include <errno.h>
>
> void main ()
> {
> int fd;
> void *p;
> char buf[1024];
> fd = open("test", O_RDONLY);
> p = mmap(NULL, 200, PROT_WRITE, MAP_PRIVATE, fd, 0);
> strncpy (buf, p, 100);
> printf ("%s\n", buf);
> munmap (p, 200);
> exit (0);
> }
>
> This has been discussed several times allready but no one has yet come
> up with a patch that fixes the problem...

I, for one, can find no such problem. I tried what I thought would cause
the problem discussed on the list, gave up, "well, his code causes it, so
let's start there." And, uh, your code doesn't do anything toooo unusual.
(I did these tests with a test full of random blah).

I get a segfault before anything is printed with this as it is now. If I
add a buf[100]=0; after that strncpy and change it to PROT_READ, I get no
error. We get SIGBUS if the only change is changing that to MAP_SHARED.
changing the order of the strncpy to write to *p instead of *buf is
harmless, as well, because MAP_PRIVATE is COW.
I see no bug. If anyone _can_ produce this bug (for real), please
send it to me, I would like to at least dig. From the comments others have
made, this should hopefully be fairly uncomplex to, at the least, kludge
around.

Greg Alexander
http://www.cia-g.com/~sietch/
----
Anyone who cannot cope with mathematics is not fully human. At best he is a
tolerable subhuman who has learned to wear shoes, bathe and not make messes
in the house.
-- Paul Erdos
also -- Lazarus Long, "Time Enough for Love"