Message ID | 4D821A7F.9000204@msgid.tls.msk.ru |
---|---|
State | New |
Headers | show |
Michael Tokarev <mjt@tls.msk.ru> writes: > 17.03.2011 16:51, Markus Armbruster wrote: >> Michael Tokarev <mjt@tls.msk.ru> writes: >> >>> Trivial patch. I've sent it yesterday but somehow it didn't >>> reach the list. >>> >>> This fixes the problem when qemu continues even if -drive specification >>> is somehow invalid, resulting in a mess. Applicable for both current >>> master and for stable-0.14 (and 0.13 and 0.12 as well). >> >> Note patch doesn't apply to 0.12 and 0.13. > > Yes it doesn't, since to 0.14 the code changed. > What I mean is that the same problem exist in > earlier versions too. I'll apply a change of > this effect to 0.12.5 as used in Debian now, > something like the one below. > > [] >> What about all the other unchecked drive_add() calls in main()? > > These are much less worrisome - they fail only of the > internal definitions of options are incorrect, which > should never happen. For example: > > case QEMU_OPTION_hdd: > drive_add(IF_DEFAULT, popt->index - QEMU_OPTION_hda, optarg, > HD_OPTS); > > There, optarg is just a filename, and HD_OPTS is > defined like this: > > #define HD_OPTS "media=disk" > > So it should not fail when parsing options, only > when trying to interpret and actually open the > filename, which happens much later in the game. Fair enough.
diff --git a/vl.c b/vl.c index 77677e8..069a1df 100644 --- a/vl.c +++ b/vl.c @@ -5025,7 +5025,8 @@ int main(int argc, char **argv, char **envp) drive_add(optarg, HD_ALIAS, popt->index - QEMU_OPTION_hda); break; case QEMU_OPTION_drive: - drive_add(NULL, "%s", optarg); + if (drive_add(NULL, "%s", optarg) == NULL) + exit(1); break; case QEMU_OPTION_set: if (qemu_set_option(optarg) != 0)