diff options
author | Edward Adam Davis <eadavis@qq.com> | 2024-05-28 11:12:31 +0800 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2024-07-11 12:51:23 +0200 |
commit | 22a72c1c10f43ca645a98725e0faff34592f4d08 (patch) | |
tree | 45892b39863a796aa20906b191f3d518d23084c5 | |
parent | ca2b835609b2e57ffd98c70df03e1cd0468413df (diff) | |
download | linux-stable-22a72c1c10f43ca645a98725e0faff34592f4d08.tar.gz linux-stable-22a72c1c10f43ca645a98725e0faff34592f4d08.tar.bz2 linux-stable-22a72c1c10f43ca645a98725e0faff34592f4d08.zip |
nfc/nci: Add the inconsistency check between the input data length and count
[ Upstream commit 068648aab72c9ba7b0597354ef4d81ffaac7b979 ]
write$nci(r0, &(0x7f0000000740)=ANY=[@ANYBLOB="610501"], 0xf)
Syzbot constructed a write() call with a data length of 3 bytes but a count value
of 15, which passed too little data to meet the basic requirements of the function
nci_rf_intf_activated_ntf_packet().
Therefore, increasing the comparison between data length and count value to avoid
problems caused by inconsistent data length and count.
Reported-and-tested-by: syzbot+71bfed2b2bcea46c98f2@syzkaller.appspotmail.com
Signed-off-by: Edward Adam Davis <eadavis@qq.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
-rw-r--r-- | drivers/nfc/virtual_ncidev.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/nfc/virtual_ncidev.c b/drivers/nfc/virtual_ncidev.c index 590b038e449e..6b89d596ba9a 100644 --- a/drivers/nfc/virtual_ncidev.c +++ b/drivers/nfc/virtual_ncidev.c @@ -125,6 +125,10 @@ static ssize_t virtual_ncidev_write(struct file *file, kfree_skb(skb); return -EFAULT; } + if (strnlen(skb->data, count) != count) { + kfree_skb(skb); + return -EINVAL; + } nci_recv_frame(vdev->ndev, skb); return count; |