Lines Matching refs:msg

166 int __scm_send(struct socket *sock, struct msghdr *msg, struct scm_cookie *p)  in __scm_send()  argument
172 for_each_cmsghdr(cmsg, msg) { in __scm_send()
183 if (!CMSG_OK(msg, cmsg)) in __scm_send()
255 int put_cmsg(struct msghdr * msg, int level, int type, int len, void *data) in put_cmsg() argument
259 if (msg->msg_flags & MSG_CMSG_COMPAT) in put_cmsg()
260 return put_cmsg_compat(msg, level, type, len, data); in put_cmsg()
262 if (!msg->msg_control || msg->msg_controllen < sizeof(struct cmsghdr)) { in put_cmsg()
263 msg->msg_flags |= MSG_CTRUNC; in put_cmsg()
266 if (msg->msg_controllen < cmlen) { in put_cmsg()
267 msg->msg_flags |= MSG_CTRUNC; in put_cmsg()
268 cmlen = msg->msg_controllen; in put_cmsg()
271 if (msg->msg_control_is_user) { in put_cmsg()
272 struct cmsghdr __user *cm = msg->msg_control_user; in put_cmsg()
286 struct cmsghdr *cm = msg->msg_control; in put_cmsg()
294 cmlen = min(CMSG_SPACE(len), msg->msg_controllen); in put_cmsg()
295 if (msg->msg_control_is_user) in put_cmsg()
296 msg->msg_control_user += cmlen; in put_cmsg()
298 msg->msg_control += cmlen; in put_cmsg()
299 msg->msg_controllen -= cmlen; in put_cmsg()
309 int put_cmsg_notrunc(struct msghdr *msg, int level, int type, int len, in put_cmsg_notrunc() argument
313 if (!msg->msg_control || msg->msg_controllen < CMSG_LEN(len)) in put_cmsg_notrunc()
316 return put_cmsg(msg, level, type, len, data); in put_cmsg_notrunc()
319 void put_cmsg_scm_timestamping64(struct msghdr *msg, struct scm_timestamping_internal *tss_internal) in put_cmsg_scm_timestamping64() argument
329 put_cmsg(msg, SOL_SOCKET, SO_TIMESTAMPING_NEW, sizeof(tss), &tss); in put_cmsg_scm_timestamping64()
333 void put_cmsg_scm_timestamping(struct msghdr *msg, struct scm_timestamping_internal *tss_internal) in put_cmsg_scm_timestamping() argument
343 put_cmsg(msg, SOL_SOCKET, SO_TIMESTAMPING_OLD, sizeof(tss), &tss); in put_cmsg_scm_timestamping()
347 static int scm_max_fds(struct msghdr *msg) in scm_max_fds() argument
349 if (msg->msg_controllen <= sizeof(struct cmsghdr)) in scm_max_fds()
351 return (msg->msg_controllen - sizeof(struct cmsghdr)) / sizeof(int); in scm_max_fds()
354 void scm_detach_fds(struct msghdr *msg, struct scm_cookie *scm) in scm_detach_fds() argument
357 (__force struct cmsghdr __user *)msg->msg_control_user; in scm_detach_fds()
358 unsigned int o_flags = (msg->msg_flags & MSG_CMSG_CLOEXEC) ? O_CLOEXEC : 0; in scm_detach_fds()
359 int fdmax = min_t(int, scm_max_fds(msg), scm->fp->count); in scm_detach_fds()
364 if (WARN_ON_ONCE(!msg->msg_control_is_user)) in scm_detach_fds()
367 if (msg->msg_flags & MSG_CMSG_COMPAT) { in scm_detach_fds()
368 scm_detach_fds_compat(msg, scm); in scm_detach_fds()
388 if (msg->msg_controllen < cmlen) in scm_detach_fds()
389 cmlen = msg->msg_controllen; in scm_detach_fds()
390 msg->msg_control_user += cmlen; in scm_detach_fds()
391 msg->msg_controllen -= cmlen; in scm_detach_fds()
396 msg->msg_flags |= MSG_CTRUNC; in scm_detach_fds()
433 static void scm_passec(struct sock *sk, struct msghdr *msg, struct scm_cookie *scm) in scm_passec() argument
442 put_cmsg(msg, SOL_SOCKET, SCM_SECURITY, ctx.len, in scm_passec()
455 static void scm_passec(struct sock *sk, struct msghdr *msg, struct scm_cookie *scm) in scm_passec() argument
465 static void scm_pidfd_recv(struct msghdr *msg, struct scm_cookie *scm) in scm_pidfd_recv() argument
473 if (msg->msg_flags & MSG_CMSG_COMPAT) in scm_pidfd_recv()
478 if (msg->msg_controllen < len) { in scm_pidfd_recv()
479 msg->msg_flags |= MSG_CTRUNC; in scm_pidfd_recv()
488 if (put_cmsg(msg, SOL_SOCKET, SCM_PIDFD, sizeof(int), &pidfd)) { in scm_pidfd_recv()
501 static bool __scm_recv_common(struct sock *sk, struct msghdr *msg, in __scm_recv_common() argument
504 if (!msg->msg_control) { in __scm_recv_common()
507 msg->msg_flags |= MSG_CTRUNC; in __scm_recv_common()
521 put_cmsg(msg, SOL_SOCKET, SCM_CREDENTIALS, sizeof(ucreds), &ucreds); in __scm_recv_common()
524 scm_passec(sk, msg, scm); in __scm_recv_common()
527 scm_detach_fds(msg, scm); in __scm_recv_common()
532 void scm_recv(struct socket *sock, struct msghdr *msg, in scm_recv() argument
535 if (!__scm_recv_common(sock->sk, msg, scm, flags)) in scm_recv()
542 void scm_recv_unix(struct socket *sock, struct msghdr *msg, in scm_recv_unix() argument
545 if (!__scm_recv_common(sock->sk, msg, scm, flags)) in scm_recv_unix()
549 scm_pidfd_recv(msg, scm); in scm_recv_unix()