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