mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-11-05 20:35:44 +00:00
disallow -daemonize usage of stdio (curses display, -nographic, -serial stdio etc)
Curses display requires stdin/out to stay on the terminal,
so -daemonize makes no sense in this case. Instead of
leaving display uninitialized like is done since 995ee2bf46
,
explicitly detect this case earlier and error out.
-nographic can actually be used with -daemonize, by redirecting
everything to a null device, but the problem is that according
to documentation and historical behavour, -nographic redirects
guest ports to stdin/out, which, again, makes no sense in case
of -daemonize. Since -nographic is a legacy option, don't bother
fixing this case (to allow -nographic and -daemonize by redirecting
guest ports to null instead of stdin/out in this case), but disallow
it completely instead, to stop garbling host terminal.
If no display display needed and user wants to use -nographic,
the right way to go is to use
-serial null -parallel null -monitor none -display none -vga none
instead of -nographic.
Also prevent the same issue -- it was possible to get garbled
host tty after
-nographic -daemonize
and it is still possible to have it by using
-serial stdio -daemonize
Fix this by disallowing opening stdio chardev when -daemonize
is specified.
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
217da7fdeb
commit
ab51b1d568
2 changed files with 29 additions and 3 deletions
|
@ -772,6 +772,10 @@ static CharDriverState *qemu_chr_open_stdio(QemuOpts *opts)
|
|||
if (stdio_nb_clients >= STDIO_MAX_CLIENTS) {
|
||||
return NULL;
|
||||
}
|
||||
if (is_daemonized()) {
|
||||
error_report("cannot use stdio with -daemonize");
|
||||
return NULL;
|
||||
}
|
||||
if (stdio_nb_clients == 0) {
|
||||
old_fd0_flags = fcntl(0, F_GETFL);
|
||||
tcgetattr (0, &oldtty);
|
||||
|
|
28
vl.c
28
vl.c
|
@ -3637,6 +3637,30 @@ int main(int argc, char **argv, char **envp)
|
|||
default_sdcard = 0;
|
||||
}
|
||||
|
||||
if (is_daemonized()) {
|
||||
/* According to documentation and historically, -nographic redirects
|
||||
* serial port, parallel port and monitor to stdio, which does not work
|
||||
* with -daemonize. We can redirect these to null instead, but since
|
||||
* -nographic is legacy, let's just error out.
|
||||
* We disallow -nographic only if all other ports are not redirected
|
||||
* explicitly, to not break existing legacy setups which uses
|
||||
* -nographic _and_ redirects all ports explicitly - this is valid
|
||||
* usage, -nographic is just a no-op in this case.
|
||||
*/
|
||||
if (display_type == DT_NOGRAPHIC
|
||||
&& (default_parallel || default_serial
|
||||
|| default_monitor || default_virtcon)) {
|
||||
fprintf(stderr, "-nographic can not be used with -daemonize\n");
|
||||
exit(1);
|
||||
}
|
||||
#ifdef CONFIG_CURSES
|
||||
if (display_type == DT_CURSES) {
|
||||
fprintf(stderr, "curses display can not be used with -daemonize\n");
|
||||
exit(1);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
if (display_type == DT_NOGRAPHIC) {
|
||||
if (default_parallel)
|
||||
add_device_config(DEV_PARALLEL, "null");
|
||||
|
@ -3903,9 +3927,7 @@ int main(int argc, char **argv, char **envp)
|
|||
break;
|
||||
#if defined(CONFIG_CURSES)
|
||||
case DT_CURSES:
|
||||
if (!is_daemonized()) {
|
||||
curses_display_init(ds, full_screen);
|
||||
}
|
||||
curses_display_init(ds, full_screen);
|
||||
break;
|
||||
#endif
|
||||
#if defined(CONFIG_SDL)
|
||||
|
|
Loading…
Reference in a new issue