From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37265) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X9Yo2-0004JN-Lg for qemu-devel@nongnu.org; Tue, 22 Jul 2014 08:04:38 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1X9Ynv-0005me-6M for qemu-devel@nongnu.org; Tue, 22 Jul 2014 08:04:30 -0400 Received: from mx1.redhat.com ([209.132.183.28]:51595) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X9Ynu-0005mT-Sm for qemu-devel@nongnu.org; Tue, 22 Jul 2014 08:04:23 -0400 From: Amit Shah Date: Tue, 22 Jul 2014 17:33:16 +0530 Message-Id: <713e8a102222b6b8ca65050d13b287f5705831b0.1406030120.git.amit.shah@redhat.com> In-Reply-To: References: In-Reply-To: References: Subject: [Qemu-devel] [PATCH 1/1] virtio-rng: Add human-readable error message for negative max-bytes parameter List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Peter Maydell Cc: Amit Shah , John Snow , qemu list From: John Snow If a negative integer is used for the max_bytes parameter, QEMU currently calls abort() and leaves behind a core dump. This patch replaces the abort with a simple error message to make the reason for the termination clearer. This also ensures device-hotplug with invalid input doesn't cause qemu to quit. There is an underlying insufficiency in the parameter parsing code of QEMU that renders it unable to reject negative values for unsigned properties, thus the error message "a non-negative integer below 2^63" is the most user-friendly and correct message we can give until the underlying insufficiency is corrected. Signed-off-by: John Snow Reviewed-by: Markus Armbruster Signed-off-by: Amit Shah --- hw/virtio/virtio-rng.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/hw/virtio/virtio-rng.c b/hw/virtio/virtio-rng.c index 1356aca..7c5a675 100644 --- a/hw/virtio/virtio-rng.c +++ b/hw/virtio/virtio-rng.c @@ -181,7 +181,13 @@ static void virtio_rng_device_realize(DeviceState *dev, Error **errp) vrng->vq = virtio_add_queue(vdev, 8, handle_input); - assert(vrng->conf.max_bytes <= INT64_MAX); + /* Workaround: Property parsing does not enforce unsigned integers, + * So this is a hack to reject such numbers. */ + if (vrng->conf.max_bytes > INT64_MAX) { + error_set(errp, QERR_INVALID_PARAMETER_VALUE, "max-bytes", + "a non-negative integer below 2^63"); + return; + } vrng->quota_remaining = vrng->conf.max_bytes; vrng->rate_limit_timer = timer_new_ms(QEMU_CLOCK_VIRTUAL, -- 1.9.3