~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/include/net/af_unix.h

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0 */
  2 #ifndef __LINUX_NET_AFUNIX_H
  3 #define __LINUX_NET_AFUNIX_H
  4 
  5 #include <linux/socket.h>
  6 #include <linux/un.h>
  7 #include <linux/mutex.h>
  8 #include <linux/refcount.h>
  9 #include <net/sock.h>
 10 
 11 #if IS_ENABLED(CONFIG_UNIX)
 12 struct unix_sock *unix_get_socket(struct file *filp);
 13 #else
 14 static inline struct unix_sock *unix_get_socket(struct file *filp)
 15 {
 16         return NULL;
 17 }
 18 #endif
 19 
 20 extern unsigned int unix_tot_inflight;
 21 void unix_add_edges(struct scm_fp_list *fpl, struct unix_sock *receiver);
 22 void unix_del_edges(struct scm_fp_list *fpl);
 23 void unix_update_edges(struct unix_sock *receiver);
 24 int unix_prepare_fpl(struct scm_fp_list *fpl);
 25 void unix_destroy_fpl(struct scm_fp_list *fpl);
 26 void unix_gc(void);
 27 void wait_for_unix_gc(struct scm_fp_list *fpl);
 28 
 29 struct unix_vertex {
 30         struct list_head edges;
 31         struct list_head entry;
 32         struct list_head scc_entry;
 33         unsigned long out_degree;
 34         unsigned long index;
 35         unsigned long scc_index;
 36 };
 37 
 38 struct unix_edge {
 39         struct unix_sock *predecessor;
 40         struct unix_sock *successor;
 41         struct list_head vertex_entry;
 42         struct list_head stack_entry;
 43 };
 44 
 45 struct sock *unix_peer_get(struct sock *sk);
 46 
 47 #define UNIX_HASH_MOD   (256 - 1)
 48 #define UNIX_HASH_SIZE  (256 * 2)
 49 #define UNIX_HASH_BITS  8
 50 
 51 struct unix_address {
 52         refcount_t      refcnt;
 53         int             len;
 54         struct sockaddr_un name[];
 55 };
 56 
 57 struct unix_skb_parms {
 58         struct pid              *pid;           /* Skb credentials      */
 59         kuid_t                  uid;
 60         kgid_t                  gid;
 61         struct scm_fp_list      *fp;            /* Passed files         */
 62 #ifdef CONFIG_SECURITY_NETWORK
 63         u32                     secid;          /* Security ID          */
 64 #endif
 65         u32                     consumed;
 66 } __randomize_layout;
 67 
 68 struct scm_stat {
 69         atomic_t nr_fds;
 70         unsigned long nr_unix_fds;
 71 };
 72 
 73 #define UNIXCB(skb)     (*(struct unix_skb_parms *)&((skb)->cb))
 74 
 75 /* The AF_UNIX socket */
 76 struct unix_sock {
 77         /* WARNING: sk has to be the first member */
 78         struct sock             sk;
 79         struct unix_address     *addr;
 80         struct path             path;
 81         struct mutex            iolock, bindlock;
 82         struct sock             *peer;
 83         struct sock             *listener;
 84         struct unix_vertex      *vertex;
 85         spinlock_t              lock;
 86         struct socket_wq        peer_wq;
 87         wait_queue_entry_t      peer_wake;
 88         struct scm_stat         scm_stat;
 89 #if IS_ENABLED(CONFIG_AF_UNIX_OOB)
 90         struct sk_buff          *oob_skb;
 91 #endif
 92 };
 93 
 94 #define unix_sk(ptr) container_of_const(ptr, struct unix_sock, sk)
 95 #define unix_peer(sk) (unix_sk(sk)->peer)
 96 
 97 #define unix_state_lock(s)      spin_lock(&unix_sk(s)->lock)
 98 #define unix_state_unlock(s)    spin_unlock(&unix_sk(s)->lock)
 99 
100 #define peer_wait peer_wq.wait
101 
102 long unix_inq_len(struct sock *sk);
103 long unix_outq_len(struct sock *sk);
104 
105 int __unix_dgram_recvmsg(struct sock *sk, struct msghdr *msg, size_t size,
106                          int flags);
107 int __unix_stream_recvmsg(struct sock *sk, struct msghdr *msg, size_t size,
108                           int flags);
109 #ifdef CONFIG_SYSCTL
110 int unix_sysctl_register(struct net *net);
111 void unix_sysctl_unregister(struct net *net);
112 #else
113 static inline int unix_sysctl_register(struct net *net) { return 0; }
114 static inline void unix_sysctl_unregister(struct net *net) {}
115 #endif
116 
117 #ifdef CONFIG_BPF_SYSCALL
118 extern struct proto unix_dgram_proto;
119 extern struct proto unix_stream_proto;
120 
121 int unix_dgram_bpf_update_proto(struct sock *sk, struct sk_psock *psock, bool restore);
122 int unix_stream_bpf_update_proto(struct sock *sk, struct sk_psock *psock, bool restore);
123 void __init unix_bpf_build_proto(void);
124 #else
125 static inline void __init unix_bpf_build_proto(void)
126 {}
127 #endif
128 #endif
129 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php