Re: [PATCH V8 13/22] LoongArch: Add system call support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi, Arnd,

On Mon, Mar 21, 2022 at 5:01 PM Arnd Bergmann <arnd@xxxxxxxx> wrote:
>
> On Sat, Mar 19, 2022 at 3:38 PM Huacai Chen <chenhuacai@xxxxxxxxxx> 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



[Index of Archives]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux