I put the fix in seedrng.c Let's avoid adding two source files just for this.
On Fri, Feb 24, 2023 at 11:52 PM Markus Mayer <mma...@broadcom.com> wrote: > > Glibc 2.24 and older do not provide an interface for the getrandom() > system call. Linux kernels have been implementing this sytem call since > kernel 3.17. > > Let's address the situation where glibc <= 2.24 and Linux >= 3.17 by > providing the system call interface ourselves when needed. This allows > users to take advantage of getrandom() as long as the kernel supports > it, even if glibc doesn't provide access to it. > > Signed-off-by: Markus Mayer <mma...@broadcom.com> > --- > miscutils/getrandom.c | 22 ++++++++++++++++++++++ > miscutils/random.h | 19 +++++++++++++++++++ > miscutils/seedrng.c | 6 +++++- > 3 files changed, 46 insertions(+), 1 deletion(-) > create mode 100644 miscutils/getrandom.c > create mode 100644 miscutils/random.h > > diff --git a/miscutils/getrandom.c b/miscutils/getrandom.c > new file mode 100644 > index 000000000000..ab6a57f8042e > --- /dev/null > +++ b/miscutils/getrandom.c > @@ -0,0 +1,22 @@ > +#include <features.h> > + > +#if defined(__GLIBC__) && __GLIBC__ == 2 && __GLIBC_MINOR__ <= 24 > + > +#ifndef __NR_getrandom > +#include <errno.h> > +#endif > +#include <sys/syscall.h> > +#include "random.h" > + > +ssize_t getrandom(void *buffer, size_t length, unsigned int flags) > +{ > +#ifdef __NR_getrandom > + return syscall(__NR_getrandom, buffer, length, flags); > +#else > + /* For kernels that don't support getrandom() (< 3.17). */ > + errno = ENOSYS; > + return -1; > +#endif > +} > + > +#endif /* __GLIBC__ ... */ > diff --git a/miscutils/random.h b/miscutils/random.h > new file mode 100644 > index 000000000000..3131df5e8a5d > --- /dev/null > +++ b/miscutils/random.h > @@ -0,0 +1,19 @@ > +#ifndef _RANDOM_H > +#define _RANDOM_H 1 > + > +#include <features.h> > +#include <sys/types.h> > + > +#ifndef GRND_NONBLOCK > +#define GRND_NONBLOCK 0x01 > +#endif > +#ifndef GRND_RANDOM > +#define GRND_RANDOM 0x02 > +#endif > +#ifndef GRND_INSECURE > +#define GRND_INSECURE 0x04 > +#endif > + > +ssize_t getrandom(void *buffer, size_t length, unsigned int flags); > + > +#endif /* _RANDOM_H */ > diff --git a/miscutils/seedrng.c b/miscutils/seedrng.c > index 967741dc72ea..8ce553e460b1 100644 > --- a/miscutils/seedrng.c > +++ b/miscutils/seedrng.c > @@ -29,7 +29,7 @@ > > //applet:IF_SEEDRNG(APPLET(seedrng, BB_DIR_USR_SBIN, BB_SUID_DROP)) > > -//kbuild:lib-$(CONFIG_SEEDRNG) += seedrng.o > +//kbuild:lib-$(CONFIG_SEEDRNG) += getrandom.o seedrng.o > > //usage:#define seedrng_trivial_usage > //usage: "[-d DIR] [-n]" > @@ -42,7 +42,11 @@ > #include "libbb.h" > > #include <linux/random.h> > +#if defined(__GLIBC__) && __GLIBC__ == 2 && __GLIBC_MINOR__ <= 24 > +#include "random.h" > +#else > #include <sys/random.h> > +#endif > #include <sys/file.h> > > #ifndef GRND_INSECURE > -- > 2.34.1 > > _______________________________________________ > busybox mailing list > busybox@busybox.net > http://lists.busybox.net/mailman/listinfo/busybox _______________________________________________ busybox mailing list busybox@busybox.net http://lists.busybox.net/mailman/listinfo/busybox