aboutsummaryrefslogtreecommitdiffstats
path: root/net/core/net_namespace.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/core/net_namespace.c')
-rw-r--r--net/core/net_namespace.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c
index b7292a2719dc..5cd0b22e649d 100644
--- a/net/core/net_namespace.c
+++ b/net/core/net_namespace.c
@@ -6,6 +6,7 @@
6#include <linux/delay.h> 6#include <linux/delay.h>
7#include <linux/sched.h> 7#include <linux/sched.h>
8#include <linux/idr.h> 8#include <linux/idr.h>
9#include <linux/rculist.h>
9#include <net/net_namespace.h> 10#include <net/net_namespace.h>
10#include <net/netns/generic.h> 11#include <net/netns/generic.h>
11 12
@@ -127,7 +128,7 @@ static struct net *net_create(void)
127 rv = setup_net(net); 128 rv = setup_net(net);
128 if (rv == 0) { 129 if (rv == 0) {
129 rtnl_lock(); 130 rtnl_lock();
130 list_add_tail(&net->list, &net_namespace_list); 131 list_add_tail_rcu(&net->list, &net_namespace_list);
131 rtnl_unlock(); 132 rtnl_unlock();
132 } 133 }
133 mutex_unlock(&net_mutex); 134 mutex_unlock(&net_mutex);
@@ -156,9 +157,16 @@ static void cleanup_net(struct work_struct *work)
156 157
157 /* Don't let anyone else find us. */ 158 /* Don't let anyone else find us. */
158 rtnl_lock(); 159 rtnl_lock();
159 list_del(&net->list); 160 list_del_rcu(&net->list);
160 rtnl_unlock(); 161 rtnl_unlock();
161 162
163 /*
164 * Another CPU might be rcu-iterating the list, wait for it.
165 * This needs to be before calling the exit() notifiers, so
166 * the rcu_barrier() below isn't sufficient alone.
167 */
168 synchronize_rcu();
169
162 /* Run all of the network namespace exit methods */ 170 /* Run all of the network namespace exit methods */
163 list_for_each_entry_reverse(ops, &pernet_list, list) { 171 list_for_each_entry_reverse(ops, &pernet_list, list) {
164 if (ops->exit) 172 if (ops->exit)
@@ -219,7 +227,7 @@ static int __init net_ns_init(void)
219 panic("Could not setup the initial network namespace"); 227 panic("Could not setup the initial network namespace");
220 228
221 rtnl_lock(); 229 rtnl_lock();
222 list_add_tail(&init_net.list, &net_namespace_list); 230 list_add_tail_rcu(&init_net.list, &net_namespace_list);
223 rtnl_unlock(); 231 rtnl_unlock();
224 232
225 mutex_unlock(&net_mutex); 233 mutex_unlock(&net_mutex);
5:01:51 -0400 cfg80211: managed mode wext compatibility' href='/cgit/cgit.cgi/litmus-rt-budgetable-locks.git/.git/commit/net/wireless/wext-sme.c?h=update_litmus_2019&id=f21293549f60f88c74fcb9944737f11048896dc4'>f21293549f60
25e83c490be4





f21293549f60


59bbb6f7574b

f21293549f60
667503ddcb96
f21293549f60

667503ddcb96
f21293549f60

e8c9bd5b8d80






59bbb6f7574b
e8c9bd5b8d80
667503ddcb96
f21293549f60

59bbb6f7574b
667503ddcb96

59bbb6f7574b
667503ddcb96

f21293549f60
f21293549f60











667503ddcb96
f21293549f60
19957bb399e2
f21293549f60

667503ddcb96
f21293549f60









f21293549f60





59bbb6f7574b
f21293549f60













59bbb6f7574b

667503ddcb96



f21293549f60

25e83c490be4





f21293549f60


59bbb6f7574b

f21293549f60
667503ddcb96
f21293549f60

f401a6f7ede7
f21293549f60




c0692b8fe29f

f21293549f60
59bbb6f7574b
667503ddcb96

59bbb6f7574b

667503ddcb96
f21293549f60
f21293549f60












667503ddcb96
a42dd7efd934








f21293549f60


33de4f9d787e
667503ddcb96
f21293549f60


f21293549f60





59bbb6f7574b
f21293549f60













59bbb6f7574b

667503ddcb96

25e83c490be4




f21293549f60
25e83c490be4

ac422d3cc253
25e83c490be4
f21293549f60
59bbb6f7574b

f21293549f60
667503ddcb96
f21293549f60







59bbb6f7574b
667503ddcb96

59bbb6f7574b

667503ddcb96
f21293549f60
f21293549f60












667503ddcb96
f21293549f60
19957bb399e2
f21293549f60

667503ddcb96
f21293549f60


f21293549f60















667503ddcb96

f21293549f60
667503ddcb96
f21293549f60

667503ddcb96
f21293549f60


667503ddcb96



f21293549f60







667503ddcb96

f21293549f60
667503ddcb96
f21293549f60


667503ddcb96



f21293549f60
f21293549f60







667503ddcb96
f21293549f60











667503ddcb96
f21293549f60


667503ddcb96


f21293549f60
667503ddcb96

f21293549f60
667503ddcb96


f21293549f60
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
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
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414






                                                                 
                         

                              
                       
                         
                              
                        

                    

                                                                      
 
                                               
                                    
                   
 


                               




                                                      
 


                                                


                                                                       

                                                          











                                                                       



                                                   
                                                    
                                                                      

                          





                                                           
                                                                    


                                                                            

                                              




                                                            


                                                         
 






                                                                
 
                                 
                                       

                        

                                                   





                                                         


                                                                     

                                                                               
                        
                                 

         
 

                                          






                                                                   
                                                   
                                                                                   
                         

         
                                                    

                          
                                         

                                   
 











                                                                
                        
                              
                                                      

                                                  
                          









                                            





                                                                 
                                                                            













                                                            

                                       



                        

                                                   





                                                                    


                                                                        

                                                                               
                        
                                 

         
                                            




                                                       

                                                               
 
                                                    

                          

                                         
                   
 












                                                                 
                        








                                                                            


                                                                    
         
                          


                 





                                                                  
                                                                            













                                                                        

                                       

                        




                                                        
 

                                                        
                                                                      
                                 
 

                                                                               
                        
                                 







                                                            
                                                    

                          

                                         
                   
 












                                                                  
                        
                              
                                                                                 

                                                      
                          


                 















                                                                            

                        
                       
                

                                                   
                         


                                                        



                                      







                                                   

                                                                               
                        
                                 


                                                        



                          
 







                                                             
                











                                                   
                        


                              


                                                                         
                

                                  
         


                          
 
/*
 * cfg80211 wext compat for managed mode.
 *
 * Copyright 2009	Johannes Berg <johannes@sipsolutions.net>
 * Copyright (C) 2009   Intel Corporation. All rights reserved.
 */

#include <linux/export.h>
#include <linux/etherdevice.h>
#include <linux/if_arp.h>
#include <linux/slab.h>
#include <net/cfg80211.h>
#include <net/cfg80211-wext.h>
#include "wext-compat.h"
#include "nl80211.h"

int cfg80211_mgd_wext_connect(struct cfg80211_registered_device *rdev,
			      struct wireless_dev *wdev)
{
	struct cfg80211_cached_keys *ck = NULL;
	const u8 *prev_bssid = NULL;
	int err, i;

	ASSERT_RDEV_LOCK(rdev);
	ASSERT_WDEV_LOCK(wdev);

	if (!netif_running(wdev->netdev))
		return 0;

	wdev->wext.connect.ie = wdev->wext.ie;
	wdev->wext.connect.ie_len = wdev->wext.ie_len;

	/* Use default background scan period */
	wdev->wext.connect.bg_scan_period = -1;

	if (wdev->wext.keys) {
		wdev->wext.keys->def = wdev->wext.default_key;
		wdev->wext.keys->defmgmt = wdev->wext.default_mgmt_key;
		if (wdev->wext.default_key != -1)
			wdev->wext.connect.privacy = true;
	}

	if (!wdev->wext.connect.ssid_len)
		return 0;

	if (wdev->wext.keys) {
		ck = kmemdup(wdev->wext.keys, sizeof(*ck), GFP_KERNEL);
		if (!ck)
			return -ENOMEM;
		for (i = 0; i < 6; i++)
			ck->params[i].key = ck->data[i];
	}

	if (wdev->wext.prev_bssid_valid)
		prev_bssid = wdev->wext.prev_bssid;

	err = __cfg80211_connect(rdev, wdev->netdev,
				 &wdev->wext.connect, ck, prev_bssid);
	if (err)
		kfree(ck);

	return err;
}

int cfg80211_mgd_wext_siwfreq(struct net_device *dev,
			      struct iw_request_info *info,
			      struct iw_freq *wextfreq, char *extra)
{
	struct wireless_dev *wdev = dev->ieee80211_ptr;
	struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy);
	struct ieee80211_channel *chan = NULL;
	int err, freq;

	/* call only for station! */
	if (WARN_ON(wdev->iftype != NL80211_IFTYPE_STATION))
		return -EINVAL;

	freq = cfg80211_wext_freq(wdev->wiphy, wextfreq);
	if (freq < 0)
		return freq;

	if (freq) {
		chan = ieee80211_get_channel(wdev->wiphy, freq);
		if (!chan)
			return -EINVAL;
		if (chan->flags & IEEE80211_CHAN_DISABLED)
			return -EINVAL;
	}

	cfg80211_lock_rdev(rdev);
	mutex_lock(&rdev->devlist_mtx);
	wdev_lock(wdev);

	if (wdev->sme_state != CFG80211_SME_IDLE) {
		bool event = true;

		if (wdev->wext.connect.channel == chan) {
			err = 0;
			goto out;
		}

		/* if SSID set, we'll try right again, avoid event */
		if (wdev->wext.connect.ssid_len)
			event = false;
		err = __cfg80211_disconnect(rdev, dev,
					    WLAN_REASON_DEAUTH_LEAVING, event);
		if (err)
			goto out;
	}


	wdev->wext.connect.channel = chan;

	/*
	 * SSID is not set, we just want to switch monitor channel,
	 * this is really just backward compatibility, if the SSID
	 * is set then we use the channel to select the BSS to use
	 * to connect to instead. If we were connected on another
	 * channel we disconnected above and reconnect below.
	 */
	if (chan && !wdev->wext.connect.ssid_len) {
		err = cfg80211_set_monitor_channel(rdev, freq, NL80211_CHAN_NO_HT);
		goto out;
	}

	err = cfg80211_mgd_wext_connect(rdev, wdev);
 out:
	wdev_unlock(wdev);