Lines Matching full:scm
2 /* scm.c - Socket level control messages processing.
39 #include <net/scm.h>
135 void __scm_destroy(struct scm_cookie *scm)
137 struct scm_fp_list *fpl = scm->fp;
141 scm->fp = NULL;
150 static inline int scm_replace_pid(struct scm_cookie *scm, struct pid *pid)
155 scm_destroy_cred(scm);
161 scm->pid = pid;
162 scm->creds.pid = pid_vnr(pid);
356 void scm_detach_fds(struct msghdr *msg, struct scm_cookie *scm)
361 int fdmax = min_t(int, scm_max_fds(msg), scm->fp->count);
370 scm_detach_fds_compat(msg, scm);
375 err = scm_recv_one_fd(scm->fp->fp[i], cmsg_data + i, o_flags);
397 if (i < scm->fp->count || (scm->fp->count && fdmax <= 0))
404 __scm_destroy(scm);
435 static void scm_passec(struct sock *sk, struct msghdr *msg, struct scm_cookie *scm)
441 err = security_secid_to_secctx(scm->secid, &ctx);
457 static void scm_passec(struct sock *sk, struct msghdr *msg, struct scm_cookie *scm)
467 static void scm_pidfd_recv(struct msghdr *msg, struct scm_cookie *scm)
485 if (!scm->pid)
488 pidfd = pidfd_prepare(scm->pid, PIDFD_STALE, &pidfd_file);
504 struct scm_cookie *scm, int flags)
508 scm->fp || scm_has_secdata(sk))
511 scm_destroy(scm);
518 .pid = scm->creds.pid,
519 .uid = from_kuid_munged(current_ns, scm->creds.uid),
520 .gid = from_kgid_munged(current_ns, scm->creds.gid),
526 scm_passec(sk, msg, scm);
528 if (scm->fp)
529 scm_detach_fds(msg, scm);
535 struct scm_cookie *scm, int flags)
537 if (!__scm_recv_common(sock->sk, msg, scm, flags))
540 scm_destroy_cred(scm);
545 struct scm_cookie *scm, int flags)
547 if (!__scm_recv_common(sock->sk, msg, scm, flags))
551 scm_pidfd_recv(msg, scm);
553 scm_destroy_cred(scm);