Messages in this thread |  | | Date | Wed, 19 Sep 2001 14:36:10 +0400 | From | "Andrew V. Samoilov" <> | Subject | mmap successed but SIGBUS generated on access |
| |
Hi!
I have bad CD-R with a some number of unreadable files.
Then user-space program use mmap system it returns ok but any attempt to access a memory pointed by this system call finishes with SIGBUS. So Midnight Commander internal file viewer faults.
This error is 100 % reproduceable at 2.2.19 and 2.4.2 kernels.
Is there any way to detect such problem in user-space without signal handlers ?
Lines from /var/log/messages:
Sep 19 12:20:05 sav kernel: attempt to access beyond end of device Sep 19 12:20:05 sav kernel: 16:00: rw=0, want=657860, limit=386954 Sep 19 12:20:05 sav kernel: dev 16:00 blksize=2048 blocknr=328929 sector=1315716 size=2048 count=1
Test program:
#include <stdio.h> #include <string.h> #include <fcntl.h> #include <sys/stat.h> #include <unistd.h> #include <sys/mman.h> #include <errno.h>
int main (int argc, char ** argv) { int fd; struct stat st; void * p; while (--argc) { argv++; if (stat (*argv, &st)) { fprintf (stderr, "stat (%s) -- %s\n", *argv, strerror (errno)); continue; } if ((fd = open (*argv, O_RDONLY)) == -1) { fprintf (stderr, "open (%s) -- %s\n", *argv, strerror (errno)); continue; } fprintf (stderr, "mmap (%d) called...\n", st.st_size); if ((p = mmap (0, st.st_size, PROT_READ, MAP_SHARED, fd, 0)) == (void*) -1) { fprintf (stderr, "mmap (%s) -- %s\n", *argv, strerror (errno)); close (fd); continue; } fputs ("mmap done...\n", stderr); write (2, p, st.st_size); fputs ("munmap called...\n", stderr); if (munmap (p, st.st_size) == -1) { fprintf (stderr, "munmap (%s) -- %s\n", *argv, strerror (errno)); } fputs ("munmap done...\n", stderr); close (fd); } }
This program output:
mmap (8) called... mmap done... Bus error
-- Regards, Andrew.
____________________________________________
Играй в шахматы в Интернет на InstantChess.com!
Play chess on InstantChess.com !
www.instantchess.com
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|  |