diff mbox series

[v2,1/1] sandbox: disable -sandbox if CONFIG_SECCOMP undefined

Message ID 20180515113348.10516-2-zyimin@linux.ibm.com
State New
Headers show
Series Bug: Sandbox: libvirt breakdowns qemu guest | expand

Commit Message

Yi Min Zhao May 15, 2018, 11:33 a.m. UTC
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(-)

Comments

Eric Blake May 15, 2018, 3:25 p.m. UTC | #1
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>
Yi Min Zhao May 16, 2018, 1:05 a.m. UTC | #2
在 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.
Yi Min Zhao May 17, 2018, 11:33 a.m. UTC | #3
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>
>
Eduardo Otubo May 17, 2018, 12:41 p.m. UTC | #4
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.
Yi Min Zhao May 17, 2018, 2:36 p.m. UTC | #5
在 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.
Ján Tomko May 18, 2018, 7:52 a.m. UTC | #6
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
Eduardo Otubo May 18, 2018, 9:19 a.m. UTC | #7
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,
Eric Blake May 18, 2018, 12:08 p.m. UTC | #8
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.
Ján Tomko May 18, 2018, 1:07 p.m. UTC | #9
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
Yi Min Zhao May 19, 2018, 8:20 a.m. UTC | #10
在 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!
Ján Tomko May 23, 2018, 7:47 a.m. UTC | #11
On Sat, May 19, 2018 at 04:20:37PM +0800, Yi Min Zhao wrote:
>
>
>在 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:
>>>> 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!

Now pushed in libvirt master:
commit b87222a90919040c12fb6d7c8dcc20f944a66495
Author:     Ján Tomko <jtomko@redhat.com>
AuthorDate: 2018-05-18 14:57:51 +0200
Commit:     Ján Tomko <jtomko@redhat.com>
CommitDate: 2018-05-23 09:45:48 +0200

    qemu: only pass -sandbox off if supported

    This way we don't rely on QEMU supplying the -sandbox option
    without CONFIG_SECCOMP.

    Signed-off-by: Ján Tomko <jtomko@redhat.com>
    Reviewed-by: John Ferlan <jferlan@redhat.com>

git describe: v4.3.0-258-gb87222a909
https://libvirt.org/git/?p=libvirt.git;a=commitdiff;h=b87222a90919040c12fb6d7c8dcc20f944a66495

Jano
Yi Min Zhao May 23, 2018, 9:16 a.m. UTC | #12
在 2018/5/23 下午3:47, Ján Tomko 写道:
> On Sat, May 19, 2018 at 04:20:37PM +0800, Yi Min Zhao wrote:
>>
>>
>> 在 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:
>>>>> 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!
>
> Now pushed in libvirt master:
> commit b87222a90919040c12fb6d7c8dcc20f944a66495
> Author:     Ján Tomko <jtomko@redhat.com>
> AuthorDate: 2018-05-18 14:57:51 +0200
> Commit:     Ján Tomko <jtomko@redhat.com>
> CommitDate: 2018-05-23 09:45:48 +0200
>
>    qemu: only pass -sandbox off if supported
>
>    This way we don't rely on QEMU supplying the -sandbox option
>    without CONFIG_SECCOMP.
>
>    Signed-off-by: Ján Tomko <jtomko@redhat.com>
>    Reviewed-by: John Ferlan <jferlan@redhat.com>
>
> git describe: v4.3.0-258-gb87222a909
> https://libvirt.org/git/?p=libvirt.git;a=commitdiff;h=b87222a90919040c12fb6d7c8dcc20f944a66495 
>
>
> Jano
Thanks! But I have not got response from Paolo.  I have added him to CC 
list.
Eduardo Otubo May 23, 2018, 10:33 a.m. UTC | #13
On 05/23/2018 11:16 AM, Yi Min Zhao wrote:
> 
> 
> 在 2018/5/23 下午3:47, Ján Tomko 写道:
>> On Sat, May 19, 2018 at 04:20:37PM +0800, Yi Min Zhao wrote:
>>>
>>>
>>> 在 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:
>>>>>> 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!
>>
>> Now pushed in libvirt master:
>> commit b87222a90919040c12fb6d7c8dcc20f944a66495
>> Author:     Ján Tomko <jtomko@redhat.com>
>> AuthorDate: 2018-05-18 14:57:51 +0200
>> Commit:     Ján Tomko <jtomko@redhat.com>
>> CommitDate: 2018-05-23 09:45:48 +0200
>>
>>    qemu: only pass -sandbox off if supported
>>
>>    This way we don't rely on QEMU supplying the -sandbox option
>>    without CONFIG_SECCOMP.
>>
>>    Signed-off-by: Ján Tomko <jtomko@redhat.com>
>>    Reviewed-by: John Ferlan <jferlan@redhat.com>
>>
>> git describe: v4.3.0-258-gb87222a909
>> https://libvirt.org/git/?p=libvirt.git;a=commitdiff;h=b87222a90919040c12fb6d7c8dcc20f944a66495 
>>
>>
>> Jano
> Thanks! But I have not got response from Paolo.  I have added him to CC 
> list.
> 
  I'll just wait one more ACK and will send a pull request on the 
seccomp queue. Thanks for the contribution.
Yi Min Zhao May 23, 2018, 12:17 p.m. UTC | #14
在 2018/5/23 下午6:33, Eduardo Otubo 写道:
> On 05/23/2018 11:16 AM, Yi Min Zhao wrote:
>>
>>
>> 在 2018/5/23 下午3:47, Ján Tomko 写道:
>>> On Sat, May 19, 2018 at 04:20:37PM +0800, Yi Min Zhao wrote:
>>>>
>>>>
>>>> 在 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:
>>>>>>> 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!
>>>
>>> Now pushed in libvirt master:
>>> commit b87222a90919040c12fb6d7c8dcc20f944a66495
>>> Author:     Ján Tomko <jtomko@redhat.com>
>>> AuthorDate: 2018-05-18 14:57:51 +0200
>>> Commit:     Ján Tomko <jtomko@redhat.com>
>>> CommitDate: 2018-05-23 09:45:48 +0200
>>>
>>>    qemu: only pass -sandbox off if supported
>>>
>>>    This way we don't rely on QEMU supplying the -sandbox option
>>>    without CONFIG_SECCOMP.
>>>
>>>    Signed-off-by: Ján Tomko <jtomko@redhat.com>
>>>    Reviewed-by: John Ferlan <jferlan@redhat.com>
>>>
>>> git describe: v4.3.0-258-gb87222a909
>>> https://libvirt.org/git/?p=libvirt.git;a=commitdiff;h=b87222a90919040c12fb6d7c8dcc20f944a66495 
>>>
>>>
>>> Jano
>> Thanks! But I have not got response from Paolo.  I have added him to 
>> CC list.
>>
>  I'll just wait one more ACK and will send a pull request on the 
> seccomp queue. Thanks for the contribution.
>
>
So... what I should do is wait?
Eduardo Otubo May 24, 2018, 7:53 a.m. UTC | #15
On 05/23/2018 02:17 PM, Yi Min Zhao wrote:
> 
> 
> 在 2018/5/23 下午6:33, Eduardo Otubo 写道:
>> On 05/23/2018 11:16 AM, Yi Min Zhao wrote:
>>>
>>>
>>> 在 2018/5/23 下午3:47, Ján Tomko 写道:
>>>> On Sat, May 19, 2018 at 04:20:37PM +0800, Yi Min Zhao wrote:
>>>>>
>>>>>
>>>>> 在 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:
>>>>>>>> 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!
>>>>
>>>> Now pushed in libvirt master:
>>>> commit b87222a90919040c12fb6d7c8dcc20f944a66495
>>>> Author:     Ján Tomko <jtomko@redhat.com>
>>>> AuthorDate: 2018-05-18 14:57:51 +0200
>>>> Commit:     Ján Tomko <jtomko@redhat.com>
>>>> CommitDate: 2018-05-23 09:45:48 +0200
>>>>
>>>>    qemu: only pass -sandbox off if supported
>>>>
>>>>    This way we don't rely on QEMU supplying the -sandbox option
>>>>    without CONFIG_SECCOMP.
>>>>
>>>>    Signed-off-by: Ján Tomko <jtomko@redhat.com>
>>>>    Reviewed-by: John Ferlan <jferlan@redhat.com>
>>>>
>>>> git describe: v4.3.0-258-gb87222a909
>>>> https://libvirt.org/git/?p=libvirt.git;a=commitdiff;h=b87222a90919040c12fb6d7c8dcc20f944a66495 
>>>>
>>>>
>>>> Jano
>>> Thanks! But I have not got response from Paolo.  I have added him to 
>>> CC list.
>>>
>>  I'll just wait one more ACK and will send a pull request on the 
>> seccomp queue. Thanks for the contribution.
>>
>>
> So... what I should do is wait?
> 
Yes, even though I think we're safe to proceed without his explicit ack.
Paolo Bonzini May 24, 2018, 1:40 p.m. UTC | #16
On 24/05/2018 09:53, Eduardo Otubo wrote:
>>>>>
>>>> Thanks! But I have not got response from Paolo.  I have added him to
>>>> CC list.
>>>>
>>>  I'll just wait one more ACK and will send a pull request on the
>>> seccomp queue. Thanks for the contribution.
>>>
>>>
>> So... what I should do is wait?
>>
> Yes, even though I think we're safe to proceed without his explicit ack.

The patch is okay; however, as a follow-up, you could consider moving
all the CONFIG_SECCOMP code to qemu-seccomp.c.

This way, the only #ifdef remains the one around qemu_opts_foreach.

Paolo
Yi Min Zhao May 25, 2018, 4:23 a.m. UTC | #17
在 2018/5/24 下午9:40, Paolo Bonzini 写道:
> On 24/05/2018 09:53, Eduardo Otubo wrote:
>>>>> Thanks! But I have not got response from Paolo.  I have added him to
>>>>> CC list.
>>>>>
>>>>   I'll just wait one more ACK and will send a pull request on the
>>>> seccomp queue. Thanks for the contribution.
>>>>
>>>>
>>> So... what I should do is wait?
>>>
>> Yes, even though I think we're safe to proceed without his explicit ack.
> The patch is okay; however, as a follow-up, you could consider moving
> all the CONFIG_SECCOMP code to qemu-seccomp.c.
>
> This way, the only #ifdef remains the one around qemu_opts_foreach.
>
> Paolo
>
>
Thanks for your comment! Indeed, moving to the single C file is much 
more clear.
I will do this after this patch.

@Otubo, what about next step?
Eduardo Otubo May 25, 2018, 9:36 a.m. UTC | #18
On 05/25/2018 06:23 AM, Yi Min Zhao wrote:
> 
> 
> 在 2018/5/24 下午9:40, Paolo Bonzini 写道:
>> On 24/05/2018 09:53, Eduardo Otubo wrote:
>>>>>> Thanks! But I have not got response from Paolo.  I have added him to
>>>>>> CC list.
>>>>>>
>>>>>   I'll just wait one more ACK and will send a pull request on the
>>>>> seccomp queue. Thanks for the contribution.
>>>>>
>>>>>
>>>> So... what I should do is wait?
>>>>
>>> Yes, even though I think we're safe to proceed without his explicit ack.
>> The patch is okay; however, as a follow-up, you could consider moving
>> all the CONFIG_SECCOMP code to qemu-seccomp.c.
>>
>> This way, the only #ifdef remains the one around qemu_opts_foreach.
>>
>> Paolo
>>
>>
> Thanks for your comment! Indeed, moving to the single C file is much 
> more clear.
> I will do this after this patch.
> 
> @Otubo, what about next step?
> 
> 
If you're willing to send v3 with the changes Paolo suggested, I can 
wait to send the pull request. No worries.
Yi Min Zhao May 28, 2018, 12:55 p.m. UTC | #19
在 2018/5/25 下午5:36, Eduardo Otubo 写道:
> On 05/25/2018 06:23 AM, Yi Min Zhao wrote:
>>
>>
>> 在 2018/5/24 下午9:40, Paolo Bonzini 写道:
>>> On 24/05/2018 09:53, Eduardo Otubo wrote:
>>>>>>> Thanks! But I have not got response from Paolo.  I have added 
>>>>>>> him to
>>>>>>> CC list.
>>>>>>>
>>>>>>   I'll just wait one more ACK and will send a pull request on the
>>>>>> seccomp queue. Thanks for the contribution.
>>>>>>
>>>>>>
>>>>> So... what I should do is wait?
>>>>>
>>>> Yes, even though I think we're safe to proceed without his explicit 
>>>> ack.
>>> The patch is okay; however, as a follow-up, you could consider moving
>>> all the CONFIG_SECCOMP code to qemu-seccomp.c.
>>>
>>> This way, the only #ifdef remains the one around qemu_opts_foreach.
>>>
>>> Paolo
>>>
>>>
>> Thanks for your comment! Indeed, moving to the single C file is much 
>> more clear.
>> I will do this after this patch.
>>
>> @Otubo, what about next step?
>>
>>
> If you're willing to send v3 with the changes Paolo suggested, I can 
> wait to send the pull request. No worries.
>
>
OK. I will update the new version with Paolo's suggestion.
diff mbox series

Patch

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)) {