El ene 17, 2014 11:36 a.m., "Marin Ramesa" <[email protected]> escribió:
>
> +
> +kern_return_t
> +futex_wait(task_t task, vm_offset_t futex_address, int value,
> +          mach_msg_timeout_t msec, boolean_t private_futex)
> +{
> +       if (private_futex) {
> +               struct private_futex *futex;
> +
> +               futex = futex_private_lookup_address(futex_address);
> +               if (futex == NULL) {
> +                       futex = futex_private_init(futex_address);
> +                       if (futex == NULL)
> +                               return KERN_RESOURCE_SHORTAGE;
> +               }
> +
> +               if (__atomic_load_n(
> +                       (int *) futex_address, __ATOMIC_RELAXED) ==
value) {

Are you sure you can dereference futex_address?

It's a user supplied virtual address which is probably not valid in the
kernel's virtual address space (unless things like copyin are used)

I have the vague idea that the kernel has it's own address space. Can
somebody confirm that? :-)

Reply via email to