All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 0/2] fix segfault in (iscsi) option parsing
@ 2013-03-19  8:19 Peter Lieven
  2013-03-19  8:19 ` [Qemu-devel] [PATCH 1/2] qemu-option: avoid segfault if QemuOptsList == NULL Peter Lieven
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Peter Lieven @ 2013-03-19  8:19 UTC (permalink / raw)
  To: qemu-devel; +Cc: Peter Lieven

current git master segfaults if an iscsi option is specified
in command line.

Peter Lieven (2):
  qemu-option: avoid segfault if QemuOptsList == NULL
  vl.c: fix segfault in iscsi options parsing

 block/iscsi.c      |   27 ---------------------------
 util/qemu-option.c |    1 +
 vl.c               |   40 +++++++++++++++++++++++++++++++++++++---
 3 files changed, 38 insertions(+), 30 deletions(-)

-- 
1.7.9.5

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Qemu-devel] [PATCH 1/2] qemu-option: avoid segfault if QemuOptsList == NULL
  2013-03-19  8:19 [Qemu-devel] [PATCH 0/2] fix segfault in (iscsi) option parsing Peter Lieven
@ 2013-03-19  8:19 ` Peter Lieven
  2013-03-19  8:19 ` [Qemu-devel] [PATCH 2/2] vl.c: fix segfault in iscsi options parsing Peter Lieven
  2013-03-19  8:51 ` [Qemu-devel] [PATCH 0/2] fix segfault in (iscsi) option parsing Markus Armbruster
  2 siblings, 0 replies; 9+ messages in thread
From: Peter Lieven @ 2013-03-19  8:19 UTC (permalink / raw)
  To: qemu-devel; +Cc: Peter Lieven

Signed-off-by: Peter Lieven <pl@kamp.de>
---
 util/qemu-option.c |    1 +
 1 file changed, 1 insertion(+)

diff --git a/util/qemu-option.c b/util/qemu-option.c
index 8b74bf1..24479d2 100644
--- a/util/qemu-option.c
+++ b/util/qemu-option.c
@@ -938,6 +938,7 @@ static QemuOpts *opts_parse(QemuOptsList *list, const char *params,
     QemuOpts *opts;
     Error *local_err = NULL;
 
+    assert(list != NULL);
     assert(!permit_abbrev || list->implied_opt_name);
     firstname = permit_abbrev ? list->implied_opt_name : NULL;
 
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [Qemu-devel] [PATCH 2/2] vl.c: fix segfault in iscsi options parsing
  2013-03-19  8:19 [Qemu-devel] [PATCH 0/2] fix segfault in (iscsi) option parsing Peter Lieven
  2013-03-19  8:19 ` [Qemu-devel] [PATCH 1/2] qemu-option: avoid segfault if QemuOptsList == NULL Peter Lieven
@ 2013-03-19  8:19 ` Peter Lieven
  2013-03-19  8:51 ` [Qemu-devel] [PATCH 0/2] fix segfault in (iscsi) option parsing Markus Armbruster
  2 siblings, 0 replies; 9+ messages in thread
From: Peter Lieven @ 2013-03-19  8:19 UTC (permalink / raw)
  To: qemu-devel; +Cc: Peter Lieven

this patch fixes parsing of iscsi options such as initiator-name
passed to command line via -iscsi option group.

because iscsi options where registered too late qemu_find_opts
returned NULL leading to a segfault in qemu_opts_parse.

Signed-off-by: Peter Lieven <pl@kamp.de>
---
 block/iscsi.c |   27 ---------------------------
 vl.c          |   40 +++++++++++++++++++++++++++++++++++++---
 2 files changed, 37 insertions(+), 30 deletions(-)

diff --git a/block/iscsi.c b/block/iscsi.c
index 3d52921..23d4210 100644
--- a/block/iscsi.c
+++ b/block/iscsi.c
@@ -1263,36 +1263,9 @@ static BlockDriver bdrv_iscsi = {
 #endif
 };
 
-static QemuOptsList qemu_iscsi_opts = {
-    .name = "iscsi",
-    .head = QTAILQ_HEAD_INITIALIZER(qemu_iscsi_opts.head),
-    .desc = {
-        {
-            .name = "user",
-            .type = QEMU_OPT_STRING,
-            .help = "username for CHAP authentication to target",
-        },{
-            .name = "password",
-            .type = QEMU_OPT_STRING,
-            .help = "password for CHAP authentication to target",
-        },{
-            .name = "header-digest",
-            .type = QEMU_OPT_STRING,
-            .help = "HeaderDigest setting. "
-                    "{CRC32C|CRC32C-NONE|NONE-CRC32C|NONE}",
-        },{
-            .name = "initiator-name",
-            .type = QEMU_OPT_STRING,
-            .help = "Initiator iqn name to use when connecting",
-        },
-        { /* end of list */ }
-    },
-};
-
 static void iscsi_block_init(void)
 {
     bdrv_register(&bdrv_iscsi);
-    qemu_add_opts(&qemu_iscsi_opts);
 }
 
 block_init(iscsi_block_init);
diff --git a/vl.c b/vl.c
index ce51e65..9925675 100644
--- a/vl.c
+++ b/vl.c
@@ -517,6 +517,34 @@ static QemuOptsList qemu_tpmdev_opts = {
     },
 };
 
+#ifdef CONFIG_LIBISCSI
+static QemuOptsList qemu_iscsi_opts = {
+    .name = "iscsi",
+    .head = QTAILQ_HEAD_INITIALIZER(qemu_iscsi_opts.head),
+    .desc = {
+        {
+            .name = "user",
+            .type = QEMU_OPT_STRING,
+            .help = "username for CHAP authentication to target",
+        },{
+            .name = "password",
+            .type = QEMU_OPT_STRING,
+            .help = "password for CHAP authentication to target",
+        },{
+            .name = "header-digest",
+            .type = QEMU_OPT_STRING,
+            .help = "HeaderDigest setting. "
+                    "{CRC32C|CRC32C-NONE|NONE-CRC32C|NONE}",
+        },{
+            .name = "initiator-name",
+            .type = QEMU_OPT_STRING,
+            .help = "Initiator iqn name to use when connecting",
+        },
+        { /* end of list */ }
+    },
+};
+#endif
+
 const char *qemu_get_vm_name(void)
 {
     return qemu_name;
@@ -2899,6 +2927,9 @@ int main(int argc, char **argv, char **envp)
     qemu_add_opts(&qemu_add_fd_opts);
     qemu_add_opts(&qemu_object_opts);
     qemu_add_opts(&qemu_tpmdev_opts);
+#ifdef CONFIG_LIBISCSI
+    qemu_add_opts(&qemu_iscsi_opts);
+#endif
 
     runstate_init();
 
@@ -3199,14 +3230,17 @@ int main(int argc, char **argv, char **envp)
                     exit(1);
                 }
                 break;
-#ifdef CONFIG_LIBISCSI
             case QEMU_OPTION_iscsi:
-                opts = qemu_opts_parse(qemu_find_opts("iscsi"), optarg, 0);
+                olist = qemu_find_opts("iscsi");
+                if (!olist) {
+                    fprintf(stderr, "iscsi is not supported by this qemu build.\n");
+                    exit(1);
+                }
+                opts = qemu_opts_parse(olist, optarg, 0);
                 if (!opts) {
                     exit(1);
                 }
                 break;
-#endif
 #ifdef CONFIG_SLIRP
             case QEMU_OPTION_tftp:
                 legacy_tftp_prefix = optarg;
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [PATCH 0/2] fix segfault in (iscsi) option parsing
  2013-03-19  8:19 [Qemu-devel] [PATCH 0/2] fix segfault in (iscsi) option parsing Peter Lieven
  2013-03-19  8:19 ` [Qemu-devel] [PATCH 1/2] qemu-option: avoid segfault if QemuOptsList == NULL Peter Lieven
  2013-03-19  8:19 ` [Qemu-devel] [PATCH 2/2] vl.c: fix segfault in iscsi options parsing Peter Lieven
@ 2013-03-19  8:51 ` Markus Armbruster
  2013-03-19 11:18   ` Paolo Bonzini
  2 siblings, 1 reply; 9+ messages in thread
From: Markus Armbruster @ 2013-03-19  8:51 UTC (permalink / raw)
  To: Peter Lieven; +Cc: Paolo Bonzini, qemu-devel

Paolo, please have a look.

Peter Lieven <pl@kamp.de> writes:

> current git master segfaults if an iscsi option is specified
> in command line.
>
> Peter Lieven (2):
>   qemu-option: avoid segfault if QemuOptsList == NULL
>   vl.c: fix segfault in iscsi options parsing
>
>  block/iscsi.c      |   27 ---------------------------
>  util/qemu-option.c |    1 +
>  vl.c               |   40 +++++++++++++++++++++++++++++++++++++---
>  3 files changed, 38 insertions(+), 30 deletions(-)

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [PATCH 0/2] fix segfault in (iscsi) option parsing
  2013-03-19  8:51 ` [Qemu-devel] [PATCH 0/2] fix segfault in (iscsi) option parsing Markus Armbruster
@ 2013-03-19 11:18   ` Paolo Bonzini
  2013-03-19 15:54     ` Peter Lieven
  0 siblings, 1 reply; 9+ messages in thread
From: Paolo Bonzini @ 2013-03-19 11:18 UTC (permalink / raw)
  To: Markus Armbruster; +Cc: Peter Lieven, qemu-devel

Il 19/03/2013 09:51, Markus Armbruster ha scritto:
> Paolo, please have a look.

Why isn't it enough to call bdrv_init_with_whitelist earlier?

There is no conditional logic in it, the whitelist is checked at open time.

Paolo

> Peter Lieven <pl@kamp.de> writes:
> 
>> current git master segfaults if an iscsi option is specified
>> in command line.
>>
>> Peter Lieven (2):
>>   qemu-option: avoid segfault if QemuOptsList == NULL
>>   vl.c: fix segfault in iscsi options parsing
>>
>>  block/iscsi.c      |   27 ---------------------------
>>  util/qemu-option.c |    1 +
>>  vl.c               |   40 +++++++++++++++++++++++++++++++++++++---
>>  3 files changed, 38 insertions(+), 30 deletions(-)
> 
> 

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [PATCH 0/2] fix segfault in (iscsi) option parsing
  2013-03-19 11:18   ` Paolo Bonzini
@ 2013-03-19 15:54     ` Peter Lieven
  2013-03-19 17:07       ` Paolo Bonzini
  0 siblings, 1 reply; 9+ messages in thread
From: Peter Lieven @ 2013-03-19 15:54 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: Markus Armbruster, qemu-devel

On 19.03.2013 12:18, Paolo Bonzini wrote:
> Il 19/03/2013 09:51, Markus Armbruster ha scritto:
>> Paolo, please have a look.
> Why isn't it enough to call bdrv_init_with_whitelist earlier?
>
> There is no conditional logic in it, the whitelist is checked at open time.

Has anyone tested if -spice is working? In this case bdrv_init_with_whitelist() won't help here.

Anyway, I would like to change the -iscsi code in vl.c to throw an error, if iscsi support is not
compiled in (like it is done with spice).

Peter

>
> Paolo
>
>> Peter Lieven <pl@kamp.de> writes:
>>
>>> current git master segfaults if an iscsi option is specified
>>> in command line.
>>>
>>> Peter Lieven (2):
>>>    qemu-option: avoid segfault if QemuOptsList == NULL
>>>    vl.c: fix segfault in iscsi options parsing
>>>
>>>   block/iscsi.c      |   27 ---------------------------
>>>   util/qemu-option.c |    1 +
>>>   vl.c               |   40 +++++++++++++++++++++++++++++++++++++---
>>>   3 files changed, 38 insertions(+), 30 deletions(-)
>>


-- 

Mit freundlichen Grüßen

Peter Lieven

...........................................................

   KAMP Netzwerkdienste GmbH
   Vestische Str. 89-91 | 46117 Oberhausen
   Tel: +49 (0) 208.89 402-50 | Fax: +49 (0) 208.89 402-40
   pl@kamp.de | http://www.kamp.de

   Geschäftsführer: Heiner Lante | Michael Lante
   Amtsgericht Duisburg | HRB Nr. 12154
   USt-Id-Nr.: DE 120607556

...........................................................

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [PATCH 0/2] fix segfault in (iscsi) option parsing
  2013-03-19 15:54     ` Peter Lieven
@ 2013-03-19 17:07       ` Paolo Bonzini
  2013-03-19 19:37         ` Peter Lieven
  0 siblings, 1 reply; 9+ messages in thread
From: Paolo Bonzini @ 2013-03-19 17:07 UTC (permalink / raw)
  To: Peter Lieven; +Cc: Markus Armbruster, qemu-devel

Il 19/03/2013 16:54, Peter Lieven ha scritto:
> On 19.03.2013 12:18, Paolo Bonzini wrote:
>> Il 19/03/2013 09:51, Markus Armbruster ha scritto:
>>> Paolo, please have a look.
>> Why isn't it enough to call bdrv_init_with_whitelist earlier?
>>
>> There is no conditional logic in it, the whitelist is checked at open
>> time.
> 
> Has anyone tested if -spice is working?

It is.

machine_init entries are processed just below the other qemu_add_opts.

Paolo

 In this case
> bdrv_init_with_whitelist() won't help here.
> 
> Anyway, I would like to change the -iscsi code in vl.c to throw an
> error, if iscsi support is not
> compiled in (like it is done with spice).
> 
> Peter
> 
>>
>> Paolo
>>
>>> Peter Lieven <pl@kamp.de> writes:
>>>
>>>> current git master segfaults if an iscsi option is specified
>>>> in command line.
>>>>
>>>> Peter Lieven (2):
>>>>    qemu-option: avoid segfault if QemuOptsList == NULL
>>>>    vl.c: fix segfault in iscsi options parsing
>>>>
>>>>   block/iscsi.c      |   27 ---------------------------
>>>>   util/qemu-option.c |    1 +
>>>>   vl.c               |   40 +++++++++++++++++++++++++++++++++++++---
>>>>   3 files changed, 38 insertions(+), 30 deletions(-)
>>>
> 
> 

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [PATCH 0/2] fix segfault in (iscsi) option parsing
  2013-03-19 17:07       ` Paolo Bonzini
@ 2013-03-19 19:37         ` Peter Lieven
  2013-03-19 20:58           ` Paolo Bonzini
  0 siblings, 1 reply; 9+ messages in thread
From: Peter Lieven @ 2013-03-19 19:37 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: Markus Armbruster, qemu-devel


Am 19.03.2013 um 18:07 schrieb Paolo Bonzini <pbonzini@redhat.com>:

> Il 19/03/2013 16:54, Peter Lieven ha scritto:
>> On 19.03.2013 12:18, Paolo Bonzini wrote:
>>> Il 19/03/2013 09:51, Markus Armbruster ha scritto:
>>>> Paolo, please have a look.
>>> Why isn't it enough to call bdrv_init_with_whitelist earlier?
>>> 
>>> There is no conditional logic in it, the whitelist is checked at open
>>> time.
>> 
>> Has anyone tested if -spice is working?
> 
> It is.
> 
> machine_init entries are processed just below the other qemu_add_opts.

Ok, if you agree I would prepare a new version of this patch set with 3 patches:

1) move up brd_init_with_whitelist
2) throw an error if -iscsi is used without compile libiscsi support
3) assert that QemuOptsList != NULL to avoid further segfaults.

I currently see a segfault on VM start in libiscsi with latest git. Whereas my old
qemu-kvm 1.2.0 is working with the same command line and libiscsi library.
As soon as I have sorted this out I will send a new patch set.

Peter


> 
> Paolo
> 
> In this case
>> bdrv_init_with_whitelist() won't help here.
>> 
>> Anyway, I would like to change the -iscsi code in vl.c to throw an
>> error, if iscsi support is not
>> compiled in (like it is done with spice).
>> 
>> Peter
>> 
>>> 
>>> Paolo
>>> 
>>>> Peter Lieven <pl@kamp.de> writes:
>>>> 
>>>>> current git master segfaults if an iscsi option is specified
>>>>> in command line.
>>>>> 
>>>>> Peter Lieven (2):
>>>>>   qemu-option: avoid segfault if QemuOptsList == NULL
>>>>>   vl.c: fix segfault in iscsi options parsing
>>>>> 
>>>>>  block/iscsi.c      |   27 ---------------------------
>>>>>  util/qemu-option.c |    1 +
>>>>>  vl.c               |   40 +++++++++++++++++++++++++++++++++++++---
>>>>>  3 files changed, 38 insertions(+), 30 deletions(-)
>>>> 
>> 
>> 
> 

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [PATCH 0/2] fix segfault in (iscsi) option parsing
  2013-03-19 19:37         ` Peter Lieven
@ 2013-03-19 20:58           ` Paolo Bonzini
  0 siblings, 0 replies; 9+ messages in thread
From: Paolo Bonzini @ 2013-03-19 20:58 UTC (permalink / raw)
  To: Peter Lieven; +Cc: Markus Armbruster, qemu-devel

Il 19/03/2013 20:37, Peter Lieven ha scritto:
> 
> Am 19.03.2013 um 18:07 schrieb Paolo Bonzini <pbonzini@redhat.com>:
> 
>> Il 19/03/2013 16:54, Peter Lieven ha scritto:
>>> On 19.03.2013 12:18, Paolo Bonzini wrote:
>>>> Il 19/03/2013 09:51, Markus Armbruster ha scritto:
>>>>> Paolo, please have a look.
>>>> Why isn't it enough to call bdrv_init_with_whitelist earlier?
>>>>
>>>> There is no conditional logic in it, the whitelist is checked at open
>>>> time.
>>>
>>> Has anyone tested if -spice is working?
>>
>> It is.
>>
>> machine_init entries are processed just below the other qemu_add_opts.
> 
> Ok, if you agree I would prepare a new version of this patch set with 3 patches:
> 
> 1) move up brd_init_with_whitelist
> 2) throw an error if -iscsi is used without compile libiscsi support
> 3) assert that QemuOptsList != NULL to avoid further segfaults.
> 
> I currently see a segfault on VM start in libiscsi with latest git. Whereas my old
> qemu-kvm 1.2.0 is working with the same command line and libiscsi library.
> As soon as I have sorted this out I will send a new patch set.

I don't think (3) is that important, but yes, that's the plan.

Paolo

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2013-03-19 20:58 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-03-19  8:19 [Qemu-devel] [PATCH 0/2] fix segfault in (iscsi) option parsing Peter Lieven
2013-03-19  8:19 ` [Qemu-devel] [PATCH 1/2] qemu-option: avoid segfault if QemuOptsList == NULL Peter Lieven
2013-03-19  8:19 ` [Qemu-devel] [PATCH 2/2] vl.c: fix segfault in iscsi options parsing Peter Lieven
2013-03-19  8:51 ` [Qemu-devel] [PATCH 0/2] fix segfault in (iscsi) option parsing Markus Armbruster
2013-03-19 11:18   ` Paolo Bonzini
2013-03-19 15:54     ` Peter Lieven
2013-03-19 17:07       ` Paolo Bonzini
2013-03-19 19:37         ` Peter Lieven
2013-03-19 20:58           ` Paolo Bonzini

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.