From: Andrew Scull <ascull@google.com>
To: u-boot@lists.denx.de
Cc: sjg@chromium.org, trini@konsulko.com, Andrew Scull <ascull@google.com>
Subject: [PATCH v2 12/12] test: dm: virtio_rng: Test virtio-rng with faked device
Date: Wed, 13 Apr 2022 14:21:37 +0000 [thread overview]
Message-ID: <20220413142137.560987-13-ascull@google.com> (raw)
In-Reply-To: <20220413142137.560987-1-ascull@google.com>
Add a regression test for virtio-rng reading beyond the end of its
buffer if the virtio device provides an invalid length.
Signed-off-by: Andrew Scull <ascull@google.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
---
test/dm/Makefile | 1 +
test/dm/virtio_rng.c | 52 ++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 53 insertions(+)
create mode 100644 test/dm/virtio_rng.c
diff --git a/test/dm/Makefile b/test/dm/Makefile
index 6c467b145e..ba08c19515 100644
--- a/test/dm/Makefile
+++ b/test/dm/Makefile
@@ -109,6 +109,7 @@ obj-$(CONFIG_DM_VIDEO) += video.o
ifeq ($(CONFIG_VIRTIO_SANDBOX),y)
obj-y += virtio.o
obj-$(CONFIG_VIRTIO_RNG) += virtio_device.o
+obj-$(CONFIG_VIRTIO_RNG) += virtio_rng.o
endif
ifeq ($(CONFIG_WDT_GPIO)$(CONFIG_WDT_SANDBOX),yy)
obj-y += wdt.o
diff --git a/test/dm/virtio_rng.c b/test/dm/virtio_rng.c
new file mode 100644
index 0000000000..ff5646b4e1
--- /dev/null
+++ b/test/dm/virtio_rng.c
@@ -0,0 +1,52 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (c) 2022 Google, Inc.
+ * Written by Andrew Scull <ascull@google.com>
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <virtio_types.h>
+#include <virtio.h>
+#include <virtio_ring.h>
+#include <dm/device-internal.h>
+#include <dm/test.h>
+#include <rng.h>
+#include <test/test.h>
+#include <test/ut.h>
+
+/* This is a brittle means of getting access to the virtqueue */
+struct virtio_rng_priv {
+ struct virtqueue *rng_vq;
+};
+
+/* Test the virtio-rng driver validates the used size */
+static int dm_test_virtio_rng_check_len(struct unit_test_state *uts)
+{
+ struct udevice *bus, *dev;
+ struct virtio_rng_priv *priv;
+ u8 buffer[16];
+
+ /* check probe success */
+ ut_assertok(uclass_first_device(UCLASS_VIRTIO, &bus));
+ ut_assertnonnull(bus);
+
+ /* check the child virtio-rng device is bound */
+ ut_assertok(device_find_first_child(bus, &dev));
+ ut_assertnonnull(dev);
+
+ /* probe the virtio-rng driver */
+ ut_assertok(device_probe(dev));
+
+ /* simulate the device returning the buffer with too much data */
+ priv = dev_get_priv(dev);
+ priv->rng_vq->vring.used->idx = 1;
+ priv->rng_vq->vring.used->ring[0].id = 0;
+ priv->rng_vq->vring.used->ring[0].len = U32_MAX;
+
+ /* check the driver gracefully handles the error */
+ ut_asserteq(-EIO, dm_rng_read(dev, buffer, sizeof(buffer)));
+
+ return 0;
+}
+DM_TEST(dm_test_virtio_rng_check_len, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT);
--
2.35.1.1178.g4f1659d476-goog
prev parent reply other threads:[~2022-04-13 14:24 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-04-13 14:21 [PATCH v2 00/12] virtio: Harden and test vring Andrew Scull
2022-04-13 14:21 ` [PATCH v2 01/12] virtio_ring: Merge identical variables Andrew Scull
2022-04-22 8:55 ` Bin Meng
2022-04-13 14:21 ` [PATCH v2 02/12] virtio_ring: Add helper to attach vring descriptor Andrew Scull
2022-04-22 9:07 ` Bin Meng
2022-04-13 14:21 ` [PATCH v2 03/12] virtio_ring: Maintain a shadow copy of descriptors Andrew Scull
2022-04-13 14:21 ` [PATCH v2 04/12] virtio_ring: Check used descriptors are chain heads Andrew Scull
2022-04-13 14:21 ` [PATCH v2 05/12] dm: test: virtio: Test the virtio ring Andrew Scull
2022-04-13 14:21 ` [PATCH v2 06/12] virtio: sandbox: Fix device features bitfield Andrew Scull
2022-04-13 14:21 ` [PATCH v2 07/12] test: dm: virtio: Test notify before del_vqs Andrew Scull
2022-04-13 14:21 ` [PATCH v2 08/12] test: dm: virtio: Split out virtio device tests Andrew Scull
2022-04-13 14:21 ` [PATCH v2 09/12] virtio: sandbox: Bind RNG rather than block device Andrew Scull
2022-04-13 14:21 ` [PATCH v2 10/12] test: dm: virtio: Test virtio device driver probing Andrew Scull
2022-04-13 14:21 ` [PATCH v2 11/12] virtio: rng: Check length before copying Andrew Scull
2022-04-13 14:21 ` Andrew Scull [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220413142137.560987-13-ascull@google.com \
--to=ascull@google.com \
--cc=sjg@chromium.org \
--cc=trini@konsulko.com \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.