On Mon, Oct 26, 2026 at 3:30 PM <[email protected]> wrote:
>
> > uaccess: Refuse and warn on __copy_from_user_inatomic() without an mm
>
> TL;DR: Commit message only: it names kvm_read_guest_atomic(), which no longer
> exists in this tree; the review suggests kvm_vcpu_read_guest_atomic() instead.
>
> >     uaccess: Refuse and warn on __copy_from_user_inatomic() without an mm
> >
> >     __copy_from_user_inatomic() never called should_fail_usercopy(), so the
> >     NULL current->mm check added to uaccess_should_fail() does not cover it.
> >     It is used e.g. by KVM's kvm_read_guest_atomic(), by several
> >     architectures' perf callchain and stack trace code, and by the generic
> >     copy_from_user_inatomic_nontemporal().
> >
> >     Split the NULL mm check out of uaccess_should_fail() into
> >     uaccess_without_mm(), and use it in __copy_from_user_inatomic() to warn
> >     and refuse the copy.
> >
> >     Don't use uaccess_should_fail() there, as that would also start 
> > injecting
> >     failures into __copy_from_user_inatomic(), which some callers don't
> >     expect to fail in practice, e.g. __wp_page_copy_user() warns if the copy
> >     fails twice.
> >
> >     copy_from_user_nofault() already fails quietly when current->mm is NULL,
> >     and the generic user stack unwinding entry points (perf_callchain(),
> >     get_perf_callchain() and stack_trace_save_user()) only unwind the user
> >     stack of a user task with an mm, so neither is affected.
> >
> >     Signed-off-by: James Houghton <[email protected]>
>
> The changelog names kvm_read_guest_atomic() as a user of
> __copy_from_user_inatomic(), but that function no longer exists in this tree.
> It was removed by commit ef82eddc0e31 ("KVM: Remove kvm_read_guest_atomic()").
>
> The KVM user is now kvm_vcpu_read_guest_atomic() in virt/kvm/kvm_main.c,
> which calls the static __kvm_read_guest_atomic():
>
>     static int __kvm_read_guest_atomic(struct kvm_memory_slot *slot, gfn_t 
> gfn,
>                                        void *data, int offset, unsigned long 
> len)
>     {
>         ...
>         pagefault_disable();
>         r = __copy_from_user_inatomic(data, (void __user *)addr + offset, 
> len);
>         pagefault_enable();
>
> A grep for kvm_read_guest_atomic only finds __kvm_read_guest_atomic() and
> kvm_vcpu_read_guest_atomic().
>
> Could the changelog say kvm_vcpu_read_guest_atomic() instead?

Yes, that is correct. I've applied this fix in v2.

Reply via email to