From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54696) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Wsu5e-0006Ft-CD for qemu-devel@nongnu.org; Fri, 06 Jun 2014 09:21:59 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Wsu5V-0000Q8-80 for qemu-devel@nongnu.org; Fri, 06 Jun 2014 09:21:50 -0400 Sender: Paolo Bonzini From: Paolo Bonzini Date: Fri, 6 Jun 2014 15:21:25 +0200 Message-Id: <1402060885-18332-1-git-send-email-pbonzini@redhat.com> Subject: [Qemu-devel] [PATCH] cpu/x86: correctly set errors in x86_cpu_parse_featurestr List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: qemu-trivial@nongnu.org, armbru@redhat.com Because of the "goto out", the contents of local_err are leaked and lost. Signed-off-by: Paolo Bonzini --- target-i386/cpu.c | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/target-i386/cpu.c b/target-i386/cpu.c index dde052c..8983457 100644 --- a/target-i386/cpu.c +++ b/target-i386/cpu.c @@ -1688,8 +1688,8 @@ static void x86_cpu_parse_featurestr(CPUState *cs, char *features, numvalue = strtoul(val, &err, 0); if (!*val || *err) { - error_setg(&local_err, "bad numerical value %s", val); - goto out; + error_setg(errp, "bad numerical value %s", val); + return; } if (numvalue < 0x80000000) { error_report("xlevel value shall always be >= 0x80000000" @@ -1706,8 +1706,8 @@ static void x86_cpu_parse_featurestr(CPUState *cs, char *features, tsc_freq = strtosz_suffix_unit(val, &err, STRTOSZ_DEFSUFFIX_B, 1000); if (tsc_freq < 0 || *err) { - error_setg(&local_err, "bad numerical value %s", val); - goto out; + error_setg(errp, "bad numerical value %s", val); + return; } snprintf(num, sizeof(num), "%" PRId64, tsc_freq); object_property_parse(OBJECT(cpu), num, "tsc-frequency", @@ -1718,8 +1718,8 @@ static void x86_cpu_parse_featurestr(CPUState *cs, char *features, char num[32]; numvalue = strtoul(val, &err, 0); if (!*val || *err) { - error_setg(&local_err, "bad numerical value %s", val); - goto out; + error_setg(errp, "bad numerical value %s", val); + return; } if (numvalue < min) { error_report("hv-spinlocks value shall always be >= 0x%x" @@ -1738,7 +1738,7 @@ static void x86_cpu_parse_featurestr(CPUState *cs, char *features, } if (local_err) { error_propagate(errp, local_err); - goto out; + return; } featurestr = strtok(NULL, ","); } @@ -1758,9 +1758,6 @@ static void x86_cpu_parse_featurestr(CPUState *cs, char *features, env->features[FEAT_KVM] &= ~minus_features[FEAT_KVM]; env->features[FEAT_SVM] &= ~minus_features[FEAT_SVM]; env->features[FEAT_7_0_EBX] &= ~minus_features[FEAT_7_0_EBX]; - -out: - return; } /* generate a composite string into buf of all cpuid names in featureset -- 1.9.3