2 * SYSCALL_DEFINE3(sendmsg, int, fd, struct msghdr __user *, msg, unsigned, flags)
7 #include <sys/socket.h>
14 static void sanitise_sendmsg(int childno
)
17 struct sockaddr
*sa
= NULL
;
20 msg
= malloc(sizeof(struct msghdr
));
21 shm
->scratch
[childno
] = (unsigned long) msg
;
24 // just do something weird.
25 shm
->a2
[childno
] = (unsigned long) get_address();
29 generate_sockaddr((struct sockaddr
**) &sa
, (socklen_t
*) &salen
, rand() % TRINITY_PF_MAX
);
32 msg
->msg_namelen
= salen
;
34 msg
->msg_iov
= get_address();
35 msg
->msg_iovlen
= get_len();
36 msg
->msg_control
= get_address();
37 msg
->msg_controllen
= get_len();
38 msg
->msg_flags
= rand32();
40 shm
->a2
[childno
] = (unsigned long) msg
;
43 static void post_sendmsg(int childno
)
46 void *ptr
= (void *) shm
->scratch
[childno
];
49 msg
= (struct msghdr
*) ptr
;
51 if (msg
->msg_name
!= page_rand
) // FIXME: What about other kinds of pages ?
52 free(msg
->msg_name
); // free sockaddr
57 shm
->scratch
[childno
] = 0;
60 struct syscallentry syscall_sendmsg
= {
70 .values
= { MSG_OOB
, MSG_PEEK
, MSG_DONTROUTE
, MSG_CTRUNC
,
71 MSG_TRUNC
, MSG_DONTWAIT
, MSG_EOR
,
72 MSG_WAITALL
, MSG_FIN
, MSG_SYN
, MSG_CONFIRM
,
73 MSG_RST
, MSG_ERRQUEUE
, MSG_NOSIGNAL
, MSG_MORE
,
74 MSG_WAITFORONE
, MSG_CMSG_CLOEXEC
, MSG_FASTOPEN
, MSG_CMSG_COMPAT
},
76 .sanitise
= sanitise_sendmsg
,