summaryrefslogtreecommitdiffstats
path: root/hw/net
diff options
context:
space:
mode:
authorPrasad J Pandit <pjp@fedoraproject.org>2016-01-15 12:30:40 +0530
committerTimothy Pearson <tpearson@raptorengineering.com>2019-11-29 19:31:26 -0600
commitdce4414695d23709fb57c513de4ee05c17983e91 (patch)
treef2ed0effaec82b8a05524acd18b05d7a499eae56 /hw/net
parente6abbc67eaac3defbd955d6f8db23a05c6a63985 (diff)
downloadhqemu-dce4414695d23709fb57c513de4ee05c17983e91.zip
hqemu-dce4414695d23709fb57c513de4ee05c17983e91.tar.gz
net: cadence_gem: check packet size in gem_recieve
While receiving packets in 'gem_receive' routine, if Frame Check Sequence(FCS) is enabled, it copies the packet into a local buffer without checking its size. Add check to validate packet length against the buffer size to avoid buffer overflow. Reported-by: Ling Liu <liuling-it@360.cn> Signed-off-by: Prasad J Pandit <pjp@fedoraproject.org> Signed-off-by: Jason Wang <jasowang@redhat.com>
Diffstat (limited to 'hw/net')
-rw-r--r--hw/net/cadence_gem.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/hw/net/cadence_gem.c b/hw/net/cadence_gem.c
index f9e4091..e513d9d 100644
--- a/hw/net/cadence_gem.c
+++ b/hw/net/cadence_gem.c
@@ -678,6 +678,10 @@ static ssize_t gem_receive(NetClientState *nc, const uint8_t *buf, size_t size)
} else {
unsigned crc_val;
+ if (size > sizeof(rxbuf) - sizeof(crc_val)) {
+ size = sizeof(rxbuf) - sizeof(crc_val);
+ }
+ bytes_to_copy = size;
/* The application wants the FCS field, which QEMU does not provide.
* We must try and calculate one.
*/
OpenPOWER on IntegriCloud