diff options
author | Paul Moore <pmoore@redhat.com> | 2012-08-03 14:39:21 -0400 |
---|---|---|
committer | Anthony Liguori <aliguori@us.ibm.com> | 2012-08-03 14:28:40 -0500 |
commit | 0f66998ff6d5d2133b9b08471a44e13b11119e50 (patch) | |
tree | 498ceec7d881257c2564998762cd635014c51e8d /osdep.c | |
parent | 2ad728bd4bf26d8144190ca87d5d36d5f33cfae9 (diff) | |
download | qemu-0f66998ff6d5d2133b9b08471a44e13b11119e50.zip qemu-0f66998ff6d5d2133b9b08471a44e13b11119e50.tar.gz qemu-0f66998ff6d5d2133b9b08471a44e13b11119e50.tar.bz2 |
vnc: disable VNC password authentication (security type 2) when in FIPS mode
FIPS 140-2 requires disabling certain ciphers, including DES, which is used
by VNC to obscure passwords when they are sent over the network. The
solution for FIPS users is to disable the use of VNC password auth when the
host system is operating in FIPS compliance mode and the user has specified
'-enable-fips' on the QEMU command line.
This patch causes QEMU to emit a message to stderr when the host system is
running in FIPS mode and a VNC password was specified on the commend line.
If the system is not running in FIPS mode, or is running in FIPS mode but
VNC password authentication was not requested, QEMU operates normally.
Signed-off-by: Paul Moore <pmoore@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'osdep.c')
-rw-r--r-- | osdep.c | 29 |
1 files changed, 29 insertions, 0 deletions
@@ -24,6 +24,7 @@ #include <stdlib.h> #include <stdio.h> #include <stdarg.h> +#include <stdbool.h> #include <string.h> #include <errno.h> #include <unistd.h> @@ -48,6 +49,8 @@ extern int madvise(caddr_t, size_t, int); #include "trace.h" #include "qemu_socket.h" +static bool fips_enabled = false; + static const char *qemu_version = QEMU_VERSION; int socket_set_cork(int fd, int v) @@ -253,3 +256,29 @@ const char *qemu_get_version(void) { return qemu_version; } + +void fips_set_state(bool requested) +{ +#ifdef __linux__ + if (requested) { + FILE *fds = fopen("/proc/sys/crypto/fips_enabled", "r"); + if (fds != NULL) { + fips_enabled = (fgetc(fds) == '1'); + fclose(fds); + } + } +#else + fips_enabled = false; +#endif /* __linux__ */ + +#ifdef _FIPS_DEBUG + fprintf(stderr, "FIPS mode %s (requested %s)\n", + (fips_enabled ? "enabled" : "disabled"), + (requested ? "enabled" : "disabled")); +#endif +} + +bool fips_get_state(void) +{ + return fips_enabled; +} |