mirror of git://git.musl-libc.org/musl
ignore ENOSYS error from mprotect in pthread_create and dynamic linker
this error simply indicated a system without memory protection (NOMMU) and should not cause failure in the caller.
This commit is contained in:
parent
10d0268ccf
commit
75eceb3ae8
|
@ -536,7 +536,8 @@ static void *map_library(int fd, struct dso *dso)
|
|||
}
|
||||
for (i=0; ((size_t *)(base+dyn))[i]; i+=2)
|
||||
if (((size_t *)(base+dyn))[i]==DT_TEXTREL) {
|
||||
if (mprotect(map, map_len, PROT_READ|PROT_WRITE|PROT_EXEC) < 0)
|
||||
if (mprotect(map, map_len, PROT_READ|PROT_WRITE|PROT_EXEC)
|
||||
&& errno != ENOSYS)
|
||||
goto error;
|
||||
break;
|
||||
}
|
||||
|
@ -927,7 +928,8 @@ static void reloc_all(struct dso *p)
|
|||
do_relocs(p, (void *)(p->base+dyn[DT_RELA]), dyn[DT_RELASZ], 3);
|
||||
|
||||
if (head != &ldso && p->relro_start != p->relro_end &&
|
||||
mprotect(p->base+p->relro_start, p->relro_end-p->relro_start, PROT_READ) < 0) {
|
||||
mprotect(p->base+p->relro_start, p->relro_end-p->relro_start, PROT_READ)
|
||||
&& errno != ENOSYS) {
|
||||
error("Error relocating %s: RELRO protection failed: %m",
|
||||
p->name);
|
||||
if (runtime) longjmp(*rtld_fail, 1);
|
||||
|
|
|
@ -232,7 +232,8 @@ int __pthread_create(pthread_t *restrict res, const pthread_attr_t *restrict att
|
|||
if (guard) {
|
||||
map = __mmap(0, size, PROT_NONE, MAP_PRIVATE|MAP_ANON, -1, 0);
|
||||
if (map == MAP_FAILED) goto fail;
|
||||
if (__mprotect(map+guard, size-guard, PROT_READ|PROT_WRITE)) {
|
||||
if (__mprotect(map+guard, size-guard, PROT_READ|PROT_WRITE)
|
||||
&& errno != ENOSYS) {
|
||||
__munmap(map, size);
|
||||
goto fail;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue