severity 563882 important
retitle 563882 ia64: memchr overshots
thanks

On Tue, Jan 26, 2010 at 01:48:34PM -0600, Jonathan Nieder wrote:
> severity 563882 critical

Please explain. git is neither unrelated to glibc nor does this cause
serious data loss.

> That is, it maps the file into memory and looks for null bytes.

No, the kernel always maps complete pages, so this maps several null
bytes.

> Then this program would lie to you and say “M.out is binary”

The test program does not properly show what is going on.

The following program shows the cause:

| #include <sys/stat.h>
| #include <sys/mman.h>
| #include <fcntl.h>
| 
| int main(int argc, const char * const argv[])
| { 
|   struct stat st;
|   lstat(argv[1], &st);
| 
|   int fd = open(argv[1], O_RDONLY);
|   void *data = mmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
|   void *t = memchr(data, 0, st.st_size);
|   printf("ptr: %p, ret: %p, len: 0x%zx\n", data, t, st.st_size);
|   return 0;
| }

Example output:
| % ./test /etc/passwd
| ptr: 0x2000000000050000, ret: 0x200000000005040e, len: 0x40e

The found location is already after the buffer. memchr is AFAIK expanded
by gcc.

Bastian

-- 
Where there's no emotion, there's no motive for violence.
                -- Spock, "Dagger of the Mind", stardate 2715.1


-- 
To UNSUBSCRIBE, email to debian-kernel-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to