2 * SYSCALL_DEFINE4(send, int, fd, void __user *, buff, size_t, len,
7 #include <sys/socket.h>
14 struct syscallentry syscall_send
= {
20 .arg2type
= ARG_ADDRESS
,
27 .values
= { MSG_OOB
, MSG_PEEK
, MSG_DONTROUTE
, MSG_CTRUNC
,
28 MSG_PROBE
, MSG_TRUNC
, MSG_DONTWAIT
, MSG_EOR
,
29 MSG_WAITALL
, MSG_FIN
, MSG_SYN
, MSG_CONFIRM
,
30 MSG_RST
, MSG_ERRQUEUE
, MSG_NOSIGNAL
, MSG_MORE
,
31 MSG_WAITFORONE
, MSG_FASTOPEN
, MSG_CMSG_CLOEXEC
, MSG_CMSG_COMPAT
,
38 * SYSCALL_DEFINE6(sendto, int, fd, void __user *, buff, size_t, len,
39 unsigned, flags, struct sockaddr __user *, addr,
42 struct syscallentry syscall_sendto
= {
48 .arg2type
= ARG_ADDRESS
,
55 .values
= { MSG_OOB
, MSG_PEEK
, MSG_DONTROUTE
, MSG_CTRUNC
,
56 MSG_PROBE
, MSG_TRUNC
, MSG_DONTWAIT
, MSG_EOR
,
57 MSG_WAITALL
, MSG_FIN
, MSG_SYN
, MSG_CONFIRM
,
58 MSG_RST
, MSG_ERRQUEUE
, MSG_NOSIGNAL
, MSG_MORE
,
59 MSG_WAITFORONE
, MSG_FASTOPEN
, MSG_CMSG_CLOEXEC
, MSG_CMSG_COMPAT
},
62 .arg5type
= ARG_SOCKADDR
,
63 .arg6name
= "addr_len",
64 .arg6type
= ARG_SOCKADDRLEN
,
70 * SYSCALL_DEFINE3(sendmsg, int, fd, struct msghdr __user *, msg, unsigned, flags)
72 static void sanitise_sendmsg(int childno
)
75 struct sockaddr
*sa
= NULL
;
78 msg
= malloc(sizeof(struct msghdr
));
79 shm
->scratch
[childno
] = (unsigned long) msg
;
82 // just do something weird.
83 shm
->syscall
[childno
].a2
= (unsigned long) get_address();
87 generate_sockaddr((struct sockaddr
**) &sa
, (socklen_t
*) &salen
, rand() % TRINITY_PF_MAX
);
90 msg
->msg_namelen
= salen
;
92 msg
->msg_iov
= get_address();
93 msg
->msg_iovlen
= get_len();
94 msg
->msg_control
= get_address();
95 msg
->msg_controllen
= get_len();
96 msg
->msg_flags
= rand32();
98 shm
->syscall
[childno
].a2
= (unsigned long) msg
;
101 static void post_sendmsg(int childno
)
104 void *ptr
= (void *) shm
->scratch
[childno
];
107 msg
= (struct msghdr
*) ptr
;
109 if (msg
->msg_name
!= page_rand
) // FIXME: What about other kinds of pages ?
110 free(msg
->msg_name
); // free sockaddr
115 shm
->scratch
[childno
] = 0;
118 struct syscallentry syscall_sendmsg
= {
125 .arg3type
= ARG_LIST
,
128 .values
= { MSG_OOB
, MSG_PEEK
, MSG_DONTROUTE
, MSG_CTRUNC
,
129 MSG_TRUNC
, MSG_DONTWAIT
, MSG_EOR
,
130 MSG_WAITALL
, MSG_FIN
, MSG_SYN
, MSG_CONFIRM
,
131 MSG_RST
, MSG_ERRQUEUE
, MSG_NOSIGNAL
, MSG_MORE
,
132 MSG_WAITFORONE
, MSG_CMSG_CLOEXEC
, MSG_FASTOPEN
, MSG_CMSG_COMPAT
},
134 .sanitise
= sanitise_sendmsg
,
135 .post
= post_sendmsg
,
139 * SYSCALL_DEFINE4(sendmmsg, int, fd, struct mmsghdr __user *, mmsg,
140 * unsigned int, vlen, unsigned int, flags)
142 struct syscallentry syscall_sendmmsg
= {
148 .arg2type
= ARG_ADDRESS
,
152 .arg4type
= ARG_LIST
,
155 .values
= { MSG_OOB
, MSG_PEEK
, MSG_DONTROUTE
, MSG_CTRUNC
,
156 MSG_PROBE
, MSG_TRUNC
, MSG_DONTWAIT
, MSG_EOR
,
157 MSG_WAITALL
, MSG_FIN
, MSG_SYN
, MSG_CONFIRM
,
158 MSG_RST
, MSG_ERRQUEUE
, MSG_NOSIGNAL
, MSG_MORE
,
159 MSG_WAITFORONE
, MSG_CMSG_CLOEXEC
, MSG_FASTOPEN
, MSG_CMSG_COMPAT
},