Lines Matching refs:scm
31 extern void scm_detach_fds(struct msghdr *msg, struct scm_cookie *scm);
32 extern void scm_detach_fds_compat(struct msghdr *msg, struct scm_cookie *scm);
33 extern int __scm_send(struct socket *sock, struct msghdr *msg, struct scm_cookie *scm);
34 extern void __scm_destroy(struct scm_cookie *scm);
38 static __inline__ void unix_get_peersec_dgram(struct socket *sock, struct scm_cookie *scm)
40 security_socket_getpeersec_dgram(sock, NULL, &scm->secid);
43 static __inline__ void unix_get_peersec_dgram(struct socket *sock, struct scm_cookie *scm)
47 static __inline__ void scm_set_cred(struct scm_cookie *scm,
50 scm->pid = get_pid(pid);
51 scm->cred = get_cred(cred);
52 cred_to_ucred(pid, cred, &scm->creds);
55 static __inline__ void scm_destroy_cred(struct scm_cookie *scm)
57 put_pid(scm->pid);
58 scm->pid = NULL;
60 if (scm->cred)
61 put_cred(scm->cred);
62 scm->cred = NULL;
65 static __inline__ void scm_destroy(struct scm_cookie *scm)
67 scm_destroy_cred(scm);
68 if (scm && scm->fp)
69 __scm_destroy(scm);
73 struct scm_cookie *scm)
75 scm_set_cred(scm, task_tgid(current), current_cred());
76 scm->fp = NULL;
77 unix_get_peersec_dgram(sock, scm);
80 return __scm_send(sock, msg, scm);
84 static inline void scm_passec(struct socket *sock, struct msghdr *msg, struct scm_cookie *scm)
91 err = security_secid_to_secctx(scm->secid, &secdata, &seclen);
100 static inline void scm_passec(struct socket *sock, struct msghdr *msg, struct scm_cookie *scm)
105 struct scm_cookie *scm, int flags)
108 if (test_bit(SOCK_PASSCRED, &sock->flags) || scm->fp)
110 scm_destroy(scm);
115 put_cmsg(msg, SOL_SOCKET, SCM_CREDENTIALS, sizeof(scm->creds), &scm->creds);
117 scm_destroy_cred(scm);
119 scm_passec(sock, msg, scm);
121 if (!scm->fp)
124 scm_detach_fds(msg, scm);