]> xenbits.xensource.com Git - unikraft/libs/musl.git/commitdiff
linux: Add syscall wrapper for getrandom
authorMichalis Pappas <michalis.pappas@opensynergy.com>
Thu, 24 Nov 2022 17:51:50 +0000 (18:51 +0100)
committerUnikraft <monkey@unikraft.io>
Fri, 25 Nov 2022 11:29:19 +0000 (11:29 +0000)
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 <michalis.pappas@opensynergy.com>
Reviewed-by: Razvan Virtan <virtanrazvan@gmail.com>
Approved-by: Simon Kuenzer <simon@unikraft.io>
Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #25

Makefile.uk.musl.linux
patches/0017-add-getrandom-syscall-wrapper.patch [new file with mode: 0644]

index 8bd97b49cc415f0807c62768e0ba0df60f046c20..18aea1590464729c35d58402be530bfb34c61dec 100644 (file)
@@ -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 (file)
index 0000000..1eed60a
--- /dev/null
@@ -0,0 +1,55 @@
+From e20658209177667e490c661dfd35b976749ef3f7 Mon Sep 17 00:00:00 2001
+From: Hauke Mehrtens <hauke@hauke-m.de>
+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 <bits/alltypes.h>
++
++#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 <sys/random.h>
++#include "syscall.h"
++
++ssize_t getrandom(void *buf, size_t buflen, unsigned flags)
++{
++      return syscall_cp(SYS_getrandom, buf, buflen, flags);
++}
+-- 
+2.25.1
+