From: Michalis Pappas Date: Thu, 24 Nov 2022 17:51:50 +0000 (+0100) Subject: linux: Add syscall wrapper for getrandom X-Git-Tag: RELEASE-0.11.0~5 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=149560871d439e34a2f365b3db9cd5aff58f52bd;p=unikraft%2Flibs%2Fmusl.git linux: Add syscall wrapper for getrandom Import e20658209177667e490c661dfd35b976749ef3f7 from git://git.musl-libc.org/musl into patches. This patch adds a syscall wrapper for getrandom, which is not supported by musl v1.1.19. Update the Makefile to compile getrandom() conditionally to UKSWRAND. Signed-off-by: Michalis Pappas Reviewed-by: Razvan Virtan Approved-by: Simon Kuenzer Tested-by: Unikraft CI GitHub-Closes: #25 --- diff --git a/Makefile.uk.musl.linux b/Makefile.uk.musl.linux index 8bd97b4..18aea15 100644 --- a/Makefile.uk.musl.linux +++ b/Makefile.uk.musl.linux @@ -22,6 +22,7 @@ LIBMUSL_LINUX_HDRS-y += $(LIBMUSL)/include/sys/personality.h LIBMUSL_LINUX_HDRS-y += $(LIBMUSL)/include/sys/prctl.h LIBMUSL_LINUX_HDRS-y += $(LIBMUSL)/include/sys/ptrace.h LIBMUSL_LINUX_HDRS-y += $(LIBMUSL)/include/sys/quota.h +LIBMUSL_LINUX_HDRS-$(CONFIG_LIBUKSWRAND) += $(LIBMUSL)/include/sys/random.h LIBMUSL_LINUX_HDRS-y += $(LIBMUSL)/include/sys/reboot.h LIBMUSL_LINUX_HDRS-y += $(LIBMUSL)/include/sys/resource.h LIBMUSL_LINUX_HDRS-y += $(LIBMUSL)/include/sys/sendfile.h @@ -51,6 +52,7 @@ LIBMUSL_LINUX_SRCS-y += $(LIBMUSL)/src/linux/eventfd.c LIBMUSL_LINUX_SRCS-y += $(LIBMUSL)/src/linux/fallocate.c LIBMUSL_LINUX_SRCS-y += $(LIBMUSL)/src/linux/fanotify.c LIBMUSL_LINUX_SRCS-y += $(LIBMUSL)/src/linux/flock.c +LIBMUSL_LINUX_SRCS-$(CONFIG_LIBUKSWRAND) += $(LIBMUSL)/src/linux/getrandom.c LIBMUSL_LINUX_SRCS-y += $(LIBMUSL)/src/linux/inotify.c LIBMUSL_LINUX_SRCS-y += $(LIBMUSL)/src/linux/ioperm.c LIBMUSL_LINUX_SRCS-y += $(LIBMUSL)/src/linux/iopl.c diff --git a/patches/0017-add-getrandom-syscall-wrapper.patch b/patches/0017-add-getrandom-syscall-wrapper.patch new file mode 100644 index 0000000..1eed60a --- /dev/null +++ b/patches/0017-add-getrandom-syscall-wrapper.patch @@ -0,0 +1,55 @@ +From e20658209177667e490c661dfd35b976749ef3f7 Mon Sep 17 00:00:00 2001 +From: Hauke Mehrtens +Date: Sat, 6 Jan 2018 23:08:09 +0100 +Subject: [PATCH 1/2] add getrandom syscall wrapper + +This syscall is available since Linux 3.17 and was also implemented in +glibc in version 2.25 using the same interfaces. +--- + include/sys/random.h | 19 +++++++++++++++++++ + src/linux/getrandom.c | 7 +++++++ + 2 files changed, 26 insertions(+) + create mode 100644 include/sys/random.h + create mode 100644 src/linux/getrandom.c + +diff --git a/include/sys/random.h b/include/sys/random.h +new file mode 100644 +index 00000000..4ee7bf2c +--- /dev/null ++++ b/include/sys/random.h +@@ -0,0 +1,19 @@ ++#ifndef _SYS_RANDOM_H ++#define _SYS_RANDOM_H ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++#define __NEED_size_t ++#define __NEED_ssize_t ++#include ++ ++#define GRND_NONBLOCK 0x0001 ++#define GRND_RANDOM 0x0002 ++ ++ssize_t getrandom(void *, size_t, unsigned); ++ ++#ifdef __cplusplus ++} ++#endif ++#endif +diff --git a/src/linux/getrandom.c b/src/linux/getrandom.c +new file mode 100644 +index 00000000..6cc6f6b0 +--- /dev/null ++++ b/src/linux/getrandom.c +@@ -0,0 +1,7 @@ ++#include ++#include "syscall.h" ++ ++ssize_t getrandom(void *buf, size_t buflen, unsigned flags) ++{ ++ return syscall_cp(SYS_getrandom, buf, buflen, flags); ++} +-- +2.25.1 +