Paul Irofti:
> 683 /* map the process's timekeep page */
> 684 if (exec_timekeep_map(pr))
> 685 goto free_pack_abort;
> 686 /* setup new registers and do misc. setup. */
> 687 if (pack.ep_emul->e_fixup != NULL) {
> 688 if ((*pack.ep_emul->e_fixup)(p, &pack) != 0)
> 689 goto free_pack_abort;
> 690 }
Yes, with this init(8) gets a proper _timekeep instead of 0x0.
For randomization of the userland page...
+ if (uvm_map(&pr->ps_vmspace->vm_map, &pr->ps_timekeep,
round_page(timekeep_sz),
... ps_timekeep need to be 0 here. At the moment, it inherits the
value from the parent process in fork().
In struct process in sys/proc.h, there is this:
/* The following fields are all zeroed upon creation in process_new. */
...
/* End area that is zeroed on creation. */
If I move
vaddr_t ps_timekeep; /* User pointer to timekeep */
up into the zeroed area, I get a properly randomized _timekeep in
userland.
--
Christian "naddy" Weisgerber [email protected]