From patchwork Tue Nov 6 15:33:30 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 150277 Delivered-To: patches@linaro.org Received: by 2002:a2e:299d:0:0:0:0:0 with SMTP id p29-v6csp4030084ljp; Tue, 6 Nov 2018 07:33:35 -0800 (PST) X-Google-Smtp-Source: AJdET5dIH9rQjZTtcqCB7zt0kIuKcjWVLJb5mX4E1+2RJQQt3mJTgiIp8HZD9PeVVQqcG0EfOOhL X-Received: by 2002:adf:9387:: with SMTP id 7-v6mr22637981wrp.269.1541518414991; Tue, 06 Nov 2018 07:33:34 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1541518414; cv=none; d=google.com; s=arc-20160816; b=TkMWq9YPmnUNffm3mx59k4CfHwBR3oPPi+jsqiXUrHIfXMSSHaUonCPt8YLvCwlOdm fRykqeefFPrD44U30fdsq5CGN82vawLlPsZeDidyf+3lsQEFZeH+NOa5cZmUCoIkoSIk Hu0OcgRHnR0qcWyFFmziG8uAZ6AMLbA84OZm6K0tf34ktQ4SwWGgoRHqH6ECEei0ngte CQ4sJ85OE/RpLdKOAR24jEi0B81PeTM3cLcXetmoyNIPpor2Oiot48EA5HXZeKpN1gHm DE1iupy0F4awK1EvznlVaZGVro9ufyBwRlIXnj07mBcsaOAK2PBAgk83TeBsDtCHUUY3 I9JQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from; bh=V9RWSkuVX4894YMaKiDneTIOL34+iIRWokM1mj5ZiMg=; b=ipEp6Twv6zFwzaiRnTI+TmEJIGofAC6fbKI08nXbvBYkOIcI3gXdTVnx8tPKM8fVHQ FCqq988g23w2uQvekJUiydfK8JgBzLC84xXzf3+z+w11D1TGS9YL3LScTk3GO6WccJPO vEqM/9Ws5Q6cTg1p9Z/zQ9zTNVFsqL4oam/8dRfHhoI+9PM+lLHhLy0OJFcIMNKFZRqY 0aZhhq4tNIn1YhDhh31YoL6uo0+Sdb42eQTgDNc/R7ZRI7V5Xs9duI8L1fHOrwb3kTyK +d1yrq4/yWTqMPtG6EWbRjlJjuzUjE4p5+RW78cTEpOqsGJD3lELi49AD3Zuqt6CJ3DW thtg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of pm215@archaic.org.uk designates 2001:8b0:1d0::2 as permitted sender) smtp.mailfrom=pm215@archaic.org.uk; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by mx.google.com with ESMTPS id 40-v6si4191726wrl.439.2018.11.06.07.33.34 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 06 Nov 2018 07:33:34 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of pm215@archaic.org.uk designates 2001:8b0:1d0::2 as permitted sender) client-ip=2001:8b0:1d0::2; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of pm215@archaic.org.uk designates 2001:8b0:1d0::2 as permitted sender) smtp.mailfrom=pm215@archaic.org.uk; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from pm215 by orth.archaic.org.uk with local (Exim 4.89) (envelope-from ) id 1gK3MC-0007zr-Ki; Tue, 06 Nov 2018 15:33:32 +0000 From: Peter Maydell To: qemu-devel@nongnu.org Cc: patches@linaro.org, Paolo Bonzini , Pavel Dovgalyuk Subject: [PATCH for-3.1] replay: Exit on errors reading from replay log Date: Tue, 6 Nov 2018 15:33:30 +0000 Message-Id: <20181106153330.5139-1-peter.maydell@linaro.org> X-Mailer: git-send-email 2.19.1 MIME-Version: 1.0 Currently replay_get_byte() does not check for an error from getc(). Coverity points out (CID 1390622) that this could result in unexpected behaviour (such as looping forever, if we use the replay_get_dword() return value for a loop count). We don't expect reads from the replay log to fail, and if they do there is no way we can continue. So make them fatal errors. Signed-off-by: Peter Maydell --- Disclaimer: checked only with "make check". replay/replay-internal.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) -- 2.19.1 Reviewed-by: Pavel Dovgalyuk diff --git a/replay/replay-internal.c b/replay/replay-internal.c index 1cea1d4dc91..8f87e9b957e 100644 --- a/replay/replay-internal.c +++ b/replay/replay-internal.c @@ -35,6 +35,12 @@ static void replay_write_error(void) } } +static void replay_read_error(void) +{ + error_report("error reading the replay data"); + exit(1); +} + void replay_put_byte(uint8_t byte) { if (replay_file) { @@ -83,7 +89,11 @@ uint8_t replay_get_byte(void) { uint8_t byte = 0; if (replay_file) { - byte = getc(replay_file); + int r = getc(replay_file); + if (r == EOF) { + replay_read_error(); + } + byte = r; } return byte; } @@ -126,7 +136,7 @@ void replay_get_array(uint8_t *buf, size_t *size) if (replay_file) { *size = replay_get_dword(); if (fread(buf, 1, *size, replay_file) != *size) { - error_report("replay read error"); + replay_read_error(); } } } @@ -137,7 +147,7 @@ void replay_get_array_alloc(uint8_t **buf, size_t *size) *size = replay_get_dword(); *buf = g_malloc(*size); if (fread(*buf, 1, *size, replay_file) != *size) { - error_report("replay read error"); + replay_read_error(); } } }