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