[PATCH] target/i386/sev: Fix a segfault in sev_kvm_init

Srikanth Aithal posted 1 patch 10 months, 3 weeks ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20240104104820.14422-1-srikanth.aithal@amd.com
Maintainers: Paolo Bonzini <pbonzini@redhat.com>, Marcelo Tosatti <mtosatti@redhat.com>
target/i386/sev.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
[PATCH] target/i386/sev: Fix a segfault in sev_kvm_init
Posted by Srikanth Aithal 10 months, 3 weeks ago
Propogate error code using errp in sev_kvm_init.

Before fix:
qemu-system-x86_64: sev_kvm_init: guest policy requires SEV-ES,
but host SEV-ES support unavailable
27747 Segmentation fault      (core dumped)

After fix:
qemu-system-x86_64: sev_kvm_init: guest policy requires SEV-ES,
but host SEV-ES support unavailable
qemu-system-x86_64: failed to initialize kvm: Operation not permitted

While at it, also fix two more locations.

Reviewed-by: Nikunj A Dadhania <nikunj@amd.com>
Signed-off-by: Srikanth Aithal <srikanth.aithal@amd.com>
---
 target/i386/sev.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/target/i386/sev.c b/target/i386/sev.c
index 9a71246682..c0a4d5e535 100644
--- a/target/i386/sev.c
+++ b/target/i386/sev.c
@@ -922,7 +922,8 @@ int sev_kvm_init(ConfidentialGuestSupport *cgs, Error **errp)
 
     ret = ram_block_discard_disable(true);
     if (ret) {
-        error_report("%s: cannot disable RAM discard", __func__);
+        error_setg(errp, "%s: cannot disable "
+                     "RAM discard", __func__);
         return -1;
     }
 
@@ -979,13 +980,13 @@ int sev_kvm_init(ConfidentialGuestSupport *cgs, Error **errp)
 
     if (sev_es_enabled()) {
         if (!kvm_kernel_irqchip_allowed()) {
-            error_report("%s: SEV-ES guests require in-kernel irqchip support",
-                         __func__);
+            error_setg(errp, "%s: SEV-ES guests require in-kernel "
+                         "irqchip support", __func__);
             goto err;
         }
 
         if (!(status.flags & SEV_STATUS_FLAGS_CONFIG_ES)) {
-            error_report("%s: guest policy requires SEV-ES, but "
+            error_setg(errp, "%s: guest policy requires SEV-ES, but "
                          "host SEV-ES support unavailable",
                          __func__);
             goto err;
-- 
2.34.1
Re: [PATCH] target/i386/sev: Fix a segfault in sev_kvm_init
Posted by Zhao Liu 10 months, 3 weeks ago
On Thu, Jan 04, 2024 at 04:18:20PM +0530, Srikanth Aithal wrote:
> Date: Thu, 4 Jan 2024 16:18:20 +0530
> From: Srikanth Aithal <srikanth.aithal@amd.com>
> Subject: [PATCH] target/i386/sev: Fix a segfault in sev_kvm_init
> X-Mailer: git-send-email 2.34.1
> 
> Propogate error code using errp in sev_kvm_init.
> 
> Before fix:
> qemu-system-x86_64: sev_kvm_init: guest policy requires SEV-ES,
> but host SEV-ES support unavailable
> 27747 Segmentation fault      (core dumped)
> 
> After fix:
> qemu-system-x86_64: sev_kvm_init: guest policy requires SEV-ES,
> but host SEV-ES support unavailable
> qemu-system-x86_64: failed to initialize kvm: Operation not permitted
> 
> While at it, also fix two more locations.
> 
> Reviewed-by: Nikunj A Dadhania <nikunj@amd.com>
> Signed-off-by: Srikanth Aithal <srikanth.aithal@amd.com>
> ---
>  target/i386/sev.c | 9 +++++----
>  1 file changed, 5 insertions(+), 4 deletions(-)

Reviewed-by: Zhao Liu <zhao1.liu@intel.com>

> 
> diff --git a/target/i386/sev.c b/target/i386/sev.c
> index 9a71246682..c0a4d5e535 100644
> --- a/target/i386/sev.c
> +++ b/target/i386/sev.c
> @@ -922,7 +922,8 @@ int sev_kvm_init(ConfidentialGuestSupport *cgs, Error **errp)
>  
>      ret = ram_block_discard_disable(true);
>      if (ret) {
> -        error_report("%s: cannot disable RAM discard", __func__);
> +        error_setg(errp, "%s: cannot disable "
> +                     "RAM discard", __func__);
>          return -1;
>      }
>  
> @@ -979,13 +980,13 @@ int sev_kvm_init(ConfidentialGuestSupport *cgs, Error **errp)
>  
>      if (sev_es_enabled()) {
>          if (!kvm_kernel_irqchip_allowed()) {
> -            error_report("%s: SEV-ES guests require in-kernel irqchip support",
> -                         __func__);
> +            error_setg(errp, "%s: SEV-ES guests require in-kernel "
> +                         "irqchip support", __func__);
>              goto err;
>          }
>  
>          if (!(status.flags & SEV_STATUS_FLAGS_CONFIG_ES)) {
> -            error_report("%s: guest policy requires SEV-ES, but "
> +            error_setg(errp, "%s: guest policy requires SEV-ES, but "
>                           "host SEV-ES support unavailable",
>                           __func__);
>              goto err;
> -- 
> 2.34.1
> 
>
Re: [PATCH] target/i386/sev: Fix a segfault in sev_kvm_init
Posted by Philippe Mathieu-Daudé 10 months, 3 weeks ago
On 4/1/24 11:48, Srikanth Aithal wrote:
> Propogate error code using errp in sev_kvm_init.
> 
> Before fix:
> qemu-system-x86_64: sev_kvm_init: guest policy requires SEV-ES,
> but host SEV-ES support unavailable
> 27747 Segmentation fault      (core dumped)
> 
> After fix:
> qemu-system-x86_64: sev_kvm_init: guest policy requires SEV-ES,
> but host SEV-ES support unavailable
> qemu-system-x86_64: failed to initialize kvm: Operation not permitted
> 
> While at it, also fix two more locations.
> 
> Reviewed-by: Nikunj A Dadhania <nikunj@amd.com>
> Signed-off-by: Srikanth Aithal <srikanth.aithal@amd.com>
> ---
>   target/i386/sev.c | 9 +++++----
>   1 file changed, 5 insertions(+), 4 deletions(-)

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>