1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| | #include <sys/random.h>
#include <errno.h>
#include "syscall.h"
int getentropy(void *buffer, size_t length)
{
int ret;
char *pos = buffer;
size_t rem = length;
if (length > 256) {
return __syscall_ret(-EIO);
}
while (rem) {
ret = __syscall_cp(SYS_getrandom, pos, rem, 0);
if (ret == -EINTR) {
continue;
} else if (ret == -EFAULT || ret == -ENOSYS) {
return __syscall_ret(ret);
} else if (ret <= 0) {
return __syscall_ret(-EIO);
}
pos += ret;
rem -= ret;
}
return 0;
}
|