Message ID | 20240125095310.15738-1-pchelkin@ispras.ru (mailing list archive) |
---|---|
State | Accepted |
Commit | bfb007aebe6bff451f7f3a4be19f4f286d0d5d9c |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net] nfc: nci: free rx_data_reassembly skb on NCI device cleanup | expand |
Hello: This patch was applied to netdev/net.git (main) by David S. Miller <davem@davemloft.net>: On Thu, 25 Jan 2024 12:53:09 +0300 you wrote: > rx_data_reassembly skb is stored during NCI data exchange for processing > fragmented packets. It is dropped only when the last fragment is processed > or when an NTF packet with NCI_OP_RF_DEACTIVATE_NTF opcode is received. > However, the NCI device may be deallocated before that which leads to skb > leak. > > As by design the rx_data_reassembly skb is bound to the NCI device and > nothing prevents the device to be freed before the skb is processed in > some way and cleaned, free it on the NCI device cleanup. > > [...] Here is the summary with links: - [net] nfc: nci: free rx_data_reassembly skb on NCI device cleanup https://git.kernel.org/netdev/net/c/bfb007aebe6b You are awesome, thank you!
diff --git a/net/nfc/nci/core.c b/net/nfc/nci/core.c index 97348cedb16b..cdad47b140fa 100644 --- a/net/nfc/nci/core.c +++ b/net/nfc/nci/core.c @@ -1208,6 +1208,10 @@ void nci_free_device(struct nci_dev *ndev) { nfc_free_device(ndev->nfc_dev); nci_hci_deallocate(ndev); + + /* drop partial rx data packet if present */ + if (ndev->rx_data_reassembly) + kfree_skb(ndev->rx_data_reassembly); kfree(ndev); } EXPORT_SYMBOL(nci_free_device);
rx_data_reassembly skb is stored during NCI data exchange for processing fragmented packets. It is dropped only when the last fragment is processed or when an NTF packet with NCI_OP_RF_DEACTIVATE_NTF opcode is received. However, the NCI device may be deallocated before that which leads to skb leak. As by design the rx_data_reassembly skb is bound to the NCI device and nothing prevents the device to be freed before the skb is processed in some way and cleaned, free it on the NCI device cleanup. Found by Linux Verification Center (linuxtesting.org) with Syzkaller. Fixes: 6a2968aaf50c ("NFC: basic NCI protocol implementation") Cc: stable@vger.kernel.org Reported-by: syzbot+6b7c68d9c21e4ee4251b@syzkaller.appspotmail.com Closes: https://lore.kernel.org/lkml/000000000000f43987060043da7b@google.com/ Signed-off-by: Fedor Pchelkin <pchelkin@ispras.ru> --- net/nfc/nci/core.c | 4 ++++ 1 file changed, 4 insertions(+)