Skip to content

Commit 1095e69

Browse files
Frederic DanisSamuel Ortiz
authored andcommitted
NFC: NCI: Fix skb->dev usage
skb->dev is used for carrying a net_device pointer and not an nci_dev pointer. Remove usage of skb-dev to carry nci_dev and replace it by parameter in nci_recv_frame(), nci_send_frame() and driver send() functions. NfcWilink driver is also updated to use those functions. Signed-off-by: Frederic Danis <[email protected]> Signed-off-by: Samuel Ortiz <[email protected]>
1 parent 4674d0f commit 1095e69

File tree

4 files changed

+13
-27
lines changed

4 files changed

+13
-27
lines changed

drivers/nfc/nfcwilink.c

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ enum {
109109
NFCWILINK_FW_DOWNLOAD,
110110
};
111111

112-
static int nfcwilink_send(struct sk_buff *skb);
112+
static int nfcwilink_send(struct nci_dev *ndev, struct sk_buff *skb);
113113

114114
static inline struct sk_buff *nfcwilink_skb_alloc(unsigned int len, gfp_t how)
115115
{
@@ -156,8 +156,6 @@ static int nfcwilink_get_bts_file_name(struct nfcwilink *drv, char *file_name)
156156
return -ENOMEM;
157157
}
158158

159-
skb->dev = (void *)drv->ndev;
160-
161159
cmd = (struct nci_vs_nfcc_info_cmd *)
162160
skb_put(skb, sizeof(struct nci_vs_nfcc_info_cmd));
163161
cmd->gid = NCI_VS_NFCC_INFO_CMD_GID;
@@ -166,7 +164,7 @@ static int nfcwilink_get_bts_file_name(struct nfcwilink *drv, char *file_name)
166164

167165
drv->nfcc_info.plen = 0;
168166

169-
rc = nfcwilink_send(skb);
167+
rc = nfcwilink_send(drv->ndev, skb);
170168
if (rc)
171169
return rc;
172170

@@ -232,11 +230,9 @@ static int nfcwilink_send_bts_cmd(struct nfcwilink *drv, __u8 *data, int len)
232230
return -ENOMEM;
233231
}
234232

235-
skb->dev = (void *)drv->ndev;
236-
237233
memcpy(skb_put(skb, len), data, len);
238234

239-
rc = nfcwilink_send(skb);
235+
rc = nfcwilink_send(drv->ndev, skb);
240236
if (rc)
241237
return rc;
242238

@@ -371,10 +367,8 @@ static long nfcwilink_receive(void *priv_data, struct sk_buff *skb)
371367
return 0;
372368
}
373369

374-
skb->dev = (void *) drv->ndev;
375-
376370
/* Forward skb to NCI core layer */
377-
rc = nci_recv_frame(skb);
371+
rc = nci_recv_frame(drv->ndev, skb);
378372
if (rc < 0) {
379373
nfc_dev_err(&drv->pdev->dev, "nci_recv_frame failed %d", rc);
380374
return rc;
@@ -480,9 +474,8 @@ static int nfcwilink_close(struct nci_dev *ndev)
480474
return rc;
481475
}
482476

483-
static int nfcwilink_send(struct sk_buff *skb)
477+
static int nfcwilink_send(struct nci_dev *ndev, struct sk_buff *skb)
484478
{
485-
struct nci_dev *ndev = (struct nci_dev *)skb->dev;
486479
struct nfcwilink *drv = nci_get_drvdata(ndev);
487480
struct nfcwilink_hdr hdr = {NFCWILINK_CHNL, NFCWILINK_OPCODE, 0x0000};
488481
long len;

include/net/nfc/nci_core.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ struct nci_dev;
6666
struct nci_ops {
6767
int (*open)(struct nci_dev *ndev);
6868
int (*close)(struct nci_dev *ndev);
69-
int (*send)(struct sk_buff *skb);
69+
int (*send)(struct nci_dev *ndev, struct sk_buff *skb);
7070
};
7171

7272
#define NCI_MAX_SUPPORTED_RF_INTERFACES 4
@@ -153,7 +153,7 @@ struct nci_dev *nci_allocate_device(struct nci_ops *ops,
153153
void nci_free_device(struct nci_dev *ndev);
154154
int nci_register_device(struct nci_dev *ndev);
155155
void nci_unregister_device(struct nci_dev *ndev);
156-
int nci_recv_frame(struct sk_buff *skb);
156+
int nci_recv_frame(struct nci_dev *ndev, struct sk_buff *skb);
157157

158158
static inline struct sk_buff *nci_skb_alloc(struct nci_dev *ndev,
159159
unsigned int len,

net/nfc/nci/core.c

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -797,12 +797,11 @@ EXPORT_SYMBOL(nci_unregister_device);
797797
/**
798798
* nci_recv_frame - receive frame from NCI drivers
799799
*
800+
* @ndev: The nci device
800801
* @skb: The sk_buff to receive
801802
*/
802-
int nci_recv_frame(struct sk_buff *skb)
803+
int nci_recv_frame(struct nci_dev *ndev, struct sk_buff *skb)
803804
{
804-
struct nci_dev *ndev = (struct nci_dev *) skb->dev;
805-
806805
pr_debug("len %d\n", skb->len);
807806

808807
if (!ndev || (!test_bit(NCI_UP, &ndev->flags) &&
@@ -819,10 +818,8 @@ int nci_recv_frame(struct sk_buff *skb)
819818
}
820819
EXPORT_SYMBOL(nci_recv_frame);
821820

822-
static int nci_send_frame(struct sk_buff *skb)
821+
static int nci_send_frame(struct nci_dev *ndev, struct sk_buff *skb)
823822
{
824-
struct nci_dev *ndev = (struct nci_dev *) skb->dev;
825-
826823
pr_debug("len %d\n", skb->len);
827824

828825
if (!ndev) {
@@ -833,7 +830,7 @@ static int nci_send_frame(struct sk_buff *skb)
833830
/* Get rid of skb owner, prior to sending to the driver. */
834831
skb_orphan(skb);
835832

836-
return ndev->ops->send(skb);
833+
return ndev->ops->send(ndev, skb);
837834
}
838835

839836
/* Send NCI command */
@@ -861,8 +858,6 @@ int nci_send_cmd(struct nci_dev *ndev, __u16 opcode, __u8 plen, void *payload)
861858
if (plen)
862859
memcpy(skb_put(skb, plen), payload, plen);
863860

864-
skb->dev = (void *) ndev;
865-
866861
skb_queue_tail(&ndev->cmd_q, skb);
867862
queue_work(ndev->cmd_wq, &ndev->cmd_work);
868863

@@ -894,7 +889,7 @@ static void nci_tx_work(struct work_struct *work)
894889
nci_conn_id(skb->data),
895890
nci_plen(skb->data));
896891

897-
nci_send_frame(skb);
892+
nci_send_frame(ndev, skb);
898893

899894
mod_timer(&ndev->data_timer,
900895
jiffies + msecs_to_jiffies(NCI_DATA_TIMEOUT));
@@ -963,7 +958,7 @@ static void nci_cmd_work(struct work_struct *work)
963958
nci_opcode_oid(nci_opcode(skb->data)),
964959
nci_plen(skb->data));
965960

966-
nci_send_frame(skb);
961+
nci_send_frame(ndev, skb);
967962

968963
mod_timer(&ndev->cmd_timer,
969964
jiffies + msecs_to_jiffies(NCI_CMD_TIMEOUT));

net/nfc/nci/data.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,6 @@ static inline void nci_push_data_hdr(struct nci_dev *ndev,
8080

8181
nci_mt_set((__u8 *)hdr, NCI_MT_DATA_PKT);
8282
nci_pbf_set((__u8 *)hdr, pbf);
83-
84-
skb->dev = (void *) ndev;
8583
}
8684

8785
static int nci_queue_tx_data_frags(struct nci_dev *ndev,

0 commit comments

Comments
 (0)