Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v2.6.12 71 lines 1.7 kB view raw
1#ifndef __LINUX_NET_SCM_H 2#define __LINUX_NET_SCM_H 3 4#include <linux/limits.h> 5#include <linux/net.h> 6 7/* Well, we should have at least one descriptor open 8 * to accept passed FDs 8) 9 */ 10#define SCM_MAX_FD (OPEN_MAX-1) 11 12struct scm_fp_list 13{ 14 int count; 15 struct file *fp[SCM_MAX_FD]; 16}; 17 18struct scm_cookie 19{ 20 struct ucred creds; /* Skb credentials */ 21 struct scm_fp_list *fp; /* Passed files */ 22 unsigned long seq; /* Connection seqno */ 23}; 24 25extern void scm_detach_fds(struct msghdr *msg, struct scm_cookie *scm); 26extern void scm_detach_fds_compat(struct msghdr *msg, struct scm_cookie *scm); 27extern int __scm_send(struct socket *sock, struct msghdr *msg, struct scm_cookie *scm); 28extern void __scm_destroy(struct scm_cookie *scm); 29extern struct scm_fp_list * scm_fp_dup(struct scm_fp_list *fpl); 30 31static __inline__ void scm_destroy(struct scm_cookie *scm) 32{ 33 if (scm && scm->fp) 34 __scm_destroy(scm); 35} 36 37static __inline__ int scm_send(struct socket *sock, struct msghdr *msg, 38 struct scm_cookie *scm) 39{ 40 memset(scm, 0, sizeof(*scm)); 41 scm->creds.uid = current->uid; 42 scm->creds.gid = current->gid; 43 scm->creds.pid = current->tgid; 44 if (msg->msg_controllen <= 0) 45 return 0; 46 return __scm_send(sock, msg, scm); 47} 48 49static __inline__ void scm_recv(struct socket *sock, struct msghdr *msg, 50 struct scm_cookie *scm, int flags) 51{ 52 if (!msg->msg_control) 53 { 54 if (test_bit(SOCK_PASSCRED, &sock->flags) || scm->fp) 55 msg->msg_flags |= MSG_CTRUNC; 56 scm_destroy(scm); 57 return; 58 } 59 60 if (test_bit(SOCK_PASSCRED, &sock->flags)) 61 put_cmsg(msg, SOL_SOCKET, SCM_CREDENTIALS, sizeof(scm->creds), &scm->creds); 62 63 if (!scm->fp) 64 return; 65 66 scm_detach_fds(msg, scm); 67} 68 69 70#endif /* __LINUX_NET_SCM_H */ 71