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