diff options
author | David S. Miller <davem@davemloft.net> | 2014-01-05 20:18:50 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-01-05 20:18:50 -0500 |
commit | 855404efae0d449cc491978d54ea5d117a3cb271 (patch) | |
tree | 3c44948365a77058d8b1f2ed6e6683bfc52ef256 /include/net | |
parent | a1d4b03a076d95edc88d070f7627a73ab80abddc (diff) | |
parent | 82a37132f300ea53bdcd812917af5a6329ec80c3 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf-next
Pablo Neira Ayuso says:
====================
netfilter/IPVS updates for net-next
The following patchset contains Netfilter updates for your net-next tree,
they are:
* Add full port randomization support. Some crazy researchers found a way
to reconstruct the secure ephemeral ports that are allocated in random mode
by sending off-path bursts of UDP packets to overrun the socket buffer of
the DNS resolver to trigger retransmissions, then if the timing for the
DNS resolution done by a client is larger than usual, then they conclude
that the port that received the burst of UDP packets is the one that was
opened. It seems a bit aggressive method to me but it seems to work for
them. As a result, Daniel Borkmann and Hannes Frederic Sowa came up with a
new NAT mode to fully randomize ports using prandom.
* Add a new classifier to x_tables based on the socket net_cls set via
cgroups. These includes two patches to prepare the field as requested by
Zefan Li. Also from Daniel Borkmann.
* Use prandom instead of get_random_bytes in several locations of the
netfilter code, from Florian Westphal.
* Allow to use the CTA_MARK_MASK in ctnetlink when mangling the conntrack
mark, also from Florian Westphal.
* Fix compilation warning due to unused variable in IPVS, from Geert
Uytterhoeven.
* Add support for UID/GID via nfnetlink_queue, from Valentina Giusti.
* Add IPComp extension to x_tables, from Fan Du.
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net')
-rw-r--r-- | include/net/cls_cgroup.h | 40 | ||||
-rw-r--r-- | include/net/netfilter/ipv4/nf_conntrack_ipv4.h | 2 | ||||
-rw-r--r-- | include/net/netfilter/nf_conntrack_l3proto.h | 1 | ||||
-rw-r--r-- | include/net/netns/conntrack.h | 33 | ||||
-rw-r--r-- | include/net/netprio_cgroup.h | 18 | ||||
-rw-r--r-- | include/net/sock.h | 2 |
6 files changed, 36 insertions, 60 deletions
diff --git a/include/net/cls_cgroup.h b/include/net/cls_cgroup.h index 33d03b648646..9cf2d5ef38d9 100644 --- a/include/net/cls_cgroup.h +++ b/include/net/cls_cgroup.h | |||
@@ -16,17 +16,16 @@ | |||
16 | #include <linux/cgroup.h> | 16 | #include <linux/cgroup.h> |
17 | #include <linux/hardirq.h> | 17 | #include <linux/hardirq.h> |
18 | #include <linux/rcupdate.h> | 18 | #include <linux/rcupdate.h> |
19 | #include <net/sock.h> | ||
19 | 20 | ||
20 | #if IS_ENABLED(CONFIG_NET_CLS_CGROUP) | 21 | #ifdef CONFIG_CGROUP_NET_CLASSID |
21 | struct cgroup_cls_state | 22 | struct cgroup_cls_state { |
22 | { | ||
23 | struct cgroup_subsys_state css; | 23 | struct cgroup_subsys_state css; |
24 | u32 classid; | 24 | u32 classid; |
25 | }; | 25 | }; |
26 | 26 | ||
27 | void sock_update_classid(struct sock *sk); | 27 | struct cgroup_cls_state *task_cls_state(struct task_struct *p); |
28 | 28 | ||
29 | #if IS_BUILTIN(CONFIG_NET_CLS_CGROUP) | ||
30 | static inline u32 task_cls_classid(struct task_struct *p) | 29 | static inline u32 task_cls_classid(struct task_struct *p) |
31 | { | 30 | { |
32 | u32 classid; | 31 | u32 classid; |
@@ -41,33 +40,18 @@ static inline u32 task_cls_classid(struct task_struct *p) | |||
41 | 40 | ||
42 | return classid; | 41 | return classid; |
43 | } | 42 | } |
44 | #elif IS_MODULE(CONFIG_NET_CLS_CGROUP) | ||
45 | static inline u32 task_cls_classid(struct task_struct *p) | ||
46 | { | ||
47 | struct cgroup_subsys_state *css; | ||
48 | u32 classid = 0; | ||
49 | |||
50 | if (in_interrupt()) | ||
51 | return 0; | ||
52 | |||
53 | rcu_read_lock(); | ||
54 | css = task_css(p, net_cls_subsys_id); | ||
55 | if (css) | ||
56 | classid = container_of(css, | ||
57 | struct cgroup_cls_state, css)->classid; | ||
58 | rcu_read_unlock(); | ||
59 | 43 | ||
60 | return classid; | ||
61 | } | ||
62 | #endif | ||
63 | #else /* !CGROUP_NET_CLS_CGROUP */ | ||
64 | static inline void sock_update_classid(struct sock *sk) | 44 | static inline void sock_update_classid(struct sock *sk) |
65 | { | 45 | { |
66 | } | 46 | u32 classid; |
67 | 47 | ||
68 | static inline u32 task_cls_classid(struct task_struct *p) | 48 | classid = task_cls_classid(current); |
49 | if (classid != sk->sk_classid) | ||
50 | sk->sk_classid = classid; | ||
51 | } | ||
52 | #else /* !CONFIG_CGROUP_NET_CLASSID */ | ||
53 | static inline void sock_update_classid(struct sock *sk) | ||
69 | { | 54 | { |
70 | return 0; | ||
71 | } | 55 | } |
72 | #endif /* CGROUP_NET_CLS_CGROUP */ | 56 | #endif /* CONFIG_CGROUP_NET_CLASSID */ |
73 | #endif /* _NET_CLS_CGROUP_H */ | 57 | #endif /* _NET_CLS_CGROUP_H */ |
diff --git a/include/net/netfilter/ipv4/nf_conntrack_ipv4.h b/include/net/netfilter/ipv4/nf_conntrack_ipv4.h index 6c3d12e2949f..981c327374da 100644 --- a/include/net/netfilter/ipv4/nf_conntrack_ipv4.h +++ b/include/net/netfilter/ipv4/nf_conntrack_ipv4.h | |||
@@ -19,6 +19,4 @@ extern struct nf_conntrack_l4proto nf_conntrack_l4proto_icmp; | |||
19 | int nf_conntrack_ipv4_compat_init(void); | 19 | int nf_conntrack_ipv4_compat_init(void); |
20 | void nf_conntrack_ipv4_compat_fini(void); | 20 | void nf_conntrack_ipv4_compat_fini(void); |
21 | 21 | ||
22 | void need_ipv4_conntrack(void); | ||
23 | |||
24 | #endif /*_NF_CONNTRACK_IPV4_H*/ | 22 | #endif /*_NF_CONNTRACK_IPV4_H*/ |
diff --git a/include/net/netfilter/nf_conntrack_l3proto.h b/include/net/netfilter/nf_conntrack_l3proto.h index 3efab704b7eb..adc1fa3dd7ab 100644 --- a/include/net/netfilter/nf_conntrack_l3proto.h +++ b/include/net/netfilter/nf_conntrack_l3proto.h | |||
@@ -87,7 +87,6 @@ int nf_ct_l3proto_register(struct nf_conntrack_l3proto *proto); | |||
87 | void nf_ct_l3proto_unregister(struct nf_conntrack_l3proto *proto); | 87 | void nf_ct_l3proto_unregister(struct nf_conntrack_l3proto *proto); |
88 | 88 | ||
89 | struct nf_conntrack_l3proto *nf_ct_l3proto_find_get(u_int16_t l3proto); | 89 | struct nf_conntrack_l3proto *nf_ct_l3proto_find_get(u_int16_t l3proto); |
90 | void nf_ct_l3proto_put(struct nf_conntrack_l3proto *p); | ||
91 | 90 | ||
92 | /* Existing built-in protocols */ | 91 | /* Existing built-in protocols */ |
93 | extern struct nf_conntrack_l3proto nf_conntrack_l3proto_generic; | 92 | extern struct nf_conntrack_l3proto nf_conntrack_l3proto_generic; |
diff --git a/include/net/netns/conntrack.h b/include/net/netns/conntrack.h index c9c0c538b68b..fbcc7fa536dc 100644 --- a/include/net/netns/conntrack.h +++ b/include/net/netns/conntrack.h | |||
@@ -65,6 +65,23 @@ struct nf_ip_net { | |||
65 | struct netns_ct { | 65 | struct netns_ct { |
66 | atomic_t count; | 66 | atomic_t count; |
67 | unsigned int expect_count; | 67 | unsigned int expect_count; |
68 | #ifdef CONFIG_SYSCTL | ||
69 | struct ctl_table_header *sysctl_header; | ||
70 | struct ctl_table_header *acct_sysctl_header; | ||
71 | struct ctl_table_header *tstamp_sysctl_header; | ||
72 | struct ctl_table_header *event_sysctl_header; | ||
73 | struct ctl_table_header *helper_sysctl_header; | ||
74 | #endif | ||
75 | char *slabname; | ||
76 | unsigned int sysctl_log_invalid; /* Log invalid packets */ | ||
77 | unsigned int sysctl_events_retry_timeout; | ||
78 | int sysctl_events; | ||
79 | int sysctl_acct; | ||
80 | int sysctl_auto_assign_helper; | ||
81 | bool auto_assign_helper_warned; | ||
82 | int sysctl_tstamp; | ||
83 | int sysctl_checksum; | ||
84 | |||
68 | unsigned int htable_size; | 85 | unsigned int htable_size; |
69 | struct kmem_cache *nf_conntrack_cachep; | 86 | struct kmem_cache *nf_conntrack_cachep; |
70 | struct hlist_nulls_head *hash; | 87 | struct hlist_nulls_head *hash; |
@@ -75,14 +92,6 @@ struct netns_ct { | |||
75 | struct ip_conntrack_stat __percpu *stat; | 92 | struct ip_conntrack_stat __percpu *stat; |
76 | struct nf_ct_event_notifier __rcu *nf_conntrack_event_cb; | 93 | struct nf_ct_event_notifier __rcu *nf_conntrack_event_cb; |
77 | struct nf_exp_event_notifier __rcu *nf_expect_event_cb; | 94 | struct nf_exp_event_notifier __rcu *nf_expect_event_cb; |
78 | int sysctl_events; | ||
79 | unsigned int sysctl_events_retry_timeout; | ||
80 | int sysctl_acct; | ||
81 | int sysctl_tstamp; | ||
82 | int sysctl_checksum; | ||
83 | unsigned int sysctl_log_invalid; /* Log invalid packets */ | ||
84 | int sysctl_auto_assign_helper; | ||
85 | bool auto_assign_helper_warned; | ||
86 | struct nf_ip_net nf_ct_proto; | 95 | struct nf_ip_net nf_ct_proto; |
87 | #if defined(CONFIG_NF_CONNTRACK_LABELS) | 96 | #if defined(CONFIG_NF_CONNTRACK_LABELS) |
88 | unsigned int labels_used; | 97 | unsigned int labels_used; |
@@ -92,13 +101,5 @@ struct netns_ct { | |||
92 | struct hlist_head *nat_bysource; | 101 | struct hlist_head *nat_bysource; |
93 | unsigned int nat_htable_size; | 102 | unsigned int nat_htable_size; |
94 | #endif | 103 | #endif |
95 | #ifdef CONFIG_SYSCTL | ||
96 | struct ctl_table_header *sysctl_header; | ||
97 | struct ctl_table_header *acct_sysctl_header; | ||
98 | struct ctl_table_header *tstamp_sysctl_header; | ||
99 | struct ctl_table_header *event_sysctl_header; | ||
100 | struct ctl_table_header *helper_sysctl_header; | ||
101 | #endif | ||
102 | char *slabname; | ||
103 | }; | 104 | }; |
104 | #endif | 105 | #endif |
diff --git a/include/net/netprio_cgroup.h b/include/net/netprio_cgroup.h index 099d02782e22..dafc09f0fdbc 100644 --- a/include/net/netprio_cgroup.h +++ b/include/net/netprio_cgroup.h | |||
@@ -13,12 +13,12 @@ | |||
13 | 13 | ||
14 | #ifndef _NETPRIO_CGROUP_H | 14 | #ifndef _NETPRIO_CGROUP_H |
15 | #define _NETPRIO_CGROUP_H | 15 | #define _NETPRIO_CGROUP_H |
16 | |||
16 | #include <linux/cgroup.h> | 17 | #include <linux/cgroup.h> |
17 | #include <linux/hardirq.h> | 18 | #include <linux/hardirq.h> |
18 | #include <linux/rcupdate.h> | 19 | #include <linux/rcupdate.h> |
19 | 20 | ||
20 | 21 | #if IS_ENABLED(CONFIG_CGROUP_NET_PRIO) | |
21 | #if IS_ENABLED(CONFIG_NETPRIO_CGROUP) | ||
22 | struct netprio_map { | 22 | struct netprio_map { |
23 | struct rcu_head rcu; | 23 | struct rcu_head rcu; |
24 | u32 priomap_len; | 24 | u32 priomap_len; |
@@ -27,8 +27,7 @@ struct netprio_map { | |||
27 | 27 | ||
28 | void sock_update_netprioidx(struct sock *sk); | 28 | void sock_update_netprioidx(struct sock *sk); |
29 | 29 | ||
30 | #if IS_BUILTIN(CONFIG_NETPRIO_CGROUP) | 30 | #if IS_BUILTIN(CONFIG_CGROUP_NET_PRIO) |
31 | |||
32 | static inline u32 task_netprioidx(struct task_struct *p) | 31 | static inline u32 task_netprioidx(struct task_struct *p) |
33 | { | 32 | { |
34 | struct cgroup_subsys_state *css; | 33 | struct cgroup_subsys_state *css; |
@@ -40,9 +39,7 @@ static inline u32 task_netprioidx(struct task_struct *p) | |||
40 | rcu_read_unlock(); | 39 | rcu_read_unlock(); |
41 | return idx; | 40 | return idx; |
42 | } | 41 | } |
43 | 42 | #elif IS_MODULE(CONFIG_CGROUP_NET_PRIO) | |
44 | #elif IS_MODULE(CONFIG_NETPRIO_CGROUP) | ||
45 | |||
46 | static inline u32 task_netprioidx(struct task_struct *p) | 43 | static inline u32 task_netprioidx(struct task_struct *p) |
47 | { | 44 | { |
48 | struct cgroup_subsys_state *css; | 45 | struct cgroup_subsys_state *css; |
@@ -56,9 +53,7 @@ static inline u32 task_netprioidx(struct task_struct *p) | |||
56 | return idx; | 53 | return idx; |
57 | } | 54 | } |
58 | #endif | 55 | #endif |
59 | 56 | #else /* !CONFIG_CGROUP_NET_PRIO */ | |
60 | #else /* !CONFIG_NETPRIO_CGROUP */ | ||
61 | |||
62 | static inline u32 task_netprioidx(struct task_struct *p) | 57 | static inline u32 task_netprioidx(struct task_struct *p) |
63 | { | 58 | { |
64 | return 0; | 59 | return 0; |
@@ -66,6 +61,5 @@ static inline u32 task_netprioidx(struct task_struct *p) | |||
66 | 61 | ||
67 | #define sock_update_netprioidx(sk) | 62 | #define sock_update_netprioidx(sk) |
68 | 63 | ||
69 | #endif /* CONFIG_NETPRIO_CGROUP */ | 64 | #endif /* CONFIG_CGROUP_NET_PRIO */ |
70 | |||
71 | #endif /* _NET_CLS_CGROUP_H */ | 65 | #endif /* _NET_CLS_CGROUP_H */ |
diff --git a/include/net/sock.h b/include/net/sock.h index 8d9af66ccf2c..5c3f7c3624aa 100644 --- a/include/net/sock.h +++ b/include/net/sock.h | |||
@@ -395,7 +395,7 @@ struct sock { | |||
395 | unsigned short sk_ack_backlog; | 395 | unsigned short sk_ack_backlog; |
396 | unsigned short sk_max_ack_backlog; | 396 | unsigned short sk_max_ack_backlog; |
397 | __u32 sk_priority; | 397 | __u32 sk_priority; |
398 | #if IS_ENABLED(CONFIG_NETPRIO_CGROUP) | 398 | #if IS_ENABLED(CONFIG_CGROUP_NET_PRIO) |
399 | __u32 sk_cgrp_prioidx; | 399 | __u32 sk_cgrp_prioidx; |
400 | #endif | 400 | #endif |
401 | struct pid *sk_peer_pid; | 401 | struct pid *sk_peer_pid; |