All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v2] net: stellaris_enet: check packet length against receive buffer
@ 2016-04-07 12:35 P J P
  2016-04-07 13:05 ` Peter Maydell
  0 siblings, 1 reply; 3+ messages in thread
From: P J P @ 2016-04-07 12:35 UTC (permalink / raw)
  To: Qemu Developers
  Cc: Oleksandr Bazhaniuk, Peter Maydell, Jason Wang, 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 | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

Update per review:
  -> https://lists.gnu.org/archive/html/qemu-devel/2016-04/msg01142.html

diff --git a/hw/net/stellaris_enet.c b/hw/net/stellaris_enet.c
index 21a4773..eddbe60 100644
--- a/hw/net/stellaris_enet.c
+++ b/hw/net/stellaris_enet.c
@@ -235,8 +235,16 @@ 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] 3+ messages in thread

* Re: [Qemu-devel] [PATCH v2] net: stellaris_enet: check packet length against receive buffer
  2016-04-07 12:35 [Qemu-devel] [PATCH v2] net: stellaris_enet: check packet length against receive buffer P J P
@ 2016-04-07 13:05 ` Peter Maydell
  2016-04-08  6:05   ` P J P
  0 siblings, 1 reply; 3+ messages in thread
From: Peter Maydell @ 2016-04-07 13:05 UTC (permalink / raw)
  To: P J P; +Cc: Oleksandr Bazhaniuk, Jason Wang, Qemu Developers, Prasad J Pandit

On 7 April 2016 at 13:35, 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 | 10 +++++++++-
>  1 file changed, 9 insertions(+), 1 deletion(-)
>
> Update per review:
>   -> https://lists.gnu.org/archive/html/qemu-devel/2016-04/msg01142.html
>
> diff --git a/hw/net/stellaris_enet.c b/hw/net/stellaris_enet.c
> index 21a4773..eddbe60 100644
> --- a/hw/net/stellaris_enet.c
> +++ b/hw/net/stellaris_enet.c
> @@ -235,8 +235,16 @@ 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;
> +    }

I think you could reasonably put a blank line before and after
the if() {} you've added here.

>      s->np++;
> -

Stray whitespace change.

>      s->rx[n].len = size + 6;
>      p = s->rx[n].data;
>      *(p++) = (size + 6);
> --
> 2.5.5
>

Otherwise
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>

thanks
-- PMM

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [Qemu-devel] [PATCH v2] net: stellaris_enet: check packet length against receive buffer
  2016-04-07 13:05 ` Peter Maydell
@ 2016-04-08  6:05   ` P J P
  0 siblings, 0 replies; 3+ messages in thread
From: P J P @ 2016-04-08  6:05 UTC (permalink / raw)
  To: Peter Maydell; +Cc: Qemu Developers, Jason Wang, Oleksandr Bazhaniuk

+-- On Thu, 7 Apr 2016, Peter Maydell wrote --+
| I think you could reasonably put a blank line before and after
| the if() {} you've added here.

Sent a revised patch v3. Thank you.
--
Prasad J Pandit / Red Hat Product Security Team
47AF CE69 3A90 54AA 9045 1053 DD13 3D32 FE5B 041F

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2016-04-08  6:05 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-04-07 12:35 [Qemu-devel] [PATCH v2] net: stellaris_enet: check packet length against receive buffer P J P
2016-04-07 13:05 ` Peter Maydell
2016-04-08  6:05   ` P J P

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.