Messages in this thread | | | From | "Edgecombe, Rick P" <> | Subject | Re: [PATCHv3 6/8] x86/mm: Provide ARCH_GET_UNTAG_MASK and ARCH_ENABLE_TAGGED_ADDR | Date | Fri, 10 Jun 2022 16:16:01 +0000 |
| |
On Fri, 2022-06-10 at 17:35 +0300, Kirill A. Shutemov wrote: > +static int prctl_enable_tagged_addr(unsigned long nr_bits) > +{ > + struct mm_struct *mm = current->mm; > + > + /* Already enabled? */ > + if (mm->context.lam_cr3_mask) > + return -EBUSY; > + > + /* LAM has to be enabled before spawning threads */ > + if (get_nr_threads(current) > 1) > + return -EBUSY;
Does this work for vfork()? I guess the idea is that locking is not needed below because there is only one thread with the MM, but with vfork() another task could operate on the MM, call fork(), etc. I'm not sure...
> + > + if (!nr_bits) { > + return -EINVAL; > + } else if (nr_bits <= 6) { > + mm->context.lam_cr3_mask = X86_CR3_LAM_U57; > + mm->context.untag_mask = ~GENMASK(62, 57); > + } else { > + return -EINVAL; > + } > + > + /* Update CR3 to get LAM active */ > + switch_mm(current->mm, current->mm, current); > + return 0; > +}
| |