This is the mail archive of the libc-hacker@sources.redhat.com mailing list for the glibc project.
Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Hi I was pointed at a problem with the way we are using mmap() within libpthread. It seems that the Linux kernel will kill an existing mapping silently if you try to mmap(MAP_FIXED) on a range overlaying an existing mapping for a task. According to SUSv2 this seems to be within spec (http://www.opengroup.org/public/pubs/online/7908799/xsh/mmap.html): When MAP_FIXED is set in the flags argument, the implementation is informed that the value of pa must be addr, exactly. If MAP_FIXED is set, mmap() may return MAP_FAILED and set errno to [EINVAL]. If a MAP_FIXED request is successful, the mapping established by mmap() replaces any previous mappings for the process' pages in the range [pa, pa + len). However linuxthreads/manager.c seems to rely on mmap() returning MAP_FAILED in case you have a conflict, for instance this part: if (mmap((caddr_t)((char *)(new_thread + 1) - stacksize / 2), stacksize / 2, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0) == MAP_FAILED) /* Bad luck, this segment is already mapped. */ return -1; /* Then the register stack: */ if (mmap((caddr_t)new_thread_bottom, stacksize/2, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0) == MAP_FAILED) { munmap((caddr_t)((char *)(new_thread + 1) - stacksize/2), stacksize/2); return -1; } Hence the question is what to do here, should one try to fix linuxthreads to check for a conflict before trying a mapping or lobby for the kernel to be changed? Ideas? Jes
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |