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