mirror of
https://github.com/torvalds/linux.git
synced 2026-03-08 01:24:47 +01:00
net: nfc: nci: Fix zero-length proprietary notifications
NCI NFC controllers may have proprietary OIDs with zero-length payload.
One example is: drivers/nfc/nxp-nci/core.c, NXP_NCI_RF_TXLDO_ERROR_NTF.
Allow a zero length payload in proprietary notifications *only*.
Before:
-- >8 --
kernel: nci: nci_recv_frame: len 3
-- >8 --
After:
-- >8 --
kernel: nci: nci_recv_frame: len 3
kernel: nci: nci_ntf_packet: NCI RX: MT=ntf, PBF=0, GID=0x1, OID=0x23, plen=0
kernel: nci: nci_ntf_packet: unknown ntf opcode 0x123
kernel: nfc nfc0: NFC: RF transmitter couldn't start. Bad power and/or configuration?
-- >8 --
After fixing the hardware:
-- >8 --
kernel: nci: nci_recv_frame: len 27
kernel: nci: nci_ntf_packet: NCI RX: MT=ntf, PBF=0, GID=0x1, OID=0x5, plen=24
kernel: nci: nci_rf_intf_activated_ntf_packet: rf_discovery_id 1
-- >8 --
Fixes: d24b03535e ("nfc: nci: Fix uninit-value in nci_dev_up and nci_ntf_packet")
Signed-off-by: Ian Ray <ian.ray@gehealthcare.com>
Link: https://patch.msgid.link/20260302163238.140576-1-ian.ray@gehealthcare.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
165573e41f
commit
f7d92f11bd
1 changed files with 11 additions and 1 deletions
|
|
@ -1482,10 +1482,20 @@ static bool nci_valid_size(struct sk_buff *skb)
|
|||
unsigned int hdr_size = NCI_CTRL_HDR_SIZE;
|
||||
|
||||
if (skb->len < hdr_size ||
|
||||
!nci_plen(skb->data) ||
|
||||
skb->len < hdr_size + nci_plen(skb->data)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!nci_plen(skb->data)) {
|
||||
/* Allow zero length in proprietary notifications (0x20 - 0x3F). */
|
||||
if (nci_opcode_oid(nci_opcode(skb->data)) >= 0x20 &&
|
||||
nci_mt(skb->data) == NCI_MT_NTF_PKT)
|
||||
return true;
|
||||
|
||||
/* Disallow zero length otherwise. */
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue