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                          na...@mips.inka.de

Reply via email to