Deleted Added
sdiff udiff text old ( 123094 ) new ( 123811 )
full compact
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 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;
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;
244 socklen_t namelen;
245 int error, s;
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;
920 socklen_t len;
921 int 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) {
974 if (auio.uio_resid != (int)len && (error == ERESTART ||
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;
982 ktruio.uio_resid = (int)len - auio.uio_resid;
983 ktrgenio(s, UIO_READ, &ktruio, error);
984 }
985 FREE(ktriov, M_TEMP);
986 }
987#endif
988 if (error)
989 goto out;
990 td->td_retval[0] = (int)len - auio.uio_resid;
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 &&
1009 (error = copyout(&len, namelenp, sizeof (socklen_t)))) {
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;
1085 struct sockaddr * __restrict from;
1086 socklen_t * __restrict fromlenaddr;
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;
1340 void * __restrict val;
1341 socklen_t * __restrict avalsize;
1342 } */ *uap;
1343{
1344 socklen_t valsize;
1345 int error;
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;
1394 struct sockaddr * __restrict asa;
1395 socklen_t * __restrict alen;
1396 } */ *uap;
1397 int compat;
1398{
1399 struct socket *so;
1400 struct sockaddr *sa;
1401 socklen_t len;
1402 int error;
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;
1479 struct sockaddr * __restrict asa;
1480 socklen_t * __restrict alen;
1481 } */ *uap;
1482 int compat;
1483{
1484 struct socket *so;
1485 struct sockaddr *sa;
1486 socklen_t len;
1487 int error;
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 ---