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