lkml.org 
[lkml]   [2022]   [Mar]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Date
    SubjectRe: [PATCH V8 13/22] LoongArch: Add system call support
    Hi, Arnd,

    On Mon, Mar 21, 2022 at 5:01 PM Arnd Bergmann <arnd@arndb.de> wrote:
    >
    > On Sat, Mar 19, 2022 at 3:38 PM Huacai Chen <chenhuacai@kernel.org> wrote:
    > >
    > > This patch adds system call support and related uaccess.h for LoongArch.
    > >
    > > Q: Why keep __ARCH_WANT_NEW_STAT definition while there is statx:
    > > A: Until the latest glibc release (2.34), statx is only used for 32-bit
    > > platforms, or 64-bit platforms with 32-bit timestamp. I.e., Most 64-
    > > bit platforms still use newstat now.
    > >
    > > Q: Why keep _ARCH_WANT_SYS_CLONE definition while there is clone3:
    > > A: The latest glibc release (2.34) has some basic support for clone3 but
    > > it isn't complete. E.g., pthread_create() and spawni() have converted
    > > to use clone3 but fork() will still use clone. Moreover, some seccomp
    > > related applications can still not work perfectly with clone3.
    >
    > Please leave those out of the mainline kernel support though: Any users
    > of existing glibc binaries can keep using patched kernels for the moment,
    > and then later drop those pages when the proper glibc support gets
    > merged.
    The glibc commit d8ea0d0168b190bdf138a20358293c939509367f ("Add an
    internal wrapper for clone, clone2 and clone3") modified nearly
    everything in order to move to clone3(), except arch_fork() which used
    by fork(). And I cannot find any submitted patches to solve it. So I
    don't think this is just a forget, maybe there are other fundamental
    problems?

    >
    > > +#define __ua_size(size) \
    > > + ((__builtin_constant_p(size) && (signed long) (size) > 0) ? 0 : (size))
    > > +
    > > +/*
    > > + * access_ok: - Checks if a user space pointer is valid
    > > + * @addr: User space pointer to start of block to check
    > > + * @size: Size of block to check
    > > + *
    > > + * Context: User context only. This function may sleep if pagefaults are
    > > + * enabled.
    > > + *
    > > + * Checks if a pointer to a block of memory in user space is valid.
    > > + *
    > > + * Returns true (nonzero) if the memory block may be valid, false (zero)
    > > + * if it is definitely invalid.
    > > + *
    > > + * Note that, depending on architecture, this function probably just
    > > + * checks that the pointer is in the user space range - after calling
    > > + * this function, memory access functions may still return -EFAULT.
    > > + */
    > > +static inline int __access_ok(const void __user *p, unsigned long size)
    > > +{
    > > + unsigned long addr = (unsigned long)p;
    > > + unsigned long end = addr + size - !!size;
    > > +
    > > + return (__UA_LIMIT & (addr | end | __ua_size(size))) == 0;
    > > +}
    > > +
    > > +#define access_ok(addr, size) \
    > > + likely(__access_ok((addr), (size)))
    >
    > I rewrote this bit a series that is currently queued for 5.18, so you
    > will have to adapt it to the new version, by just removing your
    > custom definitions.
    OK, this will be updated.

    >
    > > +#define __get_user(x, ptr) \
    > > +({ \
    > > + int __gu_err = 0; \
    > > + \
    > > + __chk_user_ptr(ptr); \
    > > + __get_user_common((x), sizeof(*(ptr)), ptr); \
    > > + __gu_err; \
    > > +})
    >
    > It would be good to also provide a
    > __kernel_kernel_nofault()/__put_kernel_nofault()
    > implementation, as the default based on __get_user()/__put_user is not
    > ideal.
    They are provided in this file below.

    Huacai
    >
    > Arnd

    \
     
     \ /
      Last update: 2022-03-21 10:43    [W:2.392 / U:0.060 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site