0f66998ff6
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>
162 lines
3.8 KiB
C
162 lines
3.8 KiB
C
#ifndef QEMU_OSDEP_H
|
|
#define QEMU_OSDEP_H
|
|
|
|
#include <stdarg.h>
|
|
#include <stddef.h>
|
|
#include <stdbool.h>
|
|
#ifdef __OpenBSD__
|
|
#include <sys/types.h>
|
|
#include <sys/signal.h>
|
|
#endif
|
|
|
|
#include <sys/time.h>
|
|
|
|
#if defined(CONFIG_SOLARIS) && CONFIG_SOLARIS_VERSION < 10
|
|
/* [u]int_fast*_t not in <sys/int_types.h> */
|
|
typedef unsigned char uint_fast8_t;
|
|
typedef unsigned int uint_fast16_t;
|
|
typedef signed int int_fast16_t;
|
|
#endif
|
|
|
|
#ifndef glue
|
|
#define xglue(x, y) x ## y
|
|
#define glue(x, y) xglue(x, y)
|
|
#define stringify(s) tostring(s)
|
|
#define tostring(s) #s
|
|
#endif
|
|
|
|
#ifndef likely
|
|
#if __GNUC__ < 3
|
|
#define __builtin_expect(x, n) (x)
|
|
#endif
|
|
|
|
#define likely(x) __builtin_expect(!!(x), 1)
|
|
#define unlikely(x) __builtin_expect(!!(x), 0)
|
|
#endif
|
|
|
|
#ifndef container_of
|
|
#define container_of(ptr, type, member) ({ \
|
|
const typeof(((type *) 0)->member) *__mptr = (ptr); \
|
|
(type *) ((char *) __mptr - offsetof(type, member));})
|
|
#endif
|
|
|
|
/* Convert from a base type to a parent type, with compile time checking. */
|
|
#ifdef __GNUC__
|
|
#define DO_UPCAST(type, field, dev) ( __extension__ ( { \
|
|
char __attribute__((unused)) offset_must_be_zero[ \
|
|
-offsetof(type, field)]; \
|
|
container_of(dev, type, field);}))
|
|
#else
|
|
#define DO_UPCAST(type, field, dev) container_of(dev, type, field)
|
|
#endif
|
|
|
|
#define typeof_field(type, field) typeof(((type *)0)->field)
|
|
#define type_check(t1,t2) ((t1*)0 - (t2*)0)
|
|
|
|
#ifndef MIN
|
|
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
|
|
#endif
|
|
#ifndef MAX
|
|
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
|
|
#endif
|
|
|
|
#ifndef DIV_ROUND_UP
|
|
#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
|
|
#endif
|
|
|
|
#ifndef ARRAY_SIZE
|
|
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
|
|
#endif
|
|
|
|
#ifndef always_inline
|
|
#if !((__GNUC__ < 3) || defined(__APPLE__))
|
|
#ifdef __OPTIMIZE__
|
|
#undef inline
|
|
#define inline __attribute__ (( always_inline )) __inline__
|
|
#endif
|
|
#endif
|
|
#else
|
|
#undef inline
|
|
#define inline always_inline
|
|
#endif
|
|
|
|
#define qemu_printf printf
|
|
|
|
int qemu_daemon(int nochdir, int noclose);
|
|
void *qemu_memalign(size_t alignment, size_t size);
|
|
void *qemu_vmalloc(size_t size);
|
|
void qemu_vfree(void *ptr);
|
|
|
|
#define QEMU_MADV_INVALID -1
|
|
|
|
#if defined(CONFIG_MADVISE)
|
|
|
|
#define QEMU_MADV_WILLNEED MADV_WILLNEED
|
|
#define QEMU_MADV_DONTNEED MADV_DONTNEED
|
|
#ifdef MADV_DONTFORK
|
|
#define QEMU_MADV_DONTFORK MADV_DONTFORK
|
|
#else
|
|
#define QEMU_MADV_DONTFORK QEMU_MADV_INVALID
|
|
#endif
|
|
#ifdef MADV_MERGEABLE
|
|
#define QEMU_MADV_MERGEABLE MADV_MERGEABLE
|
|
#else
|
|
#define QEMU_MADV_MERGEABLE QEMU_MADV_INVALID
|
|
#endif
|
|
|
|
#elif defined(CONFIG_POSIX_MADVISE)
|
|
|
|
#define QEMU_MADV_WILLNEED POSIX_MADV_WILLNEED
|
|
#define QEMU_MADV_DONTNEED POSIX_MADV_DONTNEED
|
|
#define QEMU_MADV_DONTFORK QEMU_MADV_INVALID
|
|
#define QEMU_MADV_MERGEABLE QEMU_MADV_INVALID
|
|
|
|
#else /* no-op */
|
|
|
|
#define QEMU_MADV_WILLNEED QEMU_MADV_INVALID
|
|
#define QEMU_MADV_DONTNEED QEMU_MADV_INVALID
|
|
#define QEMU_MADV_DONTFORK QEMU_MADV_INVALID
|
|
#define QEMU_MADV_MERGEABLE QEMU_MADV_INVALID
|
|
|
|
#endif
|
|
|
|
int qemu_madvise(void *addr, size_t len, int advice);
|
|
|
|
#if defined(__HAIKU__) && defined(__i386__)
|
|
#define FMT_pid "%ld"
|
|
#elif defined(WIN64)
|
|
#define FMT_pid "%" PRId64
|
|
#else
|
|
#define FMT_pid "%d"
|
|
#endif
|
|
|
|
int qemu_create_pidfile(const char *filename);
|
|
int qemu_get_thread_id(void);
|
|
|
|
#ifdef _WIN32
|
|
static inline void qemu_timersub(const struct timeval *val1,
|
|
const struct timeval *val2,
|
|
struct timeval *res)
|
|
{
|
|
res->tv_sec = val1->tv_sec - val2->tv_sec;
|
|
if (val1->tv_usec < val2->tv_usec) {
|
|
res->tv_sec--;
|
|
res->tv_usec = val1->tv_usec - val2->tv_usec + 1000 * 1000;
|
|
} else {
|
|
res->tv_usec = val1->tv_usec - val2->tv_usec;
|
|
}
|
|
}
|
|
#else
|
|
#define qemu_timersub timersub
|
|
#endif
|
|
|
|
void qemu_set_cloexec(int fd);
|
|
|
|
void qemu_set_version(const char *);
|
|
const char *qemu_get_version(void);
|
|
|
|
void fips_set_state(bool requested);
|
|
bool fips_get_state(void);
|
|
|
|
#endif
|