From nobody Sun Feb 8 03:57:57 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1518713698425574.2322961772265; Thu, 15 Feb 2018 08:54:58 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id E5FDAC074EE6; Thu, 15 Feb 2018 16:54:56 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id A6A486A05E; Thu, 15 Feb 2018 16:54:56 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 6389C1841C6A; Thu, 15 Feb 2018 16:54:56 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w1FGi2nt025773 for ; Thu, 15 Feb 2018 11:44:02 -0500 Received: by smtp.corp.redhat.com (Postfix) id 4E1C82024CAA; Thu, 15 Feb 2018 16:44:02 +0000 (UTC) Received: from localhost.localdomain.com (unknown [10.42.22.189]) by smtp.corp.redhat.com (Postfix) with ESMTP id E57162024CA8; Thu, 15 Feb 2018 16:44:01 +0000 (UTC) From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: libvir-list@redhat.com Date: Thu, 15 Feb 2018 16:43:23 +0000 Message-Id: <20180215164347.11538-19-berrange@redhat.com> In-Reply-To: <20180215164347.11538-1-berrange@redhat.com> References: <20180215164347.11538-1-berrange@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 18/42] cpu: add default: case to all switch statements X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Thu, 15 Feb 2018 16:54:57 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Even if the compiler has validated that all enum constants have case statements in a switch, it is not safe to omit a default: case statement. When assigning a value to a variable / struct field that is defined with an enum type, nothing prevents an invalid value being assigned. So defensive code must assume existance of invalid values and thus all switches should have a default: case. Signed-off-by: Daniel P. Berrang=C3=A9 --- src/cpu/cpu.c | 6 +++++- src/cpu/cpu_ppc64.c | 16 ++++++++++++---- src/cpu/cpu_x86.c | 13 +++++++++---- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/src/cpu/cpu.c b/src/cpu/cpu.c index 047e3b1112..6191840634 100644 --- a/src/cpu/cpu.c +++ b/src/cpu/cpu.c @@ -428,11 +428,15 @@ virCPUGetHost(virArch arch, break; =20 case VIR_CPU_TYPE_AUTO: - case VIR_CPU_TYPE_LAST: virReportError(VIR_ERR_INVALID_ARG, _("unsupported CPU type: %s"), virCPUTypeToString(type)); goto error; + case VIR_CPU_TYPE_LAST: + default: + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Unexpected CPU type %d"), type); + goto error; } =20 if (nodeInfo) { diff --git a/src/cpu/cpu_ppc64.c b/src/cpu/cpu_ppc64.c index 76582d4083..5234bc927f 100644 --- a/src/cpu/cpu_ppc64.c +++ b/src/cpu/cpu_ppc64.c @@ -460,11 +460,13 @@ ppc64MapLoadCallback(cpuMapElement element, case CPU_MAP_ELEMENT_MODEL: return ppc64ModelsLoad(map, ctxt, nodes, n); case CPU_MAP_ELEMENT_FEATURE: + return 0; case CPU_MAP_ELEMENT_LAST: - break; + default: + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Unexpected CPU map element %d"), element); + return -1; } - - return 0; } =20 static struct ppc64_map * @@ -573,7 +575,7 @@ ppc64Compute(virCPUDefPtr host, if (cpu->type =3D=3D VIR_CPU_TYPE_GUEST) { /* Guest CPU information */ virCPUCompareResult tmp; - switch (cpu->mode) { + switch ((virCPUMode)cpu->mode) { case VIR_CPU_MODE_HOST_MODEL: /* host-model only: * we need to take compatibility modes into account */ @@ -595,6 +597,12 @@ ppc64Compute(virCPUDefPtr host, * look up guest CPU information */ guest_model =3D ppc64ModelFromCPU(cpu, map); break; + + case VIR_CPU_MODE_LAST: + default: + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Unexpected CPU mode %d"), cpu->mode); + goto cleanup; } } else { /* Other host CPU information */ diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c index b2398c5ad2..1aaf83e109 100644 --- a/src/cpu/cpu_x86.c +++ b/src/cpu/cpu_x86.c @@ -1122,8 +1122,12 @@ x86ModelFromCPU(const virCPUDef *cpu, =20 /* coverity[dead_error_condition] */ case VIR_CPU_FEATURE_OPTIONAL: - case VIR_CPU_FEATURE_LAST: break; + case VIR_CPU_FEATURE_LAST: + default: + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Unexpected CPU feature policy %d"), fpol= ); + goto error; } } else if (x86DataAdd(&model->data, &feature->data) < 0) { goto error; @@ -1381,10 +1385,11 @@ x86MapLoadCallback(cpuMapElement element, case CPU_MAP_ELEMENT_MODEL: return x86ModelsLoad(map, ctxt, nodes, n); case CPU_MAP_ELEMENT_LAST: - break; + default: + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Unexpected CPU map element %d"), element); + return -1; } - - return 0; } =20 =20 --=20 2.14.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list