Changeset
vl.c | 13 ++++++++-----
1 file changed, 8 insertions(+), 5 deletions(-)
Git apply log
Switched to a new branch '20180515113348.10516-1-zyimin@linux.ibm.com'
Applying: sandbox: disable -sandbox if CONFIG_SECCOMP undefined
To https://github.com/patchew-project/qemu
 + ba09927...ad4ac9b patchew/20180515113348.10516-1-zyimin@linux.ibm.com -> patchew/20180515113348.10516-1-zyimin@linux.ibm.com (forced update)
Test passed: checkpatch

loading

Test passed: docker-mingw@fedora

loading

Test passed: docker-quick@centos7

loading

Test passed: s390x

loading

[Qemu-devel] [PATCH v2 0/1] Bug: Sandbox: libvirt breakdowns qemu guest
Posted by Yi Min Zhao, 1 week ago
1. Problem Description
======================
If QEMU is built without seccomp support, 'elevateprivileges' remains compiled.
This option of sandbox is treated as an indication for seccomp blacklist support
in libvirt. This behavior is introduced by the libvirt commits 31ca6a5 and
3527f9d. It would make libvirt build wrong QEMU cmdline, and then the guest
startup would fail.

2. Libvirt Log
==============
qemu-system-s390x: -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
resourcecontrol=deny: seccomp support is disabled

3. Fixup
========
Compile the code related to sandbox only when CONFIG_SECCOMP is defined.

Yi Min Zhao (1):
  sandbox: disable -sandbox if CONFIG_SECCOMP undefined

 vl.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

-- 
Yi Min


[Qemu-devel] [PATCH v2 1/1] sandbox: disable -sandbox if CONFIG_SECCOMP undefined
Posted by Yi Min Zhao, 1 week ago
If CONFIG_SECCOMP is undefined, the option 'elevateprivileges' remains
compiled. This would make libvirt set the corresponding capability and
then trigger the guest startup fails. So this patch excludes the code
regarding seccomp staff if CONFIG_SECCOMP is undefined.

Signed-off-by: Yi Min Zhao <zyimin@linux.ibm.com>
---
 vl.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/vl.c b/vl.c
index 806eec2ef6..b22d158f5f 100644
--- a/vl.c
+++ b/vl.c
@@ -257,6 +257,7 @@ static QemuOptsList qemu_rtc_opts = {
     },
 };
 
+#ifdef CONFIG_SECCOMP
 static QemuOptsList qemu_sandbox_opts = {
     .name = "sandbox",
     .implied_opt_name = "enable",
@@ -285,6 +286,7 @@ static QemuOptsList qemu_sandbox_opts = {
         { /* end of list */ }
     },
 };
+#endif
 
 static QemuOptsList qemu_option_rom_opts = {
     .name = "option-rom",
@@ -1041,10 +1043,10 @@ static int bt_parse(const char *opt)
     return 1;
 }
 
+#ifdef CONFIG_SECCOMP
 static int parse_sandbox(void *opaque, QemuOpts *opts, Error **errp)
 {
     if (qemu_opt_get_bool(opts, "enable", false)) {
-#ifdef CONFIG_SECCOMP
         uint32_t seccomp_opts = QEMU_SECCOMP_SET_DEFAULT
                 | QEMU_SECCOMP_SET_OBSOLETE;
         const char *value = NULL;
@@ -1114,14 +1116,11 @@ static int parse_sandbox(void *opaque, QemuOpts *opts, Error **errp)
                          "in the kernel");
             return -1;
         }
-#else
-        error_report("seccomp support is disabled");
-        return -1;
-#endif
     }
 
     return 0;
 }
+#endif
 
 static int parse_name(void *opaque, QemuOpts *opts, Error **errp)
 {
@@ -3074,7 +3073,9 @@ int main(int argc, char **argv, char **envp)
     qemu_add_opts(&qemu_mem_opts);
     qemu_add_opts(&qemu_smp_opts);
     qemu_add_opts(&qemu_boot_opts);
+#ifdef CONFIG_SECCOMP
     qemu_add_opts(&qemu_sandbox_opts);
+#endif
     qemu_add_opts(&qemu_add_fd_opts);
     qemu_add_opts(&qemu_object_opts);
     qemu_add_opts(&qemu_tpmdev_opts);
@@ -4071,10 +4072,12 @@ int main(int argc, char **argv, char **envp)
         exit(1);
     }
 
+#ifdef CONFIG_SECCOMP
     if (qemu_opts_foreach(qemu_find_opts("sandbox"),
                           parse_sandbox, NULL, NULL)) {
         exit(1);
     }
+#endif
 
     if (qemu_opts_foreach(qemu_find_opts("name"),
                           parse_name, NULL, NULL)) {
-- 
Yi Min


Re: [Qemu-devel] [PATCH v2 1/1] sandbox: disable -sandbox if CONFIG_SECCOMP undefined
Posted by Eric Blake, 1 week ago
On 05/15/2018 06:33 AM, Yi Min Zhao wrote:
> If CONFIG_SECCOMP is undefined, the option 'elevateprivileges' remains
> compiled. This would make libvirt set the corresponding capability and
> then trigger the guest startup fails. So this patch excludes the code

s/trigger the guest startup fails/trigger failure during guest startup/

> regarding seccomp staff if CONFIG_SECCOMP is undefined.

s/staff/command line options/

> 
> Signed-off-by: Yi Min Zhao <zyimin@linux.ibm.com>
> ---
>   vl.c | 13 ++++++++-----
>   1 file changed, 8 insertions(+), 5 deletions(-)
> 

A maintainer can touch up the commit message, so:
Reviewed-by: Eric Blake <eblake@redhat.com>

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org

Re: [Qemu-devel] [PATCH v2 1/1] sandbox: disable -sandbox if CONFIG_SECCOMP undefined
Posted by Yi Min Zhao, 1 week ago

在 2018/5/15 下午11:25, Eric Blake 写道:
> On 05/15/2018 06:33 AM, Yi Min Zhao wrote:
>> If CONFIG_SECCOMP is undefined, the option 'elevateprivileges' remains
>> compiled. This would make libvirt set the corresponding capability and
>> then trigger the guest startup fails. So this patch excludes the code
>
> s/trigger the guest startup fails/trigger failure during guest startup/
>
>> regarding seccomp staff if CONFIG_SECCOMP is undefined.
>
> s/staff/command line options/
>
>>
>> Signed-off-by: Yi Min Zhao <zyimin@linux.ibm.com>
>> ---
>>   vl.c | 13 ++++++++-----
>>   1 file changed, 8 insertions(+), 5 deletions(-)
>>
>
> A maintainer can touch up the commit message, so:
> Reviewed-by: Eric Blake <eblake@redhat.com>
>
Thanks for your comments! Have updated commit msg.


Re: [Qemu-devel] [PATCH v2 1/1] sandbox: disable -sandbox if CONFIG_SECCOMP undefined
Posted by Yi Min Zhao, 5 days ago
Add Paolo to CC list. @Paolo, expect your comment. Thanks very much!


在 2018/5/15 下午11:25, Eric Blake 写道:
> On 05/15/2018 06:33 AM, Yi Min Zhao wrote:
>> If CONFIG_SECCOMP is undefined, the option 'elevateprivileges' remains
>> compiled. This would make libvirt set the corresponding capability and
>> then trigger the guest startup fails. So this patch excludes the code
>
> s/trigger the guest startup fails/trigger failure during guest startup/
>
>> regarding seccomp staff if CONFIG_SECCOMP is undefined.
>
> s/staff/command line options/
>
>>
>> Signed-off-by: Yi Min Zhao <zyimin@linux.ibm.com>
>> ---
>>   vl.c | 13 ++++++++-----
>>   1 file changed, 8 insertions(+), 5 deletions(-)
>>
>
> A maintainer can touch up the commit message, so:
> Reviewed-by: Eric Blake <eblake@redhat.com>
>


Re: [Qemu-devel] [PATCH v2 1/1] sandbox: disable -sandbox if CONFIG_SECCOMP undefined
Posted by Eduardo Otubo, 5 days ago
On 15/05/2018 - 19:33:48, Yi Min Zhao wrote:
> If CONFIG_SECCOMP is undefined, the option 'elevateprivileges' remains
> compiled. This would make libvirt set the corresponding capability and
> then trigger the guest startup fails. So this patch excludes the code
> regarding seccomp staff if CONFIG_SECCOMP is undefined.

Just a sugestion for the next patch you send: If it's a single patch, you don't
need to format it with a cover-letter. Just put all the description in the body,
or if you need to add a text that shouldn't be included in the commit message,
just add it after the "---" after Signed-off-by.

> 
> Signed-off-by: Yi Min Zhao <zyimin@linux.ibm.com>
> ---
>  vl.c | 13 ++++++++-----
>  1 file changed, 8 insertions(+), 5 deletions(-)
> 
> diff --git a/vl.c b/vl.c
> index 806eec2ef6..b22d158f5f 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -257,6 +257,7 @@ static QemuOptsList qemu_rtc_opts = {
>      },
>  };
>  
> +#ifdef CONFIG_SECCOMP
>  static QemuOptsList qemu_sandbox_opts = {
>      .name = "sandbox",
>      .implied_opt_name = "enable",
> @@ -285,6 +286,7 @@ static QemuOptsList qemu_sandbox_opts = {
>          { /* end of list */ }
>      },
>  };
> +#endif
>  
>  static QemuOptsList qemu_option_rom_opts = {
>      .name = "option-rom",
> @@ -1041,10 +1043,10 @@ static int bt_parse(const char *opt)
>      return 1;
>  }
>  
> +#ifdef CONFIG_SECCOMP
>  static int parse_sandbox(void *opaque, QemuOpts *opts, Error **errp)
>  {
>      if (qemu_opt_get_bool(opts, "enable", false)) {
> -#ifdef CONFIG_SECCOMP
>          uint32_t seccomp_opts = QEMU_SECCOMP_SET_DEFAULT
>                  | QEMU_SECCOMP_SET_OBSOLETE;
>          const char *value = NULL;
> @@ -1114,14 +1116,11 @@ static int parse_sandbox(void *opaque, QemuOpts *opts, Error **errp)
>                           "in the kernel");
>              return -1;
>          }
> -#else
> -        error_report("seccomp support is disabled");
> -        return -1;
> -#endif

Any reason not to keep the error message on the new #endif location?

>      }
>  
>      return 0;
>  }
> +#endif
>  
>  static int parse_name(void *opaque, QemuOpts *opts, Error **errp)
>  {
> @@ -3074,7 +3073,9 @@ int main(int argc, char **argv, char **envp)
>      qemu_add_opts(&qemu_mem_opts);
>      qemu_add_opts(&qemu_smp_opts);
>      qemu_add_opts(&qemu_boot_opts);
> +#ifdef CONFIG_SECCOMP
>      qemu_add_opts(&qemu_sandbox_opts);
> +#endif
>      qemu_add_opts(&qemu_add_fd_opts);
>      qemu_add_opts(&qemu_object_opts);
>      qemu_add_opts(&qemu_tpmdev_opts);
> @@ -4071,10 +4072,12 @@ int main(int argc, char **argv, char **envp)
>          exit(1);
>      }
>  
> +#ifdef CONFIG_SECCOMP
>      if (qemu_opts_foreach(qemu_find_opts("sandbox"),
>                            parse_sandbox, NULL, NULL)) {
>          exit(1);
>      }
> +#endif
>  
>      if (qemu_opts_foreach(qemu_find_opts("name"),
>                            parse_name, NULL, NULL)) {
> -- 
> Yi Min
> 

I just wanted a review from Ján, since he is the author of the original libvirt
patch. Does this breaks libvirt logic in any way? If not, ACK on this patch.

Re: [Qemu-devel] [PATCH v2 1/1] sandbox: disable -sandbox if CONFIG_SECCOMP undefined
Posted by Yi Min Zhao, 5 days ago

在 2018/5/17 下午8:41, Eduardo Otubo 写道:
> On 15/05/2018 - 19:33:48, Yi Min Zhao wrote:
>> If CONFIG_SECCOMP is undefined, the option 'elevateprivileges' remains
>> compiled. This would make libvirt set the corresponding capability and
>> then trigger the guest startup fails. So this patch excludes the code
>> regarding seccomp staff if CONFIG_SECCOMP is undefined.
> Just a sugestion for the next patch you send: If it's a single patch, you don't
> need to format it with a cover-letter. Just put all the description in the body,
> or if you need to add a text that shouldn't be included in the commit message,
> just add it after the "---" after Signed-off-by.
OK. Thanks for your suggestion.
>
>> Signed-off-by: Yi Min Zhao <zyimin@linux.ibm.com>
>> ---
>>   vl.c | 13 ++++++++-----
>>   1 file changed, 8 insertions(+), 5 deletions(-)
>>
>> diff --git a/vl.c b/vl.c
>> index 806eec2ef6..b22d158f5f 100644
>> --- a/vl.c
>> +++ b/vl.c
>> @@ -257,6 +257,7 @@ static QemuOptsList qemu_rtc_opts = {
>>       },
>>   };
>>   
>> +#ifdef CONFIG_SECCOMP
>>   static QemuOptsList qemu_sandbox_opts = {
>>       .name = "sandbox",
>>       .implied_opt_name = "enable",
>> @@ -285,6 +286,7 @@ static QemuOptsList qemu_sandbox_opts = {
>>           { /* end of list */ }
>>       },
>>   };
>> +#endif
>>   
>>   static QemuOptsList qemu_option_rom_opts = {
>>       .name = "option-rom",
>> @@ -1041,10 +1043,10 @@ static int bt_parse(const char *opt)
>>       return 1;
>>   }
>>   
>> +#ifdef CONFIG_SECCOMP
>>   static int parse_sandbox(void *opaque, QemuOpts *opts, Error **errp)
>>   {
>>       if (qemu_opt_get_bool(opts, "enable", false)) {
>> -#ifdef CONFIG_SECCOMP
>>           uint32_t seccomp_opts = QEMU_SECCOMP_SET_DEFAULT
>>                   | QEMU_SECCOMP_SET_OBSOLETE;
>>           const char *value = NULL;
>> @@ -1114,14 +1116,11 @@ static int parse_sandbox(void *opaque, QemuOpts *opts, Error **errp)
>>                            "in the kernel");
>>               return -1;
>>           }
>> -#else
>> -        error_report("seccomp support is disabled");
>> -        return -1;
>> -#endif
> Any reason not to keep the error message on the new #endif location?
If error report is originally wrapped in CONFIG_SECCOMP undefined.
This patch excludes the entire function if CONFIG_SECCOMP is undefined.
So the error report is not needed.
>
>>       }
>>   
>>       return 0;
>>   }
>> +#endif
>>   
>>   static int parse_name(void *opaque, QemuOpts *opts, Error **errp)
>>   {
>> @@ -3074,7 +3073,9 @@ int main(int argc, char **argv, char **envp)
>>       qemu_add_opts(&qemu_mem_opts);
>>       qemu_add_opts(&qemu_smp_opts);
>>       qemu_add_opts(&qemu_boot_opts);
>> +#ifdef CONFIG_SECCOMP
>>       qemu_add_opts(&qemu_sandbox_opts);
>> +#endif
>>       qemu_add_opts(&qemu_add_fd_opts);
>>       qemu_add_opts(&qemu_object_opts);
>>       qemu_add_opts(&qemu_tpmdev_opts);
>> @@ -4071,10 +4072,12 @@ int main(int argc, char **argv, char **envp)
>>           exit(1);
>>       }
>>   
>> +#ifdef CONFIG_SECCOMP
>>       if (qemu_opts_foreach(qemu_find_opts("sandbox"),
>>                             parse_sandbox, NULL, NULL)) {
>>           exit(1);
>>       }
>> +#endif
>>   
>>       if (qemu_opts_foreach(qemu_find_opts("name"),
>>                             parse_name, NULL, NULL)) {
>> -- 
>> Yi Min
>>
> I just wanted a review from Ján, since he is the author of the original libvirt
> patch. Does this breaks libvirt logic in any way? If not, ACK on this patch.
>
>
OK.


Re: [Qemu-devel] [PATCH v2 1/1] sandbox: disable -sandbox if CONFIG_SECCOMP undefined
Posted by Ján Tomko, 4 days ago
On Thu, May 17, 2018 at 02:41:09PM +0200, Eduardo Otubo wrote:
>On 15/05/2018 - 19:33:48, Yi Min Zhao wrote:
>> If CONFIG_SECCOMP is undefined, the option 'elevateprivileges' remains
>> compiled. This would make libvirt set the corresponding capability and
>> then trigger the guest startup fails. So this patch excludes the code
>> regarding seccomp staff if CONFIG_SECCOMP is undefined.
>
>Just a sugestion for the next patch you send: If it's a single patch, you don't
>need to format it with a cover-letter. Just put all the description in the body,
>or if you need to add a text that shouldn't be included in the commit message,
>just add it after the "---" after Signed-off-by.
>
>>
>> Signed-off-by: Yi Min Zhao <zyimin@linux.ibm.com>
>> ---
>>  vl.c | 13 ++++++++-----
>>  1 file changed, 8 insertions(+), 5 deletions(-)
>>

>> @@ -4071,10 +4072,12 @@ int main(int argc, char **argv, char **envp)
>>          exit(1);
>>      }
>>
>> +#ifdef CONFIG_SECCOMP
>>      if (qemu_opts_foreach(qemu_find_opts("sandbox"),
>>                            parse_sandbox, NULL, NULL)) {
>>          exit(1);
>>      }
>> +#endif
>>
>>      if (qemu_opts_foreach(qemu_find_opts("name"),
>>                            parse_name, NULL, NULL)) {
>> --
>> Yi Min
>>
>
>I just wanted a review from J�n, since he is the author of the original libvirt
>patch. Does this breaks libvirt logic in any way? If not, ACK on this patch.
>

Current libvirt logic assumes the -sandbox option is always present.
(IIRC it was introduced in QEMU 1.1 and when we switched from help
 scraping to capability probing via QMP for QEMU 1.2, there was no
 way to detect it)

This patch fixes the usage of QEMU new enough for seccomp blacklist
(where libvirt enables the sandbox by default),
but breaks the usage of QEMU with compiled out sandbox and
setting
  seccomp_sandbox = 0
in libvirt's qemu.conf:

error: internal error: process exited while connecting to monitor:
qemu-git: -sandbox off: There is no option group 'sandbox'


But now libvirt requires QEMU >= 1.5.0 which already supports
query-command-line-options, so if you want the option gone completely
--without-seccomp, I can add the code that probes for it and
make seccomp_sandbox = 0 a no-op if it's compiled out.

Jano
Re: [Qemu-devel] [PATCH v2 1/1] sandbox: disable -sandbox if CONFIG_SECCOMP undefined
Posted by Eduardo Otubo, 4 days ago
On 18/05/2018 - 09:52:12, Ján Tomko wrote:
> On Thu, May 17, 2018 at 02:41:09PM +0200, Eduardo Otubo wrote:
> > On 15/05/2018 - 19:33:48, Yi Min Zhao wrote:
> > > If CONFIG_SECCOMP is undefined, the option 'elevateprivileges' remains
> > > compiled. This would make libvirt set the corresponding capability and
> > > then trigger the guest startup fails. So this patch excludes the code
> > > regarding seccomp staff if CONFIG_SECCOMP is undefined.
> > 
> > Just a sugestion for the next patch you send: If it's a single patch, you don't
> > need to format it with a cover-letter. Just put all the description in the body,
> > or if you need to add a text that shouldn't be included in the commit message,
> > just add it after the "---" after Signed-off-by.
> > 
> > > 
> > > Signed-off-by: Yi Min Zhao <zyimin@linux.ibm.com>
> > > ---
> > >  vl.c | 13 ++++++++-----
> > >  1 file changed, 8 insertions(+), 5 deletions(-)
> > > 
> 
> > > @@ -4071,10 +4072,12 @@ int main(int argc, char **argv, char **envp)
> > >          exit(1);
> > >      }
> > > 
> > > +#ifdef CONFIG_SECCOMP
> > >      if (qemu_opts_foreach(qemu_find_opts("sandbox"),
> > >                            parse_sandbox, NULL, NULL)) {
> > >          exit(1);
> > >      }
> > > +#endif
> > > 
> > >      if (qemu_opts_foreach(qemu_find_opts("name"),
> > >                            parse_name, NULL, NULL)) {
> > > --
> > > Yi Min
> > > 
> > 
> > I just wanted a review from Ján, since he is the author of the original libvirt
> > patch. Does this breaks libvirt logic in any way? If not, ACK on this patch.
> > 
> 
> Current libvirt logic assumes the -sandbox option is always present.
> (IIRC it was introduced in QEMU 1.1 and when we switched from help
> scraping to capability probing via QMP for QEMU 1.2, there was no
> way to detect it)
> 
> This patch fixes the usage of QEMU new enough for seccomp blacklist
> (where libvirt enables the sandbox by default),
> but breaks the usage of QEMU with compiled out sandbox and
> setting
>  seccomp_sandbox = 0
> in libvirt's qemu.conf:
> 
> error: internal error: process exited while connecting to monitor:
> qemu-git: -sandbox off: There is no option group 'sandbox'
> 
> 
> But now libvirt requires QEMU >= 1.5.0 which already supports
> query-command-line-options, so if you want the option gone completely
> --without-seccomp, I can add the code that probes for it and
> make seccomp_sandbox = 0 a no-op if it's compiled out.

This looks like a good solution for the libvirt side. Can you add this support
so we can merge this fix?

Thanks a lot,

-- 
Eduardo Otubo

Re: [Qemu-devel] [PATCH v2 1/1] sandbox: disable -sandbox if CONFIG_SECCOMP undefined
Posted by Ján Tomko, 4 days ago
On Fri, May 18, 2018 at 11:19:16AM +0200, Eduardo Otubo wrote:
>On 18/05/2018 - 09:52:12, J�n Tomko wrote:
>> On Thu, May 17, 2018 at 02:41:09PM +0200, Eduardo Otubo wrote:
>> > On 15/05/2018 - 19:33:48, Yi Min Zhao wrote:
>> > > If CONFIG_SECCOMP is undefined, the option 'elevateprivileges' remains
>> > > compiled. This would make libvirt set the corresponding capability and
>> > > then trigger the guest startup fails. So this patch excludes the code
>> > > regarding seccomp staff if CONFIG_SECCOMP is undefined.
>> >
>> > Just a sugestion for the next patch you send: If it's a single patch, you don't
>> > need to format it with a cover-letter. Just put all the description in the body,
>> > or if you need to add a text that shouldn't be included in the commit message,
>> > just add it after the "---" after Signed-off-by.
>> >
>> > >
>> > > Signed-off-by: Yi Min Zhao <zyimin@linux.ibm.com>
>> > > ---
>> > >  vl.c | 13 ++++++++-----
>> > >  1 file changed, 8 insertions(+), 5 deletions(-)
>> > >
>>

[...]

>> Current libvirt logic assumes the -sandbox option is always present.
>> (IIRC it was introduced in QEMU 1.1 and when we switched from help
>> scraping to capability probing via QMP for QEMU 1.2, there was no
>> way to detect it)
>>
>> This patch fixes the usage of QEMU new enough for seccomp blacklist
>> (where libvirt enables the sandbox by default),
>> but breaks the usage of QEMU with compiled out sandbox and
>> setting
>>  seccomp_sandbox = 0
>> in libvirt's qemu.conf:
>>
>> error: internal error: process exited while connecting to monitor:
>> qemu-git: -sandbox off: There is no option group 'sandbox'
>>
>>
>> But now libvirt requires QEMU >= 1.5.0 which already supports
>> query-command-line-options, so if you want the option gone completely
>> --without-seccomp, I can add the code that probes for it and
>> make seccomp_sandbox = 0 a no-op if it's compiled out.
>
>This looks like a good solution for the libvirt side. Can you add this support
>so we can merge this fix?
>

Patches proposed:
https://www.redhat.com/archives/libvir-list/2018-May/msg01430.html

Jano
Re: [Qemu-devel] [PATCH v2 1/1] sandbox: disable -sandbox if CONFIG_SECCOMP undefined
Posted by Yi Min Zhao, 3 days ago

在 2018/5/18 下午9:07, Ján Tomko 写道:
> On Fri, May 18, 2018 at 11:19:16AM +0200, Eduardo Otubo wrote:
>> On 18/05/2018 - 09:52:12, Ján Tomko wrote:
>>> On Thu, May 17, 2018 at 02:41:09PM +0200, Eduardo Otubo wrote:
>>> > On 15/05/2018 - 19:33:48, Yi Min Zhao wrote:
>>> > > If CONFIG_SECCOMP is undefined, the option 'elevateprivileges' 
>>> remains
>>> > > compiled. This would make libvirt set the corresponding 
>>> capability and
>>> > > then trigger the guest startup fails. So this patch excludes the 
>>> code
>>> > > regarding seccomp staff if CONFIG_SECCOMP is undefined.
>>> >
>>> > Just a sugestion for the next patch you send: If it's a single 
>>> patch, you don't
>>> > need to format it with a cover-letter. Just put all the 
>>> description in the body,
>>> > or if you need to add a text that shouldn't be included in the 
>>> commit message,
>>> > just add it after the "---" after Signed-off-by.
>>> >
>>> > >
>>> > > Signed-off-by: Yi Min Zhao <zyimin@linux.ibm.com>
>>> > > ---
>>> > >  vl.c | 13 ++++++++-----
>>> > >  1 file changed, 8 insertions(+), 5 deletions(-)
>>> > >
>>>
>
> [...]
>
>>> Current libvirt logic assumes the -sandbox option is always present.
>>> (IIRC it was introduced in QEMU 1.1 and when we switched from help
>>> scraping to capability probing via QMP for QEMU 1.2, there was no
>>> way to detect it)
>>>
>>> This patch fixes the usage of QEMU new enough for seccomp blacklist
>>> (where libvirt enables the sandbox by default),
>>> but breaks the usage of QEMU with compiled out sandbox and
>>> setting
>>>  seccomp_sandbox = 0
>>> in libvirt's qemu.conf:
>>>
>>> error: internal error: process exited while connecting to monitor:
>>> qemu-git: -sandbox off: There is no option group 'sandbox'
>>>
>>>
>>> But now libvirt requires QEMU >= 1.5.0 which already supports
>>> query-command-line-options, so if you want the option gone completely
>>> --without-seccomp, I can add the code that probes for it and
>>> make seccomp_sandbox = 0 a no-op if it's compiled out.
>>
>> This looks like a good solution for the libvirt side. Can you add 
>> this support
>> so we can merge this fix?
>>
>
> Patches proposed:
> https://www.redhat.com/archives/libvir-list/2018-May/msg01430.html
>
> Jano
Thanks for your work!


Re: [Qemu-devel] [PATCH v2 1/1] sandbox: disable -sandbox if CONFIG_SECCOMP undefined
Posted by Eric Blake, 4 days ago
On 05/18/2018 02:52 AM, Ján Tomko wrote:

> This patch fixes the usage of QEMU new enough for seccomp blacklist
> (where libvirt enables the sandbox by default),
> but breaks the usage of QEMU with compiled out sandbox and
> setting
>   seccomp_sandbox = 0
> in libvirt's qemu.conf:
> 
> error: internal error: process exited while connecting to monitor:
> qemu-git: -sandbox off: There is no option group 'sandbox'
> 
> 
> But now libvirt requires QEMU >= 1.5.0 which already supports
> query-command-line-options, so if you want the option gone completely
> --without-seccomp, I can add the code that probes for it and
> make seccomp_sandbox = 0 a no-op if it's compiled out.

And that's acceptable - we document that libvirt must be at least as new 
as qemu.  Mixing old qemu + new libvirt should always work, but mixing 
new qemu + old libvirt may fail, and this is one of those cases.  The 
solution for anyone hitting the failure is to upgrade libvirt to match 
the fact that they upgraded qemu.

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org