1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40#ifndef _SOCK_H
41#define _SOCK_H
42
43#include <linux/hardirq.h>
44#include <linux/kernel.h>
45#include <linux/list.h>
46#include <linux/list_nulls.h>
47#include <linux/timer.h>
48#include <linux/cache.h>
49#include <linux/bitops.h>
50#include <linux/lockdep.h>
51#include <linux/netdevice.h>
52#include <linux/skbuff.h>
53#include <linux/mm.h>
54#include <linux/security.h>
55#include <linux/slab.h>
56#include <linux/uaccess.h>
57#include <linux/page_counter.h>
58#include <linux/memcontrol.h>
59#include <linux/static_key.h>
60#include <linux/sched.h>
61#include <linux/wait.h>
62#include <linux/cgroup-defs.h>
63
64#include <linux/filter.h>
65#include <linux/rculist_nulls.h>
66#include <linux/poll.h>
67
68#include <linux/atomic.h>
69#include <linux/refcount.h>
70#include <net/dst.h>
71#include <net/checksum.h>
72#include <net/tcp_states.h>
73#include <linux/net_tstamp.h>
74#include <net/smc.h>
75
76
77
78
79
80
81
82
83#define SOCK_DEBUGGING
84#ifdef SOCK_DEBUGGING
85#define SOCK_DEBUG(sk, msg...) do { if ((sk) && sock_flag((sk), SOCK_DBG)) \
86 printk(KERN_DEBUG msg); } while (0)
87#else
88
89static inline __printf(2, 3)
90void SOCK_DEBUG(const struct sock *sk, const char *msg, ...)
91{
92}
93#endif
94
95
96
97
98
99typedef struct {
100 spinlock_t slock;
101 int owned;
102 wait_queue_head_t wq;
103
104
105
106
107
108
109#ifdef CONFIG_DEBUG_LOCK_ALLOC
110 struct lockdep_map dep_map;
111#endif
112} socket_lock_t;
113
114struct sock;
115struct proto;
116struct net;
117
118typedef __u32 __bitwise __portpair;
119typedef __u64 __bitwise __addrpair;
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150struct sock_common {
151
152
153
154 union {
155 __addrpair skc_addrpair;
156 struct {
157 __be32 skc_daddr;
158 __be32 skc_rcv_saddr;
159 };
160 };
161 union {
162 unsigned int skc_hash;
163 __u16 skc_u16hashes[2];
164 };
165
166 union {
167 __portpair skc_portpair;
168 struct {
169 __be16 skc_dport;
170 __u16 skc_num;
171 };
172 };
173
174 unsigned short skc_family;
175 volatile unsigned char skc_state;
176 unsigned char skc_reuse:4;
177 unsigned char skc_reuseport:1;
178 unsigned char skc_ipv6only:1;
179 unsigned char skc_net_refcnt:1;
180 int skc_bound_dev_if;
181 union {
182 struct hlist_node skc_bind_node;
183 struct hlist_node skc_portaddr_node;
184 };
185 struct proto *skc_prot;
186 possible_net_t skc_net;
187
188#if IS_ENABLED(CONFIG_IPV6)
189 struct in6_addr skc_v6_daddr;
190 struct in6_addr skc_v6_rcv_saddr;
191#endif
192
193 atomic64_t skc_cookie;
194
195
196
197
198
199
200 union {
201 unsigned long skc_flags;
202 struct sock *skc_listener;
203 struct inet_timewait_death_row *skc_tw_dr;
204 };
205
206
207
208
209
210 int skc_dontcopy_begin[0];
211
212 union {
213 struct hlist_node skc_node;
214 struct hlist_nulls_node skc_nulls_node;
215 };
216 int skc_tx_queue_mapping;
217 union {
218 int skc_incoming_cpu;
219 u32 skc_rcv_wnd;
220 u32 skc_tw_rcv_nxt;
221 };
222
223 refcount_t skc_refcnt;
224
225 int skc_dontcopy_end[0];
226 union {
227 u32 skc_rxhash;
228 u32 skc_window_clamp;
229 u32 skc_tw_snd_nxt;
230 };
231
232};
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317struct sock {
318
319
320
321
322 struct sock_common __sk_common;
323#define sk_node __sk_common.skc_node
324#define sk_nulls_node __sk_common.skc_nulls_node
325#define sk_refcnt __sk_common.skc_refcnt
326#define sk_tx_queue_mapping __sk_common.skc_tx_queue_mapping
327
328#define sk_dontcopy_begin __sk_common.skc_dontcopy_begin
329#define sk_dontcopy_end __sk_common.skc_dontcopy_end
330#define sk_hash __sk_common.skc_hash
331#define sk_portpair __sk_common.skc_portpair
332#define sk_num __sk_common.skc_num
333#define sk_dport __sk_common.skc_dport
334#define sk_addrpair __sk_common.skc_addrpair
335#define sk_daddr __sk_common.skc_daddr
336#define sk_rcv_saddr __sk_common.skc_rcv_saddr
337#define sk_family __sk_common.skc_family
338#define sk_state __sk_common.skc_state
339#define sk_reuse __sk_common.skc_reuse
340#define sk_reuseport __sk_common.skc_reuseport
341#define sk_ipv6only __sk_common.skc_ipv6only
342#define sk_net_refcnt __sk_common.skc_net_refcnt
343#define sk_bound_dev_if __sk_common.skc_bound_dev_if
344#define sk_bind_node __sk_common.skc_bind_node
345#define sk_prot __sk_common.skc_prot
346#define sk_net __sk_common.skc_net
347#define sk_v6_daddr __sk_common.skc_v6_daddr
348#define sk_v6_rcv_saddr __sk_common.skc_v6_rcv_saddr
349#define sk_cookie __sk_common.skc_cookie
350#define sk_incoming_cpu __sk_common.skc_incoming_cpu
351#define sk_flags __sk_common.skc_flags
352#define sk_rxhash __sk_common.skc_rxhash
353
354 socket_lock_t sk_lock;
355 atomic_t sk_drops;
356 int sk_rcvlowat;
357 struct sk_buff_head sk_error_queue;
358 struct sk_buff_head sk_receive_queue;
359
360
361
362
363
364
365
366
367 struct {
368 atomic_t rmem_alloc;
369 int len;
370 struct sk_buff *head;
371 struct sk_buff *tail;
372 } sk_backlog;
373#define sk_rmem_alloc sk_backlog.rmem_alloc
374
375 int sk_forward_alloc;
376#ifdef CONFIG_NET_RX_BUSY_POLL
377 unsigned int sk_ll_usec;
378
379 unsigned int sk_napi_id;
380#endif
381 int sk_rcvbuf;
382
383 struct sk_filter __rcu *sk_filter;
384 union {
385 struct socket_wq __rcu *sk_wq;
386 struct socket_wq *sk_wq_raw;
387 };
388#ifdef CONFIG_XFRM
389 struct xfrm_policy __rcu *sk_policy[2];
390#endif
391 struct dst_entry *sk_rx_dst;
392 struct dst_entry __rcu *sk_dst_cache;
393 atomic_t sk_omem_alloc;
394 int sk_sndbuf;
395
396
397 int sk_wmem_queued;
398 refcount_t sk_wmem_alloc;
399 unsigned long sk_tsq_flags;
400 struct sk_buff *sk_send_head;
401 struct sk_buff_head sk_write_queue;
402 __s32 sk_peek_off;
403 int sk_write_pending;
404 __u32 sk_dst_pending_confirm;
405 u32 sk_pacing_status;
406 long sk_sndtimeo;
407 struct timer_list sk_timer;
408 __u32 sk_priority;
409 __u32 sk_mark;
410 u32 sk_pacing_rate;
411 u32 sk_max_pacing_rate;
412 struct page_frag sk_frag;
413 netdev_features_t sk_route_caps;
414 netdev_features_t sk_route_nocaps;
415 int sk_gso_type;
416 unsigned int sk_gso_max_size;
417 gfp_t sk_allocation;
418 __u32 sk_txhash;
419
420
421
422
423
424 unsigned int __sk_flags_offset[0];
425#ifdef __BIG_ENDIAN_BITFIELD
426#define SK_FL_PROTO_SHIFT 16
427#define SK_FL_PROTO_MASK 0x00ff0000
428
429#define SK_FL_TYPE_SHIFT 0
430#define SK_FL_TYPE_MASK 0x0000ffff
431#else
432#define SK_FL_PROTO_SHIFT 8
433#define SK_FL_PROTO_MASK 0x0000ff00
434
435#define SK_FL_TYPE_SHIFT 16
436#define SK_FL_TYPE_MASK 0xffff0000
437#endif
438
439 kmemcheck_bitfield_begin(flags);
440 unsigned int sk_padding : 1,
441 sk_kern_sock : 1,
442 sk_no_check_tx : 1,
443 sk_no_check_rx : 1,
444 sk_userlocks : 4,
445 sk_protocol : 8,
446 sk_type : 16;
447#define SK_PROTOCOL_MAX U8_MAX
448 kmemcheck_bitfield_end(flags);
449
450 u16 sk_gso_max_segs;
451 unsigned long sk_lingertime;
452 struct proto *sk_prot_creator;
453 rwlock_t sk_callback_lock;
454 int sk_err,
455 sk_err_soft;
456 u32 sk_ack_backlog;
457 u32 sk_max_ack_backlog;
458 kuid_t sk_uid;
459 struct pid *sk_peer_pid;
460 const struct cred *sk_peer_cred;
461 long sk_rcvtimeo;
462 ktime_t sk_stamp;
463 u16 sk_tsflags;
464 u8 sk_shutdown;
465 u32 sk_tskey;
466 atomic_t sk_zckey;
467 struct socket *sk_socket;
468 void *sk_user_data;
469#ifdef CONFIG_SECURITY
470 void *sk_security;
471#endif
472 struct sock_cgroup_data sk_cgrp_data;
473 struct mem_cgroup *sk_memcg;
474 void (*sk_state_change)(struct sock *sk);
475 void (*sk_data_ready)(struct sock *sk);
476 void (*sk_write_space)(struct sock *sk);
477 void (*sk_error_report)(struct sock *sk);
478 int (*sk_backlog_rcv)(struct sock *sk,
479 struct sk_buff *skb);
480 void (*sk_destruct)(struct sock *sk);
481 struct sock_reuseport __rcu *sk_reuseport_cb;
482 struct rcu_head sk_rcu;
483};
484
485enum sk_pacing {
486 SK_PACING_NONE = 0,
487 SK_PACING_NEEDED = 1,
488 SK_PACING_FQ = 2,
489};
490
491#define __sk_user_data(sk) ((*((void __rcu **)&(sk)->sk_user_data)))
492
493#define rcu_dereference_sk_user_data(sk) rcu_dereference(__sk_user_data((sk)))
494#define rcu_assign_sk_user_data(sk, ptr) rcu_assign_pointer(__sk_user_data((sk)), ptr)
495
496
497
498
499
500
501
502
503#define SK_NO_REUSE 0
504#define SK_CAN_REUSE 1
505#define SK_FORCE_REUSE 2
506
507int sk_set_peek_off(struct sock *sk, int val);
508
509static inline int sk_peek_offset(struct sock *sk, int flags)
510{
511 if (unlikely(flags & MSG_PEEK)) {
512 return READ_ONCE(sk->sk_peek_off);
513 }
514
515 return 0;
516}
517
518static inline void sk_peek_offset_bwd(struct sock *sk, int val)
519{
520 s32 off = READ_ONCE(sk->sk_peek_off);
521
522 if (unlikely(off >= 0)) {
523 off = max_t(s32, off - val, 0);
524 WRITE_ONCE(sk->sk_peek_off, off);
525 }
526}
527
528static inline void sk_peek_offset_fwd(struct sock *sk, int val)
529{
530 sk_peek_offset_bwd(sk, -val);
531}
532
533
534
535
536static inline struct sock *sk_entry(const struct hlist_node *node)
537{
538 return hlist_entry(node, struct sock, sk_node);
539}
540
541static inline struct sock *__sk_head(const struct hlist_head *head)
542{
543 return hlist_entry(head->first, struct sock, sk_node);
544}
545
546static inline struct sock *sk_head(const struct hlist_head *head)
547{
548 return hlist_empty(head) ? NULL : __sk_head(head);
549}
550
551static inline struct sock *__sk_nulls_head(const struct hlist_nulls_head *head)
552{
553 return hlist_nulls_entry(head->first, struct sock, sk_nulls_node);
554}
555
556static inline struct sock *sk_nulls_head(const struct hlist_nulls_head *head)
557{
558 return hlist_nulls_empty(head) ? NULL : __sk_nulls_head(head);
559}
560
561static inline struct sock *sk_next(const struct sock *sk)
562{
563 return hlist_entry_safe(sk->sk_node.next, struct sock, sk_node);
564}
565
566static inline struct sock *sk_nulls_next(const struct sock *sk)
567{
568 return (!is_a_nulls(sk->sk_nulls_node.next)) ?
569 hlist_nulls_entry(sk->sk_nulls_node.next,
570 struct sock, sk_nulls_node) :
571 NULL;
572}
573
574static inline bool sk_unhashed(const struct sock *sk)
575{
576 return hlist_unhashed(&sk->sk_node);
577}
578
579static inline bool sk_hashed(const struct sock *sk)
580{
581 return !sk_unhashed(sk);
582}
583
584static inline void sk_node_init(struct hlist_node *node)
585{
586 node->pprev = NULL;
587}
588
589static inline void sk_nulls_node_init(struct hlist_nulls_node *node)
590{
591 node->pprev = NULL;
592}
593
594static inline void __sk_del_node(struct sock *sk)
595{
596 __hlist_del(&sk->sk_node);
597}
598
599
600static inline bool __sk_del_node_init(struct sock *sk)
601{
602 if (sk_hashed(sk)) {
603 __sk_del_node(sk);
604 sk_node_init(&sk->sk_node);
605 return true;
606 }
607 return false;
608}
609
610
611
612
613
614
615
616static __always_inline void sock_hold(struct sock *sk)
617{
618 refcount_inc(&sk->sk_refcnt);
619}
620
621
622
623
624static __always_inline void __sock_put(struct sock *sk)
625{
626 refcount_dec(&sk->sk_refcnt);
627}
628
629static inline bool sk_del_node_init(struct sock *sk)
630{
631 bool rc = __sk_del_node_init(sk);
632
633 if (rc) {
634
635 WARN_ON(refcount_read(&sk->sk_refcnt) == 1);
636 __sock_put(sk);
637 }
638 return rc;
639}
640#define sk_del_node_init_rcu(sk) sk_del_node_init(sk)
641
642static inline bool __sk_nulls_del_node_init_rcu(struct sock *sk)
643{
644 if (sk_hashed(sk)) {
645 hlist_nulls_del_init_rcu(&sk->sk_nulls_node);
646 return true;
647 }
648 return false;
649}
650
651static inline bool sk_nulls_del_node_init_rcu(struct sock *sk)
652{
653 bool rc = __sk_nulls_del_node_init_rcu(sk);
654
655 if (rc) {
656
657 WARN_ON(refcount_read(&sk->sk_refcnt) == 1);
658 __sock_put(sk);
659 }
660 return rc;
661}
662
663static inline void __sk_add_node(struct sock *sk, struct hlist_head *list)
664{
665 hlist_add_head(&sk->sk_node, list);
666}
667
668static inline void sk_add_node(struct sock *sk, struct hlist_head *list)
669{
670 sock_hold(sk);
671 __sk_add_node(sk, list);
672}
673
674static inline void sk_add_node_rcu(struct sock *sk, struct hlist_head *list)
675{
676 sock_hold(sk);
677 if (IS_ENABLED(CONFIG_IPV6) && sk->sk_reuseport &&
678 sk->sk_family == AF_INET6)
679 hlist_add_tail_rcu(&sk->sk_node, list);
680 else
681 hlist_add_head_rcu(&sk->sk_node, list);
682}
683
684static inline void __sk_nulls_add_node_rcu(struct sock *sk, struct hlist_nulls_head *list)
685{
686 if (IS_ENABLED(CONFIG_IPV6) && sk->sk_reuseport &&
687 sk->sk_family == AF_INET6)
688 hlist_nulls_add_tail_rcu(&sk->sk_nulls_node, list);
689 else
690 hlist_nulls_add_head_rcu(&sk->sk_nulls_node, list);
691}
692
693static inline void sk_nulls_add_node_rcu(struct sock *sk, struct hlist_nulls_head *list)
694{
695 sock_hold(sk);
696 __sk_nulls_add_node_rcu(sk, list);
697}
698
699static inline void __sk_del_bind_node(struct sock *sk)
700{
701 __hlist_del(&sk->sk_bind_node);
702}
703
704static inline void sk_add_bind_node(struct sock *sk,
705 struct hlist_head *list)
706{
707 hlist_add_head(&sk->sk_bind_node, list);
708}
709
710#define sk_for_each(__sk, list) \
711 hlist_for_each_entry(__sk, list, sk_node)
712#define sk_for_each_rcu(__sk, list) \
713 hlist_for_each_entry_rcu(__sk, list, sk_node)
714#define sk_nulls_for_each(__sk, node, list) \
715 hlist_nulls_for_each_entry(__sk, node, list, sk_nulls_node)
716#define sk_nulls_for_each_rcu(__sk, node, list) \
717 hlist_nulls_for_each_entry_rcu(__sk, node, list, sk_nulls_node)
718#define sk_for_each_from(__sk) \
719 hlist_for_each_entry_from(__sk, sk_node)
720#define sk_nulls_for_each_from(__sk, node) \
721 if (__sk && ({ node = &(__sk)->sk_nulls_node; 1; })) \
722 hlist_nulls_for_each_entry_from(__sk, node, sk_nulls_node)
723#define sk_for_each_safe(__sk, tmp, list) \
724 hlist_for_each_entry_safe(__sk, tmp, list, sk_node)
725#define sk_for_each_bound(__sk, list) \
726 hlist_for_each_entry(__sk, list, sk_bind_node)
727
728
729
730
731
732
733
734
735
736#define sk_for_each_entry_offset_rcu(tpos, pos, head, offset) \
737 for (pos = rcu_dereference((head)->first); \
738 pos != NULL && \
739 ({ tpos = (typeof(*tpos) *)((void *)pos - offset); 1;}); \
740 pos = rcu_dereference(pos->next))
741
742static inline struct user_namespace *sk_user_ns(struct sock *sk)
743{
744
745
746
747
748 return sk->sk_socket->file->f_cred->user_ns;
749}
750
751
752enum sock_flags {
753 SOCK_DEAD,
754 SOCK_DONE,
755 SOCK_URGINLINE,
756 SOCK_KEEPOPEN,
757 SOCK_LINGER,
758 SOCK_DESTROY,
759 SOCK_BROADCAST,
760 SOCK_TIMESTAMP,
761 SOCK_ZAPPED,
762 SOCK_USE_WRITE_QUEUE,
763 SOCK_DBG,
764 SOCK_RCVTSTAMP,
765 SOCK_RCVTSTAMPNS,
766 SOCK_LOCALROUTE,
767 SOCK_QUEUE_SHRUNK,
768 SOCK_MEMALLOC,
769 SOCK_TIMESTAMPING_RX_SOFTWARE,
770 SOCK_FASYNC,
771 SOCK_RXQ_OVFL,
772 SOCK_ZEROCOPY,
773 SOCK_WIFI_STATUS,
774 SOCK_NOFCS,
775
776
777
778 SOCK_FILTER_LOCKED,
779 SOCK_SELECT_ERR_QUEUE,
780 SOCK_RCU_FREE,
781};
782
783#define SK_FLAGS_TIMESTAMP ((1UL << SOCK_TIMESTAMP) | (1UL << SOCK_TIMESTAMPING_RX_SOFTWARE))
784
785static inline void sock_copy_flags(struct sock *nsk, struct sock *osk)
786{
787 nsk->sk_flags = osk->sk_flags;
788}
789
790static inline void sock_set_flag(struct sock *sk, enum sock_flags flag)
791{
792 __set_bit(flag, &sk->sk_flags);
793}
794
795static inline void sock_reset_flag(struct sock *sk, enum sock_flags flag)
796{
797 __clear_bit(flag, &sk->sk_flags);
798}
799
800static inline bool sock_flag(const struct sock *sk, enum sock_flags flag)
801{
802 return test_bit(flag, &sk->sk_flags);
803}
804
805#ifdef CONFIG_NET
806extern struct static_key memalloc_socks;
807static inline int sk_memalloc_socks(void)
808{
809 return static_key_false(&memalloc_socks);
810}
811#else
812
813static inline int sk_memalloc_socks(void)
814{
815 return 0;
816}
817
818#endif
819
820static inline gfp_t sk_gfp_mask(const struct sock *sk, gfp_t gfp_mask)
821{
822 return gfp_mask | (sk->sk_allocation & __GFP_MEMALLOC);
823}
824
825static inline void sk_acceptq_removed(struct sock *sk)
826{
827 sk->sk_ack_backlog--;
828}
829
830static inline void sk_acceptq_added(struct sock *sk)
831{
832 sk->sk_ack_backlog++;
833}
834
835static inline bool sk_acceptq_is_full(const struct sock *sk)
836{
837 return sk->sk_ack_backlog > sk->sk_max_ack_backlog;
838}
839
840
841
842
843static inline int sk_stream_min_wspace(const struct sock *sk)
844{
845 return sk->sk_wmem_queued >> 1;
846}
847
848static inline int sk_stream_wspace(const struct sock *sk)
849{
850 return sk->sk_sndbuf - sk->sk_wmem_queued;
851}
852
853void sk_stream_write_space(struct sock *sk);
854
855
856static inline void __sk_add_backlog(struct sock *sk, struct sk_buff *skb)
857{
858
859 skb_dst_force(skb);
860
861 if (!sk->sk_backlog.tail)
862 sk->sk_backlog.head = skb;
863 else
864 sk->sk_backlog.tail->next = skb;
865
866 sk->sk_backlog.tail = skb;
867 skb->next = NULL;
868}
869
870
871
872
873
874
875static inline bool sk_rcvqueues_full(const struct sock *sk, unsigned int limit)
876{
877 unsigned int qsize = sk->sk_backlog.len + atomic_read(&sk->sk_rmem_alloc);
878
879 return qsize > limit;
880}
881
882
883static inline __must_check int sk_add_backlog(struct sock *sk, struct sk_buff *skb,
884 unsigned int limit)
885{
886 if (sk_rcvqueues_full(sk, limit))
887 return -ENOBUFS;
888
889
890
891
892
893
894 if (skb_pfmemalloc(skb) && !sock_flag(sk, SOCK_MEMALLOC))
895 return -ENOMEM;
896
897 __sk_add_backlog(sk, skb);
898 sk->sk_backlog.len += skb->truesize;
899 return 0;
900}
901
902int __sk_backlog_rcv(struct sock *sk, struct sk_buff *skb);
903
904static inline int sk_backlog_rcv(struct sock *sk, struct sk_buff *skb)
905{
906 if (sk_memalloc_socks() && skb_pfmemalloc(skb))
907 return __sk_backlog_rcv(sk, skb);
908
909 return sk->sk_backlog_rcv(sk, skb);
910}
911
912static inline void sk_incoming_cpu_update(struct sock *sk)
913{
914 int cpu = raw_smp_processor_id();
915
916 if (unlikely(sk->sk_incoming_cpu != cpu))
917 sk->sk_incoming_cpu = cpu;
918}
919
920static inline void sock_rps_record_flow_hash(__u32 hash)
921{
922#ifdef CONFIG_RPS
923 struct rps_sock_flow_table *sock_flow_table;
924
925 rcu_read_lock();
926 sock_flow_table = rcu_dereference(rps_sock_flow_table);
927 rps_record_sock_flow(sock_flow_table, hash);
928 rcu_read_unlock();
929#endif
930}
931
932static inline void sock_rps_record_flow(const struct sock *sk)
933{
934#ifdef CONFIG_RPS
935 if (static_key_false(&rfs_needed)) {
936
937
938
939
940
941
942
943
944
945
946 if (sk->sk_state == TCP_ESTABLISHED)
947 sock_rps_record_flow_hash(sk->sk_rxhash);
948 }
949#endif
950}
951
952static inline void sock_rps_save_rxhash(struct sock *sk,
953 const struct sk_buff *skb)
954{
955#ifdef CONFIG_RPS
956 if (unlikely(sk->sk_rxhash != skb->hash))
957 sk->sk_rxhash = skb->hash;
958#endif
959}
960
961static inline void sock_rps_reset_rxhash(struct sock *sk)
962{
963#ifdef CONFIG_RPS
964 sk->sk_rxhash = 0;
965#endif
966}
967
968#define sk_wait_event(__sk, __timeo, __condition, __wait) \
969 ({ int __rc; \
970 release_sock(__sk); \
971 __rc = __condition; \
972 if (!__rc) { \
973 *(__timeo) = wait_woken(__wait, \
974 TASK_INTERRUPTIBLE, \
975 *(__timeo)); \
976 } \
977 sched_annotate_sleep(); \
978 lock_sock(__sk); \
979 __rc = __condition; \
980 __rc; \
981 })
982
983int sk_stream_wait_connect(struct sock *sk, long *timeo_p);
984int sk_stream_wait_memory(struct sock *sk, long *timeo_p);
985void sk_stream_wait_close(struct sock *sk, long timeo_p);
986int sk_stream_error(struct sock *sk, int flags, int err);
987void sk_stream_kill_queues(struct sock *sk);
988void sk_set_memalloc(struct sock *sk);
989void sk_clear_memalloc(struct sock *sk);
990
991void __sk_flush_backlog(struct sock *sk);
992
993static inline bool sk_flush_backlog(struct sock *sk)
994{
995 if (unlikely(READ_ONCE(sk->sk_backlog.tail))) {
996 __sk_flush_backlog(sk);
997 return true;
998 }
999 return false;
1000}
1001
1002int sk_wait_data(struct sock *sk, long *timeo, const struct sk_buff *skb);
1003
1004struct request_sock_ops;
1005struct timewait_sock_ops;
1006struct inet_hashinfo;
1007struct raw_hashinfo;
1008struct smc_hashinfo;
1009struct module;
1010
1011
1012
1013
1014
1015static inline void sk_prot_clear_nulls(struct sock *sk, int size)
1016{
1017 if (offsetof(struct sock, sk_node.next) != 0)
1018 memset(sk, 0, offsetof(struct sock, sk_node.next));
1019 memset(&sk->sk_node.pprev, 0,
1020 size - offsetof(struct sock, sk_node.pprev));
1021}
1022
1023
1024
1025
1026struct proto {
1027 void (*close)(struct sock *sk,
1028 long timeout);
1029 int (*connect)(struct sock *sk,
1030 struct sockaddr *uaddr,
1031 int addr_len);
1032 int (*disconnect)(struct sock *sk, int flags);
1033
1034 struct sock * (*accept)(struct sock *sk, int flags, int *err,
1035 bool kern);
1036
1037 int (*ioctl)(struct sock *sk, int cmd,
1038 unsigned long arg);
1039 int (*init)(struct sock *sk);
1040 void (*destroy)(struct sock *sk);
1041 void (*shutdown)(struct sock *sk, int how);
1042 int (*setsockopt)(struct sock *sk, int level,
1043 int optname, char __user *optval,
1044 unsigned int optlen);
1045 int (*getsockopt)(struct sock *sk, int level,
1046 int optname, char __user *optval,
1047 int __user *option);
1048 void (*keepalive)(struct sock *sk, int valbool);
1049#ifdef CONFIG_COMPAT
1050 int (*compat_setsockopt)(struct sock *sk,
1051 int level,
1052 int optname, char __user *optval,
1053 unsigned int optlen);
1054 int (*compat_getsockopt)(struct sock *sk,
1055 int level,
1056 int optname, char __user *optval,
1057 int __user *option);
1058 int (*compat_ioctl)(struct sock *sk,
1059 unsigned int cmd, unsigned long arg);
1060#endif
1061 int (*sendmsg)(struct sock *sk, struct msghdr *msg,
1062 size_t len);
1063 int (*recvmsg)(struct sock *sk, struct msghdr *msg,
1064 size_t len, int noblock, int flags,
1065 int *addr_len);
1066 int (*sendpage)(struct sock *sk, struct page *page,
1067 int offset, size_t size, int flags);
1068 int (*bind)(struct sock *sk,
1069 struct sockaddr *uaddr, int addr_len);
1070
1071 int (*backlog_rcv) (struct sock *sk,
1072 struct sk_buff *skb);
1073
1074 void (*release_cb)(struct sock *sk);
1075
1076
1077 int (*hash)(struct sock *sk);
1078 void (*unhash)(struct sock *sk);
1079 void (*rehash)(struct sock *sk);
1080 int (*get_port)(struct sock *sk, unsigned short snum);
1081
1082
1083#ifdef CONFIG_PROC_FS
1084 unsigned int inuse_idx;
1085#endif
1086
1087 bool (*stream_memory_free)(const struct sock *sk);
1088
1089 void (*enter_memory_pressure)(struct sock *sk);
1090 void (*leave_memory_pressure)(struct sock *sk);
1091 atomic_long_t *memory_allocated;
1092 struct percpu_counter *sockets_allocated;
1093
1094
1095
1096
1097
1098
1099 unsigned long *memory_pressure;
1100 long *sysctl_mem;
1101 int *sysctl_wmem;
1102 int *sysctl_rmem;
1103 int max_header;
1104 bool no_autobind;
1105
1106 struct kmem_cache *slab;
1107 unsigned int obj_size;
1108 int slab_flags;
1109
1110 struct percpu_counter *orphan_count;
1111
1112 struct request_sock_ops *rsk_prot;
1113 struct timewait_sock_ops *twsk_prot;
1114
1115 union {
1116 struct inet_hashinfo *hashinfo;
1117 struct udp_table *udp_table;
1118 struct raw_hashinfo *raw_hash;
1119 struct smc_hashinfo *smc_hash;
1120 } h;
1121
1122 struct module *owner;
1123
1124 char name[32];
1125
1126 struct list_head node;
1127#ifdef SOCK_REFCNT_DEBUG
1128 atomic_t socks;
1129#endif
1130 int (*diag_destroy)(struct sock *sk, int err);
1131} __randomize_layout;
1132
1133int proto_register(struct proto *prot, int alloc_slab);
1134void proto_unregister(struct proto *prot);
1135
1136#ifdef SOCK_REFCNT_DEBUG
1137static inline void sk_refcnt_debug_inc(struct sock *sk)
1138{
1139 atomic_inc(&sk->sk_prot->socks);
1140}
1141
1142static inline void sk_refcnt_debug_dec(struct sock *sk)
1143{
1144 atomic_dec(&sk->sk_prot->socks);
1145 printk(KERN_DEBUG "%s socket %p released, %d are still alive\n",
1146 sk->sk_prot->name, sk, atomic_read(&sk->sk_prot->socks));
1147}
1148
1149static inline void sk_refcnt_debug_release(const struct sock *sk)
1150{
1151 if (refcount_read(&sk->sk_refcnt) != 1)
1152 printk(KERN_DEBUG "Destruction of the %s socket %p delayed, refcnt=%d\n",
1153 sk->sk_prot->name, sk, refcount_read(&sk->sk_refcnt));
1154}
1155#else
1156#define sk_refcnt_debug_inc(sk) do { } while (0)
1157#define sk_refcnt_debug_dec(sk) do { } while (0)
1158#define sk_refcnt_debug_release(sk) do { } while (0)
1159#endif
1160
1161static inline bool sk_stream_memory_free(const struct sock *sk)
1162{
1163 if (sk->sk_wmem_queued >= sk->sk_sndbuf)
1164 return false;
1165
1166 return sk->sk_prot->stream_memory_free ?
1167 sk->sk_prot->stream_memory_free(sk) : true;
1168}
1169
1170static inline bool sk_stream_is_writeable(const struct sock *sk)
1171{
1172 return sk_stream_wspace(sk) >= sk_stream_min_wspace(sk) &&
1173 sk_stream_memory_free(sk);
1174}
1175
1176static inline int sk_under_cgroup_hierarchy(struct sock *sk,
1177 struct cgroup *ancestor)
1178{
1179#ifdef CONFIG_SOCK_CGROUP_DATA
1180 return cgroup_is_descendant(sock_cgroup_ptr(&sk->sk_cgrp_data),
1181 ancestor);
1182#else
1183 return -ENOTSUPP;
1184#endif
1185}
1186
1187static inline bool sk_has_memory_pressure(const struct sock *sk)
1188{
1189 return sk->sk_prot->memory_pressure != NULL;
1190}
1191
1192static inline bool sk_under_memory_pressure(const struct sock *sk)
1193{
1194 if (!sk->sk_prot->memory_pressure)
1195 return false;
1196
1197 if (mem_cgroup_sockets_enabled && sk->sk_memcg &&
1198 mem_cgroup_under_socket_pressure(sk->sk_memcg))
1199 return true;
1200
1201 return !!*sk->sk_prot->memory_pressure;
1202}
1203
1204static inline long
1205sk_memory_allocated(const struct sock *sk)
1206{
1207 return atomic_long_read(sk->sk_prot->memory_allocated);
1208}
1209
1210static inline long
1211sk_memory_allocated_add(struct sock *sk, int amt)
1212{
1213 return atomic_long_add_return(amt, sk->sk_prot->memory_allocated);
1214}
1215
1216static inline void
1217sk_memory_allocated_sub(struct sock *sk, int amt)
1218{
1219 atomic_long_sub(amt, sk->sk_prot->memory_allocated);
1220}
1221
1222static inline void sk_sockets_allocated_dec(struct sock *sk)
1223{
1224 percpu_counter_dec(sk->sk_prot->sockets_allocated);
1225}
1226
1227static inline void sk_sockets_allocated_inc(struct sock *sk)
1228{
1229 percpu_counter_inc(sk->sk_prot->sockets_allocated);
1230}
1231
1232static inline int
1233sk_sockets_allocated_read_positive(struct sock *sk)
1234{
1235 return percpu_counter_read_positive(sk->sk_prot->sockets_allocated);
1236}
1237
1238static inline int
1239proto_sockets_allocated_sum_positive(struct proto *prot)
1240{
1241 return percpu_counter_sum_positive(prot->sockets_allocated);
1242}
1243
1244static inline long
1245proto_memory_allocated(struct proto *prot)
1246{
1247 return atomic_long_read(prot->memory_allocated);
1248}
1249
1250static inline bool
1251proto_memory_pressure(struct proto *prot)
1252{
1253 if (!prot->memory_pressure)
1254 return false;
1255 return !!*prot->memory_pressure;
1256}
1257
1258
1259#ifdef CONFIG_PROC_FS
1260
1261void sock_prot_inuse_add(struct net *net, struct proto *prot, int inc);
1262int sock_prot_inuse_get(struct net *net, struct proto *proto);
1263#else
1264static inline void sock_prot_inuse_add(struct net *net, struct proto *prot,
1265 int inc)
1266{
1267}
1268#endif
1269
1270
1271
1272
1273
1274static inline int __sk_prot_rehash(struct sock *sk)
1275{
1276 sk->sk_prot->unhash(sk);
1277 return sk->sk_prot->hash(sk);
1278}
1279
1280
1281#define SOCK_DESTROY_TIME (10*HZ)
1282
1283
1284#define PROT_SOCK 1024
1285
1286#define SHUTDOWN_MASK 3
1287#define RCV_SHUTDOWN 1
1288#define SEND_SHUTDOWN 2
1289
1290#define SOCK_SNDBUF_LOCK 1
1291#define SOCK_RCVBUF_LOCK 2
1292#define SOCK_BINDADDR_LOCK 4
1293#define SOCK_BINDPORT_LOCK 8
1294
1295struct socket_alloc {
1296 struct socket socket;
1297 struct inode vfs_inode;
1298};
1299
1300static inline struct socket *SOCKET_I(struct inode *inode)
1301{
1302 return &container_of(inode, struct socket_alloc, vfs_inode)->socket;
1303}
1304
1305static inline struct inode *SOCK_INODE(struct socket *socket)
1306{
1307 return &container_of(socket, struct socket_alloc, socket)->vfs_inode;
1308}
1309
1310
1311
1312
1313int __sk_mem_raise_allocated(struct sock *sk, int size, int amt, int kind);
1314int __sk_mem_schedule(struct sock *sk, int size, int kind);
1315void __sk_mem_reduce_allocated(struct sock *sk, int amount);
1316void __sk_mem_reclaim(struct sock *sk, int amount);
1317
1318
1319
1320
1321#define SK_MEM_QUANTUM 4096
1322#define SK_MEM_QUANTUM_SHIFT ilog2(SK_MEM_QUANTUM)
1323#define SK_MEM_SEND 0
1324#define SK_MEM_RECV 1
1325
1326
1327static inline long sk_prot_mem_limits(const struct sock *sk, int index)
1328{
1329 long val = sk->sk_prot->sysctl_mem[index];
1330
1331#if PAGE_SIZE > SK_MEM_QUANTUM
1332 val <<= PAGE_SHIFT - SK_MEM_QUANTUM_SHIFT;
1333#elif PAGE_SIZE < SK_MEM_QUANTUM
1334 val >>= SK_MEM_QUANTUM_SHIFT - PAGE_SHIFT;
1335#endif
1336 return val;
1337}
1338
1339static inline int sk_mem_pages(int amt)
1340{
1341 return (amt + SK_MEM_QUANTUM - 1) >> SK_MEM_QUANTUM_SHIFT;
1342}
1343
1344static inline bool sk_has_account(struct sock *sk)
1345{
1346
1347 return !!sk->sk_prot->memory_allocated;
1348}
1349
1350static inline bool sk_wmem_schedule(struct sock *sk, int size)
1351{
1352 if (!sk_has_account(sk))
1353 return true;
1354 return size <= sk->sk_forward_alloc ||
1355 __sk_mem_schedule(sk, size, SK_MEM_SEND);
1356}
1357
1358static inline bool
1359sk_rmem_schedule(struct sock *sk, struct sk_buff *skb, int size)
1360{
1361 if (!sk_has_account(sk))
1362 return true;
1363 return size<= sk->sk_forward_alloc ||
1364 __sk_mem_schedule(sk, size, SK_MEM_RECV) ||
1365 skb_pfmemalloc(skb);
1366}
1367
1368static inline void sk_mem_reclaim(struct sock *sk)
1369{
1370 if (!sk_has_account(sk))
1371 return;
1372 if (sk->sk_forward_alloc >= SK_MEM_QUANTUM)
1373 __sk_mem_reclaim(sk, sk->sk_forward_alloc);
1374}
1375
1376static inline void sk_mem_reclaim_partial(struct sock *sk)
1377{
1378 if (!sk_has_account(sk))
1379 return;
1380 if (sk->sk_forward_alloc > SK_MEM_QUANTUM)
1381 __sk_mem_reclaim(sk, sk->sk_forward_alloc - 1);
1382}
1383
1384static inline void sk_mem_charge(struct sock *sk, int size)
1385{
1386 if (!sk_has_account(sk))
1387 return;
1388 sk->sk_forward_alloc -= size;
1389}
1390
1391static inline void sk_mem_uncharge(struct sock *sk, int size)
1392{
1393 if (!sk_has_account(sk))
1394 return;
1395 sk->sk_forward_alloc += size;
1396
1397
1398
1399
1400
1401
1402
1403
1404 if (unlikely(sk->sk_forward_alloc >= 1 << 21))
1405 __sk_mem_reclaim(sk, 1 << 20);
1406}
1407
1408static inline void sk_wmem_free_skb(struct sock *sk, struct sk_buff *skb)
1409{
1410 sock_set_flag(sk, SOCK_QUEUE_SHRUNK);
1411 sk->sk_wmem_queued -= skb->truesize;
1412 sk_mem_uncharge(sk, skb->truesize);
1413 __kfree_skb(skb);
1414}
1415
1416static inline void sock_release_ownership(struct sock *sk)
1417{
1418 if (sk->sk_lock.owned) {
1419 sk->sk_lock.owned = 0;
1420
1421
1422 mutex_release(&sk->sk_lock.dep_map, 1, _RET_IP_);
1423 }
1424}
1425
1426
1427
1428
1429
1430
1431
1432
1433#define sock_lock_init_class_and_name(sk, sname, skey, name, key) \
1434do { \
1435 sk->sk_lock.owned = 0; \
1436 init_waitqueue_head(&sk->sk_lock.wq); \
1437 spin_lock_init(&(sk)->sk_lock.slock); \
1438 debug_check_no_locks_freed((void *)&(sk)->sk_lock, \
1439 sizeof((sk)->sk_lock)); \
1440 lockdep_set_class_and_name(&(sk)->sk_lock.slock, \
1441 (skey), (sname)); \
1442 lockdep_init_map(&(sk)->sk_lock.dep_map, (name), (key), 0); \
1443} while (0)
1444
1445#ifdef CONFIG_LOCKDEP
1446static inline bool lockdep_sock_is_held(const struct sock *csk)
1447{
1448 struct sock *sk = (struct sock *)csk;
1449
1450 return lockdep_is_held(&sk->sk_lock) ||
1451 lockdep_is_held(&sk->sk_lock.slock);
1452}
1453#endif
1454
1455void lock_sock_nested(struct sock *sk, int subclass);
1456
1457static inline void lock_sock(struct sock *sk)
1458{
1459 lock_sock_nested(sk, 0);
1460}
1461
1462void release_sock(struct sock *sk);
1463
1464
1465#define bh_lock_sock(__sk) spin_lock(&((__sk)->sk_lock.slock))
1466#define bh_lock_sock_nested(__sk) \
1467 spin_lock_nested(&((__sk)->sk_lock.slock), \
1468 SINGLE_DEPTH_NESTING)
1469#define bh_unlock_sock(__sk) spin_unlock(&((__sk)->sk_lock.slock))
1470
1471bool lock_sock_fast(struct sock *sk);
1472
1473
1474
1475
1476
1477
1478
1479
1480static inline void unlock_sock_fast(struct sock *sk, bool slow)
1481{
1482 if (slow)
1483 release_sock(sk);
1484 else
1485 spin_unlock_bh(&sk->sk_lock.slock);
1486}
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502static inline void sock_owned_by_me(const struct sock *sk)
1503{
1504#ifdef CONFIG_LOCKDEP
1505 WARN_ON_ONCE(!lockdep_sock_is_held(sk) && debug_locks);
1506#endif
1507}
1508
1509static inline bool sock_owned_by_user(const struct sock *sk)
1510{
1511 sock_owned_by_me(sk);
1512 return sk->sk_lock.owned;
1513}
1514
1515
1516static inline bool sock_allow_reclassification(const struct sock *csk)
1517{
1518 struct sock *sk = (struct sock *)csk;
1519
1520 return !sk->sk_lock.owned && !spin_is_locked(&sk->sk_lock.slock);
1521}
1522
1523struct sock *sk_alloc(struct net *net, int family, gfp_t priority,
1524 struct proto *prot, int kern);
1525void sk_free(struct sock *sk);
1526void sk_destruct(struct sock *sk);
1527struct sock *sk_clone_lock(const struct sock *sk, const gfp_t priority);
1528void sk_free_unlock_clone(struct sock *sk);
1529
1530struct sk_buff *sock_wmalloc(struct sock *sk, unsigned long size, int force,
1531 gfp_t priority);
1532void __sock_wfree(struct sk_buff *skb);
1533void sock_wfree(struct sk_buff *skb);
1534struct sk_buff *sock_omalloc(struct sock *sk, unsigned long size,
1535 gfp_t priority);
1536void skb_orphan_partial(struct sk_buff *skb);
1537void sock_rfree(struct sk_buff *skb);
1538void sock_efree(struct sk_buff *skb);
1539#ifdef CONFIG_INET
1540void sock_edemux(struct sk_buff *skb);
1541#else
1542#define sock_edemux sock_efree
1543#endif
1544
1545int sock_setsockopt(struct socket *sock, int level, int op,
1546 char __user *optval, unsigned int optlen);
1547
1548int sock_getsockopt(struct socket *sock, int level, int op,
1549 char __user *optval, int __user *optlen);
1550struct sk_buff *sock_alloc_send_skb(struct sock *sk, unsigned long size,
1551 int noblock, int *errcode);
1552struct sk_buff *sock_alloc_send_pskb(struct sock *sk, unsigned long header_len,
1553 unsigned long data_len, int noblock,
1554 int *errcode, int max_page_order);
1555void *sock_kmalloc(struct sock *sk, int size, gfp_t priority);
1556void sock_kfree_s(struct sock *sk, void *mem, int size);
1557void sock_kzfree_s(struct sock *sk, void *mem, int size);
1558void sk_send_sigurg(struct sock *sk);
1559
1560struct sockcm_cookie {
1561 u32 mark;
1562 u16 tsflags;
1563};
1564
1565int __sock_cmsg_send(struct sock *sk, struct msghdr *msg, struct cmsghdr *cmsg,
1566 struct sockcm_cookie *sockc);
1567int sock_cmsg_send(struct sock *sk, struct msghdr *msg,
1568 struct sockcm_cookie *sockc);
1569
1570
1571
1572
1573
1574int sock_no_bind(struct socket *, struct sockaddr *, int);
1575int sock_no_connect(struct socket *, struct sockaddr *, int, int);
1576int sock_no_socketpair(struct socket *, struct socket *);
1577int sock_no_accept(struct socket *, struct socket *, int, bool);
1578int sock_no_getname(struct socket *, struct sockaddr *, int *, int);
1579unsigned int sock_no_poll(struct file *, struct socket *,
1580 struct poll_table_struct *);
1581int sock_no_ioctl(struct socket *, unsigned int, unsigned long);
1582int sock_no_listen(struct socket *, int);
1583int sock_no_shutdown(struct socket *, int);
1584int sock_no_getsockopt(struct socket *, int , int, char __user *, int __user *);
1585int sock_no_setsockopt(struct socket *, int, int, char __user *, unsigned int);
1586int sock_no_sendmsg(struct socket *, struct msghdr *, size_t);
1587int sock_no_sendmsg_locked(struct sock *sk, struct msghdr *msg, size_t len);
1588int sock_no_recvmsg(struct socket *, struct msghdr *, size_t, int);
1589int sock_no_mmap(struct file *file, struct socket *sock,
1590 struct vm_area_struct *vma);
1591ssize_t sock_no_sendpage(struct socket *sock, struct page *page, int offset,
1592 size_t size, int flags);
1593ssize_t sock_no_sendpage_locked(struct sock *sk, struct page *page,
1594 int offset, size_t size, int flags);
1595
1596
1597
1598
1599
1600int sock_common_getsockopt(struct socket *sock, int level, int optname,
1601 char __user *optval, int __user *optlen);
1602int sock_common_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
1603 int flags);
1604int sock_common_setsockopt(struct socket *sock, int level, int optname,
1605 char __user *optval, unsigned int optlen);
1606int compat_sock_common_getsockopt(struct socket *sock, int level,
1607 int optname, char __user *optval, int __user *optlen);
1608int compat_sock_common_setsockopt(struct socket *sock, int level,
1609 int optname, char __user *optval, unsigned int optlen);
1610
1611void sk_common_release(struct sock *sk);
1612
1613
1614
1615
1616
1617
1618void sock_init_data(struct socket *sock, struct sock *sk);
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646static inline void sock_put(struct sock *sk)
1647{
1648 if (refcount_dec_and_test(&sk->sk_refcnt))
1649 sk_free(sk);
1650}
1651
1652
1653
1654void sock_gen_put(struct sock *sk);
1655
1656int __sk_receive_skb(struct sock *sk, struct sk_buff *skb, const int nested,
1657 unsigned int trim_cap, bool refcounted);
1658static inline int sk_receive_skb(struct sock *sk, struct sk_buff *skb,
1659 const int nested)
1660{
1661 return __sk_receive_skb(sk, skb, nested, 1, true);
1662}
1663
1664static inline void sk_tx_queue_set(struct sock *sk, int tx_queue)
1665{
1666 sk->sk_tx_queue_mapping = tx_queue;
1667}
1668
1669static inline void sk_tx_queue_clear(struct sock *sk)
1670{
1671 sk->sk_tx_queue_mapping = -1;
1672}
1673
1674static inline int sk_tx_queue_get(const struct sock *sk)
1675{
1676 return sk ? sk->sk_tx_queue_mapping : -1;
1677}
1678
1679static inline void sk_set_socket(struct sock *sk, struct socket *sock)
1680{
1681 sk_tx_queue_clear(sk);
1682 sk->sk_socket = sock;
1683}
1684
1685static inline wait_queue_head_t *sk_sleep(struct sock *sk)
1686{
1687 BUILD_BUG_ON(offsetof(struct socket_wq, wait) != 0);
1688 return &rcu_dereference_raw(sk->sk_wq)->wait;
1689}
1690
1691
1692
1693
1694
1695
1696
1697static inline void sock_orphan(struct sock *sk)
1698{
1699 write_lock_bh(&sk->sk_callback_lock);
1700 sock_set_flag(sk, SOCK_DEAD);
1701 sk_set_socket(sk, NULL);
1702 sk->sk_wq = NULL;
1703 write_unlock_bh(&sk->sk_callback_lock);
1704}
1705
1706static inline void sock_graft(struct sock *sk, struct socket *parent)
1707{
1708 WARN_ON(parent->sk);
1709 write_lock_bh(&sk->sk_callback_lock);
1710 sk->sk_wq = parent->wq;
1711 parent->sk = sk;
1712 sk_set_socket(sk, parent);
1713 sk->sk_uid = SOCK_INODE(parent)->i_uid;
1714 security_sock_graft(sk, parent);
1715 write_unlock_bh(&sk->sk_callback_lock);
1716}
1717
1718kuid_t sock_i_uid(struct sock *sk);
1719unsigned long sock_i_ino(struct sock *sk);
1720
1721static inline kuid_t sock_net_uid(const struct net *net, const struct sock *sk)
1722{
1723 return sk ? sk->sk_uid : make_kuid(net->user_ns, 0);
1724}
1725
1726static inline u32 net_tx_rndhash(void)
1727{
1728 u32 v = prandom_u32();
1729
1730 return v ?: 1;
1731}
1732
1733static inline void sk_set_txhash(struct sock *sk)
1734{
1735 sk->sk_txhash = net_tx_rndhash();
1736}
1737
1738static inline void sk_rethink_txhash(struct sock *sk)
1739{
1740 if (sk->sk_txhash)
1741 sk_set_txhash(sk);
1742}
1743
1744static inline struct dst_entry *
1745__sk_dst_get(struct sock *sk)
1746{
1747 return rcu_dereference_check(sk->sk_dst_cache,
1748 lockdep_sock_is_held(sk));
1749}
1750
1751static inline struct dst_entry *
1752sk_dst_get(struct sock *sk)
1753{
1754 struct dst_entry *dst;
1755
1756 rcu_read_lock();
1757 dst = rcu_dereference(sk->sk_dst_cache);
1758 if (dst && !atomic_inc_not_zero(&dst->__refcnt))
1759 dst = NULL;
1760 rcu_read_unlock();
1761 return dst;
1762}
1763
1764static inline void dst_negative_advice(struct sock *sk)
1765{
1766 struct dst_entry *ndst, *dst = __sk_dst_get(sk);
1767
1768 sk_rethink_txhash(sk);
1769
1770 if (dst && dst->ops->negative_advice) {
1771 ndst = dst->ops->negative_advice(dst);
1772
1773 if (ndst != dst) {
1774 rcu_assign_pointer(sk->sk_dst_cache, ndst);
1775 sk_tx_queue_clear(sk);
1776 sk->sk_dst_pending_confirm = 0;
1777 }
1778 }
1779}
1780
1781static inline void
1782__sk_dst_set(struct sock *sk, struct dst_entry *dst)
1783{
1784 struct dst_entry *old_dst;
1785
1786 sk_tx_queue_clear(sk);
1787 sk->sk_dst_pending_confirm = 0;
1788 old_dst = rcu_dereference_protected(sk->sk_dst_cache,
1789 lockdep_sock_is_held(sk));
1790 rcu_assign_pointer(sk->sk_dst_cache, dst);
1791 dst_release(old_dst);
1792}
1793
1794static inline void
1795sk_dst_set(struct sock *sk, struct dst_entry *dst)
1796{
1797 struct dst_entry *old_dst;
1798
1799 sk_tx_queue_clear(sk);
1800 sk->sk_dst_pending_confirm = 0;
1801 old_dst = xchg((__force struct dst_entry **)&sk->sk_dst_cache, dst);
1802 dst_release(old_dst);
1803}
1804
1805static inline void
1806__sk_dst_reset(struct sock *sk)
1807{
1808 __sk_dst_set(sk, NULL);
1809}
1810
1811static inline void
1812sk_dst_reset(struct sock *sk)
1813{
1814 sk_dst_set(sk, NULL);
1815}
1816
1817struct dst_entry *__sk_dst_check(struct sock *sk, u32 cookie);
1818
1819struct dst_entry *sk_dst_check(struct sock *sk, u32 cookie);
1820
1821static inline void sk_dst_confirm(struct sock *sk)
1822{
1823 if (!sk->sk_dst_pending_confirm)
1824 sk->sk_dst_pending_confirm = 1;
1825}
1826
1827static inline void sock_confirm_neigh(struct sk_buff *skb, struct neighbour *n)
1828{
1829 if (skb_get_dst_pending_confirm(skb)) {
1830 struct sock *sk = skb->sk;
1831 unsigned long now = jiffies;
1832
1833
1834 if (n->confirmed != now)
1835 n->confirmed = now;
1836 if (sk && sk->sk_dst_pending_confirm)
1837 sk->sk_dst_pending_confirm = 0;
1838 }
1839}
1840
1841bool sk_mc_loop(struct sock *sk);
1842
1843static inline bool sk_can_gso(const struct sock *sk)
1844{
1845 return net_gso_ok(sk->sk_route_caps, sk->sk_gso_type);
1846}
1847
1848void sk_setup_caps(struct sock *sk, struct dst_entry *dst);
1849
1850static inline void sk_nocaps_add(struct sock *sk, netdev_features_t flags)
1851{
1852 sk->sk_route_nocaps |= flags;
1853 sk->sk_route_caps &= ~flags;
1854}
1855
1856static inline bool sk_check_csum_caps(struct sock *sk)
1857{
1858 return (sk->sk_route_caps & NETIF_F_HW_CSUM) ||
1859 (sk->sk_family == PF_INET &&
1860 (sk->sk_route_caps & NETIF_F_IP_CSUM)) ||
1861 (sk->sk_family == PF_INET6 &&
1862 (sk->sk_route_caps & NETIF_F_IPV6_CSUM));
1863}
1864
1865static inline int skb_do_copy_data_nocache(struct sock *sk, struct sk_buff *skb,
1866 struct iov_iter *from, char *to,
1867 int copy, int offset)
1868{
1869 if (skb->ip_summed == CHECKSUM_NONE) {
1870 __wsum csum = 0;
1871 if (!csum_and_copy_from_iter_full(to, copy, &csum, from))
1872 return -EFAULT;
1873 skb->csum = csum_block_add(skb->csum, csum, offset);
1874 } else if (sk->sk_route_caps & NETIF_F_NOCACHE_COPY) {
1875 if (!copy_from_iter_full_nocache(to, copy, from))
1876 return -EFAULT;
1877 } else if (!copy_from_iter_full(to, copy, from))
1878 return -EFAULT;
1879
1880 return 0;
1881}
1882
1883static inline int skb_add_data_nocache(struct sock *sk, struct sk_buff *skb,
1884 struct iov_iter *from, int copy)
1885{
1886 int err, offset = skb->len;
1887
1888 err = skb_do_copy_data_nocache(sk, skb, from, skb_put(skb, copy),
1889 copy, offset);
1890 if (err)
1891 __skb_trim(skb, offset);
1892
1893 return err;
1894}
1895
1896static inline int skb_copy_to_page_nocache(struct sock *sk, struct iov_iter *from,
1897 struct sk_buff *skb,
1898 struct page *page,
1899 int off, int copy)
1900{
1901 int err;
1902
1903 err = skb_do_copy_data_nocache(sk, skb, from, page_address(page) + off,
1904 copy, skb->len);
1905 if (err)
1906 return err;
1907
1908 skb->len += copy;
1909 skb->data_len += copy;
1910 skb->truesize += copy;
1911 sk->sk_wmem_queued += copy;
1912 sk_mem_charge(sk, copy);
1913 return 0;
1914}
1915
1916
1917
1918
1919
1920
1921
1922static inline int sk_wmem_alloc_get(const struct sock *sk)
1923{
1924 return refcount_read(&sk->sk_wmem_alloc) - 1;
1925}
1926
1927
1928
1929
1930
1931
1932
1933static inline int sk_rmem_alloc_get(const struct sock *sk)
1934{
1935 return atomic_read(&sk->sk_rmem_alloc);
1936}
1937
1938
1939
1940
1941
1942
1943
1944static inline bool sk_has_allocations(const struct sock *sk)
1945{
1946 return sk_wmem_alloc_get(sk) || sk_rmem_alloc_get(sk);
1947}
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980static inline bool skwq_has_sleeper(struct socket_wq *wq)
1981{
1982 return wq && wq_has_sleeper(&wq->wait);
1983}
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993static inline void sock_poll_wait(struct file *filp,
1994 wait_queue_head_t *wait_address, poll_table *p)
1995{
1996 if (!poll_does_not_wait(p) && wait_address) {
1997 poll_wait(filp, wait_address, p);
1998
1999
2000
2001
2002
2003 smp_mb();
2004 }
2005}
2006
2007static inline void skb_set_hash_from_sk(struct sk_buff *skb, struct sock *sk)
2008{
2009 if (sk->sk_txhash) {
2010 skb->l4_hash = 1;
2011 skb->hash = sk->sk_txhash;
2012 }
2013}
2014
2015void skb_set_owner_w(struct sk_buff *skb, struct sock *sk);
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025static inline void skb_set_owner_r(struct sk_buff *skb, struct sock *sk)
2026{
2027 skb_orphan(skb);
2028 skb->sk = sk;
2029 skb->destructor = sock_rfree;
2030 atomic_add(skb->truesize, &sk->sk_rmem_alloc);
2031 sk_mem_charge(sk, skb->truesize);
2032}
2033
2034void sk_reset_timer(struct sock *sk, struct timer_list *timer,
2035 unsigned long expires);
2036
2037void sk_stop_timer(struct sock *sk, struct timer_list *timer);
2038
2039int __sk_queue_drop_skb(struct sock *sk, struct sk_buff_head *sk_queue,
2040 struct sk_buff *skb, unsigned int flags,
2041 void (*destructor)(struct sock *sk,
2042 struct sk_buff *skb));
2043int __sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb);
2044int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb);
2045
2046int sock_queue_err_skb(struct sock *sk, struct sk_buff *skb);
2047struct sk_buff *sock_dequeue_err_skb(struct sock *sk);
2048
2049
2050
2051
2052
2053static inline int sock_error(struct sock *sk)
2054{
2055 int err;
2056 if (likely(!sk->sk_err))
2057 return 0;
2058 err = xchg(&sk->sk_err, 0);
2059 return -err;
2060}
2061
2062static inline unsigned long sock_wspace(struct sock *sk)
2063{
2064 int amt = 0;
2065
2066 if (!(sk->sk_shutdown & SEND_SHUTDOWN)) {
2067 amt = sk->sk_sndbuf - refcount_read(&sk->sk_wmem_alloc);
2068 if (amt < 0)
2069 amt = 0;
2070 }
2071 return amt;
2072}
2073
2074
2075
2076
2077
2078static inline void sk_set_bit(int nr, struct sock *sk)
2079{
2080 if ((nr == SOCKWQ_ASYNC_NOSPACE || nr == SOCKWQ_ASYNC_WAITDATA) &&
2081 !sock_flag(sk, SOCK_FASYNC))
2082 return;
2083
2084 set_bit(nr, &sk->sk_wq_raw->flags);
2085}
2086
2087static inline void sk_clear_bit(int nr, struct sock *sk)
2088{
2089 if ((nr == SOCKWQ_ASYNC_NOSPACE || nr == SOCKWQ_ASYNC_WAITDATA) &&
2090 !sock_flag(sk, SOCK_FASYNC))
2091 return;
2092
2093 clear_bit(nr, &sk->sk_wq_raw->flags);
2094}
2095
2096static inline void sk_wake_async(const struct sock *sk, int how, int band)
2097{
2098 if (sock_flag(sk, SOCK_FASYNC)) {
2099 rcu_read_lock();
2100 sock_wake_async(rcu_dereference(sk->sk_wq), how, band);
2101 rcu_read_unlock();
2102 }
2103}
2104
2105
2106
2107
2108
2109
2110#define TCP_SKB_MIN_TRUESIZE (2048 + SKB_DATA_ALIGN(sizeof(struct sk_buff)))
2111
2112#define SOCK_MIN_SNDBUF (TCP_SKB_MIN_TRUESIZE * 2)
2113#define SOCK_MIN_RCVBUF TCP_SKB_MIN_TRUESIZE
2114
2115static inline void sk_stream_moderate_sndbuf(struct sock *sk)
2116{
2117 if (!(sk->sk_userlocks & SOCK_SNDBUF_LOCK)) {
2118 sk->sk_sndbuf = min(sk->sk_sndbuf, sk->sk_wmem_queued >> 1);
2119 sk->sk_sndbuf = max_t(u32, sk->sk_sndbuf, SOCK_MIN_SNDBUF);
2120 }
2121}
2122
2123struct sk_buff *sk_stream_alloc_skb(struct sock *sk, int size, gfp_t gfp,
2124 bool force_schedule);
2125
2126
2127
2128
2129
2130
2131
2132
2133static inline struct page_frag *sk_page_frag(struct sock *sk)
2134{
2135 if (gfpflags_allow_blocking(sk->sk_allocation))
2136 return ¤t->task_frag;
2137
2138 return &sk->sk_frag;
2139}
2140
2141bool sk_page_frag_refill(struct sock *sk, struct page_frag *pfrag);
2142
2143
2144
2145
2146static inline bool sock_writeable(const struct sock *sk)
2147{
2148 return refcount_read(&sk->sk_wmem_alloc) < (sk->sk_sndbuf >> 1);
2149}
2150
2151static inline gfp_t gfp_any(void)
2152{
2153 return in_softirq() ? GFP_ATOMIC : GFP_KERNEL;
2154}
2155
2156static inline long sock_rcvtimeo(const struct sock *sk, bool noblock)
2157{
2158 return noblock ? 0 : sk->sk_rcvtimeo;
2159}
2160
2161static inline long sock_sndtimeo(const struct sock *sk, bool noblock)
2162{
2163 return noblock ? 0 : sk->sk_sndtimeo;
2164}
2165
2166static inline int sock_rcvlowat(const struct sock *sk, int waitall, int len)
2167{
2168 return (waitall ? len : min_t(int, sk->sk_rcvlowat, len)) ? : 1;
2169}
2170
2171
2172
2173
2174static inline int sock_intr_errno(long timeo)
2175{
2176 return timeo == MAX_SCHEDULE_TIMEOUT ? -ERESTARTSYS : -EINTR;
2177}
2178
2179struct sock_skb_cb {
2180 u32 dropcount;
2181};
2182
2183
2184
2185
2186
2187#define SOCK_SKB_CB_OFFSET ((FIELD_SIZEOF(struct sk_buff, cb) - \
2188 sizeof(struct sock_skb_cb)))
2189
2190#define SOCK_SKB_CB(__skb) ((struct sock_skb_cb *)((__skb)->cb + \
2191 SOCK_SKB_CB_OFFSET))
2192
2193#define sock_skb_cb_check_size(size) \
2194 BUILD_BUG_ON((size) > SOCK_SKB_CB_OFFSET)
2195
2196static inline void
2197sock_skb_set_dropcount(const struct sock *sk, struct sk_buff *skb)
2198{
2199 SOCK_SKB_CB(skb)->dropcount = sock_flag(sk, SOCK_RXQ_OVFL) ?
2200 atomic_read(&sk->sk_drops) : 0;
2201}
2202
2203static inline void sk_drops_add(struct sock *sk, const struct sk_buff *skb)
2204{
2205 int segs = max_t(u16, 1, skb_shinfo(skb)->gso_segs);
2206
2207 atomic_add(segs, &sk->sk_drops);
2208}
2209
2210void __sock_recv_timestamp(struct msghdr *msg, struct sock *sk,
2211 struct sk_buff *skb);
2212void __sock_recv_wifi_status(struct msghdr *msg, struct sock *sk,
2213 struct sk_buff *skb);
2214
2215static inline void
2216sock_recv_timestamp(struct msghdr *msg, struct sock *sk, struct sk_buff *skb)
2217{
2218 ktime_t kt = skb->tstamp;
2219 struct skb_shared_hwtstamps *hwtstamps = skb_hwtstamps(skb);
2220
2221
2222
2223
2224
2225
2226
2227 if (sock_flag(sk, SOCK_RCVTSTAMP) ||
2228 (sk->sk_tsflags & SOF_TIMESTAMPING_RX_SOFTWARE) ||
2229 (kt && sk->sk_tsflags & SOF_TIMESTAMPING_SOFTWARE) ||
2230 (hwtstamps->hwtstamp &&
2231 (sk->sk_tsflags & SOF_TIMESTAMPING_RAW_HARDWARE)))
2232 __sock_recv_timestamp(msg, sk, skb);
2233 else
2234 sk->sk_stamp = kt;
2235
2236 if (sock_flag(sk, SOCK_WIFI_STATUS) && skb->wifi_acked_valid)
2237 __sock_recv_wifi_status(msg, sk, skb);
2238}
2239
2240void __sock_recv_ts_and_drops(struct msghdr *msg, struct sock *sk,
2241 struct sk_buff *skb);
2242
2243#define SK_DEFAULT_STAMP (-1L * NSEC_PER_SEC)
2244static inline void sock_recv_ts_and_drops(struct msghdr *msg, struct sock *sk,
2245 struct sk_buff *skb)
2246{
2247#define FLAGS_TS_OR_DROPS ((1UL << SOCK_RXQ_OVFL) | \
2248 (1UL << SOCK_RCVTSTAMP))
2249#define TSFLAGS_ANY (SOF_TIMESTAMPING_SOFTWARE | \
2250 SOF_TIMESTAMPING_RAW_HARDWARE)
2251
2252 if (sk->sk_flags & FLAGS_TS_OR_DROPS || sk->sk_tsflags & TSFLAGS_ANY)
2253 __sock_recv_ts_and_drops(msg, sk, skb);
2254 else if (unlikely(sock_flag(sk, SOCK_TIMESTAMP)))
2255 sk->sk_stamp = skb->tstamp;
2256 else if (unlikely(sk->sk_stamp == SK_DEFAULT_STAMP))
2257 sk->sk_stamp = 0;
2258}
2259
2260void __sock_tx_timestamp(__u16 tsflags, __u8 *tx_flags);
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270static inline void sock_tx_timestamp(const struct sock *sk, __u16 tsflags,
2271 __u8 *tx_flags)
2272{
2273 if (unlikely(tsflags))
2274 __sock_tx_timestamp(tsflags, tx_flags);
2275 if (unlikely(sock_flag(sk, SOCK_WIFI_STATUS)))
2276 *tx_flags |= SKBTX_WIFI_STATUS;
2277}
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287static inline void sk_eat_skb(struct sock *sk, struct sk_buff *skb)
2288{
2289 __skb_unlink(skb, &sk->sk_receive_queue);
2290 __kfree_skb(skb);
2291}
2292
2293static inline
2294struct net *sock_net(const struct sock *sk)
2295{
2296 return read_pnet(&sk->sk_net);
2297}
2298
2299static inline
2300void sock_net_set(struct sock *sk, struct net *net)
2301{
2302 write_pnet(&sk->sk_net, net);
2303}
2304
2305static inline struct sock *skb_steal_sock(struct sk_buff *skb)
2306{
2307 if (skb->sk) {
2308 struct sock *sk = skb->sk;
2309
2310 skb->destructor = NULL;
2311 skb->sk = NULL;
2312 return sk;
2313 }
2314 return NULL;
2315}
2316
2317
2318
2319
2320static inline bool sk_fullsock(const struct sock *sk)
2321{
2322 return (1 << sk->sk_state) & ~(TCPF_TIME_WAIT | TCPF_NEW_SYN_RECV);
2323}
2324
2325
2326
2327
2328static inline bool sk_listener(const struct sock *sk)
2329{
2330 return (1 << sk->sk_state) & (TCPF_LISTEN | TCPF_NEW_SYN_RECV);
2331}
2332
2333
2334
2335
2336
2337
2338
2339
2340static inline int sk_state_load(const struct sock *sk)
2341{
2342 return smp_load_acquire(&sk->sk_state);
2343}
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353static inline void sk_state_store(struct sock *sk, int newstate)
2354{
2355 smp_store_release(&sk->sk_state, newstate);
2356}
2357
2358void sock_enable_timestamp(struct sock *sk, int flag);
2359int sock_get_timestamp(struct sock *, struct timeval __user *);
2360int sock_get_timestampns(struct sock *, struct timespec __user *);
2361int sock_recv_errqueue(struct sock *sk, struct msghdr *msg, int len, int level,
2362 int type);
2363
2364bool sk_ns_capable(const struct sock *sk,
2365 struct user_namespace *user_ns, int cap);
2366bool sk_capable(const struct sock *sk, int cap);
2367bool sk_net_capable(const struct sock *sk, int cap);
2368
2369void sk_get_meminfo(const struct sock *sk, u32 *meminfo);
2370
2371
2372
2373
2374
2375
2376#define _SK_MEM_PACKETS 256
2377#define _SK_MEM_OVERHEAD SKB_TRUESIZE(256)
2378#define SK_WMEM_MAX (_SK_MEM_OVERHEAD * _SK_MEM_PACKETS)
2379#define SK_RMEM_MAX (_SK_MEM_OVERHEAD * _SK_MEM_PACKETS)
2380
2381extern __u32 sysctl_wmem_max;
2382extern __u32 sysctl_rmem_max;
2383
2384extern int sysctl_tstamp_allow_data;
2385extern int sysctl_optmem_max;
2386
2387extern __u32 sysctl_wmem_default;
2388extern __u32 sysctl_rmem_default;
2389
2390#endif
2391