From 73a422dccc42cefb5d2867da0becbf9599be8ce8 Mon Sep 17 00:00:00 2001 From: ElectronSpark <820461770@qq.com> Date: Fri, 21 Jan 2022 01:34:47 +0000 Subject: [PATCH 1/2] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20getrandom=20=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E8=B0=83=E7=94=A8=20python=20=E9=9C=80=E8=A6=81?= =?UTF-8?q?=E8=BF=99=E4=B8=AA=E7=B3=BB=E7=BB=9F=E8=B0=83=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/lwp/lwp_syscall.c | 57 ++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/components/lwp/lwp_syscall.c b/components/lwp/lwp_syscall.c index 18013d0c92..ce01978163 100644 --- a/components/lwp/lwp_syscall.c +++ b/components/lwp/lwp_syscall.c @@ -57,6 +57,8 @@ #include #include "lwp_ipc_internal.h" +#include + #define SET_ERRNO(no) rt_set_errno(-(no)) #define GET_ERRNO() ((rt_get_errno() > 0) ? (-rt_get_errno()) : rt_get_errno()) struct musl_sockaddr @@ -3911,6 +3913,60 @@ int sys_setsid(void) int sys_cacheflush(void *addr, int len, int cache); +int sys_getrandom(void *buf, size_t buflen, unsigned int flags) +{ + int ret = -1; + int count = 0; + void *kmem = RT_NULL; + rt_device_t rd_dev = RT_NULL; + + if (flags & GRND_RANDOM) + rd_dev = rt_device_find("random"); + else + rd_dev = rt_device_find("urandom"); + + if (rd_dev == RT_NULL) + { + return -EFAULT; + } + + if (rt_device_open(rd_dev, RT_DEVICE_OFLAG_RDONLY) != RT_EOK) + { + return -EFAULT; + } + + if (!lwp_user_accessable(buf, buflen)) + { + rt_device_close(rd_dev); + return -EFAULT; + } + + kmem = kmem_get(buflen); + if (!kmem) + { + rt_device_close(rd_dev); + return -ENOMEM; + } + + while (count < buflen) + { + ret = rt_device_read(rd_dev, count, kmem + count, buflen - count); + if (ret <= 0) + break; + count += ret; + } + rt_device_close(rd_dev); + + ret = count; + if (count > 0) + { + ret = lwp_put_to_user(buf, kmem, count); + } + kmem_put(kmem); + + return ret; +} + const static void* func_table[] = { (void *)sys_exit, /* 01 */ @@ -4095,6 +4151,7 @@ const static void* func_table[] = (void *)sys_getrlimit, (void *)sys_setrlimit, (void *)sys_setsid, + (void *)sys_getrandom, }; const void *lwp_get_sys_api(rt_uint32_t number) -- Gitee From 4b905cfaa067adef547a764e5a0b74d294d0fc4e Mon Sep 17 00:00:00 2001 From: ElectronSpark <820461770@qq.com> Date: Sat, 22 Jan 2022 03:27:59 +0000 Subject: [PATCH 2/2] =?UTF-8?q?update=20components/lwp/lwp=5Fsyscall.c.=20?= =?UTF-8?q?=E5=B0=86=20sys/random.h=20=E4=B8=AD=E6=89=80=E9=9C=80=E8=A6=81?= =?UTF-8?q?=E7=9A=84=E5=AE=8F=E5=AE=9A=E4=B9=89=E8=BF=9B=E6=9D=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/lwp/lwp_syscall.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/components/lwp/lwp_syscall.c b/components/lwp/lwp_syscall.c index ce01978163..2457dd698e 100644 --- a/components/lwp/lwp_syscall.c +++ b/components/lwp/lwp_syscall.c @@ -57,7 +57,13 @@ #include #include "lwp_ipc_internal.h" -#include +#ifndef GRND_NONBLOCK +#define GRND_NONBLOCK 0x0001 +#endif /* GRND_NONBLOCK */ + +#ifndef GRND_RANDOM +#define GRND_RANDOM 0x0002 +#endif /*GRND_RANDOM */ #define SET_ERRNO(no) rt_set_errno(-(no)) #define GET_ERRNO() ((rt_get_errno() > 0) ? (-rt_get_errno()) : rt_get_errno()) -- Gitee