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 struct sock *unix_peer_get(struct sock *sk);
12*84960bf2SKuniyuki Iwashima
13*84960bf2SKuniyuki Iwashima struct unix_skb_parms {
14*84960bf2SKuniyuki Iwashima struct pid *pid; /* skb credentials */
15*84960bf2SKuniyuki Iwashima kuid_t uid;
16*84960bf2SKuniyuki Iwashima kgid_t gid;
17*84960bf2SKuniyuki Iwashima struct scm_fp_list *fp; /* Passed files */
18*84960bf2SKuniyuki Iwashima #ifdef CONFIG_SECURITY_NETWORK
19*84960bf2SKuniyuki Iwashima u32 secid; /* Security ID */
20*84960bf2SKuniyuki Iwashima #endif
21*84960bf2SKuniyuki Iwashima u32 consumed;
22*84960bf2SKuniyuki Iwashima } __randomize_layout;
23*84960bf2SKuniyuki Iwashima
24*84960bf2SKuniyuki Iwashima #define UNIXCB(skb) (*(struct unix_skb_parms *)&((skb)->cb))
25*84960bf2SKuniyuki Iwashima
26*84960bf2SKuniyuki Iwashima /* GC for SCM_RIGHTS */
27*84960bf2SKuniyuki Iwashima extern unsigned int unix_tot_inflight;
28*84960bf2SKuniyuki Iwashima void unix_add_edges(struct scm_fp_list *fpl, struct unix_sock *receiver);
29*84960bf2SKuniyuki Iwashima void unix_del_edges(struct scm_fp_list *fpl);
30*84960bf2SKuniyuki Iwashima void unix_update_edges(struct unix_sock *receiver);
31*84960bf2SKuniyuki Iwashima int unix_prepare_fpl(struct scm_fp_list *fpl);
32*84960bf2SKuniyuki Iwashima void unix_destroy_fpl(struct scm_fp_list *fpl);
33*84960bf2SKuniyuki Iwashima void unix_gc(void);
34*84960bf2SKuniyuki Iwashima void wait_for_unix_gc(struct scm_fp_list *fpl);
35*84960bf2SKuniyuki Iwashima
36*84960bf2SKuniyuki Iwashima /* SOCK_DIAG */
37*84960bf2SKuniyuki Iwashima long unix_inq_len(struct sock *sk);
38*84960bf2SKuniyuki Iwashima long unix_outq_len(struct sock *sk);
39*84960bf2SKuniyuki Iwashima
40*84960bf2SKuniyuki Iwashima /* sysctl */
41*84960bf2SKuniyuki Iwashima #ifdef CONFIG_SYSCTL
42*84960bf2SKuniyuki Iwashima int unix_sysctl_register(struct net *net);
43*84960bf2SKuniyuki Iwashima void unix_sysctl_unregister(struct net *net);
44*84960bf2SKuniyuki Iwashima #else
unix_sysctl_register(struct net * net)45*84960bf2SKuniyuki Iwashima static inline int unix_sysctl_register(struct net *net)
46*84960bf2SKuniyuki Iwashima {
47*84960bf2SKuniyuki Iwashima return 0;
48*84960bf2SKuniyuki Iwashima }
49*84960bf2SKuniyuki Iwashima
unix_sysctl_unregister(struct net * net)50*84960bf2SKuniyuki Iwashima static inline void unix_sysctl_unregister(struct net *net)
51*84960bf2SKuniyuki Iwashima {
52*84960bf2SKuniyuki Iwashima }
53*84960bf2SKuniyuki Iwashima #endif
54*84960bf2SKuniyuki Iwashima
55*84960bf2SKuniyuki Iwashima /* BPF SOCKMAP */
56*84960bf2SKuniyuki Iwashima int __unix_dgram_recvmsg(struct sock *sk, struct msghdr *msg, size_t size, int flags);
57*84960bf2SKuniyuki Iwashima int __unix_stream_recvmsg(struct sock *sk, struct msghdr *msg, size_t size, int flags);
58*84960bf2SKuniyuki Iwashima
59*84960bf2SKuniyuki Iwashima #ifdef CONFIG_BPF_SYSCALL
60*84960bf2SKuniyuki Iwashima extern struct proto unix_dgram_proto;
61*84960bf2SKuniyuki Iwashima extern struct proto unix_stream_proto;
62*84960bf2SKuniyuki Iwashima
63*84960bf2SKuniyuki Iwashima int unix_dgram_bpf_update_proto(struct sock *sk, struct sk_psock *psock, bool restore);
64*84960bf2SKuniyuki Iwashima int unix_stream_bpf_update_proto(struct sock *sk, struct sk_psock *psock, bool restore);
65*84960bf2SKuniyuki Iwashima void __init unix_bpf_build_proto(void);
66*84960bf2SKuniyuki Iwashima #else
unix_bpf_build_proto(void)67*84960bf2SKuniyuki Iwashima static inline void __init unix_bpf_build_proto(void)
68*84960bf2SKuniyuki Iwashima {
69*84960bf2SKuniyuki Iwashima }
70*84960bf2SKuniyuki Iwashima #endif
71*84960bf2SKuniyuki Iwashima
72*84960bf2SKuniyuki Iwashima #endif
73