summaryrefslogtreecommitdiffstats
path: root/freebsd/sys/kern/uipc_syscalls.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2017-04-04 09:36:57 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2017-04-04 14:46:23 +0200
commitde8a76da2f374792594ce03a203b3f30e4889f6f (patch)
tree12b5e1e59358005c3c522955c08aee4795e4829c /freebsd/sys/kern/uipc_syscalls.c
parentEnable bridging by default (diff)
downloadrtems-libbsd-de8a76da2f374792594ce03a203b3f30e4889f6f.tar.bz2
Update to FreeBSD head 2017-04-04
Git mirror commit 642b174daddbd0efd9bb5f242c43f4ab4db6869f.
Diffstat (limited to 'freebsd/sys/kern/uipc_syscalls.c')
-rw-r--r--freebsd/sys/kern/uipc_syscalls.c46
1 files changed, 32 insertions, 14 deletions
diff --git a/freebsd/sys/kern/uipc_syscalls.c b/freebsd/sys/kern/uipc_syscalls.c
index c6fdb26f..41701401 100644
--- a/freebsd/sys/kern/uipc_syscalls.c
+++ b/freebsd/sys/kern/uipc_syscalls.c
@@ -167,13 +167,19 @@ static
int
sys_socket(struct thread *td, struct socket_args *uap)
{
+
+ return (kern_socket(td, uap->domain, uap->type, uap->protocol));
+}
+
+int
+kern_socket(struct thread *td, int domain, int type, int protocol)
+{
struct socket *so;
struct file *fp;
- int fd, error, type, oflag, fflag;
+ int fd, error, oflag, fflag;
- AUDIT_ARG_SOCKET(uap->domain, uap->type, uap->protocol);
+ AUDIT_ARG_SOCKET(domain, type, protocol);
- type = uap->type;
oflag = 0;
fflag = 0;
if ((type & SOCK_CLOEXEC) != 0) {
@@ -186,8 +192,7 @@ sys_socket(struct thread *td, struct socket_args *uap)
}
#ifdef MAC
- error = mac_socket_check_create(td->td_ucred, uap->domain, type,
- uap->protocol);
+ error = mac_socket_check_create(td->td_ucred, domain, type, protocol);
if (error != 0)
return (error);
#endif
@@ -195,8 +200,7 @@ sys_socket(struct thread *td, struct socket_args *uap)
if (error != 0)
return (error);
/* An extra reference on `fp' has been held for us by falloc(). */
- error = socreate(uap->domain, &so, type, uap->protocol,
- td->td_ucred, td);
+ error = socreate(domain, &so, type, protocol, td->td_ucred, td);
if (error != 0) {
fdclose(td, fp, fd);
} else {
@@ -329,13 +333,20 @@ sys_bindat(struct thread *td, struct bindat_args *uap)
int
sys_listen(struct thread *td, struct listen_args *uap)
{
+
+ return (kern_listen(td, uap->s, uap->backlog));
+}
+
+int
+kern_listen(struct thread *td, int s, int backlog)
+{
struct socket *so;
struct file *fp;
cap_rights_t rights;
int error;
- AUDIT_ARG_FD(uap->s);
- error = getsock_cap(td, uap->s, cap_rights_init(&rights, CAP_LISTEN),
+ AUDIT_ARG_FD(s);
+ error = getsock_cap(td, s, cap_rights_init(&rights, CAP_LISTEN),
&fp, NULL, NULL);
if (error == 0) {
so = fp->f_data;
@@ -343,10 +354,10 @@ sys_listen(struct thread *td, struct listen_args *uap)
error = mac_socket_check_listen(td->td_ucred, so);
if (error == 0)
#endif
- error = solisten(so, uap->backlog, td);
+ error = solisten(so, backlog, td);
fdrop(fp, td);
}
- return(error);
+ return (error);
}
#ifdef __rtems__
int
@@ -1581,17 +1592,24 @@ static
int
sys_shutdown(struct thread *td, struct shutdown_args *uap)
{
+
+ return (kern_shutdown(td, uap->s, uap->how));
+}
+
+int
+kern_shutdown(struct thread *td, int s, int how)
+{
struct socket *so;
struct file *fp;
cap_rights_t rights;
int error;
- AUDIT_ARG_FD(uap->s);
- error = getsock_cap(td, uap->s, cap_rights_init(&rights, CAP_SHUTDOWN),
+ AUDIT_ARG_FD(s);
+ error = getsock_cap(td, s, cap_rights_init(&rights, CAP_SHUTDOWN),
&fp, NULL, NULL);
if (error == 0) {
so = fp->f_data;
- error = soshutdown(so, uap->how);
+ error = soshutdown(so, how);
#ifndef __rtems__
/*
* Previous versions did not return ENOTCONN, but 0 in