On Mon, Jun 22, 2020 at 05:35:48PM +0200, Christian Weisgerber wrote:
> 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.

Nice, I bet the other mapping suffers from the same problem, checking
now with what Theo said.

Reply via email to