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 123094 2003-12-01 22:12:50Z dg $");
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;
238 } */ *uap;
239 int compat;
240{
241 struct filedesc *fdp;
242 struct file *nfp = NULL;
243 struct sockaddr *sa;
244 int namelen, 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;
919 int len, 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) {
972 if (auio.uio_resid != 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;
980 ktruio.uio_resid = 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;
988 td->td_retval[0] = 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 &&
1007 (error = copyout(&len, namelenp, sizeof (int)))) {
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;
1083 caddr_t from;
1084 int *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;
1338 caddr_t val;
1339 int *avalsize;
1340 } */ *uap;
1341{
1342 int valsize, 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;
1391 caddr_t asa;
1392 int *alen;
1393 } */ *uap;
1394 int compat;
1395{
1396 struct socket *so;
1397 struct sockaddr *sa;
1398 int len, 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;
1475 caddr_t asa;
1476 int *alen;
1477 } */ *uap;
1478 int compat;
1479{
1480 struct socket *so;
1481 struct sockaddr *sa;
1482 int len, 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 ---