| Prev Next | Secure Lazy Binding | Slide #17 |
before:
/* set the GOT to RW */
sigprocmask(SIG_BLOCK, &allsigs, &savedmask);
spinlock_lock(&bind_lock); /* libpthread cb */
mprotect(object->got_start, object->got_size, PROT_READ|PROT_WRITE);
*(Elf_Addr *)addr = newval;
/* put the GOT back to RO */
mprotect(object->got_start, object->got_size, PROT_READ);
spinlock_unlock(&bind_lock); /* libpthread cb */
sigprocmask(SIG_SETMASK, &curset, NULL);
after:
kbind(addr, sizeof(Elf_Addr), &newval);
kbind(0x171d762ebd8,0x8,0x7f7ffffde1f8)
kbind 0
ioctl(0,TIOCGETA,0x7f7ffffde2f0)
ioctl 0
| EuroBSDCon 2014 | Copyright © 2014 Philip Guenther |