On success, getrandom() Linux system call returns the number of bytes that
were copied to the buffer supplied by the user. Also fix getrandom() if Linuxulator modules are built without the kernel. PR: 219464 Submitted by: Maciej Pasternacki Reported by: Maciej Pasternacki MFC after: 1 week
This commit is contained in:
parent
1a8ea9fb85
commit
9ecc1abca3
@ -31,6 +31,9 @@
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include "opt_compat.h"
|
||||
#if defined(KLD_MODULE)
|
||||
#include "opt_global.h"
|
||||
#endif
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/blist.h>
|
||||
@ -2516,6 +2519,7 @@ linux_getrandom(struct thread *td, struct linux_getrandom_args *args)
|
||||
{
|
||||
struct uio uio;
|
||||
struct iovec iov;
|
||||
int error;
|
||||
|
||||
if (args->flags & ~(LINUX_GRND_NONBLOCK|LINUX_GRND_RANDOM))
|
||||
return (EINVAL);
|
||||
@ -2532,7 +2536,10 @@ linux_getrandom(struct thread *td, struct linux_getrandom_args *args)
|
||||
uio.uio_rw = UIO_READ;
|
||||
uio.uio_td = td;
|
||||
|
||||
return (read_random_uio(&uio, args->flags & LINUX_GRND_NONBLOCK));
|
||||
error = read_random_uio(&uio, args->flags & LINUX_GRND_NONBLOCK);
|
||||
if (error == 0)
|
||||
td->td_retval[0] = args->count - uio.uio_resid;
|
||||
return (error);
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -8,6 +8,8 @@
|
||||
# the code here when they all produce identical results
|
||||
# (or should)
|
||||
.if !defined(KERNBUILDDIR)
|
||||
opt_global.h:
|
||||
echo "#define DEV_RANDOM 1" >> ${.TARGET}
|
||||
opt_bpf.h:
|
||||
echo "#define DEV_BPF 1" > ${.TARGET}
|
||||
.if ${MK_INET_SUPPORT} != "no"
|
||||
|
@ -15,7 +15,7 @@ SRCS= linux_fork.c linux${SFX}_dummy.c linux_file.c linux_event.c \
|
||||
linux${SFX}_machdep.c linux_misc.c linux_signal.c \
|
||||
linux_socket.c linux_stats.c linux_sysctl.c linux${SFX}_sysent.c \
|
||||
linux${SFX}_sysvec.c linux_uid16.c linux_time.c \
|
||||
linux_timer.c linux_vdso.c \
|
||||
linux_timer.c linux_vdso.c opt_global.h \
|
||||
opt_inet6.h opt_compat.h opt_posix.h opt_usb.h vnode_if.h \
|
||||
device_if.h bus_if.h assym.s \
|
||||
linux${SFX}_support.s
|
||||
|
@ -10,7 +10,7 @@ SRCS= linux_fork.c linux_dummy.c linux_file.c linux_event.c \
|
||||
linux_machdep.c linux_misc.c linux_ptrace.c linux_signal.c \
|
||||
linux_socket.c linux_stats.c linux_sysctl.c linux_sysent.c \
|
||||
linux_sysvec.c linux_time.c linux_vdso.c linux_timer.c \
|
||||
opt_inet6.h opt_compat.h opt_posix.h opt_usb.h \
|
||||
opt_inet6.h opt_compat.h opt_global.h opt_posix.h opt_usb.h \
|
||||
vnode_if.h device_if.h bus_if.h assym.s \
|
||||
linux_support.s
|
||||
DPSRCS= linux_genassym.c
|
||||
|
Loading…
Reference in New Issue
Block a user