Commit 1e6428d8 authored by David S. Miller's avatar David S. Miller

nfc: Stop using NLA_PUT*().

These macros contain a hidden goto, and are thus extremely error
prone and make code hard to audit.
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 028d6a67
...@@ -63,19 +63,23 @@ static int nfc_genl_send_target(struct sk_buff *msg, struct nfc_target *target, ...@@ -63,19 +63,23 @@ static int nfc_genl_send_target(struct sk_buff *msg, struct nfc_target *target,
genl_dump_check_consistent(cb, hdr, &nfc_genl_family); genl_dump_check_consistent(cb, hdr, &nfc_genl_family);
NLA_PUT_U32(msg, NFC_ATTR_TARGET_INDEX, target->idx); if (nla_put_u32(msg, NFC_ATTR_TARGET_INDEX, target->idx) ||
NLA_PUT_U32(msg, NFC_ATTR_PROTOCOLS, target->supported_protocols); nla_put_u32(msg, NFC_ATTR_PROTOCOLS, target->supported_protocols) ||
NLA_PUT_U16(msg, NFC_ATTR_TARGET_SENS_RES, target->sens_res); nla_put_u16(msg, NFC_ATTR_TARGET_SENS_RES, target->sens_res) ||
NLA_PUT_U8(msg, NFC_ATTR_TARGET_SEL_RES, target->sel_res); nla_put_u8(msg, NFC_ATTR_TARGET_SEL_RES, target->sel_res))
if (target->nfcid1_len > 0) goto nla_put_failure;
NLA_PUT(msg, NFC_ATTR_TARGET_NFCID1, target->nfcid1_len, if (target->nfcid1_len > 0 &&
target->nfcid1); nla_put(msg, NFC_ATTR_TARGET_NFCID1, target->nfcid1_len,
if (target->sensb_res_len > 0) target->nfcid1))
NLA_PUT(msg, NFC_ATTR_TARGET_SENSB_RES, target->sensb_res_len, goto nla_put_failure;
target->sensb_res); if (target->sensb_res_len > 0 &&
if (target->sensf_res_len > 0) nla_put(msg, NFC_ATTR_TARGET_SENSB_RES, target->sensb_res_len,
NLA_PUT(msg, NFC_ATTR_TARGET_SENSF_RES, target->sensf_res_len, target->sensb_res))
target->sensf_res); goto nla_put_failure;
if (target->sensf_res_len > 0 &&
nla_put(msg, NFC_ATTR_TARGET_SENSF_RES, target->sensf_res_len,
target->sensf_res))
goto nla_put_failure;
return genlmsg_end(msg, hdr); return genlmsg_end(msg, hdr);
...@@ -170,7 +174,8 @@ int nfc_genl_targets_found(struct nfc_dev *dev) ...@@ -170,7 +174,8 @@ int nfc_genl_targets_found(struct nfc_dev *dev)
if (!hdr) if (!hdr)
goto free_msg; goto free_msg;
NLA_PUT_U32(msg, NFC_ATTR_DEVICE_INDEX, dev->idx); if (nla_put_u32(msg, NFC_ATTR_DEVICE_INDEX, dev->idx))
goto nla_put_failure;
genlmsg_end(msg, hdr); genlmsg_end(msg, hdr);
...@@ -197,10 +202,11 @@ int nfc_genl_device_added(struct nfc_dev *dev) ...@@ -197,10 +202,11 @@ int nfc_genl_device_added(struct nfc_dev *dev)
if (!hdr) if (!hdr)
goto free_msg; goto free_msg;
NLA_PUT_STRING(msg, NFC_ATTR_DEVICE_NAME, nfc_device_name(dev)); if (nla_put_string(msg, NFC_ATTR_DEVICE_NAME, nfc_device_name(dev)) ||
NLA_PUT_U32(msg, NFC_ATTR_DEVICE_INDEX, dev->idx); nla_put_u32(msg, NFC_ATTR_DEVICE_INDEX, dev->idx) ||
NLA_PUT_U32(msg, NFC_ATTR_PROTOCOLS, dev->supported_protocols); nla_put_u32(msg, NFC_ATTR_PROTOCOLS, dev->supported_protocols) ||
NLA_PUT_U8(msg, NFC_ATTR_DEVICE_POWERED, dev->dev_up); nla_put_u8(msg, NFC_ATTR_DEVICE_POWERED, dev->dev_up))
goto nla_put_failure;
genlmsg_end(msg, hdr); genlmsg_end(msg, hdr);
...@@ -229,7 +235,8 @@ int nfc_genl_device_removed(struct nfc_dev *dev) ...@@ -229,7 +235,8 @@ int nfc_genl_device_removed(struct nfc_dev *dev)
if (!hdr) if (!hdr)
goto free_msg; goto free_msg;
NLA_PUT_U32(msg, NFC_ATTR_DEVICE_INDEX, dev->idx); if (nla_put_u32(msg, NFC_ATTR_DEVICE_INDEX, dev->idx))
goto nla_put_failure;
genlmsg_end(msg, hdr); genlmsg_end(msg, hdr);
...@@ -259,10 +266,11 @@ static int nfc_genl_send_device(struct sk_buff *msg, struct nfc_dev *dev, ...@@ -259,10 +266,11 @@ static int nfc_genl_send_device(struct sk_buff *msg, struct nfc_dev *dev,
if (cb) if (cb)
genl_dump_check_consistent(cb, hdr, &nfc_genl_family); genl_dump_check_consistent(cb, hdr, &nfc_genl_family);
NLA_PUT_STRING(msg, NFC_ATTR_DEVICE_NAME, nfc_device_name(dev)); if (nla_put_string(msg, NFC_ATTR_DEVICE_NAME, nfc_device_name(dev)) ||
NLA_PUT_U32(msg, NFC_ATTR_DEVICE_INDEX, dev->idx); nla_put_u32(msg, NFC_ATTR_DEVICE_INDEX, dev->idx) ||
NLA_PUT_U32(msg, NFC_ATTR_PROTOCOLS, dev->supported_protocols); nla_put_u32(msg, NFC_ATTR_PROTOCOLS, dev->supported_protocols) ||
NLA_PUT_U8(msg, NFC_ATTR_DEVICE_POWERED, dev->dev_up); nla_put_u8(msg, NFC_ATTR_DEVICE_POWERED, dev->dev_up))
goto nla_put_failure;
return genlmsg_end(msg, hdr); return genlmsg_end(msg, hdr);
...@@ -339,11 +347,14 @@ int nfc_genl_dep_link_up_event(struct nfc_dev *dev, u32 target_idx, ...@@ -339,11 +347,14 @@ int nfc_genl_dep_link_up_event(struct nfc_dev *dev, u32 target_idx,
if (!hdr) if (!hdr)
goto free_msg; goto free_msg;
NLA_PUT_U32(msg, NFC_ATTR_DEVICE_INDEX, dev->idx); if (nla_put_u32(msg, NFC_ATTR_DEVICE_INDEX, dev->idx))
if (rf_mode == NFC_RF_INITIATOR) goto nla_put_failure;
NLA_PUT_U32(msg, NFC_ATTR_TARGET_INDEX, target_idx); if (rf_mode == NFC_RF_INITIATOR &&
NLA_PUT_U8(msg, NFC_ATTR_COMM_MODE, comm_mode); nla_put_u32(msg, NFC_ATTR_TARGET_INDEX, target_idx))
NLA_PUT_U8(msg, NFC_ATTR_RF_MODE, rf_mode); goto nla_put_failure;
if (nla_put_u8(msg, NFC_ATTR_COMM_MODE, comm_mode) ||
nla_put_u8(msg, NFC_ATTR_RF_MODE, rf_mode))
goto nla_put_failure;
genlmsg_end(msg, hdr); genlmsg_end(msg, hdr);
...@@ -376,7 +387,8 @@ int nfc_genl_dep_link_down_event(struct nfc_dev *dev) ...@@ -376,7 +387,8 @@ int nfc_genl_dep_link_down_event(struct nfc_dev *dev)
if (!hdr) if (!hdr)
goto free_msg; goto free_msg;
NLA_PUT_U32(msg, NFC_ATTR_DEVICE_INDEX, dev->idx); if (nla_put_u32(msg, NFC_ATTR_DEVICE_INDEX, dev->idx))
goto nla_put_failure;
genlmsg_end(msg, hdr); genlmsg_end(msg, hdr);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment