uipc_syscalls.c (123094) | uipc_syscalls.c (123811) |
---|---|
1/* 2 * Copyright (c) 1982, 1986, 1989, 1990, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * sendfile(2) and related extensions: 6 * Copyright (c) 1998, David Greenman. All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without --- 23 unchanged lines hidden (view full) --- 32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 34 * SUCH DAMAGE. 35 * 36 * @(#)uipc_syscalls.c 8.4 (Berkeley) 2/21/94 37 */ 38 39#include <sys/cdefs.h> | 1/* 2 * Copyright (c) 1982, 1986, 1989, 1990, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * sendfile(2) and related extensions: 6 * Copyright (c) 1998, David Greenman. All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without --- 23 unchanged lines hidden (view full) --- 32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 34 * SUCH DAMAGE. 35 * 36 * @(#)uipc_syscalls.c 8.4 (Berkeley) 2/21/94 37 */ 38 39#include <sys/cdefs.h> |
40__FBSDID("$FreeBSD: head/sys/kern/uipc_syscalls.c 123094 2003-12-01 22:12:50Z dg $"); | 40__FBSDID("$FreeBSD: head/sys/kern/uipc_syscalls.c 123811 2003-12-24 18:47:43Z alfred $"); |
41 42#include "opt_compat.h" 43#include "opt_ktrace.h" 44#include "opt_mac.h" 45 46#include <sys/param.h> 47#include <sys/systm.h> 48#include <sys/kernel.h> --- 179 unchanged lines hidden (view full) --- 228 * accept1() 229 * MPSAFE 230 */ 231static int 232accept1(td, uap, compat) 233 struct thread *td; 234 register struct accept_args /* { 235 int s; | 41 42#include "opt_compat.h" 43#include "opt_ktrace.h" 44#include "opt_mac.h" 45 46#include <sys/param.h> 47#include <sys/systm.h> 48#include <sys/kernel.h> --- 179 unchanged lines hidden (view full) --- 228 * accept1() 229 * MPSAFE 230 */ 231static int 232accept1(td, uap, compat) 233 struct thread *td; 234 register struct accept_args /* { 235 int s; |
236 caddr_t name; 237 int *anamelen; | 236 struct sockaddr * __restrict name; 237 socklen_t * __restrict anamelen; |
238 } */ *uap; 239 int compat; 240{ 241 struct filedesc *fdp; 242 struct file *nfp = NULL; 243 struct sockaddr *sa; | 238 } */ *uap; 239 int compat; 240{ 241 struct filedesc *fdp; 242 struct file *nfp = NULL; 243 struct sockaddr *sa; |
244 int namelen, error, s; | 244 socklen_t namelen; 245 int error, s; |
245 struct socket *head, *so; 246 int fd; 247 u_int fflag; 248 pid_t pgid; 249 int tmp; 250 251 fdp = td->td_proc->p_fd; 252 if (uap->name) { --- 658 unchanged lines hidden (view full) --- 911 register struct thread *td; 912 int s; 913 register struct msghdr *mp; 914 void *namelenp; 915{ 916 struct uio auio; 917 register struct iovec *iov; 918 register int i; | 246 struct socket *head, *so; 247 int fd; 248 u_int fflag; 249 pid_t pgid; 250 int tmp; 251 252 fdp = td->td_proc->p_fd; 253 if (uap->name) { --- 658 unchanged lines hidden (view full) --- 912 register struct thread *td; 913 int s; 914 register struct msghdr *mp; 915 void *namelenp; 916{ 917 struct uio auio; 918 register struct iovec *iov; 919 register int i; |
919 int len, error; | 920 socklen_t len; 921 int error; |
920 struct mbuf *m, *control = 0; 921 caddr_t ctlbuf; 922 struct socket *so; 923 struct sockaddr *fromsa = 0; 924#ifdef KTRACE 925 struct iovec *ktriov = NULL; 926 struct uio ktruio; 927 int iovlen; --- 36 unchanged lines hidden (view full) --- 964 ktruio = auio; 965 } 966#endif 967 len = auio.uio_resid; 968 error = so->so_proto->pr_usrreqs->pru_soreceive(so, &fromsa, &auio, 969 (struct mbuf **)0, mp->msg_control ? &control : (struct mbuf **)0, 970 &mp->msg_flags); 971 if (error) { | 922 struct mbuf *m, *control = 0; 923 caddr_t ctlbuf; 924 struct socket *so; 925 struct sockaddr *fromsa = 0; 926#ifdef KTRACE 927 struct iovec *ktriov = NULL; 928 struct uio ktruio; 929 int iovlen; --- 36 unchanged lines hidden (view full) --- 966 ktruio = auio; 967 } 968#endif 969 len = auio.uio_resid; 970 error = so->so_proto->pr_usrreqs->pru_soreceive(so, &fromsa, &auio, 971 (struct mbuf **)0, mp->msg_control ? &control : (struct mbuf **)0, 972 &mp->msg_flags); 973 if (error) { |
972 if (auio.uio_resid != len && (error == ERESTART || | 974 if (auio.uio_resid != (int)len && (error == ERESTART || |
973 error == EINTR || error == EWOULDBLOCK)) 974 error = 0; 975 } 976#ifdef KTRACE 977 if (ktriov != NULL) { 978 if (error == 0) { 979 ktruio.uio_iov = ktriov; | 975 error == EINTR || error == EWOULDBLOCK)) 976 error = 0; 977 } 978#ifdef KTRACE 979 if (ktriov != NULL) { 980 if (error == 0) { 981 ktruio.uio_iov = ktriov; |
980 ktruio.uio_resid = len - auio.uio_resid; | 982 ktruio.uio_resid = (int)len - auio.uio_resid; |
981 ktrgenio(s, UIO_READ, &ktruio, error); 982 } 983 FREE(ktriov, M_TEMP); 984 } 985#endif 986 if (error) 987 goto out; | 983 ktrgenio(s, UIO_READ, &ktruio, error); 984 } 985 FREE(ktriov, M_TEMP); 986 } 987#endif 988 if (error) 989 goto out; |
988 td->td_retval[0] = len - auio.uio_resid; | 990 td->td_retval[0] = (int)len - auio.uio_resid; |
989 if (mp->msg_name) { 990 len = mp->msg_namelen; 991 if (len <= 0 || fromsa == 0) 992 len = 0; 993 else { 994 /* save sa_len before it is destroyed by MSG_COMPAT */ 995 len = MIN(len, fromsa->sa_len); 996#ifdef COMPAT_OLDSOCK 997 if (mp->msg_flags & MSG_COMPAT) 998 ((struct osockaddr *)fromsa)->sa_family = 999 fromsa->sa_family; 1000#endif 1001 error = copyout(fromsa, mp->msg_name, (unsigned)len); 1002 if (error) 1003 goto out; 1004 } 1005 mp->msg_namelen = len; 1006 if (namelenp && | 991 if (mp->msg_name) { 992 len = mp->msg_namelen; 993 if (len <= 0 || fromsa == 0) 994 len = 0; 995 else { 996 /* save sa_len before it is destroyed by MSG_COMPAT */ 997 len = MIN(len, fromsa->sa_len); 998#ifdef COMPAT_OLDSOCK 999 if (mp->msg_flags & MSG_COMPAT) 1000 ((struct osockaddr *)fromsa)->sa_family = 1001 fromsa->sa_family; 1002#endif 1003 error = copyout(fromsa, mp->msg_name, (unsigned)len); 1004 if (error) 1005 goto out; 1006 } 1007 mp->msg_namelen = len; 1008 if (namelenp && |
1007 (error = copyout(&len, namelenp, sizeof (int)))) { | 1009 (error = copyout(&len, namelenp, sizeof (socklen_t)))) { |
1008#ifdef COMPAT_OLDSOCK 1009 if (mp->msg_flags & MSG_COMPAT) 1010 error = 0; /* old recvfrom didn't check */ 1011 else 1012#endif 1013 goto out; 1014 } 1015 } --- 59 unchanged lines hidden (view full) --- 1075int 1076recvfrom(td, uap) 1077 struct thread *td; 1078 register struct recvfrom_args /* { 1079 int s; 1080 caddr_t buf; 1081 size_t len; 1082 int flags; | 1010#ifdef COMPAT_OLDSOCK 1011 if (mp->msg_flags & MSG_COMPAT) 1012 error = 0; /* old recvfrom didn't check */ 1013 else 1014#endif 1015 goto out; 1016 } 1017 } --- 59 unchanged lines hidden (view full) --- 1077int 1078recvfrom(td, uap) 1079 struct thread *td; 1080 register struct recvfrom_args /* { 1081 int s; 1082 caddr_t buf; 1083 size_t len; 1084 int flags; |
1083 caddr_t from; 1084 int *fromlenaddr; | 1085 struct sockaddr * __restrict from; 1086 socklen_t * __restrict fromlenaddr; |
1085 } */ *uap; 1086{ 1087 struct msghdr msg; 1088 struct iovec aiov; 1089 int error; 1090 1091 if (uap->fromlenaddr) { 1092 error = copyin(uap->fromlenaddr, --- 237 unchanged lines hidden (view full) --- 1330/* ARGSUSED */ 1331int 1332getsockopt(td, uap) 1333 struct thread *td; 1334 register struct getsockopt_args /* { 1335 int s; 1336 int level; 1337 int name; | 1087 } */ *uap; 1088{ 1089 struct msghdr msg; 1090 struct iovec aiov; 1091 int error; 1092 1093 if (uap->fromlenaddr) { 1094 error = copyin(uap->fromlenaddr, --- 237 unchanged lines hidden (view full) --- 1332/* ARGSUSED */ 1333int 1334getsockopt(td, uap) 1335 struct thread *td; 1336 register struct getsockopt_args /* { 1337 int s; 1338 int level; 1339 int name; |
1338 caddr_t val; 1339 int *avalsize; | 1340 void * __restrict val; 1341 socklen_t * __restrict avalsize; |
1340 } */ *uap; 1341{ | 1342 } */ *uap; 1343{ |
1342 int valsize, error; | 1344 socklen_t valsize; 1345 int error; |
1343 struct socket *so; 1344 struct sockopt sopt; 1345 1346 mtx_lock(&Giant); 1347 if ((error = fgetsock(td, uap->s, &so, NULL)) != 0) 1348 goto done2; 1349 if (uap->val) { 1350 error = copyin(uap->avalsize, &valsize, sizeof (valsize)); --- 32 unchanged lines hidden (view full) --- 1383 * MPSAFE 1384 */ 1385/* ARGSUSED */ 1386static int 1387getsockname1(td, uap, compat) 1388 struct thread *td; 1389 register struct getsockname_args /* { 1390 int fdes; | 1346 struct socket *so; 1347 struct sockopt sopt; 1348 1349 mtx_lock(&Giant); 1350 if ((error = fgetsock(td, uap->s, &so, NULL)) != 0) 1351 goto done2; 1352 if (uap->val) { 1353 error = copyin(uap->avalsize, &valsize, sizeof (valsize)); --- 32 unchanged lines hidden (view full) --- 1386 * MPSAFE 1387 */ 1388/* ARGSUSED */ 1389static int 1390getsockname1(td, uap, compat) 1391 struct thread *td; 1392 register struct getsockname_args /* { 1393 int fdes; |
1391 caddr_t asa; 1392 int *alen; | 1394 struct sockaddr * __restrict asa; 1395 socklen_t * __restrict alen; |
1393 } */ *uap; 1394 int compat; 1395{ 1396 struct socket *so; 1397 struct sockaddr *sa; | 1396 } */ *uap; 1397 int compat; 1398{ 1399 struct socket *so; 1400 struct sockaddr *sa; |
1398 int len, error; | 1401 socklen_t len; 1402 int error; |
1399 1400 mtx_lock(&Giant); 1401 if ((error = fgetsock(td, uap->fdes, &so, NULL)) != 0) 1402 goto done2; 1403 error = copyin(uap->alen, &len, sizeof (len)); 1404 if (error) 1405 goto done1; 1406 if (len < 0) { --- 60 unchanged lines hidden (view full) --- 1467 * MPSAFE 1468 */ 1469/* ARGSUSED */ 1470static int 1471getpeername1(td, uap, compat) 1472 struct thread *td; 1473 register struct getpeername_args /* { 1474 int fdes; | 1403 1404 mtx_lock(&Giant); 1405 if ((error = fgetsock(td, uap->fdes, &so, NULL)) != 0) 1406 goto done2; 1407 error = copyin(uap->alen, &len, sizeof (len)); 1408 if (error) 1409 goto done1; 1410 if (len < 0) { --- 60 unchanged lines hidden (view full) --- 1471 * MPSAFE 1472 */ 1473/* ARGSUSED */ 1474static int 1475getpeername1(td, uap, compat) 1476 struct thread *td; 1477 register struct getpeername_args /* { 1478 int fdes; |
1475 caddr_t asa; 1476 int *alen; | 1479 struct sockaddr * __restrict asa; 1480 socklen_t * __restrict alen; |
1477 } */ *uap; 1478 int compat; 1479{ 1480 struct socket *so; 1481 struct sockaddr *sa; | 1481 } */ *uap; 1482 int compat; 1483{ 1484 struct socket *so; 1485 struct sockaddr *sa; |
1482 int len, error; | 1486 socklen_t len; 1487 int error; |
1483 1484 mtx_lock(&Giant); 1485 if ((error = fgetsock(td, uap->fdes, &so, NULL)) != 0) 1486 goto done2; 1487 if ((so->so_state & (SS_ISCONNECTED|SS_ISCONFIRMING)) == 0) { 1488 error = ENOTCONN; 1489 goto done1; 1490 } --- 514 unchanged lines hidden --- | 1488 1489 mtx_lock(&Giant); 1490 if ((error = fgetsock(td, uap->fdes, &so, NULL)) != 0) 1491 goto done2; 1492 if ((so->so_state & (SS_ISCONNECTED|SS_ISCONFIRMING)) == 0) { 1493 error = ENOTCONN; 1494 goto done1; 1495 } --- 514 unchanged lines hidden --- |