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