From patchwork Sat Nov 10 03:41:14 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Li Qiang X-Patchwork-Id: 10676859 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 784F413BF for ; Sat, 10 Nov 2018 03:44:45 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5AD302EE70 for ; Sat, 10 Nov 2018 03:44:45 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 4A1F62EE74; Sat, 10 Nov 2018 03:44:45 +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 C2A7C2EE70 for ; Sat, 10 Nov 2018 03:44:44 +0000 (UTC) Received: from localhost ([::1]:36981 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gLKCS-0006QK-5D for patchwork-qemu-devel@patchwork.kernel.org; Fri, 09 Nov 2018 22:44:44 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:53531) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gLK9M-0003u7-Kc for qemu-devel@nongnu.org; Fri, 09 Nov 2018 22:41:33 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gLK9H-0003ul-HA for qemu-devel@nongnu.org; Fri, 09 Nov 2018 22:41:30 -0500 Received: from m12-14.163.com ([220.181.12.14]:46934) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gLK9G-0003u0-S0 for qemu-devel@nongnu.org; Fri, 09 Nov 2018 22:41:27 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=From:Subject:Date:Message-Id; bh=Ogkq8GjaGOdW6XW7s4 rcQjcDPthaReQDDtQAPx1PQks=; b=pJ5VrvxrGEgHUjKEgW9tp1ScNb88tJq34K CudJeNyPOiO2nWbWNn4cGmw7/GOBlWuBmRWfDnD5EytVy/3PO84VMMqluBonBER2 Bod1tpyq+R8PvcqwGBneSKcmSzWZaLid6rClFi7tgksDEXy2MKh0gAcC1bMomUAn Y6WZl70CE= Received: from ubuntu.localdomain (unknown [36.27.43.123]) by smtp10 (Coremail) with SMTP id DsCowAA3U81dU+ZbjEFaYA--.60968S3; Sat, 10 Nov 2018 11:41:24 +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:14 -0800 Message-Id: <20181110034115.103335-2-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--.60968S3 X-Coremail-Antispam: 1Uf129KBjvJXoWxJF4fZrW3ZFy3Gry7GFyfZwb_yoW5tr45pF ZxJ3Z8G3s5JFZrXrsxCw4DuF1ftr4xXF1UZ3y5Xr4kZrWUZr1kuw4xKFySv3yayrZ7Zwsr Xr4rXrW7JF17XaDanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x07UFZXwUUUUU= X-Originating-IP: [36.27.43.123] X-CM-SenderInfo: 5oltjvrd6rljoofrz/xtbBawT6bVetsyNlnAAAsr X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 220.181.12.14 Subject: [Qemu-devel] [PATCH 1/2] hw: fw_cfg: refactor fw_cfg_bootsplash() 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 when the splash-time value is bigger than 0xffff we report and correct it, when it is less than 0 we just ingore it. Also we use qemu_opt_get() to get 'splash-time', then convert it to a number ourselves. This is wrong. This patch does following: 1. use qemu_opt_get_number() to parse 'splash-time' 2. exit when the splash-time is invalid or loading the splash file failed 3. simplify code Signed-off-by: Li Qiang Reviewed-by: Markus Armbruster --- hw/nvram/fw_cfg.c | 40 ++++++++++++++++------------------------ vl.c | 2 +- 2 files changed, 17 insertions(+), 25 deletions(-) diff --git a/hw/nvram/fw_cfg.c b/hw/nvram/fw_cfg.c index 946f765f7f..78f43dad93 100644 --- a/hw/nvram/fw_cfg.c +++ b/hw/nvram/fw_cfg.c @@ -118,55 +118,47 @@ error: static void fw_cfg_bootsplash(FWCfgState *s) { - int boot_splash_time = -1; const char *boot_splash_filename = NULL; - char *p; + const char *boot_splash_time = NULL; char *filename, *file_data; gsize file_size; int file_type; - const char *temp; /* get user configuration */ QemuOptsList *plist = qemu_find_opts("boot-opts"); QemuOpts *opts = QTAILQ_FIRST(&plist->head); - if (opts != NULL) { - temp = qemu_opt_get(opts, "splash"); - if (temp != NULL) { - boot_splash_filename = temp; - } - temp = qemu_opt_get(opts, "splash-time"); - if (temp != NULL) { - p = (char *)temp; - boot_splash_time = strtol(p, &p, 10); - } - } + boot_splash_filename = qemu_opt_get(opts, "splash"); + boot_splash_time = qemu_opt_get(opts, "splash-time"); /* insert splash time if user configurated */ - if (boot_splash_time >= 0) { + if (boot_splash_time) { + int64_t bst_val = qemu_opt_get_number(opts, "splash-time", -1); /* validate the input */ - if (boot_splash_time > 0xffff) { - error_report("splash time is big than 65535, force it to 65535."); - boot_splash_time = 0xffff; + if (bst_val < 0 || bst_val > 0xffff) { + error_report("splash time is invalid," + "it should be a value between 0 and 65535"); + exit(1); } /* use little endian format */ - qemu_extra_params_fw[0] = (uint8_t)(boot_splash_time & 0xff); - qemu_extra_params_fw[1] = (uint8_t)((boot_splash_time >> 8) & 0xff); + qemu_extra_params_fw[0] = (uint8_t)(bst_val & 0xff); + qemu_extra_params_fw[1] = (uint8_t)((bst_val >> 8) & 0xff); fw_cfg_add_file(s, "etc/boot-menu-wait", qemu_extra_params_fw, 2); } /* insert splash file if user configurated */ - if (boot_splash_filename != NULL) { + if (boot_splash_filename) { filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, boot_splash_filename); if (filename == NULL) { - error_report("failed to find file '%s'.", boot_splash_filename); - return; + error_report("failed to find file '%s'", boot_splash_filename); + exit(1); } /* loading file data */ file_data = read_splashfile(filename, &file_size, &file_type); if (file_data == NULL) { g_free(filename); - return; + error_report("failed to read file '%s'", boot_splash_filename); + exit(1); } g_free(boot_splash_filedata); boot_splash_filedata = (uint8_t *)file_data; diff --git a/vl.c b/vl.c index 55bab005b6..be37da46f0 100644 --- a/vl.c +++ b/vl.c @@ -336,7 +336,7 @@ static QemuOptsList qemu_boot_opts = { .type = QEMU_OPT_STRING, }, { .name = "splash-time", - .type = QEMU_OPT_STRING, + .type = QEMU_OPT_NUMBER, }, { .name = "reboot-timeout", .type = QEMU_OPT_STRING, 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,