lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <8d6ee835fae809aa2703c51b8443878446245cfb.camel@intel.com>
Date: Mon, 15 Sep 2025 11:09:40 +0000
From: "Berg, Benjamin" <benjamin.berg@...el.com>
To: "linux@...ssschuh.net" <linux@...ssschuh.net>
CC: "w@....eu" <w@....eu>, "linux-kernel@...r.kernel.org"
	<linux-kernel@...r.kernel.org>, "linux-um@...ts.infradead.org"
	<linux-um@...ts.infradead.org>, "linux-kselftest@...r.kernel.org"
	<linux-kselftest@...r.kernel.org>, "tiwei.btw@...group.com"
	<tiwei.btw@...group.com>, "acme@...hat.com" <acme@...hat.com>
Subject: Re: [PATCH 9/9] um: switch ptrace FP register access to nolibc

Hi,

On Mon, 2025-09-15 at 11:07 +0200, Thomas Weißschuh wrote:
> On 2025-09-15 09:11:15+0200, Benjamin Berg wrote:
> > From: Benjamin Berg <benjamin.berg@...el.com>
> > 
> > The registers.c file only contain the routines for floating point
> > register access in ptrace mode and initial size detection. The file can
> > be moved over to nolibc by replacing the ptrace libc call with a simple
> > wrapper that does a direct syscall.
> > 
> > Signed-off-by: Benjamin Berg <benjamin.berg@...el.com>
> > ---
> >  arch/x86/um/os-Linux/Makefile    |  5 ++++-
> >  arch/x86/um/os-Linux/registers.c | 22 ++++++++--------------
> >  2 files changed, 12 insertions(+), 15 deletions(-)
> > 
> > diff --git a/arch/x86/um/os-Linux/Makefile b/arch/x86/um/os-Linux/Makefile
> > index 77a308aaa5ec..d37320430822 100644
> > --- a/arch/x86/um/os-Linux/Makefile
> > +++ b/arch/x86/um/os-Linux/Makefile
> > @@ -3,10 +3,13 @@
> >  # Licensed under the GPL
> >  #
> >  
> > -obj-y = registers.o mcontext.o
> > +obj-y = mcontext.o
> >  
> >  obj-$(CONFIG_X86_32) += tls.o
> >  
> >  USER_OBJS := $(obj-y)
> >  
> > +obj-y += registers.o
> > +NOLIBC_OBJS := registers.o
> > +
> >  include $(srctree)/arch/um/scripts/Makefile.rules
> > diff --git a/arch/x86/um/os-Linux/registers.c b/arch/x86/um/os-Linux/registers.c
> > index eb1cdadc8a61..55bce0d3f5d2 100644
> > --- a/arch/x86/um/os-Linux/registers.c
> > +++ b/arch/x86/um/os-Linux/registers.c
> > @@ -6,18 +6,20 @@
> >  
> >  #include <errno.h>
> 
> Given that you are explicitly disabling errno support for nolibc, is
> this include necessary?

I think it is technically correct as we do need ENODEV and ENOMEM to be
defined. Not that we actually need the include if we pull in nolibc.h.

Considering we would never build against libc, should we maybe just do
an explicit nolibc.h include and rely on it pulling in the rest
automatically? That seems a bit weird to me, but as-is we will never
notice when we forget an include.

> >  #include <stdlib.h>
> > -#include <sys/ptrace.h>
> > +#include <linux/ptrace.h>
> >  #ifdef __i386__
> >  #include <sys/user.h>
> >  #endif
> >  #include <longjmp.h>
> >  #include <sysdep/ptrace_user.h>
> > -#include <sys/uio.h>
> > +#include <linux/uio.h>
> 
> It looks fairly trivial to add sys/uio.h to nolibc.
> Only 'struct iovec' (already provided by the UAPI) and readv()/writev()
> are necessary.
> 
> >  #include <asm/sigcontext.h>
> >  #include <linux/elf.h>
> >  #include <registers.h>
> >  #include <sys/mman.h>
> >  
> > +#define my_ptrace(...) my_syscall4(__NR_ptrace, __VA_ARGS__)
> 
> Why not add sys/ptrace.h to nolibc and then use sys_ptrace()?

Honestly, I just got a bit lazy at that point and this was a reasonable
proof that mixing nolibc with libc works fine. You are absolutely right
that it would be better to add this to nolibc.

> In general I'm not a fan of the my_syscall() naming scheme and would
> like to change this in nolibc itself, so having fewer external users
> would be nice.

How about adding a sys_syscall macro? That would match the naming
scheme of the other functions. Then, once all users are ported, one can
simply change the my_ prefix to __nolibc_.

Benjamin

> 
> > +
> >  static unsigned long ptrace_regset;
> >  unsigned long host_fp_size;
> 
> (...)
Intel Deutschland GmbH
Registered Address: Am Campeon 10, 85579 Neubiberg, Germany
Tel: +49 89 99 8853-0, www.intel.de
Managing Directors: Sean Fennelly, Jeffrey Schneiderman, Tiffany Doon Silva
Chairperson of the Supervisory Board: Nicole Lau
Registered Office: Munich
Commercial Register: Amtsgericht Muenchen HRB 186928

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ