* [syzbot] [net?] [nfc?] KMSAN: uninit-value in nci_rx_work
@ 2024-01-01 13:38 syzbot
2024-04-05 7:11 ` [syzbot] [PATCH net] nfc: nci: Fix " syzbot
` (12 more replies)
0 siblings, 13 replies; 14+ messages in thread
From: syzbot @ 2024-01-01 13:38 UTC (permalink / raw)
To: davem, edumazet, krzysztof.kozlowski, kuba, linux-kernel, netdev,
pabeni, syzkaller-bugs
Hello,
syzbot found the following issue on:
HEAD commit: 861deac3b092 Linux 6.7-rc7
git tree: upstream
console+strace: https://syzkaller.appspot.com/x/log.txt?x=136a5231e80000
kernel config: https://syzkaller.appspot.com/x/.config?x=e0c7078a6b901aa3
dashboard link: https://syzkaller.appspot.com/bug?extid=d7b4dc6cd50410152534
compiler: Debian clang version 15.0.6, GNU ld (GNU Binutils for Debian) 2.40
syz repro: https://syzkaller.appspot.com/x/repro.syz?x=111729e9e80000
C reproducer: https://syzkaller.appspot.com/x/repro.c?x=1018379ee80000
Downloadable assets:
disk image: https://storage.googleapis.com/syzbot-assets/0ea60ee8ed32/disk-861deac3.raw.xz
vmlinux: https://storage.googleapis.com/syzbot-assets/6d69fdc33021/vmlinux-861deac3.xz
kernel image: https://storage.googleapis.com/syzbot-assets/f0158750d452/bzImage-861deac3.xz
IMPORTANT: if you fix the issue, please add the following tag to the commit:
Reported-by: syzbot+d7b4dc6cd50410152534@syzkaller.appspotmail.com
=====================================================
BUG: KMSAN: uninit-value in nci_rx_work+0x2e6/0x500 net/nfc/nci/core.c:1516
nci_rx_work+0x2e6/0x500 net/nfc/nci/core.c:1516
process_one_work kernel/workqueue.c:2627 [inline]
process_scheduled_works+0x104e/0x1e70 kernel/workqueue.c:2700
worker_thread+0xf45/0x1490 kernel/workqueue.c:2781
kthread+0x3ed/0x540 kernel/kthread.c:388
ret_from_fork+0x66/0x80 arch/x86/kernel/process.c:147
ret_from_fork_asm+0x11/0x20 arch/x86/entry/entry_64.S:242
Uninit was created at:
slab_post_alloc_hook+0x129/0xa70 mm/slab.h:768
slab_alloc_node mm/slub.c:3478 [inline]
kmem_cache_alloc_node+0x5e9/0xb10 mm/slub.c:3523
kmalloc_reserve+0x13d/0x4a0 net/core/skbuff.c:560
__alloc_skb+0x318/0x740 net/core/skbuff.c:651
alloc_skb include/linux/skbuff.h:1286 [inline]
virtual_ncidev_write+0x6d/0x280 drivers/nfc/virtual_ncidev.c:120
vfs_write+0x561/0x1490 fs/read_write.c:582
ksys_write+0x20f/0x4c0 fs/read_write.c:637
__do_sys_write fs/read_write.c:649 [inline]
__se_sys_write fs/read_write.c:646 [inline]
__x64_sys_write+0x93/0xd0 fs/read_write.c:646
do_syscall_x64 arch/x86/entry/common.c:52 [inline]
do_syscall_64+0x44/0x110 arch/x86/entry/common.c:83
entry_SYSCALL_64_after_hwframe+0x63/0x6b
CPU: 0 PID: 743 Comm: kworker/u4:5 Not tainted 6.7.0-rc7-syzkaller #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 11/17/2023
Workqueue: nfc2_nci_rx_wq nci_rx_work
=====================================================
---
This report is generated by a bot. It may contain errors.
See https://goo.gl/tpsmEJ for more information about syzbot.
syzbot engineers can be reached at syzkaller@googlegroups.com.
syzbot will keep track of this issue. See:
https://goo.gl/tpsmEJ#status for how to communicate with syzbot.
If the report is already addressed, let syzbot know by replying with:
#syz fix: exact-commit-title
If you want syzbot to run the reproducer, reply with:
#syz test: git://repo/address.git branch-or-commit-hash
If you attach or paste a git patch, syzbot will apply it before testing.
If you want to overwrite report's subsystems, reply with:
#syz set subsystems: new-subsystem
(See the list of subsystem names on the web dashboard)
If the report is a duplicate of another one, reply with:
#syz dup: exact-subject-of-another-report
If you want to undo deduplication, reply with:
#syz undup
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [syzbot] [PATCH net] nfc: nci: Fix uninit-value in nci_rx_work
2024-01-01 13:38 [syzbot] [net?] [nfc?] KMSAN: uninit-value in nci_rx_work syzbot
@ 2024-04-05 7:11 ` syzbot
2024-04-05 15:28 ` syzbot
` (11 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: syzbot @ 2024-04-05 7:11 UTC (permalink / raw)
To: linux-kernel
For archival purposes, forwarding an incoming command email to
linux-kernel@vger.kernel.org.
***
Subject: [PATCH net] nfc: nci: Fix uninit-value in nci_rx_work
Author: ryasuoka@redhat.com
#syz test: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 58c806d867bf265c6fd16fc3bc62e2d3c156b5c9
diff --git a/net/nfc/nci/core.c b/net/nfc/nci/core.c
index 0d26c8ec9993..b7a020484131 100644
--- a/net/nfc/nci/core.c
+++ b/net/nfc/nci/core.c
@@ -1516,7 +1516,7 @@ static void nci_rx_work(struct work_struct *work)
nfc_send_to_raw_sock(ndev->nfc_dev, skb,
RAW_PAYLOAD_NCI, NFC_DIRECTION_RX);
- if (!nci_plen(skb->data)) {
+ if (!skb->len || !nci_plen(skb->data)) {
kfree_skb(skb);
break;
}
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [syzbot] [PATCH net] nfc: nci: Fix uninit-value in nci_rx_work
2024-01-01 13:38 [syzbot] [net?] [nfc?] KMSAN: uninit-value in nci_rx_work syzbot
2024-04-05 7:11 ` [syzbot] [PATCH net] nfc: nci: Fix " syzbot
@ 2024-04-05 15:28 ` syzbot
2024-04-05 15:46 ` syzbot
` (10 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: syzbot @ 2024-04-05 15:28 UTC (permalink / raw)
To: linux-kernel
For archival purposes, forwarding an incoming command email to
linux-kernel@vger.kernel.org.
***
Subject: [PATCH net] nfc: nci: Fix uninit-value in nci_rx_work
Author: ryasuoka@redhat.com
#syz test: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 58c806d867bf265c6fd16fc3bc62e2d3c156b5c9
diff --git a/net/nfc/nci/core.c b/net/nfc/nci/core.c
index 0d26c8ec9993..b7a020484131 100644
--- a/net/nfc/nci/core.c
+++ b/net/nfc/nci/core.c
@@ -1516,7 +1516,7 @@ static void nci_rx_work(struct work_struct *work)
nfc_send_to_raw_sock(ndev->nfc_dev, skb,
RAW_PAYLOAD_NCI, NFC_DIRECTION_RX);
- if (!nci_plen(skb->data)) {
+ if (!skb->len || !nci_plen(skb->data)) {
kfree_skb(skb);
break;
}
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [syzbot] [PATCH net] nfc: nci: Fix uninit-value in nci_rx_work
2024-01-01 13:38 [syzbot] [net?] [nfc?] KMSAN: uninit-value in nci_rx_work syzbot
2024-04-05 7:11 ` [syzbot] [PATCH net] nfc: nci: Fix " syzbot
2024-04-05 15:28 ` syzbot
@ 2024-04-05 15:46 ` syzbot
2024-04-05 15:50 ` syzbot
` (9 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: syzbot @ 2024-04-05 15:46 UTC (permalink / raw)
To: linux-kernel
For archival purposes, forwarding an incoming command email to
linux-kernel@vger.kernel.org.
***
Subject: [PATCH net] nfc: nci: Fix uninit-value in nci_rx_work
Author: ryasuoka@redhat.com
#syz test: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 58c806d867bf265c6fd16fc3bc62e2d3c156b5c9
diff --git a/net/nfc/nci/core.c b/net/nfc/nci/core.c
index cdad47b140fa..b7a020484131 100644
--- a/net/nfc/nci/core.c
+++ b/net/nfc/nci/core.c
@@ -1516,6 +1516,11 @@ static void nci_rx_work(struct work_struct *work)
nfc_send_to_raw_sock(ndev->nfc_dev, skb,
RAW_PAYLOAD_NCI, NFC_DIRECTION_RX);
+ if (!skb->len || !nci_plen(skb->data)) {
+ kfree_skb(skb);
+ break;
+ }
+
/* Process frame */
switch (nci_mt(skb->data)) {
case NCI_MT_RSP_PKT:
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [syzbot] [PATCH net] nfc: nci: Fix uninit-value in nci_rx_work
2024-01-01 13:38 [syzbot] [net?] [nfc?] KMSAN: uninit-value in nci_rx_work syzbot
` (2 preceding siblings ...)
2024-04-05 15:46 ` syzbot
@ 2024-04-05 15:50 ` syzbot
2024-04-25 2:55 ` [syzbot] [PATCH net v2] " syzbot
` (8 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: syzbot @ 2024-04-05 15:50 UTC (permalink / raw)
To: linux-kernel
For archival purposes, forwarding an incoming command email to
linux-kernel@vger.kernel.org.
***
Subject: [PATCH net] nfc: nci: Fix uninit-value in nci_rx_work
Author: ryasuoka@redhat.com
#syz test: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
diff --git a/net/nfc/nci/core.c b/net/nfc/nci/core.c
index 0d26c8ec9993..b7a020484131 100644
--- a/net/nfc/nci/core.c
+++ b/net/nfc/nci/core.c
@@ -1516,7 +1516,7 @@ static void nci_rx_work(struct work_struct *work)
nfc_send_to_raw_sock(ndev->nfc_dev, skb,
RAW_PAYLOAD_NCI, NFC_DIRECTION_RX);
- if (!nci_plen(skb->data)) {
+ if (!skb->len || !nci_plen(skb->data)) {
kfree_skb(skb);
break;
}
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [syzbot] [PATCH net v2] nfc: nci: Fix uninit-value in nci_rx_work
2024-01-01 13:38 [syzbot] [net?] [nfc?] KMSAN: uninit-value in nci_rx_work syzbot
` (3 preceding siblings ...)
2024-04-05 15:50 ` syzbot
@ 2024-04-25 2:55 ` syzbot
2024-04-25 2:55 ` syzbot
` (7 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: syzbot @ 2024-04-25 2:55 UTC (permalink / raw)
To: linux-kernel
For archival purposes, forwarding an incoming command email to
linux-kernel@vger.kernel.org.
***
Subject: [PATCH net v2] nfc: nci: Fix uninit-value in nci_rx_work
Author: ryasuoka@redhat.com
#syz test: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
diff --git a/net/nfc/nci/core.c b/net/nfc/nci/core.c
index 0d26c8ec9993..ab07b5f69664 100644
--- a/net/nfc/nci/core.c
+++ b/net/nfc/nci/core.c
@@ -1463,6 +1463,16 @@ int nci_core_ntf_packet(struct nci_dev *ndev, __u16 opcode,
ndev->ops->n_core_ops);
}
+static bool nci_valid_size(struct sk_buff *skb, unsigned int header_size)
+{
+ if (skb->len < header_size ||
+ !nci_plen(skb->data) ||
+ skb->len < header_size + nci_plen(skb->data)) {
+ return false;
+ }
+ return true;
+}
+
/* ---- NCI TX Data worker thread ---- */
static void nci_tx_work(struct work_struct *work)
@@ -1516,30 +1526,36 @@ static void nci_rx_work(struct work_struct *work)
nfc_send_to_raw_sock(ndev->nfc_dev, skb,
RAW_PAYLOAD_NCI, NFC_DIRECTION_RX);
- if (!nci_plen(skb->data)) {
- kfree_skb(skb);
- break;
- }
+ if (!skb->len)
+ goto invalid_pkt_free;
/* Process frame */
switch (nci_mt(skb->data)) {
case NCI_MT_RSP_PKT:
+ if (!nci_valid_size(skb, NCI_CTRL_HDR_SIZE))
+ goto invalid_pkt_free;
nci_rsp_packet(ndev, skb);
break;
case NCI_MT_NTF_PKT:
+ if (!nci_valid_size(skb, NCI_CTRL_HDR_SIZE))
+ goto invalid_pkt_free;
nci_ntf_packet(ndev, skb);
break;
case NCI_MT_DATA_PKT:
+ if (!nci_valid_size(skb, NCI_DATA_HDR_SIZE))
+ goto invalid_pkt_free;
nci_rx_data_packet(ndev, skb);
break;
default:
pr_err("unknown MT 0x%x\n", nci_mt(skb->data));
- kfree_skb(skb);
- break;
+ goto invalid_pkt_free;
}
+invalid_pkt_free:
+ kfree_skb(skb);
+ break;
}
/* check if a data exchange timeout has occurred */
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [syzbot] [PATCH net v2] nfc: nci: Fix uninit-value in nci_rx_work
2024-01-01 13:38 [syzbot] [net?] [nfc?] KMSAN: uninit-value in nci_rx_work syzbot
` (4 preceding siblings ...)
2024-04-25 2:55 ` [syzbot] [PATCH net v2] " syzbot
@ 2024-04-25 2:55 ` syzbot
2024-05-01 18:00 ` [syzbot] [PATCH net v3] " syzbot
` (6 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: syzbot @ 2024-04-25 2:55 UTC (permalink / raw)
To: linux-kernel
For archival purposes, forwarding an incoming command email to
linux-kernel@vger.kernel.org.
***
Subject: [PATCH net v2] nfc: nci: Fix uninit-value in nci_rx_work
Author: ryasuoka@redhat.com
#syz test: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
diff --git a/net/nfc/nci/core.c b/net/nfc/nci/core.c
index 0d26c8ec9993..ab07b5f69664 100644
--- a/net/nfc/nci/core.c
+++ b/net/nfc/nci/core.c
@@ -1463,6 +1463,16 @@ int nci_core_ntf_packet(struct nci_dev *ndev, __u16 opcode,
ndev->ops->n_core_ops);
}
+static bool nci_valid_size(struct sk_buff *skb, unsigned int header_size)
+{
+ if (skb->len < header_size ||
+ !nci_plen(skb->data) ||
+ skb->len < header_size + nci_plen(skb->data)) {
+ return false;
+ }
+ return true;
+}
+
/* ---- NCI TX Data worker thread ---- */
static void nci_tx_work(struct work_struct *work)
@@ -1516,30 +1526,36 @@ static void nci_rx_work(struct work_struct *work)
nfc_send_to_raw_sock(ndev->nfc_dev, skb,
RAW_PAYLOAD_NCI, NFC_DIRECTION_RX);
- if (!nci_plen(skb->data)) {
- kfree_skb(skb);
- break;
- }
+ if (!skb->len)
+ goto invalid_pkt_free;
/* Process frame */
switch (nci_mt(skb->data)) {
case NCI_MT_RSP_PKT:
+ if (!nci_valid_size(skb, NCI_CTRL_HDR_SIZE))
+ goto invalid_pkt_free;
nci_rsp_packet(ndev, skb);
break;
case NCI_MT_NTF_PKT:
+ if (!nci_valid_size(skb, NCI_CTRL_HDR_SIZE))
+ goto invalid_pkt_free;
nci_ntf_packet(ndev, skb);
break;
case NCI_MT_DATA_PKT:
+ if (!nci_valid_size(skb, NCI_DATA_HDR_SIZE))
+ goto invalid_pkt_free;
nci_rx_data_packet(ndev, skb);
break;
default:
pr_err("unknown MT 0x%x\n", nci_mt(skb->data));
- kfree_skb(skb);
- break;
+ goto invalid_pkt_free;
}
+invalid_pkt_free:
+ kfree_skb(skb);
+ break;
}
/* check if a data exchange timeout has occurred */
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [syzbot] [PATCH net v3] nfc: nci: Fix uninit-value in nci_rx_work
2024-01-01 13:38 [syzbot] [net?] [nfc?] KMSAN: uninit-value in nci_rx_work syzbot
` (5 preceding siblings ...)
2024-04-25 2:55 ` syzbot
@ 2024-05-01 18:00 ` syzbot
2024-05-02 5:26 ` syzbot
` (5 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: syzbot @ 2024-05-01 18:00 UTC (permalink / raw)
To: linux-kernel
For archival purposes, forwarding an incoming command email to
linux-kernel@vger.kernel.org.
***
Subject: [PATCH net v3] nfc: nci: Fix uninit-value in nci_rx_work
Author: ryasuoka@redhat.com
#syz test: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
diff --git a/net/nfc/nci/core.c b/net/nfc/nci/core.c
index 0d26c8ec9993..e4f92a090022 100644
--- a/net/nfc/nci/core.c
+++ b/net/nfc/nci/core.c
@@ -1463,6 +1463,16 @@ int nci_core_ntf_packet(struct nci_dev *ndev, __u16 opcode,
ndev->ops->n_core_ops);
}
+static bool nci_valid_size(struct sk_buff *skb, unsigned int header_size)
+{
+ if (skb->len < header_size ||
+ !nci_plen(skb->data) ||
+ skb->len < header_size + nci_plen(skb->data)) {
+ return false;
+ }
+ return true;
+}
+
/* ---- NCI TX Data worker thread ---- */
static void nci_tx_work(struct work_struct *work)
@@ -1516,30 +1526,35 @@ static void nci_rx_work(struct work_struct *work)
nfc_send_to_raw_sock(ndev->nfc_dev, skb,
RAW_PAYLOAD_NCI, NFC_DIRECTION_RX);
- if (!nci_plen(skb->data)) {
- kfree_skb(skb);
- break;
- }
+ if (!skb->len)
+ goto invalid_pkt_free;
/* Process frame */
switch (nci_mt(skb->data)) {
case NCI_MT_RSP_PKT:
+ if (!nci_valid_size(skb, NCI_CTRL_HDR_SIZE))
+ goto invalid_pkt_free;
nci_rsp_packet(ndev, skb);
- break;
+ continue;
case NCI_MT_NTF_PKT:
+ if (!nci_valid_size(skb, NCI_CTRL_HDR_SIZE))
+ goto invalid_pkt_free;
nci_ntf_packet(ndev, skb);
- break;
+ continue;
case NCI_MT_DATA_PKT:
+ if (!nci_valid_size(skb, NCI_DATA_HDR_SIZE))
+ goto invalid_pkt_free;
nci_rx_data_packet(ndev, skb);
- break;
+ continue;
default:
pr_err("unknown MT 0x%x\n", nci_mt(skb->data));
- kfree_skb(skb);
- break;
+ goto invalid_pkt_free;
}
+invalid_pkt_free:
+ kfree_skb(skb);
}
/* check if a data exchange timeout has occurred */
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [syzbot] [PATCH net v3] nfc: nci: Fix uninit-value in nci_rx_work
2024-01-01 13:38 [syzbot] [net?] [nfc?] KMSAN: uninit-value in nci_rx_work syzbot
` (6 preceding siblings ...)
2024-05-01 18:00 ` [syzbot] [PATCH net v3] " syzbot
@ 2024-05-02 5:26 ` syzbot
2024-05-08 15:08 ` [syzbot] [PATCH net v4] " syzbot
` (4 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: syzbot @ 2024-05-02 5:26 UTC (permalink / raw)
To: linux-kernel
For archival purposes, forwarding an incoming command email to
linux-kernel@vger.kernel.org.
***
Subject: [PATCH net v3] nfc: nci: Fix uninit-value in nci_rx_work
Author: ryasuoka@redhat.com
#syz test: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git e88c4cfcb7b888ac374916806f86c17d8ecaeb67
diff --git a/net/nfc/nci/core.c b/net/nfc/nci/core.c
index 0d26c8ec9993..e4f92a090022 100644
--- a/net/nfc/nci/core.c
+++ b/net/nfc/nci/core.c
@@ -1463,6 +1463,16 @@ int nci_core_ntf_packet(struct nci_dev *ndev, __u16 opcode,
ndev->ops->n_core_ops);
}
+static bool nci_valid_size(struct sk_buff *skb, unsigned int header_size)
+{
+ if (skb->len < header_size ||
+ !nci_plen(skb->data) ||
+ skb->len < header_size + nci_plen(skb->data)) {
+ return false;
+ }
+ return true;
+}
+
/* ---- NCI TX Data worker thread ---- */
static void nci_tx_work(struct work_struct *work)
@@ -1516,30 +1526,35 @@ static void nci_rx_work(struct work_struct *work)
nfc_send_to_raw_sock(ndev->nfc_dev, skb,
RAW_PAYLOAD_NCI, NFC_DIRECTION_RX);
- if (!nci_plen(skb->data)) {
- kfree_skb(skb);
- break;
- }
+ if (!skb->len)
+ goto invalid_pkt_free;
/* Process frame */
switch (nci_mt(skb->data)) {
case NCI_MT_RSP_PKT:
+ if (!nci_valid_size(skb, NCI_CTRL_HDR_SIZE))
+ goto invalid_pkt_free;
nci_rsp_packet(ndev, skb);
- break;
+ continue;
case NCI_MT_NTF_PKT:
+ if (!nci_valid_size(skb, NCI_CTRL_HDR_SIZE))
+ goto invalid_pkt_free;
nci_ntf_packet(ndev, skb);
- break;
+ continue;
case NCI_MT_DATA_PKT:
+ if (!nci_valid_size(skb, NCI_DATA_HDR_SIZE))
+ goto invalid_pkt_free;
nci_rx_data_packet(ndev, skb);
- break;
+ continue;
default:
pr_err("unknown MT 0x%x\n", nci_mt(skb->data));
- kfree_skb(skb);
- break;
+ goto invalid_pkt_free;
}
+invalid_pkt_free:
+ kfree_skb(skb);
}
/* check if a data exchange timeout has occurred */
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [syzbot] [PATCH net v4] nfc: nci: Fix uninit-value in nci_rx_work
2024-01-01 13:38 [syzbot] [net?] [nfc?] KMSAN: uninit-value in nci_rx_work syzbot
` (7 preceding siblings ...)
2024-05-02 5:26 ` syzbot
@ 2024-05-08 15:08 ` syzbot
2024-05-08 15:16 ` syzbot
` (3 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: syzbot @ 2024-05-08 15:08 UTC (permalink / raw)
To: linux-kernel
For archival purposes, forwarding an incoming command email to
linux-kernel@vger.kernel.org.
***
Subject: [PATCH net v4] nfc: nci: Fix uninit-value in nci_rx_work
Author: ryasuoka@redhat.com
#syz test: git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git master
diff --git a/net/nfc/nci/core.c b/net/nfc/nci/core.c
index b133dc55304c..cd2d54168a8e 100644
--- a/net/nfc/nci/core.c
+++ b/net/nfc/nci/core.c
@@ -1463,6 +1463,16 @@ int nci_core_ntf_packet(struct nci_dev *ndev, __u16 opcode,
ndev->ops->n_core_ops);
}
+static bool nci_valid_size(struct sk_buff *skb, unsigned int header_size)
+{
+ if (skb->len < header_size ||
+ !nci_plen(skb->data) ||
+ skb->len < header_size + nci_plen(skb->data)) {
+ return false;
+ }
+ return true;
+}
+
/* ---- NCI TX Data worker thread ---- */
static void nci_tx_work(struct work_struct *work)
@@ -1516,23 +1526,34 @@ static void nci_rx_work(struct work_struct *work)
nfc_send_to_raw_sock(ndev->nfc_dev, skb,
RAW_PAYLOAD_NCI, NFC_DIRECTION_RX);
- if (!nci_plen(skb->data)) {
+ if (!skb->len) {
kfree_skb(skb);
- kcov_remote_stop();
- break;
+ continue;
}
/* Process frame */
switch (nci_mt(skb->data)) {
case NCI_MT_RSP_PKT:
+ if (!nci_valid_size(skb, NCI_CTRL_HDR_SIZE)) {
+ kfree_skb(skb);
+ break;
+ }
nci_rsp_packet(ndev, skb);
break;
case NCI_MT_NTF_PKT:
+ if (!nci_valid_size(skb, NCI_CTRL_HDR_SIZE)) {
+ kfree_skb(skb);
+ break;
+ }
nci_ntf_packet(ndev, skb);
break;
case NCI_MT_DATA_PKT:
+ if (!nci_valid_size(skb, NCI_DATA_HDR_SIZE)) {
+ kfree_skb(skb);
+ break;
+ }
nci_rx_data_packet(ndev, skb);
break;
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [syzbot] [PATCH net v4] nfc: nci: Fix uninit-value in nci_rx_work
2024-01-01 13:38 [syzbot] [net?] [nfc?] KMSAN: uninit-value in nci_rx_work syzbot
` (8 preceding siblings ...)
2024-05-08 15:08 ` [syzbot] [PATCH net v4] " syzbot
@ 2024-05-08 15:16 ` syzbot
2024-05-09 0:49 ` syzbot
` (2 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: syzbot @ 2024-05-08 15:16 UTC (permalink / raw)
To: linux-kernel
For archival purposes, forwarding an incoming command email to
linux-kernel@vger.kernel.org.
***
Subject: [PATCH net v4] nfc: nci: Fix uninit-value in nci_rx_work
Author: ryasuoka@redhat.com
#syz test: git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git master
diff --git a/net/nfc/nci/core.c b/net/nfc/nci/core.c
index b133dc55304c..0aaff30cb68f 100644
--- a/net/nfc/nci/core.c
+++ b/net/nfc/nci/core.c
@@ -1463,6 +1463,16 @@ int nci_core_ntf_packet(struct nci_dev *ndev, __u16 opcode,
ndev->ops->n_core_ops);
}
+static bool nci_valid_size(struct sk_buff *skb, unsigned int header_size)
+{
+ if (skb->len < header_size ||
+ !nci_plen(skb->data) ||
+ skb->len < header_size + nci_plen(skb->data)) {
+ return false;
+ }
+ return true;
+}
+
/* ---- NCI TX Data worker thread ---- */
static void nci_tx_work(struct work_struct *work)
@@ -1516,24 +1526,32 @@ static void nci_rx_work(struct work_struct *work)
nfc_send_to_raw_sock(ndev->nfc_dev, skb,
RAW_PAYLOAD_NCI, NFC_DIRECTION_RX);
- if (!nci_plen(skb->data)) {
+ if (!skb->len) {
kfree_skb(skb);
- kcov_remote_stop();
- break;
+ continue;
}
/* Process frame */
switch (nci_mt(skb->data)) {
case NCI_MT_RSP_PKT:
- nci_rsp_packet(ndev, skb);
+ if (nci_valid_size(skb, NCI_CTRL_HDR_SIZE))
+ nci_rsp_packet(ndev, skb);
+ else
+ kfree_skb(skb);
break;
case NCI_MT_NTF_PKT:
- nci_ntf_packet(ndev, skb);
+ if (nci_valid_size(skb, NCI_CTRL_HDR_SIZE))
+ nci_ntf_packet(ndev, skb);
+ else
+ kfree_skb(skb);
break;
case NCI_MT_DATA_PKT:
- nci_rx_data_packet(ndev, skb);
+ if (nci_valid_size(skb, NCI_DATA_HDR_SIZE))
+ nci_rx_data_packet(ndev, skb);
+ else
+ kfree_skb(skb);
break;
default:
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [syzbot] [PATCH net v4] nfc: nci: Fix uninit-value in nci_rx_work
2024-01-01 13:38 [syzbot] [net?] [nfc?] KMSAN: uninit-value in nci_rx_work syzbot
` (9 preceding siblings ...)
2024-05-08 15:16 ` syzbot
@ 2024-05-09 0:49 ` syzbot
2024-05-09 0:51 ` syzbot
2024-05-09 4:07 ` syzbot
12 siblings, 0 replies; 14+ messages in thread
From: syzbot @ 2024-05-09 0:49 UTC (permalink / raw)
To: linux-kernel, syzkaller-bugs
For archival purposes, forwarding an incoming command email to
linux-kernel@vger.kernel.org, syzkaller-bugs@googlegroups.com.
***
Subject: [PATCH net v4] nfc: nci: Fix uninit-value in nci_rx_work
Author: ryasuoka@redhat.com
#syz test: git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git main
diff --git a/net/nfc/nci/core.c b/net/nfc/nci/core.c
index b133dc55304c..0aaff30cb68f 100644
--- a/net/nfc/nci/core.c
+++ b/net/nfc/nci/core.c
@@ -1463,6 +1463,16 @@ int nci_core_ntf_packet(struct nci_dev *ndev, __u16 opcode,
ndev->ops->n_core_ops);
}
+static bool nci_valid_size(struct sk_buff *skb, unsigned int header_size)
+{
+ if (skb->len < header_size ||
+ !nci_plen(skb->data) ||
+ skb->len < header_size + nci_plen(skb->data)) {
+ return false;
+ }
+ return true;
+}
+
/* ---- NCI TX Data worker thread ---- */
static void nci_tx_work(struct work_struct *work)
@@ -1516,24 +1526,32 @@ static void nci_rx_work(struct work_struct *work)
nfc_send_to_raw_sock(ndev->nfc_dev, skb,
RAW_PAYLOAD_NCI, NFC_DIRECTION_RX);
- if (!nci_plen(skb->data)) {
+ if (!skb->len) {
kfree_skb(skb);
- kcov_remote_stop();
- break;
+ continue;
}
/* Process frame */
switch (nci_mt(skb->data)) {
case NCI_MT_RSP_PKT:
- nci_rsp_packet(ndev, skb);
+ if (nci_valid_size(skb, NCI_CTRL_HDR_SIZE))
+ nci_rsp_packet(ndev, skb);
+ else
+ kfree_skb(skb);
break;
case NCI_MT_NTF_PKT:
- nci_ntf_packet(ndev, skb);
+ if (nci_valid_size(skb, NCI_CTRL_HDR_SIZE))
+ nci_ntf_packet(ndev, skb);
+ else
+ kfree_skb(skb);
break;
case NCI_MT_DATA_PKT:
- nci_rx_data_packet(ndev, skb);
+ if (nci_valid_size(skb, NCI_DATA_HDR_SIZE))
+ nci_rx_data_packet(ndev, skb);
+ else
+ kfree_skb(skb);
break;
default:
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [syzbot] [PATCH net v4] nfc: nci: Fix uninit-value in nci_rx_work
2024-01-01 13:38 [syzbot] [net?] [nfc?] KMSAN: uninit-value in nci_rx_work syzbot
` (10 preceding siblings ...)
2024-05-09 0:49 ` syzbot
@ 2024-05-09 0:51 ` syzbot
2024-05-09 4:07 ` syzbot
12 siblings, 0 replies; 14+ messages in thread
From: syzbot @ 2024-05-09 0:51 UTC (permalink / raw)
To: linux-kernel
For archival purposes, forwarding an incoming command email to
linux-kernel@vger.kernel.org.
***
Subject: [PATCH net v4] nfc: nci: Fix uninit-value in nci_rx_work
Author: ryasuoka@redhat.com
#syz test: git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git main
diff --git a/net/nfc/nci/core.c b/net/nfc/nci/core.c
index b133dc55304c..cd2d54168a8e 100644
--- a/net/nfc/nci/core.c
+++ b/net/nfc/nci/core.c
@@ -1463,6 +1463,16 @@ int nci_core_ntf_packet(struct nci_dev *ndev, __u16 opcode,
ndev->ops->n_core_ops);
}
+static bool nci_valid_size(struct sk_buff *skb, unsigned int header_size)
+{
+ if (skb->len < header_size ||
+ !nci_plen(skb->data) ||
+ skb->len < header_size + nci_plen(skb->data)) {
+ return false;
+ }
+ return true;
+}
+
/* ---- NCI TX Data worker thread ---- */
static void nci_tx_work(struct work_struct *work)
@@ -1516,23 +1526,34 @@ static void nci_rx_work(struct work_struct *work)
nfc_send_to_raw_sock(ndev->nfc_dev, skb,
RAW_PAYLOAD_NCI, NFC_DIRECTION_RX);
- if (!nci_plen(skb->data)) {
+ if (!skb->len) {
kfree_skb(skb);
- kcov_remote_stop();
- break;
+ continue;
}
/* Process frame */
switch (nci_mt(skb->data)) {
case NCI_MT_RSP_PKT:
+ if (!nci_valid_size(skb, NCI_CTRL_HDR_SIZE)) {
+ kfree_skb(skb);
+ break;
+ }
nci_rsp_packet(ndev, skb);
break;
case NCI_MT_NTF_PKT:
+ if (!nci_valid_size(skb, NCI_CTRL_HDR_SIZE)) {
+ kfree_skb(skb);
+ break;
+ }
nci_ntf_packet(ndev, skb);
break;
case NCI_MT_DATA_PKT:
+ if (!nci_valid_size(skb, NCI_DATA_HDR_SIZE)) {
+ kfree_skb(skb);
+ break;
+ }
nci_rx_data_packet(ndev, skb);
break;
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [syzbot] [PATCH net v4] nfc: nci: Fix uninit-value in nci_rx_work
2024-01-01 13:38 [syzbot] [net?] [nfc?] KMSAN: uninit-value in nci_rx_work syzbot
` (11 preceding siblings ...)
2024-05-09 0:51 ` syzbot
@ 2024-05-09 4:07 ` syzbot
12 siblings, 0 replies; 14+ messages in thread
From: syzbot @ 2024-05-09 4:07 UTC (permalink / raw)
To: linux-kernel
For archival purposes, forwarding an incoming command email to
linux-kernel@vger.kernel.org.
***
Subject: [PATCH net v4] nfc: nci: Fix uninit-value in nci_rx_work
Author: ryasuoka@redhat.com
#syz test: git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git main
diff --git a/net/nfc/nci/core.c b/net/nfc/nci/core.c
index b133dc55304c..0aaff30cb68f 100644
--- a/net/nfc/nci/core.c
+++ b/net/nfc/nci/core.c
@@ -1463,6 +1463,16 @@ int nci_core_ntf_packet(struct nci_dev *ndev, __u16 opcode,
ndev->ops->n_core_ops);
}
+static bool nci_valid_size(struct sk_buff *skb, unsigned int header_size)
+{
+ if (skb->len < header_size ||
+ !nci_plen(skb->data) ||
+ skb->len < header_size + nci_plen(skb->data)) {
+ return false;
+ }
+ return true;
+}
+
/* ---- NCI TX Data worker thread ---- */
static void nci_tx_work(struct work_struct *work)
@@ -1516,24 +1526,32 @@ static void nci_rx_work(struct work_struct *work)
nfc_send_to_raw_sock(ndev->nfc_dev, skb,
RAW_PAYLOAD_NCI, NFC_DIRECTION_RX);
- if (!nci_plen(skb->data)) {
+ if (!skb->len) {
kfree_skb(skb);
- kcov_remote_stop();
- break;
+ continue;
}
/* Process frame */
switch (nci_mt(skb->data)) {
case NCI_MT_RSP_PKT:
- nci_rsp_packet(ndev, skb);
+ if (nci_valid_size(skb, NCI_CTRL_HDR_SIZE))
+ nci_rsp_packet(ndev, skb);
+ else
+ kfree_skb(skb);
break;
case NCI_MT_NTF_PKT:
- nci_ntf_packet(ndev, skb);
+ if (nci_valid_size(skb, NCI_CTRL_HDR_SIZE))
+ nci_ntf_packet(ndev, skb);
+ else
+ kfree_skb(skb);
break;
case NCI_MT_DATA_PKT:
- nci_rx_data_packet(ndev, skb);
+ if (nci_valid_size(skb, NCI_DATA_HDR_SIZE))
+ nci_rx_data_packet(ndev, skb);
+ else
+ kfree_skb(skb);
break;
default:
^ permalink raw reply related [flat|nested] 14+ messages in thread
end of thread, other threads:[~2024-05-09 4:07 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-01-01 13:38 [syzbot] [net?] [nfc?] KMSAN: uninit-value in nci_rx_work syzbot
2024-04-05 7:11 ` [syzbot] [PATCH net] nfc: nci: Fix " syzbot
2024-04-05 15:28 ` syzbot
2024-04-05 15:46 ` syzbot
2024-04-05 15:50 ` syzbot
2024-04-25 2:55 ` [syzbot] [PATCH net v2] " syzbot
2024-04-25 2:55 ` syzbot
2024-05-01 18:00 ` [syzbot] [PATCH net v3] " syzbot
2024-05-02 5:26 ` syzbot
2024-05-08 15:08 ` [syzbot] [PATCH net v4] " syzbot
2024-05-08 15:16 ` syzbot
2024-05-09 0:49 ` syzbot
2024-05-09 0:51 ` syzbot
2024-05-09 4:07 ` syzbot
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.