aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/compat/freebsd32/freebsd32_syscall.h3
-rw-r--r--sys/compat/freebsd32/freebsd32_syscalls.c1
-rw-r--r--sys/compat/freebsd32/freebsd32_sysent.c1
-rw-r--r--sys/compat/freebsd32/freebsd32_systrace_args.c30
-rw-r--r--sys/kern/init_sysent.c1
-rw-r--r--sys/kern/syscalls.c1
-rw-r--r--sys/kern/systrace_args.c30
-rw-r--r--sys/sys/syscall.h3
-rw-r--r--sys/sys/syscall.mk3
-rw-r--r--sys/sys/sysproto.h7
10 files changed, 77 insertions, 3 deletions
diff --git a/sys/compat/freebsd32/freebsd32_syscall.h b/sys/compat/freebsd32/freebsd32_syscall.h
index da10770605ab..c44e38259be1 100644
--- a/sys/compat/freebsd32/freebsd32_syscall.h
+++ b/sys/compat/freebsd32/freebsd32_syscall.h
@@ -468,4 +468,5 @@
#define FREEBSD32_SYS_freebsd32_kevent 560
#define FREEBSD32_SYS_freebsd32_cpuset_getdomain 561
#define FREEBSD32_SYS_freebsd32_cpuset_setdomain 562
-#define FREEBSD32_SYS_MAXSYSCALL 563
+#define FREEBSD32_SYS_getrandom 563
+#define FREEBSD32_SYS_MAXSYSCALL 564
diff --git a/sys/compat/freebsd32/freebsd32_syscalls.c b/sys/compat/freebsd32/freebsd32_syscalls.c
index 946e04883dcc..92ade167235e 100644
--- a/sys/compat/freebsd32/freebsd32_syscalls.c
+++ b/sys/compat/freebsd32/freebsd32_syscalls.c
@@ -595,4 +595,5 @@ const char *freebsd32_syscallnames[] = {
"freebsd32_kevent", /* 560 = freebsd32_kevent */
"freebsd32_cpuset_getdomain", /* 561 = freebsd32_cpuset_getdomain */
"freebsd32_cpuset_setdomain", /* 562 = freebsd32_cpuset_setdomain */
+ "getrandom", /* 563 = getrandom */
};
diff --git a/sys/compat/freebsd32/freebsd32_sysent.c b/sys/compat/freebsd32/freebsd32_sysent.c
index 5ea8a1d9ff08..04ccf3b9396b 100644
--- a/sys/compat/freebsd32/freebsd32_sysent.c
+++ b/sys/compat/freebsd32/freebsd32_sysent.c
@@ -644,4 +644,5 @@ struct sysent freebsd32_sysent[] = {
{ AS(freebsd32_kevent_args), (sy_call_t *)freebsd32_kevent, AUE_KEVENT, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 560 = freebsd32_kevent */
{ AS(freebsd32_cpuset_getdomain_args), (sy_call_t *)freebsd32_cpuset_getdomain, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 561 = freebsd32_cpuset_getdomain */
{ AS(freebsd32_cpuset_setdomain_args), (sy_call_t *)freebsd32_cpuset_setdomain, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 562 = freebsd32_cpuset_setdomain */
+ { AS(getrandom_args), (sy_call_t *)sys_getrandom, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 563 = getrandom */
};
diff --git a/sys/compat/freebsd32/freebsd32_systrace_args.c b/sys/compat/freebsd32/freebsd32_systrace_args.c
index 82701db5b769..f23fe5b7347a 100644
--- a/sys/compat/freebsd32/freebsd32_systrace_args.c
+++ b/sys/compat/freebsd32/freebsd32_systrace_args.c
@@ -3274,6 +3274,15 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
*n_args = 7;
break;
}
+ /* getrandom */
+ case 563: {
+ struct getrandom_args *p = params;
+ uarg[0] = (intptr_t) p->buf; /* void * */
+ uarg[1] = p->buflen; /* size_t */
+ uarg[2] = p->flags; /* unsigned int */
+ *n_args = 3;
+ break;
+ }
default:
*n_args = 0;
break;
@@ -8800,6 +8809,22 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
break;
};
break;
+ /* getrandom */
+ case 563:
+ switch(ndx) {
+ case 0:
+ p = "userland void *";
+ break;
+ case 1:
+ p = "size_t";
+ break;
+ case 2:
+ p = "unsigned int";
+ break;
+ default:
+ break;
+ };
+ break;
default:
break;
};
@@ -10651,6 +10676,11 @@ systrace_return_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
if (ndx == 0 || ndx == 1)
p = "int";
break;
+ /* getrandom */
+ case 563:
+ if (ndx == 0 || ndx == 1)
+ p = "int";
+ break;
default:
break;
};
diff --git a/sys/kern/init_sysent.c b/sys/kern/init_sysent.c
index cd919dc19d79..870a9d401cf2 100644
--- a/sys/kern/init_sysent.c
+++ b/sys/kern/init_sysent.c
@@ -614,4 +614,5 @@ struct sysent sysent[] = {
{ AS(kevent_args), (sy_call_t *)sys_kevent, AUE_KEVENT, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 560 = kevent */
{ AS(cpuset_getdomain_args), (sy_call_t *)sys_cpuset_getdomain, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 561 = cpuset_getdomain */
{ AS(cpuset_setdomain_args), (sy_call_t *)sys_cpuset_setdomain, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 562 = cpuset_setdomain */
+ { AS(getrandom_args), (sy_call_t *)sys_getrandom, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 563 = getrandom */
};
diff --git a/sys/kern/syscalls.c b/sys/kern/syscalls.c
index 7211a7f0e7ed..464b2b19e780 100644
--- a/sys/kern/syscalls.c
+++ b/sys/kern/syscalls.c
@@ -569,4 +569,5 @@ const char *syscallnames[] = {
"kevent", /* 560 = kevent */
"cpuset_getdomain", /* 561 = cpuset_getdomain */
"cpuset_setdomain", /* 562 = cpuset_setdomain */
+ "getrandom", /* 563 = getrandom */
};
diff --git a/sys/kern/systrace_args.c b/sys/kern/systrace_args.c
index b3de51ff5aa9..281e26f4677f 100644
--- a/sys/kern/systrace_args.c
+++ b/sys/kern/systrace_args.c
@@ -3282,6 +3282,15 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
*n_args = 6;
break;
}
+ /* getrandom */
+ case 563: {
+ struct getrandom_args *p = params;
+ uarg[0] = (intptr_t) p->buf; /* void * */
+ uarg[1] = p->buflen; /* size_t */
+ uarg[2] = p->flags; /* unsigned int */
+ *n_args = 3;
+ break;
+ }
default:
*n_args = 0;
break;
@@ -8752,6 +8761,22 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
break;
};
break;
+ /* getrandom */
+ case 563:
+ switch(ndx) {
+ case 0:
+ p = "userland void *";
+ break;
+ case 1:
+ p = "size_t";
+ break;
+ case 2:
+ p = "unsigned int";
+ break;
+ default:
+ break;
+ };
+ break;
default:
break;
};
@@ -10638,6 +10663,11 @@ systrace_return_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
if (ndx == 0 || ndx == 1)
p = "int";
break;
+ /* getrandom */
+ case 563:
+ if (ndx == 0 || ndx == 1)
+ p = "int";
+ break;
default:
break;
};
diff --git a/sys/sys/syscall.h b/sys/sys/syscall.h
index 2275f611cd55..c52db562fb85 100644
--- a/sys/sys/syscall.h
+++ b/sys/sys/syscall.h
@@ -478,4 +478,5 @@
#define SYS_kevent 560
#define SYS_cpuset_getdomain 561
#define SYS_cpuset_setdomain 562
-#define SYS_MAXSYSCALL 563
+#define SYS_getrandom 563
+#define SYS_MAXSYSCALL 564
diff --git a/sys/sys/syscall.mk b/sys/sys/syscall.mk
index d0650477e553..c3daf3545968 100644
--- a/sys/sys/syscall.mk
+++ b/sys/sys/syscall.mk
@@ -405,4 +405,5 @@ MIASM = \
mknodat.o \
kevent.o \
cpuset_getdomain.o \
- cpuset_setdomain.o
+ cpuset_setdomain.o \
+ getrandom.o
diff --git a/sys/sys/sysproto.h b/sys/sys/sysproto.h
index 209485c9bcbf..c36435a22317 100644
--- a/sys/sys/sysproto.h
+++ b/sys/sys/sysproto.h
@@ -1768,6 +1768,11 @@ struct cpuset_setdomain_args {
char mask_l_[PADL_(domainset_t *)]; domainset_t * mask; char mask_r_[PADR_(domainset_t *)];
char policy_l_[PADL_(int)]; int policy; char policy_r_[PADR_(int)];
};
+struct getrandom_args {
+ char buf_l_[PADL_(void *)]; void * buf; char buf_r_[PADR_(void *)];
+ char buflen_l_[PADL_(size_t)]; size_t buflen; char buflen_r_[PADR_(size_t)];
+ char flags_l_[PADL_(unsigned int)]; unsigned int flags; char flags_r_[PADR_(unsigned int)];
+};
int nosys(struct thread *, struct nosys_args *);
void sys_sys_exit(struct thread *, struct sys_exit_args *);
int sys_fork(struct thread *, struct fork_args *);
@@ -2148,6 +2153,7 @@ int sys_mknodat(struct thread *, struct mknodat_args *);
int sys_kevent(struct thread *, struct kevent_args *);
int sys_cpuset_getdomain(struct thread *, struct cpuset_getdomain_args *);
int sys_cpuset_setdomain(struct thread *, struct cpuset_setdomain_args *);
+int sys_getrandom(struct thread *, struct getrandom_args *);
#ifdef COMPAT_43
@@ -3040,6 +3046,7 @@ int freebsd11_mknodat(struct thread *, struct freebsd11_mknodat_args *);
#define SYS_AUE_kevent AUE_KEVENT
#define SYS_AUE_cpuset_getdomain AUE_NULL
#define SYS_AUE_cpuset_setdomain AUE_NULL
+#define SYS_AUE_getrandom AUE_NULL
#undef PAD_
#undef PADL_