xref: /linux/net/unix/af_unix.h (revision 84960bf2403123a5a15711d050455e195a8d5ba3)
1*84960bf2SKuniyuki Iwashima /* SPDX-License-Identifier: GPL-2.0 */
2*84960bf2SKuniyuki Iwashima #ifndef __AF_UNIX_H
3*84960bf2SKuniyuki Iwashima #define __AF_UNIX_H
4*84960bf2SKuniyuki Iwashima 
5*84960bf2SKuniyuki Iwashima #include <linux/uidgid.h>
6*84960bf2SKuniyuki Iwashima 
7*84960bf2SKuniyuki Iwashima #define UNIX_HASH_MOD	(256 - 1)
8*84960bf2SKuniyuki Iwashima #define UNIX_HASH_SIZE	(256 * 2)
9*84960bf2SKuniyuki Iwashima #define UNIX_HASH_BITS	8
10*84960bf2SKuniyuki Iwashima 
11*84960bf2SKuniyuki Iwashima #define unix_state_lock(s)	spin_lock(&unix_sk(s)->lock)
12*84960bf2SKuniyuki Iwashima #define unix_state_unlock(s)	spin_unlock(&unix_sk(s)->lock)
13*84960bf2SKuniyuki Iwashima 
14*84960bf2SKuniyuki Iwashima struct sock *unix_peer_get(struct sock *sk);
15*84960bf2SKuniyuki Iwashima 
16*84960bf2SKuniyuki Iwashima struct unix_skb_parms {
17*84960bf2SKuniyuki Iwashima 	struct pid		*pid;		/* skb credentials	*/
18*84960bf2SKuniyuki Iwashima 	kuid_t			uid;
19*84960bf2SKuniyuki Iwashima 	kgid_t			gid;
20*84960bf2SKuniyuki Iwashima 	struct scm_fp_list	*fp;		/* Passed files		*/
21*84960bf2SKuniyuki Iwashima #ifdef CONFIG_SECURITY_NETWORK
22*84960bf2SKuniyuki Iwashima 	u32			secid;		/* Security ID		*/
23*84960bf2SKuniyuki Iwashima #endif
24*84960bf2SKuniyuki Iwashima 	u32			consumed;
25*84960bf2SKuniyuki Iwashima } __randomize_layout;
26*84960bf2SKuniyuki Iwashima 
27*84960bf2SKuniyuki Iwashima #define UNIXCB(skb)	(*(struct unix_skb_parms *)&((skb)->cb))
28*84960bf2SKuniyuki Iwashima 
29*84960bf2SKuniyuki Iwashima /* GC for SCM_RIGHTS */
30*84960bf2SKuniyuki Iwashima extern unsigned int unix_tot_inflight;
31*84960bf2SKuniyuki Iwashima void unix_add_edges(struct scm_fp_list *fpl, struct unix_sock *receiver);
32*84960bf2SKuniyuki Iwashima void unix_del_edges(struct scm_fp_list *fpl);
33*84960bf2SKuniyuki Iwashima void unix_update_edges(struct unix_sock *receiver);
34*84960bf2SKuniyuki Iwashima int unix_prepare_fpl(struct scm_fp_list *fpl);
35*84960bf2SKuniyuki Iwashima void unix_destroy_fpl(struct scm_fp_list *fpl);
36*84960bf2SKuniyuki Iwashima void unix_gc(void);
37*84960bf2SKuniyuki Iwashima void wait_for_unix_gc(struct scm_fp_list *fpl);
38*84960bf2SKuniyuki Iwashima 
39*84960bf2SKuniyuki Iwashima /* SOCK_DIAG */
40*84960bf2SKuniyuki Iwashima long unix_inq_len(struct sock *sk);
41*84960bf2SKuniyuki Iwashima long unix_outq_len(struct sock *sk);
42*84960bf2SKuniyuki Iwashima 
43*84960bf2SKuniyuki Iwashima /* sysctl */
44*84960bf2SKuniyuki Iwashima #ifdef CONFIG_SYSCTL
45*84960bf2SKuniyuki Iwashima int unix_sysctl_register(struct net *net);
46*84960bf2SKuniyuki Iwashima void unix_sysctl_unregister(struct net *net);
47*84960bf2SKuniyuki Iwashima #else
48*84960bf2SKuniyuki Iwashima static inline int unix_sysctl_register(struct net *net)
49*84960bf2SKuniyuki Iwashima {
50*84960bf2SKuniyuki Iwashima 	return 0;
51*84960bf2SKuniyuki Iwashima }
52*84960bf2SKuniyuki Iwashima 
53*84960bf2SKuniyuki Iwashima static inline void unix_sysctl_unregister(struct net *net)
54*84960bf2SKuniyuki Iwashima {
55*84960bf2SKuniyuki Iwashima }
56*84960bf2SKuniyuki Iwashima #endif
57*84960bf2SKuniyuki Iwashima 
58*84960bf2SKuniyuki Iwashima /* BPF SOCKMAP */
59*84960bf2SKuniyuki Iwashima int __unix_dgram_recvmsg(struct sock *sk, struct msghdr *msg, size_t size, int flags);
60*84960bf2SKuniyuki Iwashima int __unix_stream_recvmsg(struct sock *sk, struct msghdr *msg, size_t size, int flags);
61*84960bf2SKuniyuki Iwashima 
62*84960bf2SKuniyuki Iwashima #ifdef CONFIG_BPF_SYSCALL
63*84960bf2SKuniyuki Iwashima extern struct proto unix_dgram_proto;
64*84960bf2SKuniyuki Iwashima extern struct proto unix_stream_proto;
65*84960bf2SKuniyuki Iwashima 
66*84960bf2SKuniyuki Iwashima int unix_dgram_bpf_update_proto(struct sock *sk, struct sk_psock *psock, bool restore);
67*84960bf2SKuniyuki Iwashima int unix_stream_bpf_update_proto(struct sock *sk, struct sk_psock *psock, bool restore);
68*84960bf2SKuniyuki Iwashima void __init unix_bpf_build_proto(void);
69*84960bf2SKuniyuki Iwashima #else
70*84960bf2SKuniyuki Iwashima static inline void __init unix_bpf_build_proto(void)
71*84960bf2SKuniyuki Iwashima {
72*84960bf2SKuniyuki Iwashima }
73*84960bf2SKuniyuki Iwashima #endif
74*84960bf2SKuniyuki Iwashima 
75*84960bf2SKuniyuki Iwashima #endif
76