Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 16 Nov 1996 04:54:32 +1100
From:      Bruce Evans <bde@zeta.org.au>
To:        bde@zeta.org.au, jgreco@brasil.moneng.mei.com, terry@lambert.org
Cc:        hackers@FreeBSD.ORG, jdp@polstra.com, scrappy@ki.net
Subject:   Re: Sockets question...
Message-ID:  <199611151754.EAA20990@godzilla.zeta.org.au>

next in thread | raw e-mail | index | archive | help
I wrote:
>...  Short reads are possible even for
>normal files because the read might be into a partially invalid
>buffer.  ffs_read() returns the blocks that are successfully
>read instead of unwinding the read and returning an EFAULT error.
>Example:
>
>---
>#include <stdio.h>
>#include <stdlib.h>
>
>#define SIZE	0x10000
>
>main()
>{
>    void *buf;
>    int n;
>
>
>    buf = malloc(0x10000);
>    n = read(0, buf, 0x10000);
>    printf("read %d\n", n);
>}
>---
>
>This prints 65536 here.  A watertight example can be probably be
>constructed using mmap().

Oops, pass the pointy hat.  This is a non-example since i forgot to
increase the read size and forget to tell you to invoke it with
/kernel as stdin.  Increasing the read size to 0x20000 gives
more interesting behaviour:

	on system 1 with 32MB RAM: the kernel panics with a double fault
	on system 2 with 8MB RAM: read returns -1.

I have seen a similar panic for writing from a bad address like
0xfffffc00 but I couldn't duplicate the problem and I thought it had
something to do with a fixed vm bug.

Bruce



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