~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/net/nfc/netlink.c

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /net/nfc/netlink.c (Version linux-6.12-rc7) and /net/nfc/netlink.c (Version policy-sample)


  1 // SPDX-License-Identifier: GPL-2.0-or-later        1 
  2 /*                                                
  3  * Copyright (C) 2011 Instituto Nokia de Tecno    
  4  *                                                
  5  * Authors:                                       
  6  *    Lauro Ramos Venancio <lauro.venancio@ope    
  7  *    Aloisio Almeida Jr <aloisio.almeida@open    
  8  *                                                
  9  * Vendor commands implementation based on net    
 10  * which is:                                      
 11  *                                                
 12  * Copyright 2006-2010  Johannes Berg <johanne    
 13  * Copyright 2013-2014  Intel Mobile Communica    
 14  */                                               
 15                                                   
 16 #define pr_fmt(fmt) KBUILD_MODNAME ": %s: " fm    
 17                                                   
 18 #include <net/genetlink.h>                        
 19 #include <linux/nfc.h>                            
 20 #include <linux/slab.h>                           
 21                                                   
 22 #include "nfc.h"                                  
 23 #include "llcp.h"                                 
 24                                                   
 25 static const struct genl_multicast_group nfc_g    
 26         { .name = NFC_GENL_MCAST_EVENT_NAME, }    
 27 };                                                
 28                                                   
 29 static struct genl_family nfc_genl_family;        
 30 static const struct nla_policy nfc_genl_policy    
 31         [NFC_ATTR_DEVICE_INDEX] = { .type = NL    
 32         [NFC_ATTR_DEVICE_NAME] = { .type = NLA    
 33                                 .len = NFC_DEV    
 34         [NFC_ATTR_PROTOCOLS] = { .type = NLA_U    
 35         [NFC_ATTR_TARGET_INDEX] = { .type = NL    
 36         [NFC_ATTR_COMM_MODE] = { .type = NLA_U    
 37         [NFC_ATTR_RF_MODE] = { .type = NLA_U8     
 38         [NFC_ATTR_DEVICE_POWERED] = { .type =     
 39         [NFC_ATTR_IM_PROTOCOLS] = { .type = NL    
 40         [NFC_ATTR_TM_PROTOCOLS] = { .type = NL    
 41         [NFC_ATTR_LLC_PARAM_LTO] = { .type = N    
 42         [NFC_ATTR_LLC_PARAM_RW] = { .type = NL    
 43         [NFC_ATTR_LLC_PARAM_MIUX] = { .type =     
 44         [NFC_ATTR_LLC_SDP] = { .type = NLA_NES    
 45         [NFC_ATTR_FIRMWARE_NAME] = { .type = N    
 46                                      .len = NF    
 47         [NFC_ATTR_SE_INDEX] = { .type = NLA_U3    
 48         [NFC_ATTR_SE_APDU] = { .type = NLA_BIN    
 49         [NFC_ATTR_VENDOR_ID] = { .type = NLA_U    
 50         [NFC_ATTR_VENDOR_SUBCMD] = { .type = N    
 51         [NFC_ATTR_VENDOR_DATA] = { .type = NLA    
 52                                                   
 53 };                                                
 54                                                   
 55 static const struct nla_policy nfc_sdp_genl_po    
 56         [NFC_SDP_ATTR_URI] = { .type = NLA_STR    
 57                                .len = U8_MAX -    
 58         [NFC_SDP_ATTR_SAP] = { .type = NLA_U8     
 59 };                                                
 60                                                   
 61 static int nfc_genl_send_target(struct sk_buff    
 62                                 struct netlink    
 63 {                                                 
 64         void *hdr;                                
 65                                                   
 66         hdr = genlmsg_put(msg, NETLINK_CB(cb->    
 67                           &nfc_genl_family, fl    
 68         if (!hdr)                                 
 69                 return -EMSGSIZE;                 
 70                                                   
 71         genl_dump_check_consistent(cb, hdr);      
 72                                                   
 73         if (nla_put_u32(msg, NFC_ATTR_TARGET_I    
 74             nla_put_u32(msg, NFC_ATTR_PROTOCOL    
 75             nla_put_u16(msg, NFC_ATTR_TARGET_S    
 76             nla_put_u8(msg, NFC_ATTR_TARGET_SE    
 77                 goto nla_put_failure;             
 78         if (target->nfcid1_len > 0 &&             
 79             nla_put(msg, NFC_ATTR_TARGET_NFCID    
 80                     target->nfcid1))              
 81                 goto nla_put_failure;             
 82         if (target->sensb_res_len > 0 &&          
 83             nla_put(msg, NFC_ATTR_TARGET_SENSB    
 84                     target->sensb_res))           
 85                 goto nla_put_failure;             
 86         if (target->sensf_res_len > 0 &&          
 87             nla_put(msg, NFC_ATTR_TARGET_SENSF    
 88                     target->sensf_res))           
 89                 goto nla_put_failure;             
 90                                                   
 91         if (target->is_iso15693) {                
 92                 if (nla_put_u8(msg, NFC_ATTR_T    
 93                                target->iso1569    
 94                     nla_put(msg, NFC_ATTR_TARG    
 95                             sizeof(target->iso    
 96                         goto nla_put_failure;     
 97         }                                         
 98                                                   
 99         genlmsg_end(msg, hdr);                    
100         return 0;                                 
101                                                   
102 nla_put_failure:                                  
103         genlmsg_cancel(msg, hdr);                 
104         return -EMSGSIZE;                         
105 }                                                 
106                                                   
107 static struct nfc_dev *__get_device_from_cb(st    
108 {                                                 
109         const struct genl_dumpit_info *info =     
110         struct nfc_dev *dev;                      
111         u32 idx;                                  
112                                                   
113         if (!info->info.attrs[NFC_ATTR_DEVICE_    
114                 return ERR_PTR(-EINVAL);          
115                                                   
116         idx = nla_get_u32(info->info.attrs[NFC    
117                                                   
118         dev = nfc_get_device(idx);                
119         if (!dev)                                 
120                 return ERR_PTR(-ENODEV);          
121                                                   
122         return dev;                               
123 }                                                 
124                                                   
125 static int nfc_genl_dump_targets(struct sk_buf    
126                                  struct netlin    
127 {                                                 
128         int i = cb->args[0];                      
129         struct nfc_dev *dev = (struct nfc_dev     
130         int rc;                                   
131                                                   
132         if (!dev) {                               
133                 dev = __get_device_from_cb(cb)    
134                 if (IS_ERR(dev))                  
135                         return PTR_ERR(dev);      
136                                                   
137                 cb->args[1] = (long) dev;         
138         }                                         
139                                                   
140         device_lock(&dev->dev);                   
141                                                   
142         cb->seq = dev->targets_generation;        
143                                                   
144         while (i < dev->n_targets) {              
145                 rc = nfc_genl_send_target(skb,    
146                                           NLM_    
147                 if (rc < 0)                       
148                         break;                    
149                                                   
150                 i++;                              
151         }                                         
152                                                   
153         device_unlock(&dev->dev);                 
154                                                   
155         cb->args[0] = i;                          
156                                                   
157         return skb->len;                          
158 }                                                 
159                                                   
160 static int nfc_genl_dump_targets_done(struct n    
161 {                                                 
162         struct nfc_dev *dev = (struct nfc_dev     
163                                                   
164         if (dev)                                  
165                 nfc_put_device(dev);              
166                                                   
167         return 0;                                 
168 }                                                 
169                                                   
170 int nfc_genl_targets_found(struct nfc_dev *dev    
171 {                                                 
172         struct sk_buff *msg;                      
173         void *hdr;                                
174                                                   
175         dev->genl_data.poll_req_portid = 0;       
176                                                   
177         msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GF    
178         if (!msg)                                 
179                 return -ENOMEM;                   
180                                                   
181         hdr = genlmsg_put(msg, 0, 0, &nfc_genl    
182                           NFC_EVENT_TARGETS_FO    
183         if (!hdr)                                 
184                 goto free_msg;                    
185                                                   
186         if (nla_put_u32(msg, NFC_ATTR_DEVICE_I    
187                 goto nla_put_failure;             
188                                                   
189         genlmsg_end(msg, hdr);                    
190                                                   
191         return genlmsg_multicast(&nfc_genl_fam    
192                                                   
193 nla_put_failure:                                  
194 free_msg:                                         
195         nlmsg_free(msg);                          
196         return -EMSGSIZE;                         
197 }                                                 
198                                                   
199 int nfc_genl_target_lost(struct nfc_dev *dev,     
200 {                                                 
201         struct sk_buff *msg;                      
202         void *hdr;                                
203                                                   
204         msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GF    
205         if (!msg)                                 
206                 return -ENOMEM;                   
207                                                   
208         hdr = genlmsg_put(msg, 0, 0, &nfc_genl    
209                           NFC_EVENT_TARGET_LOS    
210         if (!hdr)                                 
211                 goto free_msg;                    
212                                                   
213         if (nla_put_string(msg, NFC_ATTR_DEVIC    
214             nla_put_u32(msg, NFC_ATTR_TARGET_I    
215                 goto nla_put_failure;             
216                                                   
217         genlmsg_end(msg, hdr);                    
218                                                   
219         genlmsg_multicast(&nfc_genl_family, ms    
220                                                   
221         return 0;                                 
222                                                   
223 nla_put_failure:                                  
224 free_msg:                                         
225         nlmsg_free(msg);                          
226         return -EMSGSIZE;                         
227 }                                                 
228                                                   
229 int nfc_genl_tm_activated(struct nfc_dev *dev,    
230 {                                                 
231         struct sk_buff *msg;                      
232         void *hdr;                                
233                                                   
234         msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GF    
235         if (!msg)                                 
236                 return -ENOMEM;                   
237                                                   
238         hdr = genlmsg_put(msg, 0, 0, &nfc_genl    
239                           NFC_EVENT_TM_ACTIVAT    
240         if (!hdr)                                 
241                 goto free_msg;                    
242                                                   
243         if (nla_put_u32(msg, NFC_ATTR_DEVICE_I    
244                 goto nla_put_failure;             
245         if (nla_put_u32(msg, NFC_ATTR_TM_PROTO    
246                 goto nla_put_failure;             
247                                                   
248         genlmsg_end(msg, hdr);                    
249                                                   
250         genlmsg_multicast(&nfc_genl_family, ms    
251                                                   
252         return 0;                                 
253                                                   
254 nla_put_failure:                                  
255 free_msg:                                         
256         nlmsg_free(msg);                          
257         return -EMSGSIZE;                         
258 }                                                 
259                                                   
260 int nfc_genl_tm_deactivated(struct nfc_dev *de    
261 {                                                 
262         struct sk_buff *msg;                      
263         void *hdr;                                
264                                                   
265         msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GF    
266         if (!msg)                                 
267                 return -ENOMEM;                   
268                                                   
269         hdr = genlmsg_put(msg, 0, 0, &nfc_genl    
270                           NFC_EVENT_TM_DEACTIV    
271         if (!hdr)                                 
272                 goto free_msg;                    
273                                                   
274         if (nla_put_u32(msg, NFC_ATTR_DEVICE_I    
275                 goto nla_put_failure;             
276                                                   
277         genlmsg_end(msg, hdr);                    
278                                                   
279         genlmsg_multicast(&nfc_genl_family, ms    
280                                                   
281         return 0;                                 
282                                                   
283 nla_put_failure:                                  
284 free_msg:                                         
285         nlmsg_free(msg);                          
286         return -EMSGSIZE;                         
287 }                                                 
288                                                   
289 static int nfc_genl_setup_device_added(struct     
290 {                                                 
291         if (nla_put_string(msg, NFC_ATTR_DEVIC    
292             nla_put_u32(msg, NFC_ATTR_DEVICE_I    
293             nla_put_u32(msg, NFC_ATTR_PROTOCOL    
294             nla_put_u8(msg, NFC_ATTR_DEVICE_PO    
295             nla_put_u8(msg, NFC_ATTR_RF_MODE,     
296                 return -1;                        
297         return 0;                                 
298 }                                                 
299                                                   
300 int nfc_genl_device_added(struct nfc_dev *dev)    
301 {                                                 
302         struct sk_buff *msg;                      
303         void *hdr;                                
304                                                   
305         msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GF    
306         if (!msg)                                 
307                 return -ENOMEM;                   
308                                                   
309         hdr = genlmsg_put(msg, 0, 0, &nfc_genl    
310                           NFC_EVENT_DEVICE_ADD    
311         if (!hdr)                                 
312                 goto free_msg;                    
313                                                   
314         if (nfc_genl_setup_device_added(dev, m    
315                 goto nla_put_failure;             
316                                                   
317         genlmsg_end(msg, hdr);                    
318                                                   
319         genlmsg_multicast(&nfc_genl_family, ms    
320                                                   
321         return 0;                                 
322                                                   
323 nla_put_failure:                                  
324 free_msg:                                         
325         nlmsg_free(msg);                          
326         return -EMSGSIZE;                         
327 }                                                 
328                                                   
329 int nfc_genl_device_removed(struct nfc_dev *de    
330 {                                                 
331         struct sk_buff *msg;                      
332         void *hdr;                                
333                                                   
334         msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GF    
335         if (!msg)                                 
336                 return -ENOMEM;                   
337                                                   
338         hdr = genlmsg_put(msg, 0, 0, &nfc_genl    
339                           NFC_EVENT_DEVICE_REM    
340         if (!hdr)                                 
341                 goto free_msg;                    
342                                                   
343         if (nla_put_u32(msg, NFC_ATTR_DEVICE_I    
344                 goto nla_put_failure;             
345                                                   
346         genlmsg_end(msg, hdr);                    
347                                                   
348         genlmsg_multicast(&nfc_genl_family, ms    
349                                                   
350         return 0;                                 
351                                                   
352 nla_put_failure:                                  
353 free_msg:                                         
354         nlmsg_free(msg);                          
355         return -EMSGSIZE;                         
356 }                                                 
357                                                   
358 int nfc_genl_llc_send_sdres(struct nfc_dev *de    
359 {                                                 
360         struct sk_buff *msg;                      
361         struct nlattr *sdp_attr, *uri_attr;       
362         struct nfc_llcp_sdp_tlv *sdres;           
363         struct hlist_node *n;                     
364         void *hdr;                                
365         int rc = -EMSGSIZE;                       
366         int i;                                    
367                                                   
368         msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GF    
369         if (!msg)                                 
370                 return -ENOMEM;                   
371                                                   
372         hdr = genlmsg_put(msg, 0, 0, &nfc_genl    
373                           NFC_EVENT_LLC_SDRES)    
374         if (!hdr)                                 
375                 goto free_msg;                    
376                                                   
377         if (nla_put_u32(msg, NFC_ATTR_DEVICE_I    
378                 goto nla_put_failure;             
379                                                   
380         sdp_attr = nla_nest_start_noflag(msg,     
381         if (sdp_attr == NULL) {                   
382                 rc = -ENOMEM;                     
383                 goto nla_put_failure;             
384         }                                         
385                                                   
386         i = 1;                                    
387         hlist_for_each_entry_safe(sdres, n, sd    
388                 pr_debug("uri: %s, sap: %d\n",    
389                                                   
390                 uri_attr = nla_nest_start_nofl    
391                 if (uri_attr == NULL) {           
392                         rc = -ENOMEM;             
393                         goto nla_put_failure;     
394                 }                                 
395                                                   
396                 if (nla_put_u8(msg, NFC_SDP_AT    
397                         goto nla_put_failure;     
398                                                   
399                 if (nla_put_string(msg, NFC_SD    
400                         goto nla_put_failure;     
401                                                   
402                 nla_nest_end(msg, uri_attr);      
403                                                   
404                 hlist_del(&sdres->node);          
405                                                   
406                 nfc_llcp_free_sdp_tlv(sdres);     
407         }                                         
408                                                   
409         nla_nest_end(msg, sdp_attr);              
410                                                   
411         genlmsg_end(msg, hdr);                    
412                                                   
413         return genlmsg_multicast(&nfc_genl_fam    
414                                                   
415 nla_put_failure:                                  
416 free_msg:                                         
417         nlmsg_free(msg);                          
418                                                   
419         nfc_llcp_free_sdp_tlv_list(sdres_list)    
420                                                   
421         return rc;                                
422 }                                                 
423                                                   
424 int nfc_genl_se_added(struct nfc_dev *dev, u32    
425 {                                                 
426         struct sk_buff *msg;                      
427         void *hdr;                                
428                                                   
429         msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GF    
430         if (!msg)                                 
431                 return -ENOMEM;                   
432                                                   
433         hdr = genlmsg_put(msg, 0, 0, &nfc_genl    
434                           NFC_EVENT_SE_ADDED);    
435         if (!hdr)                                 
436                 goto free_msg;                    
437                                                   
438         if (nla_put_u32(msg, NFC_ATTR_DEVICE_I    
439             nla_put_u32(msg, NFC_ATTR_SE_INDEX    
440             nla_put_u8(msg, NFC_ATTR_SE_TYPE,     
441                 goto nla_put_failure;             
442                                                   
443         genlmsg_end(msg, hdr);                    
444                                                   
445         genlmsg_multicast(&nfc_genl_family, ms    
446                                                   
447         return 0;                                 
448                                                   
449 nla_put_failure:                                  
450 free_msg:                                         
451         nlmsg_free(msg);                          
452         return -EMSGSIZE;                         
453 }                                                 
454                                                   
455 int nfc_genl_se_removed(struct nfc_dev *dev, u    
456 {                                                 
457         struct sk_buff *msg;                      
458         void *hdr;                                
459                                                   
460         msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GF    
461         if (!msg)                                 
462                 return -ENOMEM;                   
463                                                   
464         hdr = genlmsg_put(msg, 0, 0, &nfc_genl    
465                           NFC_EVENT_SE_REMOVED    
466         if (!hdr)                                 
467                 goto free_msg;                    
468                                                   
469         if (nla_put_u32(msg, NFC_ATTR_DEVICE_I    
470             nla_put_u32(msg, NFC_ATTR_SE_INDEX    
471                 goto nla_put_failure;             
472                                                   
473         genlmsg_end(msg, hdr);                    
474                                                   
475         genlmsg_multicast(&nfc_genl_family, ms    
476                                                   
477         return 0;                                 
478                                                   
479 nla_put_failure:                                  
480 free_msg:                                         
481         nlmsg_free(msg);                          
482         return -EMSGSIZE;                         
483 }                                                 
484                                                   
485 int nfc_genl_se_transaction(struct nfc_dev *de    
486                             struct nfc_evt_tra    
487 {                                                 
488         struct nfc_se *se;                        
489         struct sk_buff *msg;                      
490         void *hdr;                                
491                                                   
492         msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GF    
493         if (!msg)                                 
494                 return -ENOMEM;                   
495                                                   
496         hdr = genlmsg_put(msg, 0, 0, &nfc_genl    
497                           NFC_EVENT_SE_TRANSAC    
498         if (!hdr)                                 
499                 goto free_msg;                    
500                                                   
501         se = nfc_find_se(dev, se_idx);            
502         if (!se)                                  
503                 goto free_msg;                    
504                                                   
505         if (nla_put_u32(msg, NFC_ATTR_DEVICE_I    
506             nla_put_u32(msg, NFC_ATTR_SE_INDEX    
507             nla_put_u8(msg, NFC_ATTR_SE_TYPE,     
508             nla_put(msg, NFC_ATTR_SE_AID, evt_    
509                     evt_transaction->aid) ||      
510             nla_put(msg, NFC_ATTR_SE_PARAMS, e    
511                     evt_transaction->params))     
512                 goto nla_put_failure;             
513                                                   
514         /* evt_transaction is no more used */     
515         devm_kfree(&dev->dev, evt_transaction)    
516                                                   
517         genlmsg_end(msg, hdr);                    
518                                                   
519         genlmsg_multicast(&nfc_genl_family, ms    
520                                                   
521         return 0;                                 
522                                                   
523 nla_put_failure:                                  
524 free_msg:                                         
525         /* evt_transaction is no more used */     
526         devm_kfree(&dev->dev, evt_transaction)    
527         nlmsg_free(msg);                          
528         return -EMSGSIZE;                         
529 }                                                 
530                                                   
531 int nfc_genl_se_connectivity(struct nfc_dev *d    
532 {                                                 
533         const struct nfc_se *se;                  
534         struct sk_buff *msg;                      
535         void *hdr;                                
536                                                   
537         msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GF    
538         if (!msg)                                 
539                 return -ENOMEM;                   
540                                                   
541         hdr = genlmsg_put(msg, 0, 0, &nfc_genl    
542                           NFC_EVENT_SE_CONNECT    
543         if (!hdr)                                 
544                 goto free_msg;                    
545                                                   
546         se = nfc_find_se(dev, se_idx);            
547         if (!se)                                  
548                 goto free_msg;                    
549                                                   
550         if (nla_put_u32(msg, NFC_ATTR_DEVICE_I    
551             nla_put_u32(msg, NFC_ATTR_SE_INDEX    
552             nla_put_u8(msg, NFC_ATTR_SE_TYPE,     
553                 goto nla_put_failure;             
554                                                   
555         genlmsg_end(msg, hdr);                    
556                                                   
557         genlmsg_multicast(&nfc_genl_family, ms    
558                                                   
559         return 0;                                 
560                                                   
561 nla_put_failure:                                  
562 free_msg:                                         
563         nlmsg_free(msg);                          
564         return -EMSGSIZE;                         
565 }                                                 
566                                                   
567 static int nfc_genl_send_device(struct sk_buff    
568                                 u32 portid, u3    
569                                 struct netlink    
570                                 int flags)        
571 {                                                 
572         void *hdr;                                
573                                                   
574         hdr = genlmsg_put(msg, portid, seq, &n    
575                           NFC_CMD_GET_DEVICE);    
576         if (!hdr)                                 
577                 return -EMSGSIZE;                 
578                                                   
579         if (cb)                                   
580                 genl_dump_check_consistent(cb,    
581                                                   
582         if (nfc_genl_setup_device_added(dev, m    
583                 goto nla_put_failure;             
584                                                   
585         genlmsg_end(msg, hdr);                    
586         return 0;                                 
587                                                   
588 nla_put_failure:                                  
589         genlmsg_cancel(msg, hdr);                 
590         return -EMSGSIZE;                         
591 }                                                 
592                                                   
593 static int nfc_genl_dump_devices(struct sk_buf    
594                                  struct netlin    
595 {                                                 
596         struct class_dev_iter *iter = (struct     
597         struct nfc_dev *dev = (struct nfc_dev     
598         bool first_call = false;                  
599                                                   
600         if (!iter) {                              
601                 first_call = true;                
602                 iter = kmalloc(sizeof(struct c    
603                 if (!iter)                        
604                         return -ENOMEM;           
605                 cb->args[0] = (long) iter;        
606         }                                         
607                                                   
608         mutex_lock(&nfc_devlist_mutex);           
609                                                   
610         cb->seq = nfc_devlist_generation;         
611                                                   
612         if (first_call) {                         
613                 nfc_device_iter_init(iter);       
614                 dev = nfc_device_iter_next(ite    
615         }                                         
616                                                   
617         while (dev) {                             
618                 int rc;                           
619                                                   
620                 rc = nfc_genl_send_device(skb,    
621                                           cb->    
622                 if (rc < 0)                       
623                         break;                    
624                                                   
625                 dev = nfc_device_iter_next(ite    
626         }                                         
627                                                   
628         mutex_unlock(&nfc_devlist_mutex);         
629                                                   
630         cb->args[1] = (long) dev;                 
631                                                   
632         return skb->len;                          
633 }                                                 
634                                                   
635 static int nfc_genl_dump_devices_done(struct n    
636 {                                                 
637         struct class_dev_iter *iter = (struct     
638                                                   
639         if (iter) {                               
640                 nfc_device_iter_exit(iter);       
641                 kfree(iter);                      
642         }                                         
643                                                   
644         return 0;                                 
645 }                                                 
646                                                   
647 int nfc_genl_dep_link_up_event(struct nfc_dev     
648                                u8 comm_mode, u    
649 {                                                 
650         struct sk_buff *msg;                      
651         void *hdr;                                
652                                                   
653         pr_debug("DEP link is up\n");             
654                                                   
655         msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GF    
656         if (!msg)                                 
657                 return -ENOMEM;                   
658                                                   
659         hdr = genlmsg_put(msg, 0, 0, &nfc_genl    
660         if (!hdr)                                 
661                 goto free_msg;                    
662                                                   
663         if (nla_put_u32(msg, NFC_ATTR_DEVICE_I    
664                 goto nla_put_failure;             
665         if (rf_mode == NFC_RF_INITIATOR &&        
666             nla_put_u32(msg, NFC_ATTR_TARGET_I    
667                 goto nla_put_failure;             
668         if (nla_put_u8(msg, NFC_ATTR_COMM_MODE    
669             nla_put_u8(msg, NFC_ATTR_RF_MODE,     
670                 goto nla_put_failure;             
671                                                   
672         genlmsg_end(msg, hdr);                    
673                                                   
674         dev->dep_link_up = true;                  
675                                                   
676         genlmsg_multicast(&nfc_genl_family, ms    
677                                                   
678         return 0;                                 
679                                                   
680 nla_put_failure:                                  
681 free_msg:                                         
682         nlmsg_free(msg);                          
683         return -EMSGSIZE;                         
684 }                                                 
685                                                   
686 int nfc_genl_dep_link_down_event(struct nfc_de    
687 {                                                 
688         struct sk_buff *msg;                      
689         void *hdr;                                
690                                                   
691         pr_debug("DEP link is down\n");           
692                                                   
693         msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GF    
694         if (!msg)                                 
695                 return -ENOMEM;                   
696                                                   
697         hdr = genlmsg_put(msg, 0, 0, &nfc_genl    
698                           NFC_CMD_DEP_LINK_DOW    
699         if (!hdr)                                 
700                 goto free_msg;                    
701                                                   
702         if (nla_put_u32(msg, NFC_ATTR_DEVICE_I    
703                 goto nla_put_failure;             
704                                                   
705         genlmsg_end(msg, hdr);                    
706                                                   
707         genlmsg_multicast(&nfc_genl_family, ms    
708                                                   
709         return 0;                                 
710                                                   
711 nla_put_failure:                                  
712 free_msg:                                         
713         nlmsg_free(msg);                          
714         return -EMSGSIZE;                         
715 }                                                 
716                                                   
717 static int nfc_genl_get_device(struct sk_buff     
718 {                                                 
719         struct sk_buff *msg;                      
720         struct nfc_dev *dev;                      
721         u32 idx;                                  
722         int rc = -ENOBUFS;                        
723                                                   
724         if (!info->attrs[NFC_ATTR_DEVICE_INDEX    
725                 return -EINVAL;                   
726                                                   
727         idx = nla_get_u32(info->attrs[NFC_ATTR    
728                                                   
729         dev = nfc_get_device(idx);                
730         if (!dev)                                 
731                 return -ENODEV;                   
732                                                   
733         msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GF    
734         if (!msg) {                               
735                 rc = -ENOMEM;                     
736                 goto out_putdev;                  
737         }                                         
738                                                   
739         rc = nfc_genl_send_device(msg, dev, in    
740                                   NULL, 0);       
741         if (rc < 0)                               
742                 goto out_free;                    
743                                                   
744         nfc_put_device(dev);                      
745                                                   
746         return genlmsg_reply(msg, info);          
747                                                   
748 out_free:                                         
749         nlmsg_free(msg);                          
750 out_putdev:                                       
751         nfc_put_device(dev);                      
752         return rc;                                
753 }                                                 
754                                                   
755 static int nfc_genl_dev_up(struct sk_buff *skb    
756 {                                                 
757         struct nfc_dev *dev;                      
758         int rc;                                   
759         u32 idx;                                  
760                                                   
761         if (!info->attrs[NFC_ATTR_DEVICE_INDEX    
762                 return -EINVAL;                   
763                                                   
764         idx = nla_get_u32(info->attrs[NFC_ATTR    
765                                                   
766         dev = nfc_get_device(idx);                
767         if (!dev)                                 
768                 return -ENODEV;                   
769                                                   
770         rc = nfc_dev_up(dev);                     
771                                                   
772         nfc_put_device(dev);                      
773         return rc;                                
774 }                                                 
775                                                   
776 static int nfc_genl_dev_down(struct sk_buff *s    
777 {                                                 
778         struct nfc_dev *dev;                      
779         int rc;                                   
780         u32 idx;                                  
781                                                   
782         if (!info->attrs[NFC_ATTR_DEVICE_INDEX    
783                 return -EINVAL;                   
784                                                   
785         idx = nla_get_u32(info->attrs[NFC_ATTR    
786                                                   
787         dev = nfc_get_device(idx);                
788         if (!dev)                                 
789                 return -ENODEV;                   
790                                                   
791         rc = nfc_dev_down(dev);                   
792                                                   
793         nfc_put_device(dev);                      
794         return rc;                                
795 }                                                 
796                                                   
797 static int nfc_genl_start_poll(struct sk_buff     
798 {                                                 
799         struct nfc_dev *dev;                      
800         int rc;                                   
801         u32 idx;                                  
802         u32 im_protocols = 0, tm_protocols = 0    
803                                                   
804         pr_debug("Poll start\n");                 
805                                                   
806         if (!info->attrs[NFC_ATTR_DEVICE_INDEX    
807             ((!info->attrs[NFC_ATTR_IM_PROTOCO    
808               !info->attrs[NFC_ATTR_PROTOCOLS]    
809               !info->attrs[NFC_ATTR_TM_PROTOCO    
810                 return -EINVAL;                   
811                                                   
812         idx = nla_get_u32(info->attrs[NFC_ATTR    
813                                                   
814         if (info->attrs[NFC_ATTR_TM_PROTOCOLS]    
815                 tm_protocols = nla_get_u32(inf    
816                                                   
817         if (info->attrs[NFC_ATTR_IM_PROTOCOLS]    
818                 im_protocols = nla_get_u32(inf    
819         else if (info->attrs[NFC_ATTR_PROTOCOL    
820                 im_protocols = nla_get_u32(inf    
821                                                   
822         dev = nfc_get_device(idx);                
823         if (!dev)                                 
824                 return -ENODEV;                   
825                                                   
826         mutex_lock(&dev->genl_data.genl_data_m    
827                                                   
828         rc = nfc_start_poll(dev, im_protocols,    
829         if (!rc)                                  
830                 dev->genl_data.poll_req_portid    
831                                                   
832         mutex_unlock(&dev->genl_data.genl_data    
833                                                   
834         nfc_put_device(dev);                      
835         return rc;                                
836 }                                                 
837                                                   
838 static int nfc_genl_stop_poll(struct sk_buff *    
839 {                                                 
840         struct nfc_dev *dev;                      
841         int rc;                                   
842         u32 idx;                                  
843                                                   
844         if (!info->attrs[NFC_ATTR_DEVICE_INDEX    
845                 return -EINVAL;                   
846                                                   
847         idx = nla_get_u32(info->attrs[NFC_ATTR    
848                                                   
849         dev = nfc_get_device(idx);                
850         if (!dev)                                 
851                 return -ENODEV;                   
852                                                   
853         device_lock(&dev->dev);                   
854                                                   
855         if (!dev->polling) {                      
856                 device_unlock(&dev->dev);         
857                 nfc_put_device(dev);              
858                 return -EINVAL;                   
859         }                                         
860                                                   
861         device_unlock(&dev->dev);                 
862                                                   
863         mutex_lock(&dev->genl_data.genl_data_m    
864                                                   
865         if (dev->genl_data.poll_req_portid !=     
866                 rc = -EBUSY;                      
867                 goto out;                         
868         }                                         
869                                                   
870         rc = nfc_stop_poll(dev);                  
871         dev->genl_data.poll_req_portid = 0;       
872                                                   
873 out:                                              
874         mutex_unlock(&dev->genl_data.genl_data    
875         nfc_put_device(dev);                      
876         return rc;                                
877 }                                                 
878                                                   
879 static int nfc_genl_activate_target(struct sk_    
880 {                                                 
881         struct nfc_dev *dev;                      
882         u32 device_idx, target_idx, protocol;     
883         int rc;                                   
884                                                   
885         if (!info->attrs[NFC_ATTR_DEVICE_INDEX    
886             !info->attrs[NFC_ATTR_TARGET_INDEX    
887             !info->attrs[NFC_ATTR_PROTOCOLS])     
888                 return -EINVAL;                   
889                                                   
890         device_idx = nla_get_u32(info->attrs[N    
891                                                   
892         dev = nfc_get_device(device_idx);         
893         if (!dev)                                 
894                 return -ENODEV;                   
895                                                   
896         target_idx = nla_get_u32(info->attrs[N    
897         protocol = nla_get_u32(info->attrs[NFC    
898                                                   
899         nfc_deactivate_target(dev, target_idx,    
900         rc = nfc_activate_target(dev, target_i    
901                                                   
902         nfc_put_device(dev);                      
903         return rc;                                
904 }                                                 
905                                                   
906 static int nfc_genl_deactivate_target(struct s    
907                                       struct g    
908 {                                                 
909         struct nfc_dev *dev;                      
910         u32 device_idx, target_idx;               
911         int rc;                                   
912                                                   
913         if (!info->attrs[NFC_ATTR_DEVICE_INDEX    
914             !info->attrs[NFC_ATTR_TARGET_INDEX    
915                 return -EINVAL;                   
916                                                   
917         device_idx = nla_get_u32(info->attrs[N    
918                                                   
919         dev = nfc_get_device(device_idx);         
920         if (!dev)                                 
921                 return -ENODEV;                   
922                                                   
923         target_idx = nla_get_u32(info->attrs[N    
924                                                   
925         rc = nfc_deactivate_target(dev, target    
926                                                   
927         nfc_put_device(dev);                      
928         return rc;                                
929 }                                                 
930                                                   
931 static int nfc_genl_dep_link_up(struct sk_buff    
932 {                                                 
933         struct nfc_dev *dev;                      
934         int rc, tgt_idx;                          
935         u32 idx;                                  
936         u8 comm;                                  
937                                                   
938         pr_debug("DEP link up\n");                
939                                                   
940         if (!info->attrs[NFC_ATTR_DEVICE_INDEX    
941             !info->attrs[NFC_ATTR_COMM_MODE])     
942                 return -EINVAL;                   
943                                                   
944         idx = nla_get_u32(info->attrs[NFC_ATTR    
945         if (!info->attrs[NFC_ATTR_TARGET_INDEX    
946                 tgt_idx = NFC_TARGET_IDX_ANY;     
947         else                                      
948                 tgt_idx = nla_get_u32(info->at    
949                                                   
950         comm = nla_get_u8(info->attrs[NFC_ATTR    
951                                                   
952         if (comm != NFC_COMM_ACTIVE && comm !=    
953                 return -EINVAL;                   
954                                                   
955         dev = nfc_get_device(idx);                
956         if (!dev)                                 
957                 return -ENODEV;                   
958                                                   
959         rc = nfc_dep_link_up(dev, tgt_idx, com    
960                                                   
961         nfc_put_device(dev);                      
962                                                   
963         return rc;                                
964 }                                                 
965                                                   
966 static int nfc_genl_dep_link_down(struct sk_bu    
967 {                                                 
968         struct nfc_dev *dev;                      
969         int rc;                                   
970         u32 idx;                                  
971                                                   
972         if (!info->attrs[NFC_ATTR_DEVICE_INDEX    
973                 return -EINVAL;                   
974                                                   
975         idx = nla_get_u32(info->attrs[NFC_ATTR    
976                                                   
977         dev = nfc_get_device(idx);                
978         if (!dev)                                 
979                 return -ENODEV;                   
980                                                   
981         rc = nfc_dep_link_down(dev);              
982                                                   
983         nfc_put_device(dev);                      
984         return rc;                                
985 }                                                 
986                                                   
987 static int nfc_genl_send_params(struct sk_buff    
988                                 struct nfc_llc    
989                                 u32 portid, u3    
990 {                                                 
991         void *hdr;                                
992                                                   
993         hdr = genlmsg_put(msg, portid, seq, &n    
994                           NFC_CMD_LLC_GET_PARA    
995         if (!hdr)                                 
996                 return -EMSGSIZE;                 
997                                                   
998         if (nla_put_u32(msg, NFC_ATTR_DEVICE_I    
999             nla_put_u8(msg, NFC_ATTR_LLC_PARAM    
1000             nla_put_u8(msg, NFC_ATTR_LLC_PARA    
1001             nla_put_u16(msg, NFC_ATTR_LLC_PAR    
1002                 goto nla_put_failure;            
1003                                                  
1004         genlmsg_end(msg, hdr);                   
1005         return 0;                                
1006                                                  
1007 nla_put_failure:                                 
1008         genlmsg_cancel(msg, hdr);                
1009         return -EMSGSIZE;                        
1010 }                                                
1011                                                  
1012 static int nfc_genl_llc_get_params(struct sk_    
1013 {                                                
1014         struct nfc_dev *dev;                     
1015         struct nfc_llcp_local *local;            
1016         int rc = 0;                              
1017         struct sk_buff *msg = NULL;              
1018         u32 idx;                                 
1019                                                  
1020         if (!info->attrs[NFC_ATTR_DEVICE_INDE    
1021                 return -EINVAL;                  
1022                                                  
1023         idx = nla_get_u32(info->attrs[NFC_ATT    
1024                                                  
1025         dev = nfc_get_device(idx);               
1026         if (!dev)                                
1027                 return -ENODEV;                  
1028                                                  
1029         device_lock(&dev->dev);                  
1030                                                  
1031         local = nfc_llcp_find_local(dev);        
1032         if (!local) {                            
1033                 rc = -ENODEV;                    
1034                 goto exit;                       
1035         }                                        
1036                                                  
1037         msg = nlmsg_new(NLMSG_DEFAULT_SIZE, G    
1038         if (!msg) {                              
1039                 rc = -ENOMEM;                    
1040                 goto put_local;                  
1041         }                                        
1042                                                  
1043         rc = nfc_genl_send_params(msg, local,    
1044                                                  
1045 put_local:                                       
1046         nfc_llcp_local_put(local);               
1047                                                  
1048 exit:                                            
1049         device_unlock(&dev->dev);                
1050                                                  
1051         nfc_put_device(dev);                     
1052                                                  
1053         if (rc < 0) {                            
1054                 if (msg)                         
1055                         nlmsg_free(msg);         
1056                                                  
1057                 return rc;                       
1058         }                                        
1059                                                  
1060         return genlmsg_reply(msg, info);         
1061 }                                                
1062                                                  
1063 static int nfc_genl_llc_set_params(struct sk_    
1064 {                                                
1065         struct nfc_dev *dev;                     
1066         struct nfc_llcp_local *local;            
1067         u8 rw = 0;                               
1068         u16 miux = 0;                            
1069         u32 idx;                                 
1070         int rc = 0;                              
1071                                                  
1072         if (!info->attrs[NFC_ATTR_DEVICE_INDE    
1073             (!info->attrs[NFC_ATTR_LLC_PARAM_    
1074              !info->attrs[NFC_ATTR_LLC_PARAM_    
1075              !info->attrs[NFC_ATTR_LLC_PARAM_    
1076                 return -EINVAL;                  
1077                                                  
1078         if (info->attrs[NFC_ATTR_LLC_PARAM_RW    
1079                 rw = nla_get_u8(info->attrs[N    
1080                                                  
1081                 if (rw > LLCP_MAX_RW)            
1082                         return -EINVAL;          
1083         }                                        
1084                                                  
1085         if (info->attrs[NFC_ATTR_LLC_PARAM_MI    
1086                 miux = nla_get_u16(info->attr    
1087                                                  
1088                 if (miux > LLCP_MAX_MIUX)        
1089                         return -EINVAL;          
1090         }                                        
1091                                                  
1092         idx = nla_get_u32(info->attrs[NFC_ATT    
1093                                                  
1094         dev = nfc_get_device(idx);               
1095         if (!dev)                                
1096                 return -ENODEV;                  
1097                                                  
1098         device_lock(&dev->dev);                  
1099                                                  
1100         local = nfc_llcp_find_local(dev);        
1101         if (!local) {                            
1102                 rc = -ENODEV;                    
1103                 goto exit;                       
1104         }                                        
1105                                                  
1106         if (info->attrs[NFC_ATTR_LLC_PARAM_LT    
1107                 if (dev->dep_link_up) {          
1108                         rc = -EINPROGRESS;       
1109                         goto put_local;          
1110                 }                                
1111                                                  
1112                 local->lto = nla_get_u8(info-    
1113         }                                        
1114                                                  
1115         if (info->attrs[NFC_ATTR_LLC_PARAM_RW    
1116                 local->rw = rw;                  
1117                                                  
1118         if (info->attrs[NFC_ATTR_LLC_PARAM_MI    
1119                 local->miux = cpu_to_be16(miu    
1120                                                  
1121 put_local:                                       
1122         nfc_llcp_local_put(local);               
1123                                                  
1124 exit:                                            
1125         device_unlock(&dev->dev);                
1126                                                  
1127         nfc_put_device(dev);                     
1128                                                  
1129         return rc;                               
1130 }                                                
1131                                                  
1132 static int nfc_genl_llc_sdreq(struct sk_buff     
1133 {                                                
1134         struct nfc_dev *dev;                     
1135         struct nfc_llcp_local *local;            
1136         struct nlattr *attr, *sdp_attrs[NFC_S    
1137         u32 idx;                                 
1138         u8 tid;                                  
1139         char *uri;                               
1140         int rc = 0, rem;                         
1141         size_t uri_len, tlvs_len;                
1142         struct hlist_head sdreq_list;            
1143         struct nfc_llcp_sdp_tlv *sdreq;          
1144                                                  
1145         if (!info->attrs[NFC_ATTR_DEVICE_INDE    
1146             !info->attrs[NFC_ATTR_LLC_SDP])      
1147                 return -EINVAL;                  
1148                                                  
1149         idx = nla_get_u32(info->attrs[NFC_ATT    
1150                                                  
1151         dev = nfc_get_device(idx);               
1152         if (!dev)                                
1153                 return -ENODEV;                  
1154                                                  
1155         device_lock(&dev->dev);                  
1156                                                  
1157         if (dev->dep_link_up == false) {         
1158                 rc = -ENOLINK;                   
1159                 goto exit;                       
1160         }                                        
1161                                                  
1162         local = nfc_llcp_find_local(dev);        
1163         if (!local) {                            
1164                 rc = -ENODEV;                    
1165                 goto exit;                       
1166         }                                        
1167                                                  
1168         INIT_HLIST_HEAD(&sdreq_list);            
1169                                                  
1170         tlvs_len = 0;                            
1171                                                  
1172         nla_for_each_nested(attr, info->attrs    
1173                 rc = nla_parse_nested_depreca    
1174                                                  
1175                                                  
1176                                                  
1177                 if (rc != 0) {                   
1178                         rc = -EINVAL;            
1179                         goto put_local;          
1180                 }                                
1181                                                  
1182                 if (!sdp_attrs[NFC_SDP_ATTR_U    
1183                         continue;                
1184                                                  
1185                 uri_len = nla_len(sdp_attrs[N    
1186                 if (uri_len == 0)                
1187                         continue;                
1188                                                  
1189                 uri = nla_data(sdp_attrs[NFC_    
1190                 if (uri == NULL || *uri == 0)    
1191                         continue;                
1192                                                  
1193                 tid = local->sdreq_next_tid++    
1194                                                  
1195                 sdreq = nfc_llcp_build_sdreq_    
1196                 if (sdreq == NULL) {             
1197                         rc = -ENOMEM;            
1198                         goto put_local;          
1199                 }                                
1200                                                  
1201                 tlvs_len += sdreq->tlv_len;      
1202                                                  
1203                 hlist_add_head(&sdreq->node,     
1204         }                                        
1205                                                  
1206         if (hlist_empty(&sdreq_list)) {          
1207                 rc = -EINVAL;                    
1208                 goto put_local;                  
1209         }                                        
1210                                                  
1211         rc = nfc_llcp_send_snl_sdreq(local, &    
1212                                                  
1213 put_local:                                       
1214         nfc_llcp_local_put(local);               
1215                                                  
1216 exit:                                            
1217         device_unlock(&dev->dev);                
1218                                                  
1219         nfc_put_device(dev);                     
1220                                                  
1221         return rc;                               
1222 }                                                
1223                                                  
1224 static int nfc_genl_fw_download(struct sk_buf    
1225 {                                                
1226         struct nfc_dev *dev;                     
1227         int rc;                                  
1228         u32 idx;                                 
1229         char firmware_name[NFC_FIRMWARE_NAME_    
1230                                                  
1231         if (!info->attrs[NFC_ATTR_DEVICE_INDE    
1232                 return -EINVAL;                  
1233                                                  
1234         idx = nla_get_u32(info->attrs[NFC_ATT    
1235                                                  
1236         dev = nfc_get_device(idx);               
1237         if (!dev)                                
1238                 return -ENODEV;                  
1239                                                  
1240         nla_strscpy(firmware_name, info->attr    
1241                     sizeof(firmware_name));      
1242                                                  
1243         rc = nfc_fw_download(dev, firmware_na    
1244                                                  
1245         nfc_put_device(dev);                     
1246         return rc;                               
1247 }                                                
1248                                                  
1249 int nfc_genl_fw_download_done(struct nfc_dev     
1250                               u32 result)        
1251 {                                                
1252         struct sk_buff *msg;                     
1253         void *hdr;                               
1254                                                  
1255         msg = nlmsg_new(NLMSG_DEFAULT_SIZE, G    
1256         if (!msg)                                
1257                 return -ENOMEM;                  
1258                                                  
1259         hdr = genlmsg_put(msg, 0, 0, &nfc_gen    
1260                           NFC_CMD_FW_DOWNLOAD    
1261         if (!hdr)                                
1262                 goto free_msg;                   
1263                                                  
1264         if (nla_put_string(msg, NFC_ATTR_FIRM    
1265             nla_put_u32(msg, NFC_ATTR_FIRMWAR    
1266             nla_put_u32(msg, NFC_ATTR_DEVICE_    
1267                 goto nla_put_failure;            
1268                                                  
1269         genlmsg_end(msg, hdr);                   
1270                                                  
1271         genlmsg_multicast(&nfc_genl_family, m    
1272                                                  
1273         return 0;                                
1274                                                  
1275 nla_put_failure:                                 
1276 free_msg:                                        
1277         nlmsg_free(msg);                         
1278         return -EMSGSIZE;                        
1279 }                                                
1280                                                  
1281 static int nfc_genl_enable_se(struct sk_buff     
1282 {                                                
1283         struct nfc_dev *dev;                     
1284         int rc;                                  
1285         u32 idx, se_idx;                         
1286                                                  
1287         if (!info->attrs[NFC_ATTR_DEVICE_INDE    
1288             !info->attrs[NFC_ATTR_SE_INDEX])     
1289                 return -EINVAL;                  
1290                                                  
1291         idx = nla_get_u32(info->attrs[NFC_ATT    
1292         se_idx = nla_get_u32(info->attrs[NFC_    
1293                                                  
1294         dev = nfc_get_device(idx);               
1295         if (!dev)                                
1296                 return -ENODEV;                  
1297                                                  
1298         rc = nfc_enable_se(dev, se_idx);         
1299                                                  
1300         nfc_put_device(dev);                     
1301         return rc;                               
1302 }                                                
1303                                                  
1304 static int nfc_genl_disable_se(struct sk_buff    
1305 {                                                
1306         struct nfc_dev *dev;                     
1307         int rc;                                  
1308         u32 idx, se_idx;                         
1309                                                  
1310         if (!info->attrs[NFC_ATTR_DEVICE_INDE    
1311             !info->attrs[NFC_ATTR_SE_INDEX])     
1312                 return -EINVAL;                  
1313                                                  
1314         idx = nla_get_u32(info->attrs[NFC_ATT    
1315         se_idx = nla_get_u32(info->attrs[NFC_    
1316                                                  
1317         dev = nfc_get_device(idx);               
1318         if (!dev)                                
1319                 return -ENODEV;                  
1320                                                  
1321         rc = nfc_disable_se(dev, se_idx);        
1322                                                  
1323         nfc_put_device(dev);                     
1324         return rc;                               
1325 }                                                
1326                                                  
1327 static int nfc_genl_send_se(struct sk_buff *m    
1328                                 u32 portid, u    
1329                                 struct netlin    
1330                                 int flags)       
1331 {                                                
1332         void *hdr;                               
1333         struct nfc_se *se, *n;                   
1334                                                  
1335         list_for_each_entry_safe(se, n, &dev-    
1336                 hdr = genlmsg_put(msg, portid    
1337                                   NFC_CMD_GET    
1338                 if (!hdr)                        
1339                         goto nla_put_failure;    
1340                                                  
1341                 if (cb)                          
1342                         genl_dump_check_consi    
1343                                                  
1344                 if (nla_put_u32(msg, NFC_ATTR    
1345                     nla_put_u32(msg, NFC_ATTR    
1346                     nla_put_u8(msg, NFC_ATTR_    
1347                         goto nla_put_failure;    
1348                                                  
1349                 genlmsg_end(msg, hdr);           
1350         }                                        
1351                                                  
1352         return 0;                                
1353                                                  
1354 nla_put_failure:                                 
1355         genlmsg_cancel(msg, hdr);                
1356         return -EMSGSIZE;                        
1357 }                                                
1358                                                  
1359 static int nfc_genl_dump_ses(struct sk_buff *    
1360                                  struct netli    
1361 {                                                
1362         struct class_dev_iter *iter = (struct    
1363         struct nfc_dev *dev = (struct nfc_dev    
1364         bool first_call = false;                 
1365                                                  
1366         if (!iter) {                             
1367                 first_call = true;               
1368                 iter = kmalloc(sizeof(struct     
1369                 if (!iter)                       
1370                         return -ENOMEM;          
1371                 cb->args[0] = (long) iter;       
1372         }                                        
1373                                                  
1374         mutex_lock(&nfc_devlist_mutex);          
1375                                                  
1376         cb->seq = nfc_devlist_generation;        
1377                                                  
1378         if (first_call) {                        
1379                 nfc_device_iter_init(iter);      
1380                 dev = nfc_device_iter_next(it    
1381         }                                        
1382                                                  
1383         while (dev) {                            
1384                 int rc;                          
1385                                                  
1386                 rc = nfc_genl_send_se(skb, de    
1387                                           cb-    
1388                 if (rc < 0)                      
1389                         break;                   
1390                                                  
1391                 dev = nfc_device_iter_next(it    
1392         }                                        
1393                                                  
1394         mutex_unlock(&nfc_devlist_mutex);        
1395                                                  
1396         cb->args[1] = (long) dev;                
1397                                                  
1398         return skb->len;                         
1399 }                                                
1400                                                  
1401 static int nfc_genl_dump_ses_done(struct netl    
1402 {                                                
1403         struct class_dev_iter *iter = (struct    
1404                                                  
1405         if (iter) {                              
1406                 nfc_device_iter_exit(iter);      
1407                 kfree(iter);                     
1408         }                                        
1409                                                  
1410         return 0;                                
1411 }                                                
1412                                                  
1413 static int nfc_se_io(struct nfc_dev *dev, u32    
1414                      u8 *apdu, size_t apdu_le    
1415                      se_io_cb_t cb, void *cb_    
1416 {                                                
1417         struct nfc_se *se;                       
1418         int rc;                                  
1419                                                  
1420         pr_debug("%s se index %d\n", dev_name    
1421                                                  
1422         device_lock(&dev->dev);                  
1423                                                  
1424         if (!device_is_registered(&dev->dev))    
1425                 rc = -ENODEV;                    
1426                 goto error;                      
1427         }                                        
1428                                                  
1429         if (!dev->dev_up) {                      
1430                 rc = -ENODEV;                    
1431                 goto error;                      
1432         }                                        
1433                                                  
1434         if (!dev->ops->se_io) {                  
1435                 rc = -EOPNOTSUPP;                
1436                 goto error;                      
1437         }                                        
1438                                                  
1439         se = nfc_find_se(dev, se_idx);           
1440         if (!se) {                               
1441                 rc = -EINVAL;                    
1442                 goto error;                      
1443         }                                        
1444                                                  
1445         if (se->state != NFC_SE_ENABLED) {       
1446                 rc = -ENODEV;                    
1447                 goto error;                      
1448         }                                        
1449                                                  
1450         rc = dev->ops->se_io(dev, se_idx, apd    
1451                         apdu_length, cb, cb_c    
1452                                                  
1453         device_unlock(&dev->dev);                
1454         return rc;                               
1455                                                  
1456 error:                                           
1457         device_unlock(&dev->dev);                
1458         kfree(cb_context);                       
1459         return rc;                               
1460 }                                                
1461                                                  
1462 struct se_io_ctx {                               
1463         u32 dev_idx;                             
1464         u32 se_idx;                              
1465 };                                               
1466                                                  
1467 static void se_io_cb(void *context, u8 *apdu,    
1468 {                                                
1469         struct se_io_ctx *ctx = context;         
1470         struct sk_buff *msg;                     
1471         void *hdr;                               
1472                                                  
1473         msg = nlmsg_new(NLMSG_DEFAULT_SIZE, G    
1474         if (!msg) {                              
1475                 kfree(ctx);                      
1476                 return;                          
1477         }                                        
1478                                                  
1479         hdr = genlmsg_put(msg, 0, 0, &nfc_gen    
1480                           NFC_CMD_SE_IO);        
1481         if (!hdr)                                
1482                 goto free_msg;                   
1483                                                  
1484         if (nla_put_u32(msg, NFC_ATTR_DEVICE_    
1485             nla_put_u32(msg, NFC_ATTR_SE_INDE    
1486             nla_put(msg, NFC_ATTR_SE_APDU, ap    
1487                 goto nla_put_failure;            
1488                                                  
1489         genlmsg_end(msg, hdr);                   
1490                                                  
1491         genlmsg_multicast(&nfc_genl_family, m    
1492                                                  
1493         kfree(ctx);                              
1494                                                  
1495         return;                                  
1496                                                  
1497 nla_put_failure:                                 
1498 free_msg:                                        
1499         nlmsg_free(msg);                         
1500         kfree(ctx);                              
1501                                                  
1502         return;                                  
1503 }                                                
1504                                                  
1505 static int nfc_genl_se_io(struct sk_buff *skb    
1506 {                                                
1507         struct nfc_dev *dev;                     
1508         struct se_io_ctx *ctx;                   
1509         u32 dev_idx, se_idx;                     
1510         u8 *apdu;                                
1511         size_t apdu_len;                         
1512         int rc;                                  
1513                                                  
1514         if (!info->attrs[NFC_ATTR_DEVICE_INDE    
1515             !info->attrs[NFC_ATTR_SE_INDEX] |    
1516             !info->attrs[NFC_ATTR_SE_APDU])      
1517                 return -EINVAL;                  
1518                                                  
1519         dev_idx = nla_get_u32(info->attrs[NFC    
1520         se_idx = nla_get_u32(info->attrs[NFC_    
1521                                                  
1522         dev = nfc_get_device(dev_idx);           
1523         if (!dev)                                
1524                 return -ENODEV;                  
1525                                                  
1526         if (!dev->ops || !dev->ops->se_io) {     
1527                 rc = -EOPNOTSUPP;                
1528                 goto put_dev;                    
1529         }                                        
1530                                                  
1531         apdu_len = nla_len(info->attrs[NFC_AT    
1532         if (apdu_len == 0) {                     
1533                 rc = -EINVAL;                    
1534                 goto put_dev;                    
1535         }                                        
1536                                                  
1537         apdu = nla_data(info->attrs[NFC_ATTR_    
1538         if (!apdu) {                             
1539                 rc = -EINVAL;                    
1540                 goto put_dev;                    
1541         }                                        
1542                                                  
1543         ctx = kzalloc(sizeof(struct se_io_ctx    
1544         if (!ctx) {                              
1545                 rc = -ENOMEM;                    
1546                 goto put_dev;                    
1547         }                                        
1548                                                  
1549         ctx->dev_idx = dev_idx;                  
1550         ctx->se_idx = se_idx;                    
1551                                                  
1552         rc = nfc_se_io(dev, se_idx, apdu, apd    
1553                                                  
1554 put_dev:                                         
1555         nfc_put_device(dev);                     
1556         return rc;                               
1557 }                                                
1558                                                  
1559 static int nfc_genl_vendor_cmd(struct sk_buff    
1560                                struct genl_in    
1561 {                                                
1562         struct nfc_dev *dev;                     
1563         const struct nfc_vendor_cmd *cmd;        
1564         u32 dev_idx, vid, subcmd;                
1565         u8 *data;                                
1566         size_t data_len;                         
1567         int i, err;                              
1568                                                  
1569         if (!info->attrs[NFC_ATTR_DEVICE_INDE    
1570             !info->attrs[NFC_ATTR_VENDOR_ID]     
1571             !info->attrs[NFC_ATTR_VENDOR_SUBC    
1572                 return -EINVAL;                  
1573                                                  
1574         dev_idx = nla_get_u32(info->attrs[NFC    
1575         vid = nla_get_u32(info->attrs[NFC_ATT    
1576         subcmd = nla_get_u32(info->attrs[NFC_    
1577                                                  
1578         dev = nfc_get_device(dev_idx);           
1579         if (!dev)                                
1580                 return -ENODEV;                  
1581                                                  
1582         if (!dev->vendor_cmds || !dev->n_vend    
1583                 err = -ENODEV;                   
1584                 goto put_dev;                    
1585         }                                        
1586                                                  
1587         if (info->attrs[NFC_ATTR_VENDOR_DATA]    
1588                 data = nla_data(info->attrs[N    
1589                 data_len = nla_len(info->attr    
1590                 if (data_len == 0) {             
1591                         err = -EINVAL;           
1592                         goto put_dev;            
1593                 }                                
1594         } else {                                 
1595                 data = NULL;                     
1596                 data_len = 0;                    
1597         }                                        
1598                                                  
1599         for (i = 0; i < dev->n_vendor_cmds; i    
1600                 cmd = &dev->vendor_cmds[i];      
1601                                                  
1602                 if (cmd->vendor_id != vid ||     
1603                         continue;                
1604                                                  
1605                 dev->cur_cmd_info = info;        
1606                 err = cmd->doit(dev, data, da    
1607                 dev->cur_cmd_info = NULL;        
1608                 goto put_dev;                    
1609         }                                        
1610                                                  
1611         err = -EOPNOTSUPP;                       
1612                                                  
1613 put_dev:                                         
1614         nfc_put_device(dev);                     
1615         return err;                              
1616 }                                                
1617                                                  
1618 /* message building helper */                    
1619 static inline void *nfc_hdr_put(struct sk_buf    
1620                                 int flags, u8    
1621 {                                                
1622         /* since there is no private header j    
1623         return genlmsg_put(skb, portid, seq,     
1624 }                                                
1625                                                  
1626 static struct sk_buff *                          
1627 __nfc_alloc_vendor_cmd_skb(struct nfc_dev *de    
1628                            u32 portid, u32 se    
1629                            enum nfc_attrs att    
1630                            u32 oui, u32 subcm    
1631 {                                                
1632         struct sk_buff *skb;                     
1633         void *hdr;                               
1634                                                  
1635         skb = nlmsg_new(approxlen + 100, gfp)    
1636         if (!skb)                                
1637                 return NULL;                     
1638                                                  
1639         hdr = nfc_hdr_put(skb, portid, seq, 0    
1640         if (!hdr) {                              
1641                 kfree_skb(skb);                  
1642                 return NULL;                     
1643         }                                        
1644                                                  
1645         if (nla_put_u32(skb, NFC_ATTR_DEVICE_    
1646                 goto nla_put_failure;            
1647         if (nla_put_u32(skb, NFC_ATTR_VENDOR_    
1648                 goto nla_put_failure;            
1649         if (nla_put_u32(skb, NFC_ATTR_VENDOR_    
1650                 goto nla_put_failure;            
1651                                                  
1652         ((void **)skb->cb)[0] = dev;             
1653         ((void **)skb->cb)[1] = hdr;             
1654                                                  
1655         return skb;                              
1656                                                  
1657 nla_put_failure:                                 
1658         kfree_skb(skb);                          
1659         return NULL;                             
1660 }                                                
1661                                                  
1662 struct sk_buff *__nfc_alloc_vendor_cmd_reply_    
1663                                                  
1664                                                  
1665                                                  
1666 {                                                
1667         if (WARN_ON(!dev->cur_cmd_info))         
1668                 return NULL;                     
1669                                                  
1670         return __nfc_alloc_vendor_cmd_skb(dev    
1671                                           dev    
1672                                           dev    
1673                                           oui    
1674 }                                                
1675 EXPORT_SYMBOL(__nfc_alloc_vendor_cmd_reply_sk    
1676                                                  
1677 int nfc_vendor_cmd_reply(struct sk_buff *skb)    
1678 {                                                
1679         struct nfc_dev *dev = ((void **)skb->    
1680         void *hdr = ((void **)skb->cb)[1];       
1681                                                  
1682         /* clear CB data for netlink core to     
1683         memset(skb->cb, 0, sizeof(skb->cb));     
1684                                                  
1685         if (WARN_ON(!dev->cur_cmd_info)) {       
1686                 kfree_skb(skb);                  
1687                 return -EINVAL;                  
1688         }                                        
1689                                                  
1690         genlmsg_end(skb, hdr);                   
1691         return genlmsg_reply(skb, dev->cur_cm    
1692 }                                                
1693 EXPORT_SYMBOL(nfc_vendor_cmd_reply);             
1694                                                  
1695 static const struct genl_ops nfc_genl_ops[] =    
1696         {                                        
1697                 .cmd = NFC_CMD_GET_DEVICE,       
1698                 .validate = GENL_DONT_VALIDAT    
1699                 .doit = nfc_genl_get_device,     
1700                 .dumpit = nfc_genl_dump_devic    
1701                 .done = nfc_genl_dump_devices    
1702         },                                       
1703         {                                        
1704                 .cmd = NFC_CMD_DEV_UP,           
1705                 .validate = GENL_DONT_VALIDAT    
1706                 .doit = nfc_genl_dev_up,         
1707                 .flags = GENL_ADMIN_PERM,        
1708         },                                       
1709         {                                        
1710                 .cmd = NFC_CMD_DEV_DOWN,         
1711                 .validate = GENL_DONT_VALIDAT    
1712                 .doit = nfc_genl_dev_down,       
1713                 .flags = GENL_ADMIN_PERM,        
1714         },                                       
1715         {                                        
1716                 .cmd = NFC_CMD_START_POLL,       
1717                 .validate = GENL_DONT_VALIDAT    
1718                 .doit = nfc_genl_start_poll,     
1719                 .flags = GENL_ADMIN_PERM,        
1720         },                                       
1721         {                                        
1722                 .cmd = NFC_CMD_STOP_POLL,        
1723                 .validate = GENL_DONT_VALIDAT    
1724                 .doit = nfc_genl_stop_poll,      
1725                 .flags = GENL_ADMIN_PERM,        
1726         },                                       
1727         {                                        
1728                 .cmd = NFC_CMD_DEP_LINK_UP,      
1729                 .validate = GENL_DONT_VALIDAT    
1730                 .doit = nfc_genl_dep_link_up,    
1731                 .flags = GENL_ADMIN_PERM,        
1732         },                                       
1733         {                                        
1734                 .cmd = NFC_CMD_DEP_LINK_DOWN,    
1735                 .validate = GENL_DONT_VALIDAT    
1736                 .doit = nfc_genl_dep_link_dow    
1737                 .flags = GENL_ADMIN_PERM,        
1738         },                                       
1739         {                                        
1740                 .cmd = NFC_CMD_GET_TARGET,       
1741                 .validate = GENL_DONT_VALIDAT    
1742                             GENL_DONT_VALIDAT    
1743                 .dumpit = nfc_genl_dump_targe    
1744                 .done = nfc_genl_dump_targets    
1745         },                                       
1746         {                                        
1747                 .cmd = NFC_CMD_LLC_GET_PARAMS    
1748                 .validate = GENL_DONT_VALIDAT    
1749                 .doit = nfc_genl_llc_get_para    
1750         },                                       
1751         {                                        
1752                 .cmd = NFC_CMD_LLC_SET_PARAMS    
1753                 .validate = GENL_DONT_VALIDAT    
1754                 .doit = nfc_genl_llc_set_para    
1755                 .flags = GENL_ADMIN_PERM,        
1756         },                                       
1757         {                                        
1758                 .cmd = NFC_CMD_LLC_SDREQ,        
1759                 .validate = GENL_DONT_VALIDAT    
1760                 .doit = nfc_genl_llc_sdreq,      
1761                 .flags = GENL_ADMIN_PERM,        
1762         },                                       
1763         {                                        
1764                 .cmd = NFC_CMD_FW_DOWNLOAD,      
1765                 .validate = GENL_DONT_VALIDAT    
1766                 .doit = nfc_genl_fw_download,    
1767                 .flags = GENL_ADMIN_PERM,        
1768         },                                       
1769         {                                        
1770                 .cmd = NFC_CMD_ENABLE_SE,        
1771                 .validate = GENL_DONT_VALIDAT    
1772                 .doit = nfc_genl_enable_se,      
1773                 .flags = GENL_ADMIN_PERM,        
1774         },                                       
1775         {                                        
1776                 .cmd = NFC_CMD_DISABLE_SE,       
1777                 .validate = GENL_DONT_VALIDAT    
1778                 .doit = nfc_genl_disable_se,     
1779                 .flags = GENL_ADMIN_PERM,        
1780         },                                       
1781         {                                        
1782                 .cmd = NFC_CMD_GET_SE,           
1783                 .validate = GENL_DONT_VALIDAT    
1784                 .dumpit = nfc_genl_dump_ses,     
1785                 .done = nfc_genl_dump_ses_don    
1786         },                                       
1787         {                                        
1788                 .cmd = NFC_CMD_SE_IO,            
1789                 .validate = GENL_DONT_VALIDAT    
1790                 .doit = nfc_genl_se_io,          
1791                 .flags = GENL_ADMIN_PERM,        
1792         },                                       
1793         {                                        
1794                 .cmd = NFC_CMD_ACTIVATE_TARGE    
1795                 .validate = GENL_DONT_VALIDAT    
1796                 .doit = nfc_genl_activate_tar    
1797                 .flags = GENL_ADMIN_PERM,        
1798         },                                       
1799         {                                        
1800                 .cmd = NFC_CMD_VENDOR,           
1801                 .validate = GENL_DONT_VALIDAT    
1802                 .doit = nfc_genl_vendor_cmd,     
1803                 .flags = GENL_ADMIN_PERM,        
1804         },                                       
1805         {                                        
1806                 .cmd = NFC_CMD_DEACTIVATE_TAR    
1807                 .validate = GENL_DONT_VALIDAT    
1808                 .doit = nfc_genl_deactivate_t    
1809                 .flags = GENL_ADMIN_PERM,        
1810         },                                       
1811 };                                               
1812                                                  
1813 static struct genl_family nfc_genl_family __r    
1814         .hdrsize = 0,                            
1815         .name = NFC_GENL_NAME,                   
1816         .version = NFC_GENL_VERSION,             
1817         .maxattr = NFC_ATTR_MAX,                 
1818         .policy = nfc_genl_policy,               
1819         .module = THIS_MODULE,                   
1820         .ops = nfc_genl_ops,                     
1821         .n_ops = ARRAY_SIZE(nfc_genl_ops),       
1822         .resv_start_op = NFC_CMD_DEACTIVATE_T    
1823         .mcgrps = nfc_genl_mcgrps,               
1824         .n_mcgrps = ARRAY_SIZE(nfc_genl_mcgrp    
1825 };                                               
1826                                                  
1827                                                  
1828 struct urelease_work {                           
1829         struct  work_struct w;                   
1830         u32     portid;                          
1831 };                                               
1832                                                  
1833 static void nfc_urelease_event_work(struct wo    
1834 {                                                
1835         struct urelease_work *w = container_o    
1836         struct class_dev_iter iter;              
1837         struct nfc_dev *dev;                     
1838                                                  
1839         pr_debug("portid %d\n", w->portid);      
1840                                                  
1841         mutex_lock(&nfc_devlist_mutex);          
1842                                                  
1843         nfc_device_iter_init(&iter);             
1844         dev = nfc_device_iter_next(&iter);       
1845                                                  
1846         while (dev) {                            
1847                 mutex_lock(&dev->genl_data.ge    
1848                                                  
1849                 if (dev->genl_data.poll_req_p    
1850                         nfc_stop_poll(dev);      
1851                         dev->genl_data.poll_r    
1852                 }                                
1853                                                  
1854                 mutex_unlock(&dev->genl_data.    
1855                                                  
1856                 dev = nfc_device_iter_next(&i    
1857         }                                        
1858                                                  
1859         nfc_device_iter_exit(&iter);             
1860                                                  
1861         mutex_unlock(&nfc_devlist_mutex);        
1862                                                  
1863         kfree(w);                                
1864 }                                                
1865                                                  
1866 static int nfc_genl_rcv_nl_event(struct notif    
1867                                  unsigned lon    
1868 {                                                
1869         struct netlink_notify *n = ptr;          
1870         struct urelease_work *w;                 
1871                                                  
1872         if (event != NETLINK_URELEASE || n->p    
1873                 goto out;                        
1874                                                  
1875         pr_debug("NETLINK_URELEASE event from    
1876                                                  
1877         w = kmalloc(sizeof(*w), GFP_ATOMIC);     
1878         if (w) {                                 
1879                 INIT_WORK(&w->w, nfc_urelease    
1880                 w->portid = n->portid;           
1881                 schedule_work(&w->w);            
1882         }                                        
1883                                                  
1884 out:                                             
1885         return NOTIFY_DONE;                      
1886 }                                                
1887                                                  
1888 void nfc_genl_data_init(struct nfc_genl_data     
1889 {                                                
1890         genl_data->poll_req_portid = 0;          
1891         mutex_init(&genl_data->genl_data_mute    
1892 }                                                
1893                                                  
1894 void nfc_genl_data_exit(struct nfc_genl_data     
1895 {                                                
1896         mutex_destroy(&genl_data->genl_data_m    
1897 }                                                
1898                                                  
1899 static struct notifier_block nl_notifier = {     
1900         .notifier_call  = nfc_genl_rcv_nl_eve    
1901 };                                               
1902                                                  
1903 /**                                              
1904  * nfc_genl_init() - Initialize netlink inter    
1905  *                                               
1906  * This initialization function registers the    
1907  */                                              
1908 int __init nfc_genl_init(void)                   
1909 {                                                
1910         int rc;                                  
1911                                                  
1912         rc = genl_register_family(&nfc_genl_f    
1913         if (rc)                                  
1914                 return rc;                       
1915                                                  
1916         netlink_register_notifier(&nl_notifie    
1917                                                  
1918         return 0;                                
1919 }                                                
1920                                                  
1921 /**                                              
1922  * nfc_genl_exit() - Deinitialize netlink int    
1923  *                                               
1924  * This exit function unregisters the nfc net    
1925  */                                              
1926 void nfc_genl_exit(void)                         
1927 {                                                
1928         netlink_unregister_notifier(&nl_notif    
1929         genl_unregister_family(&nfc_genl_fami    
1930 }                                                
1931                                                  

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php