diff options
-rw-r--r-- | net/nfc/digital_core.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/net/nfc/digital_core.c b/net/nfc/digital_core.c index 10146e703270..969a7f924a37 100644 --- a/net/nfc/digital_core.c +++ b/net/nfc/digital_core.c | |||
@@ -671,19 +671,27 @@ static int digital_in_send(struct nfc_dev *nfc_dev, struct nfc_target *target, | |||
671 | data_exch->cb = cb; | 671 | data_exch->cb = cb; |
672 | data_exch->cb_context = cb_context; | 672 | data_exch->cb_context = cb_context; |
673 | 673 | ||
674 | if (ddev->curr_protocol == NFC_PROTO_NFC_DEP) | 674 | if (ddev->curr_protocol == NFC_PROTO_NFC_DEP) { |
675 | return digital_in_send_dep_req(ddev, target, skb, data_exch); | 675 | rc = digital_in_send_dep_req(ddev, target, skb, data_exch); |
676 | goto exit; | ||
677 | } | ||
676 | 678 | ||
677 | if (ddev->curr_protocol == NFC_PROTO_ISO14443) { | 679 | if (ddev->curr_protocol == NFC_PROTO_ISO14443) { |
678 | rc = digital_in_iso_dep_push_sod(ddev, skb); | 680 | rc = digital_in_iso_dep_push_sod(ddev, skb); |
679 | if (rc) | 681 | if (rc) |
680 | return rc; | 682 | goto exit; |
681 | } | 683 | } |
682 | 684 | ||
683 | ddev->skb_add_crc(skb); | 685 | ddev->skb_add_crc(skb); |
684 | 686 | ||
685 | return digital_in_send_cmd(ddev, skb, 500, digital_in_send_complete, | 687 | rc = digital_in_send_cmd(ddev, skb, 500, digital_in_send_complete, |
686 | data_exch); | 688 | data_exch); |
689 | |||
690 | exit: | ||
691 | if (rc) | ||
692 | kfree(data_exch); | ||
693 | |||
694 | return rc; | ||
687 | } | 695 | } |
688 | 696 | ||
689 | static struct nfc_ops digital_nfc_ops = { | 697 | static struct nfc_ops digital_nfc_ops = { |