* [Qemu-devel] [PATCH v3] net: stellaris_enet: check packet length against receive buffer
@ 2016-04-08 6:03 P J P
2016-04-11 13:25 ` Peter Maydell
0 siblings, 1 reply; 2+ messages in thread
From: P J P @ 2016-04-08 6:03 UTC (permalink / raw)
To: Qemu Developers
Cc: Jason Wang, Oleksandr Bazhaniuk, Peter Maydell, Prasad J Pandit
From: Prasad J Pandit <pjp@fedoraproject.org>
When receiving packets over Stellaris ethernet controller, it
uses receive buffer of size 2048 bytes. In case the controller
accepts large(MTU) packets, it could lead to memory corruption.
Add check to avoid it.
Reported-by: Oleksandr Bazhaniuk <oleksandr.bazhaniuk@intel.com>
Signed-off-by: Prasad J Pandit <pjp@fedoraproject.org>
---
hw/net/stellaris_enet.c | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
Update per review:
-> https://lists.gnu.org/archive/html/qemu-devel/2016-04/msg01173.html
diff --git a/hw/net/stellaris_enet.c b/hw/net/stellaris_enet.c
index 21a4773..fc48ba8 100644
--- a/hw/net/stellaris_enet.c
+++ b/hw/net/stellaris_enet.c
@@ -235,8 +235,18 @@ static ssize_t stellaris_enet_receive(NetClientState *nc, const uint8_t *buf, si
n = s->next_packet + s->np;
if (n >= 31)
n -= 31;
+
+ if (size >= sizeof(s->rx[n].data) - 6) {
+ /* If the packet won't fit into the
+ * emulated 2K RAM, this is reported
+ * as a FIFO overrun error.
+ */
+ s->ris |= SE_INT_FOV;
+ stellaris_enet_update(s);
+ return -1;
+ }
+
s->np++;
-
s->rx[n].len = size + 6;
p = s->rx[n].data;
*(p++) = (size + 6);
--
2.5.5
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [Qemu-devel] [PATCH v3] net: stellaris_enet: check packet length against receive buffer
2016-04-08 6:03 [Qemu-devel] [PATCH v3] net: stellaris_enet: check packet length against receive buffer P J P
@ 2016-04-11 13:25 ` Peter Maydell
0 siblings, 0 replies; 2+ messages in thread
From: Peter Maydell @ 2016-04-11 13:25 UTC (permalink / raw)
To: P J P; +Cc: Qemu Developers, Jason Wang, Oleksandr Bazhaniuk, Prasad J Pandit
On 8 April 2016 at 07:03, P J P <ppandit@redhat.com> wrote:
> From: Prasad J Pandit <pjp@fedoraproject.org>
>
> When receiving packets over Stellaris ethernet controller, it
> uses receive buffer of size 2048 bytes. In case the controller
> accepts large(MTU) packets, it could lead to memory corruption.
> Add check to avoid it.
>
> Reported-by: Oleksandr Bazhaniuk <oleksandr.bazhaniuk@intel.com>
> Signed-off-by: Prasad J Pandit <pjp@fedoraproject.org>
> ---
> hw/net/stellaris_enet.c | 12 +++++++++++-
> 1 file changed, 11 insertions(+), 1 deletion(-)
Applied to target-arm.next, thanks.
-- PMM
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2016-04-11 13:26 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-04-08 6:03 [Qemu-devel] [PATCH v3] net: stellaris_enet: check packet length against receive buffer P J P
2016-04-11 13:25 ` Peter Maydell
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).