From patchwork Sat Nov 10 03:41:15 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Li Qiang X-Patchwork-Id: 10676857 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 5E09013BF for ; Sat, 10 Nov 2018 03:42:40 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4BC862E57F for ; Sat, 10 Nov 2018 03:42:40 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 316CC2E72D; Sat, 10 Nov 2018 03:42:40 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id C0F342E5B8 for ; Sat, 10 Nov 2018 03:42:39 +0000 (UTC) Received: from localhost ([::1]:36974 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gLKAR-0004ab-4M for patchwork-qemu-devel@patchwork.kernel.org; Fri, 09 Nov 2018 22:42:39 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:53557) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gLK9N-0003uH-Oa for qemu-devel@nongnu.org; Fri, 09 Nov 2018 22:41:34 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gLK9M-0003vz-Le for qemu-devel@nongnu.org; Fri, 09 Nov 2018 22:41:33 -0500 Received: from m12-14.163.com ([220.181.12.14]:47065) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gLK9I-0003uq-Or for qemu-devel@nongnu.org; Fri, 09 Nov 2018 22:41:30 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=From:Subject:Date:Message-Id; bh=uqOI9/P1QB7Bj6BGS5 kkou6eRV/QORZYL1xG2amjBgE=; b=A/5qoMj1NVD3VJ4mYzz1B3n1ACCrnhq+dz XpuJP7pbkINBT8Ku0IB21VhKdVARYe7bsiUpCGyYS6PsFHvQCVFeGZ4K3hgLkHZg ewm/9tFhxpJFeNbo7DI58jzLOhhQPYHzXEDLrJ/DFEHzTy/NyCXFpNA3WwFxzAAe zKWL0pLqE= Received: from ubuntu.localdomain (unknown [36.27.43.123]) by smtp10 (Coremail) with SMTP id DsCowAA3U81dU+ZbjEFaYA--.60968S4; Sat, 10 Nov 2018 11:41:26 +0800 (CST) From: Li Qiang To: pbonzini@redhat.com, kraxel@redhat.com, armbru@redhat.com, lersek@redhat.com, philmd@redhat.com Date: Fri, 9 Nov 2018 19:41:15 -0800 Message-Id: <20181110034115.103335-3-liq3ea@163.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20181110034115.103335-1-liq3ea@163.com> References: <20181110034115.103335-1-liq3ea@163.com> X-CM-TRANSID: DsCowAA3U81dU+ZbjEFaYA--.60968S4 X-Coremail-Antispam: 1Uf129KBjvJXoW7ZrW5Xw43CF1fWrWUArWfGrg_yoW8ZFyUpr W3ta1DGr4ktrW3Aw4xKw1DWr1UXwn7Xr4UZr4DA34IvrnrJr1kJw4xG3s3Kay3ZF93tFsI gF4Sg34UGrsrWaDanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x07UJPEhUUUUU= X-Originating-IP: [36.27.43.123] X-CM-SenderInfo: 5oltjvrd6rljoofrz/1tbiTwb6bVsGMsztVwAAsH X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 220.181.12.14 Subject: [Qemu-devel] [PATCH 2/2] hw: fw_cfg: refactor fw_cfg_reboot() X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Li Qiang , qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Currently the user can set a negative reboot_timeout. Also it is wrong to parse 'reboot-timeout' with qemu_opt_get() and then convert it to number. This patch refactor this function by following: 1. ensure reboot_timeout is in 0~0xffff 2. use qemu_opt_get_number() to parse reboot_timeout 3. simlify code Signed-off-by: Li Qiang --- hw/nvram/fw_cfg.c | 23 +++++++++++------------ vl.c | 2 +- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/hw/nvram/fw_cfg.c b/hw/nvram/fw_cfg.c index 78f43dad93..6aca80846a 100644 --- a/hw/nvram/fw_cfg.c +++ b/hw/nvram/fw_cfg.c @@ -178,24 +178,23 @@ static void fw_cfg_bootsplash(FWCfgState *s) static void fw_cfg_reboot(FWCfgState *s) { - int reboot_timeout = -1; - char *p; - const char *temp; + const char *reboot_timeout = NULL; /* get user configuration */ QemuOptsList *plist = qemu_find_opts("boot-opts"); QemuOpts *opts = QTAILQ_FIRST(&plist->head); - if (opts != NULL) { - temp = qemu_opt_get(opts, "reboot-timeout"); - if (temp != NULL) { - p = (char *)temp; - reboot_timeout = strtol(p, &p, 10); - } + reboot_timeout = qemu_opt_get(opts, "reboot-timeout"); + + if (reboot_timeout == NULL) { + return; } + int64_t rt_val = qemu_opt_get_number(opts, "reboot-timeout", -1); + /* validate the input */ - if (reboot_timeout > 0xffff) { - error_report("reboot timeout is larger than 65535, force it to 65535."); - reboot_timeout = 0xffff; + if (rt_val < 0 || rt_val > 0xffff) { + error_report("reboot timeout is invalid," + "it should be a value between 0 and 65535"); + exit(1); } fw_cfg_add_file(s, "etc/boot-fail-wait", g_memdup(&reboot_timeout, 4), 4); } diff --git a/vl.c b/vl.c index be37da46f0..086127ff0b 100644 --- a/vl.c +++ b/vl.c @@ -339,7 +339,7 @@ static QemuOptsList qemu_boot_opts = { .type = QEMU_OPT_NUMBER, }, { .name = "reboot-timeout", - .type = QEMU_OPT_STRING, + .type = QEMU_OPT_NUMBER, }, { .name = "strict", .type = QEMU_OPT_BOOL,