[qemu patches] Update patches upto changeset 11870:29b02d929b7e.

Signed-off-by: Christian Limpach <Christian.Limpach@xensource.com>
This commit is contained in:
Christian Limpach committed 2006-10-24 14:48:06 +01:00
1 parent 64dd1b77ae
commit 3cce2a0393
24 files changed
+1545 -181

No files matched your search

+8 -8
View File
@@ -1,7 +1,7 @@
Index: ioemu/hw/mc146818rtc.c
===================================================================
--- ioemu.orig/hw/mc146818rtc.c 2006-09-21 19:33:25.000000000 +0100
+++ ioemu/hw/mc146818rtc.c 2006-09-21 19:33:30.000000000 +0100
--- ioemu.orig/hw/mc146818rtc.c 2006-10-24 14:45:21.000000000 +0100
+++ ioemu/hw/mc146818rtc.c 2006-10-24 14:45:39.000000000 +0100
@@ -178,10 +178,27 @@
}
}
@@ -46,8 +46,8 @@ Index: ioemu/hw/mc146818rtc.c
static void rtc_copy_date(RTCState *s)
Index: ioemu/hw/pc.c
===================================================================
--- ioemu.orig/hw/pc.c 2006-09-21 19:33:30.000000000 +0100
+++ ioemu/hw/pc.c 2006-09-21 19:33:30.000000000 +0100
--- ioemu.orig/hw/pc.c 2006-10-24 14:45:38.000000000 +0100
+++ ioemu/hw/pc.c 2006-10-24 14:45:39.000000000 +0100
@@ -159,7 +159,7 @@
}
@@ -117,8 +117,8 @@ Index: ioemu/hw/pc.c
QEMUMachine pc_machine = {
Index: ioemu/vl.c
===================================================================
--- ioemu.orig/vl.c 2006-09-21 19:33:30.000000000 +0100
+++ ioemu/vl.c 2006-09-21 19:33:30.000000000 +0100
--- ioemu.orig/vl.c 2006-10-24 14:45:38.000000000 +0100
+++ ioemu/vl.c 2006-10-24 14:45:39.000000000 +0100
@@ -163,6 +163,8 @@
int xc_handle;
@@ -174,8 +174,8 @@ Index: ioemu/vl.c
if (usb_enabled) {
Index: ioemu/vl.h
===================================================================
--- ioemu.orig/vl.h 2006-09-21 19:33:30.000000000 +0100
+++ ioemu/vl.h 2006-09-21 19:33:30.000000000 +0100
--- ioemu.orig/vl.h 2006-10-24 14:45:38.000000000 +0100
+++ ioemu/vl.h 2006-10-24 14:45:39.000000000 +0100
@@ -576,7 +576,7 @@
int boot_device,
DisplayState *ds, const char **fd_filename, int snapshot,
+143
View File
@@ -0,0 +1,143 @@
# HG changeset patch
# User kfraser@localhost.localdomain
# Node ID 71e2a165aa7f81602c569430b18ba1ea705f0b70
# Parent da66691687dfd90c55420cfdf27f55d18cca7810
[HVM] Move RTC emulation into the hypervisor.
Signed-off-by: Xiaowei Yang <xiaowei.yang@intel.com>
--- ioemu/Makefile.target Wed Oct 18 18:13:57 2006 +0100
+++ ioemu/Makefile.target Wed Oct 18 18:35:21 2006 +0100
@@ -294,7 +294,11 @@ endif
endif
# qemu-dm objects
+ifeq ($(ARCH),ia64)
LIBOBJS=helper2.o exec-dm.o i8259-dm.o
+else
+LIBOBJS=helper2.o exec-dm.o i8259-dm.o rtc-dm.o
+endif
all: $(PROGS)
@@ -354,7 +358,11 @@ ifeq ($(TARGET_BASE_ARCH), i386)
ifeq ($(TARGET_BASE_ARCH), i386)
# Hardware support
VL_OBJS+= ide.o pckbd.o ps2.o vga.o $(SOUND_HW) dma.o $(AUDIODRV)
+ifeq ($(ARCH),ia64)
VL_OBJS+= fdc.o mc146818rtc.o serial.o pc.o
+else
+VL_OBJS+= fdc.o serial.o pc.o
+endif
VL_OBJS+= cirrus_vga.o mixeng.o parallel.o acpi.o piix_pci.o
VL_OBJS+= usb-uhci.o
VL_OBJS+= piix4acpi.o
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ioemu/target-i386-dm/rtc-dm.c Wed Oct 18 18:35:21 2006 +0100
@@ -0,0 +1,107 @@
+/*
+ * QEMU MC146818 RTC emulation
+ *
+ * Copyright (c) 2003-2004 Fabrice Bellard
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#include "vl.h"
+
+//#define DEBUG_CMOS
+
+struct RTCState {
+ uint8_t cmos_data[128];
+ uint8_t cmos_index;
+};
+
+void rtc_set_memory(RTCState *s, int addr, int val)
+{
+ if (addr >= 0 && addr <= 127)
+ s->cmos_data[addr] = val;
+}
+
+static void cmos_ioport_write(void *opaque, uint32_t addr, uint32_t data)
+{
+ RTCState *s = opaque;
+
+ if ((addr & 1) == 0) {
+ s->cmos_index = data & 0x7f;
+ } else {
+#ifdef DEBUG_CMOS
+ printf("cmos: write index=0x%02x val=0x%02x\n",
+ s->cmos_index, data);
+#endif
+ s->cmos_data[s->cmos_index] = data;
+ }
+}
+
+static uint32_t cmos_ioport_read(void *opaque, uint32_t addr)
+{
+ RTCState *s = opaque;
+ int ret;
+ if ((addr & 1) == 0) {
+ return 0xff;
+ } else {
+ ret = s->cmos_data[s->cmos_index];
+#ifdef DEBUG_CMOS
+ printf("cmos: read index=0x%02x val=0x%02x\n",
+ s->cmos_index, ret);
+#endif
+ return ret;
+ }
+}
+
+static void rtc_save(QEMUFile *f, void *opaque)
+{
+ RTCState *s = opaque;
+
+ qemu_put_buffer(f, s->cmos_data, 128);
+ qemu_put_8s(f, &s->cmos_index);
+}
+
+static int rtc_load(QEMUFile *f, void *opaque, int version_id)
+{
+ RTCState *s = opaque;
+
+ if (version_id != 1)
+ return -EINVAL;
+
+ qemu_get_buffer(f, s->cmos_data, 128);
+ qemu_get_8s(f, &s->cmos_index);
+
+ return 0;
+}
+
+RTCState *rtc_init(int base, int irq)
+{
+ RTCState *s;
+
+ s = qemu_mallocz(sizeof(RTCState));
+ if (!s)
+ return NULL;
+
+ register_ioport_write(base, 2, 1, cmos_ioport_write, s);
+ register_ioport_read(base, 2, 1, cmos_ioport_read, s);
+
+ register_savevm("mc146818rtc", base, 1, rtc_save, rtc_load, s);
+ return s;
+}
+
+void rtc_set_date(RTCState *s, const struct tm *tm) {}
+21
View File
@@ -0,0 +1,21 @@
# HG changeset patch
# User kfraser@localhost.localdomain
# Node ID 1e8ba8d2117548d4f13b7b438d1e992b1815f580
# Parent f247e0b52dda257c0000c9da5a0cdff507b3ced8
[HVM] Enable DMA mode for CD-ROM IDE ATAPI interface.
Signed-off-by: Winston Wang <winston.l.wang@intel.com
--- ioemu/hw/ide.c Wed Oct 18 18:37:18 2006 +0100
+++ ioemu/hw/ide.c Wed Oct 18 18:41:47 2006 +0100
@@ -557,9 +557,9 @@ static void ide_atapi_identify(IDEState
padstr((uint8_t *)(p + 23), QEMU_VERSION, 8); /* firmware version */
padstr((uint8_t *)(p + 27), "QEMU CD-ROM", 40); /* model */
put_le16(p + 48, 1); /* dword I/O (XXX: should not be set on CDROM) */
- put_le16(p + 49, 1 << 9); /* LBA supported, no DMA */
+ put_le16(p + 49, (1 << 11) | (1 << 9) | (1 << 8)); /* DMA and LBA supported */
put_le16(p + 53, 3); /* words 64-70, 54-58 valid */
- put_le16(p + 63, 0x103); /* DMA modes XXX: may be incorrect */
+ put_le16(p + 63, 0x07); /* mdma0-2 supported */
put_le16(p + 64, 1); /* PIO modes */
put_le16(p + 65, 0xb4); /* minimum DMA multiword tx cycle time */
put_le16(p + 66, 0xb4); /* recommended DMA multiword tx cycle time */
+14 -14
View File
@@ -1,9 +1,9 @@
Index: ioemu/vl.c
===================================================================
--- ioemu.orig/vl.c 2006-09-21 19:33:32.000000000 +0100
+++ ioemu/vl.c 2006-09-21 19:33:32.000000000 +0100
@@ -124,7 +124,7 @@
int vncunused;
--- ioemu.orig/vl.c 2006-10-24 14:33:47.000000000 +0100
+++ ioemu/vl.c 2006-10-24 14:33:47.000000000 +0100
@@ -125,7 +125,7 @@
struct sockaddr_in vnclisten_addr;
const char* keyboard_layout = NULL;
int64_t ticks_per_sec;
-int boot_device = 'c';
@@ -11,7 +11,7 @@ Index: ioemu/vl.c
uint64_t ram_size;
int pit_min_timer_count = 0;
int nb_nics;
@@ -6063,14 +6063,14 @@
@@ -6075,14 +6075,14 @@
break;
#endif /* !CONFIG_DM */
case QEMU_OPTION_boot:
@@ -32,7 +32,7 @@ Index: ioemu/vl.c
exit(1);
}
break;
@@ -6334,6 +6334,7 @@
@@ -6349,6 +6349,7 @@
fd_filename[0] == '\0')
help();
@@ -40,7 +40,7 @@ Index: ioemu/vl.c
/* boot to cd by default if no hard disk */
if (hd_filename[0] == '\0' && boot_device == 'c') {
if (fd_filename[0] != '\0')
@@ -6341,6 +6342,7 @@
@@ -6356,6 +6357,7 @@
else
boot_device = 'd';
}
@@ -48,7 +48,7 @@ Index: ioemu/vl.c
#endif /* !CONFIG_DM */
setvbuf(stdout, NULL, _IOLBF, 0);
@@ -6599,6 +6601,7 @@
@@ -6614,6 +6616,7 @@
ds, fd_filename, snapshot,
kernel_filename, kernel_cmdline, initrd_filename,
timeoffset);
@@ -58,9 +58,9 @@ Index: ioemu/vl.c
if (usb_enabled) {
Index: ioemu/vl.h
===================================================================
--- ioemu.orig/vl.h 2006-09-21 19:33:32.000000000 +0100
+++ ioemu/vl.h 2006-09-21 19:33:32.000000000 +0100
@@ -576,7 +576,7 @@
--- ioemu.orig/vl.h 2006-10-24 14:33:47.000000000 +0100
+++ ioemu/vl.h 2006-10-24 14:33:47.000000000 +0100
@@ -578,7 +578,7 @@
#ifndef QEMU_TOOL
typedef void QEMUMachineInitFunc(uint64_t ram_size, int vga_ram_size,
@@ -69,7 +69,7 @@ Index: ioemu/vl.h
DisplayState *ds, const char **fd_filename, int snapshot,
const char *kernel_filename, const char *kernel_cmdline,
const char *initrd_filename, time_t timeoffset);
@@ -1021,7 +1021,7 @@
@@ -1023,7 +1023,7 @@
uint32_t start, uint32_t count);
int PPC_NVRAM_set_params (m48t59_t *nvram, uint16_t NVRAM_size,
const unsigned char *arch,
@@ -80,8 +80,8 @@ Index: ioemu/vl.h
uint32_t initrd_image, uint32_t initrd_size,
Index: ioemu/hw/pc.c
===================================================================
--- ioemu.orig/hw/pc.c 2006-09-21 19:33:32.000000000 +0100
+++ ioemu/hw/pc.c 2006-09-21 19:33:32.000000000 +0100
--- ioemu.orig/hw/pc.c 2006-10-24 14:33:47.000000000 +0100
+++ ioemu/hw/pc.c 2006-10-24 14:33:47.000000000 +0100
@@ -158,8 +158,23 @@
rtc_set_memory(s, info_ofs + 8, sectors);
}
+39 -6
View File
@@ -1,7 +1,7 @@
Index: ioemu/hw/vga.c
===================================================================
--- ioemu.orig/hw/vga.c 2006-08-06 02:03:51.906765409 +0100
+++ ioemu/hw/vga.c 2006-08-06 02:15:10.364150665 +0100
--- ioemu.orig/hw/vga.c 2006-10-24 14:44:03.000000000 +0100
+++ ioemu/hw/vga.c 2006-10-24 14:45:22.000000000 +0100
@@ -1622,7 +1622,9 @@
static void vga_save(QEMUFile *f, void *opaque)
{
@@ -26,8 +26,8 @@ Index: ioemu/hw/vga.c
return -EINVAL;
Index: ioemu/vl.c
===================================================================
--- ioemu.orig/vl.c 2006-08-06 02:15:01.774108287 +0100
+++ ioemu/vl.c 2006-08-06 02:15:31.040845624 +0100
--- ioemu.orig/vl.c 2006-10-24 14:44:08.000000000 +0100
+++ ioemu/vl.c 2006-10-24 14:45:29.000000000 +0100
@@ -39,6 +39,7 @@
#include <sys/ioctl.h>
#include <sys/socket.h>
@@ -36,6 +36,24 @@ Index: ioemu/vl.c
#include <dirent.h>
#include <netdb.h>
#ifdef _BSD
@@ -2932,7 +2933,7 @@
}
/* XXX: better tmp dir construction */
- snprintf(smb_dir, sizeof(smb_dir), "/tmp/qemu-smb.%d", getpid());
+ snprintf(smb_dir, sizeof(smb_dir), "/tmp/qemu-smb.%ld", (long)getpid());
if (mkdir(smb_dir, 0700) < 0) {
fprintf(stderr, "qemu: could not create samba server dir '%s'\n", smb_dir);
exit(1);
@@ -3893,7 +3894,7 @@
perror("Opening pidfile");
exit(1);
}
- fprintf(f, "%d\n", getpid());
+ fprintf(f, "%ld\n", (long)getpid());
fclose(f);
pid_filename = qemu_strdup(filename);
if (!pid_filename) {
@@ -5308,7 +5309,9 @@
QEMU_OPTION_d,
QEMU_OPTION_hdachs,
@@ -70,8 +88,8 @@ Index: ioemu/vl.c
fprintf(stderr, "qemu: too many network clients\n");
Index: ioemu/vl.h
===================================================================
--- ioemu.orig/vl.h 2006-08-06 02:15:01.775108175 +0100
+++ ioemu/vl.h 2006-08-06 02:15:10.368150219 +0100
--- ioemu.orig/vl.h 2006-10-24 14:44:08.000000000 +0100
+++ ioemu/vl.h 2006-10-24 14:45:22.000000000 +0100
@@ -957,7 +957,7 @@
unsigned long vram_offset, int vram_size, int width, int height);
@@ -81,3 +99,18 @@ Index: ioemu/vl.h
void slavio_intctl_set_cpu(void *opaque, unsigned int cpu, CPUState *env);
void slavio_pic_info(void *opaque);
void slavio_irq_info(void *opaque);
Index: ioemu/usb-linux.c
===================================================================
--- ioemu.orig/usb-linux.c 2006-10-24 14:44:03.000000000 +0100
+++ ioemu/usb-linux.c 2006-10-24 14:44:08.000000000 +0100
@@ -26,7 +26,9 @@
#if defined(__linux__)
#include <dirent.h>
#include <sys/ioctl.h>
-#include <linux/compiler.h>
+/* Some versions of usbdevice_fs.h need __user to be defined for them. */
+/* This may (harmlessly) conflict with a definition in linux/compiler.h. */
+#define __user
#include <linux/usbdevice_fs.h>
#include <linux/version.h>
+3 -3
View File
@@ -2,9 +2,9 @@ Changes required because qemu-dm runs daemonized.
Index: ioemu/vl.c
===================================================================
--- ioemu.orig/vl.c 2006-09-21 19:33:32.000000000 +0100
+++ ioemu/vl.c 2006-09-21 19:33:32.000000000 +0100
@@ -6042,10 +6042,11 @@
--- ioemu.orig/vl.c 2006-10-24 14:33:47.000000000 +0100
+++ ioemu/vl.c 2006-10-24 14:33:47.000000000 +0100
@@ -6054,10 +6054,11 @@
}
break;
case QEMU_OPTION_nographic:
+3 -3
View File
@@ -1,7 +1,7 @@
Index: ioemu/vl.c
===================================================================
--- ioemu.orig/vl.c 2006-08-06 02:15:48.550893605 +0100
+++ ioemu/vl.c 2006-08-06 02:16:31.246133963 +0100
--- ioemu.orig/vl.c 2006-10-24 14:36:58.000000000 +0100
+++ ioemu/vl.c 2006-10-24 14:37:03.000000000 +0100
@@ -5234,7 +5234,7 @@
"-S freeze CPU at startup (use 'c' to start execution)\n"
"-s wait gdb connection to port %d\n"
@@ -43,7 +43,7 @@ Index: ioemu/vl.c
/* default mac address of the first network interface */
+ /* init debug */
+ sprintf(qemu_dm_logfilename, "/var/log/xen/qemu-dm.%d.log", getpid());
+ sprintf(qemu_dm_logfilename, "/var/log/xen/qemu-dm.%ld.log", (long)getpid());
+ cpu_set_log_filename(qemu_dm_logfilename);
+ cpu_set_log(0);
+
+18 -18
View File
@@ -1,7 +1,7 @@
Index: ioemu/Makefile.target
===================================================================
--- ioemu.orig/Makefile.target 2006-09-21 11:30:11.000000000 +0100
+++ ioemu/Makefile.target 2006-09-21 18:54:22.000000000 +0100
--- ioemu.orig/Makefile.target 2006-10-24 13:47:23.000000000 +0100
+++ ioemu/Makefile.target 2006-10-24 14:30:56.000000000 +0100
@@ -62,6 +62,8 @@
QEMU_SYSTEM=qemu-fast
endif
@@ -32,8 +32,8 @@ Index: ioemu/Makefile.target
DEFINES += -DHAS_AUDIO
Index: ioemu/configure
===================================================================
--- ioemu.orig/configure 2006-09-21 11:30:11.000000000 +0100
+++ ioemu/configure 2006-09-21 18:54:21.000000000 +0100
--- ioemu.orig/configure 2006-10-24 13:47:23.000000000 +0100
+++ ioemu/configure 2006-10-24 14:29:34.000000000 +0100
@@ -373,6 +373,8 @@
if [ "$user" = "yes" ] ; then
target_list="i386-user arm-user armeb-user sparc-user ppc-user mips-user mipsel-user $target_list"
@@ -45,8 +45,8 @@ Index: ioemu/configure
fi
Index: ioemu/monitor.c
===================================================================
--- ioemu.orig/monitor.c 2006-09-21 11:30:11.000000000 +0100
+++ ioemu/monitor.c 2006-09-21 18:54:23.000000000 +0100
--- ioemu.orig/monitor.c 2006-10-24 13:47:23.000000000 +0100
+++ ioemu/monitor.c 2006-10-24 14:30:56.000000000 +0100
@@ -1262,6 +1262,10 @@
"", "show profiling information", },
{ "capture", "", do_info_capture,
@@ -60,8 +60,8 @@ Index: ioemu/monitor.c
Index: ioemu/vl.c
===================================================================
--- ioemu.orig/vl.c 2006-09-21 11:30:11.000000000 +0100
+++ ioemu/vl.c 2006-09-21 18:54:23.000000000 +0100
--- ioemu.orig/vl.c 2006-10-24 13:47:23.000000000 +0100
+++ ioemu/vl.c 2006-10-24 14:30:56.000000000 +0100
@@ -87,7 +87,7 @@
#include "exec-all.h"
@@ -98,8 +98,8 @@ Index: ioemu/vl.c
{
Index: ioemu/vl.h
===================================================================
--- ioemu.orig/vl.h 2006-09-21 11:30:11.000000000 +0100
+++ ioemu/vl.h 2006-09-21 18:54:23.000000000 +0100
--- ioemu.orig/vl.h 2006-10-24 13:47:23.000000000 +0100
+++ ioemu/vl.h 2006-10-24 14:30:56.000000000 +0100
@@ -37,6 +37,8 @@
#include <unistd.h>
#include <fcntl.h>
@@ -132,7 +132,7 @@ Index: ioemu/vl.h
Index: ioemu/target-i386-dm/cpu.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ ioemu/target-i386-dm/cpu.h 2006-09-21 18:54:22.000000000 +0100
+++ ioemu/target-i386-dm/cpu.h 2006-10-24 14:30:56.000000000 +0100
@@ -0,0 +1,86 @@
+/*
+ * i386 virtual CPU header
@@ -223,7 +223,7 @@ Index: ioemu/target-i386-dm/cpu.h
Index: ioemu/target-i386-dm/exec-dm.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ ioemu/target-i386-dm/exec-dm.c 2006-09-21 18:54:22.000000000 +0100
+++ ioemu/target-i386-dm/exec-dm.c 2006-10-24 14:30:56.000000000 +0100
@@ -0,0 +1,516 @@
+/*
+ * virtual page mapping and translated block handling
@@ -744,7 +744,7 @@ Index: ioemu/target-i386-dm/exec-dm.c
Index: ioemu/target-i386-dm/helper2.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ ioemu/target-i386-dm/helper2.c 2006-09-21 18:55:31.000000000 +0100
+++ ioemu/target-i386-dm/helper2.c 2006-10-24 14:31:01.000000000 +0100
@@ -0,0 +1,469 @@
+/*
+ * i386 helpers (without register variable usage)
@@ -1205,8 +1205,8 @@ Index: ioemu/target-i386-dm/helper2.c
+ break;
+ }
+
+ /* Wait up to 100 msec. */
+ main_loop_wait(100);
+ /* Wait up to 10 msec. */
+ main_loop_wait(10);
+
+ if (env->send_event) {
+ env->send_event = 0;
@@ -1218,7 +1218,7 @@ Index: ioemu/target-i386-dm/helper2.c
Index: ioemu/target-i386-dm/i8259-dm.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ ioemu/target-i386-dm/i8259-dm.c 2006-09-21 11:30:11.000000000 +0100
+++ ioemu/target-i386-dm/i8259-dm.c 2006-10-24 13:47:23.000000000 +0100
@@ -0,0 +1,107 @@
+/* Xen 8259 stub for interrupt controller emulation
+ *
@@ -1330,7 +1330,7 @@ Index: ioemu/target-i386-dm/i8259-dm.c
Index: ioemu/target-i386-dm/qemu-dm.debug
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ ioemu/target-i386-dm/qemu-dm.debug 2006-09-21 11:30:11.000000000 +0100
+++ ioemu/target-i386-dm/qemu-dm.debug 2006-10-24 13:47:23.000000000 +0100
@@ -0,0 +1,5 @@
+#!/bin/sh
+
@@ -1340,7 +1340,7 @@ Index: ioemu/target-i386-dm/qemu-dm.debug
Index: ioemu/target-i386-dm/qemu-ifup
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ ioemu/target-i386-dm/qemu-ifup 2006-09-21 11:30:11.000000000 +0100
+++ ioemu/target-i386-dm/qemu-ifup 2006-10-24 13:47:23.000000000 +0100
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+116
View File
@@ -0,0 +1,116 @@
# HG changeset patch
# User Steven Smith <ssmith@xensource.com>
# Node ID 1d3f52eb256e3522edc12daca91039b319dbbbe5
# Parent b7b653e36d20811831f26bb951ea66dca5854b17
[HVM] Rate limit guest accesses to the qemu virtual serial port. This stops
grub's boot menu from hammering dom0.
Signed-off-by: Steven Smith <sos22@cam.ac.uk>
--- ioemu/hw/serial.c Mon Sep 25 16:31:02 2006 +0100
+++ ioemu/hw/serial.c Mon Sep 25 17:27:18 2006 +0100
@@ -22,6 +22,9 @@
* THE SOFTWARE.
*/
#include "vl.h"
+#include <sys/time.h>
+#include <time.h>
+#include <assert.h>
//#define DEBUG_SERIAL
@@ -138,6 +141,67 @@ static void serial_update_parameters(Ser
printf("speed=%d parity=%c data=%d stop=%d\n",
speed, parity, data_bits, stop_bits);
#endif
+}
+
+/* Rate limit serial requests so that e.g. grub on a serial console
+ doesn't kill dom0. Simple token bucket. If we get some actual
+ data from the user, instantly refil the bucket. */
+
+/* How long it takes to generate a token, in microseconds. */
+#define TOKEN_PERIOD 1000
+/* Maximum and initial size of token bucket */
+#define TOKENS_MAX 100000
+
+static int tokens_avail;
+
+static void serial_get_token(void)
+{
+ static struct timeval last_refil_time;
+ static int started;
+
+ assert(tokens_avail >= 0);
+ if (!tokens_avail) {
+ struct timeval delta, now;
+ int generated;
+
+ if (!started) {
+ gettimeofday(&last_refil_time, NULL);
+ tokens_avail = TOKENS_MAX;
+ started = 1;
+ return;
+ }
+ retry:
+ gettimeofday(&now, NULL);
+ delta.tv_sec = now.tv_sec - last_refil_time.tv_sec;
+ delta.tv_usec = now.tv_usec - last_refil_time.tv_usec;
+ if (delta.tv_usec < 0) {
+ delta.tv_usec += 1000000;
+ delta.tv_sec--;
+ }
+ assert(delta.tv_usec >= 0 && delta.tv_sec >= 0);
+ if (delta.tv_usec < TOKEN_PERIOD) {
+ struct timespec ts;
+ /* Wait until at least one token is available. */
+ ts.tv_sec = TOKEN_PERIOD / 1000000;
+ ts.tv_nsec = (TOKEN_PERIOD % 1000000) * 1000;
+ while (nanosleep(&ts, &ts) < 0 && errno == EINTR)
+ ;
+ goto retry;
+ }
+ generated = (delta.tv_sec * 1000000) / TOKEN_PERIOD;
+ generated +=
+ ((delta.tv_sec * 1000000) % TOKEN_PERIOD + delta.tv_usec) / TOKEN_PERIOD;
+ assert(generated > 0);
+
+ last_refil_time.tv_usec += (generated * TOKEN_PERIOD) % 1000000;
+ last_refil_time.tv_sec += last_refil_time.tv_usec / 1000000;
+ last_refil_time.tv_usec %= 1000000;
+ last_refil_time.tv_sec += (generated * TOKEN_PERIOD) / 1000000;
+ if (generated > TOKENS_MAX)
+ generated = TOKENS_MAX;
+ tokens_avail = generated;
+ }
+ tokens_avail--;
}
static void serial_ioport_write(void *opaque, uint32_t addr, uint32_t val)
@@ -245,9 +309,11 @@ static uint32_t serial_ioport_read(void
ret = s->mcr;
break;
case 5:
+ serial_get_token();
ret = s->lsr;
break;
case 6:
+ serial_get_token();
if (s->mcr & UART_MCR_LOOP) {
/* in loopback, the modem output pins are connected to the
inputs */
@@ -296,12 +362,14 @@ static void serial_receive1(void *opaque
static void serial_receive1(void *opaque, const uint8_t *buf, int size)
{
SerialState *s = opaque;
+ tokens_avail = TOKENS_MAX;
serial_receive_byte(s, buf[0]);
}
static void serial_event(void *opaque, int event)
{
SerialState *s = opaque;
+ tokens_avail = TOKENS_MAX;
if (event == CHR_EVENT_BREAK)
serial_receive_break(s);
}
+6
View File
@@ -32,10 +32,12 @@ acpi-poweroff-support
fix-vga-scanning-code-overflow
vnc-cleanup
vnc-fixes
vnc-protocol-fixes
vnc-start-vncviewer
vnc-title-domain-name
vnc-access-monitor-vt
vnc-display-find-unused
vnc-listen-specific-interface
vnc-backoff-screen-scan
xenstore-block-device-config
xenstore-write-vnc-port
@@ -47,3 +49,7 @@ xen-platform-device
qemu-bootorder
qemu-tunable-ide-write-cache
qemu-pci
serial-port-rate-limit
hypervisor-rtc
ide-cd-dma
vnc-password
+5 -5
View File
@@ -1,8 +1,8 @@
Index: ioemu/vnc.c
===================================================================
--- ioemu.orig/vnc.c 2006-09-21 19:33:31.000000000 +0100
+++ ioemu/vnc.c 2006-09-21 19:33:31.000000000 +0100
@@ -32,6 +32,10 @@
--- ioemu.orig/vnc.c 2006-10-24 14:33:46.000000000 +0100
+++ ioemu/vnc.c 2006-10-24 14:33:46.000000000 +0100
@@ -33,6 +33,10 @@
#include "vnc_keysym.h"
#include "keymaps.c"
@@ -13,7 +13,7 @@ Index: ioemu/vnc.c
typedef struct Buffer
{
size_t capacity;
@@ -95,6 +99,8 @@
@@ -96,6 +100,8 @@
int visible_h;
int slow_client;
@@ -22,7 +22,7 @@ Index: ioemu/vnc.c
};
#define DIRTY_PIXEL_BITS 64
@@ -791,16 +797,80 @@
@@ -794,16 +800,80 @@
static void do_key_event(VncState *vs, int down, uint32_t sym)
{
+32 -28
View File
@@ -1,10 +1,10 @@
Index: ioemu/vnc.c
===================================================================
--- ioemu.orig/vnc.c 2006-09-21 19:31:03.000000000 +0100
+++ ioemu/vnc.c 2006-09-21 19:32:23.000000000 +0100
@@ -27,7 +27,19 @@
#include "vl.h"
--- ioemu.orig/vnc.c 2006-10-24 14:33:17.000000000 +0100
+++ ioemu/vnc.c 2006-10-24 14:33:24.000000000 +0100
@@ -28,7 +28,19 @@
#include "qemu_socket.h"
#include <assert.h>
-#define VNC_REFRESH_INTERVAL (1000 / 30)
+/* The refresh interval starts at BASE. If we scan the buffer and
@@ -23,7 +23,7 @@ Index: ioemu/vnc.c
#include "vnc_keysym.h"
#include "keymaps.c"
@@ -64,10 +76,11 @@
@@ -65,10 +77,11 @@
struct VncState
{
QEMUTimer *timer;
@@ -36,7 +36,7 @@ Index: ioemu/vnc.c
int width;
int height;
uint64_t *dirty_row; /* screen regions which are possibly dirty */
@@ -98,8 +111,6 @@
@@ -99,8 +112,6 @@
int visible_w;
int visible_h;
@@ -45,7 +45,7 @@ Index: ioemu/vnc.c
int ctl_keys; /* Ctrl+Alt starts calibration */
};
@@ -380,7 +391,7 @@
@@ -381,7 +392,7 @@
int y = 0;
int pitch = ds->linesize;
VncState *vs = ds->opaque;
@@ -54,19 +54,19 @@ Index: ioemu/vnc.c
if (src_x < vs->visible_x || src_y < vs->visible_y ||
dst_x < vs->visible_x || dst_y < vs->visible_y ||
@@ -390,11 +401,6 @@
@@ -391,10 +402,8 @@
(dst_y + h) > (vs->visible_y + vs->visible_h))
updating_client = 0;
- if (updating_client) {
- vs->need_update = 1;
- _vnc_update_client(vs);
+ if (updating_client)
_vnc_update_client(vs);
- }
-
if (dst_y > src_y) {
y = h - 1;
pitch = -pitch;
@@ -445,110 +451,145 @@
@@ -446,110 +455,149 @@
static void _vnc_update_client(void *opaque)
{
VncState *vs = opaque;
@@ -279,12 +279,16 @@ Index: ioemu/vnc.c
+ interested (e.g. minimised) it'll ignore this, and we
+ can stop scanning the buffer until it sends another
+ update request. */
+ /* Note that there are bugs in xvncviewer which prevent
+ this from actually working. Leave the code in place
+ for correct clients. */
+ /* It turns out that there's a bug in realvncviewer 4.1.2
+ which means that if you send a proper null update (with
+ no update rectangles), it gets a bit out of sync and
+ never sends any further requests, regardless of whether
+ it needs one or not. Fix this by sending a single 1x1
+ update rectangle instead. */
+ vnc_write_u8(vs, 0);
+ vnc_write_u8(vs, 0);
+ vnc_write_u16(vs, 0);
+ vnc_write_u16(vs, 1);
+ send_framebuffer_update(vs, 0, 0, 1, 1);
+ vnc_flush(vs);
+ vs->last_update_time = now;
+ return;
@@ -295,7 +299,7 @@ Index: ioemu/vnc.c
}
static void vnc_update_client(void *opaque)
@@ -561,8 +602,10 @@
@@ -562,8 +610,10 @@
static void vnc_timer_init(VncState *vs)
{
@@ -307,7 +311,7 @@ Index: ioemu/vnc.c
}
static void vnc_dpy_refresh(DisplayState *ds)
@@ -622,7 +665,6 @@
@@ -623,7 +673,6 @@
vs->csock = -1;
buffer_reset(&vs->input);
buffer_reset(&vs->output);
@@ -315,7 +319,7 @@ Index: ioemu/vnc.c
return 0;
}
return ret;
@@ -892,7 +934,6 @@
@@ -895,7 +944,6 @@
int x_position, int y_position,
int w, int h)
{
@@ -323,7 +327,7 @@ Index: ioemu/vnc.c
if (!incremental)
framebuffer_set_updated(vs, x_position, y_position, w, h);
vs->visible_x = x_position;
@@ -1015,6 +1056,7 @@
@@ -1018,6 +1066,7 @@
{
int i;
uint16_t limit;
@@ -331,7 +335,7 @@ Index: ioemu/vnc.c
switch (data[0]) {
case 0:
@@ -1054,12 +1096,18 @@
@@ -1061,12 +1110,18 @@
if (len == 1)
return 8;
@@ -352,15 +356,15 @@ Index: ioemu/vnc.c
case 6:
Index: ioemu/vl.c
===================================================================
--- ioemu.orig/vl.c 2006-09-21 19:31:03.000000000 +0100
+++ ioemu/vl.c 2006-09-21 19:32:23.000000000 +0100
@@ -725,6 +725,12 @@
--- ioemu.orig/vl.c 2006-10-24 14:33:17.000000000 +0100
+++ ioemu/vl.c 2006-10-24 14:33:24.000000000 +0100
@@ -726,6 +726,12 @@
}
}
+void qemu_advance_timer(QEMUTimer *ts, int64_t expire_time)
+{
+ if (ts->expire_time > expire_time)
+ if (ts->expire_time > expire_time || !qemu_timer_pending(ts))
+ qemu_mod_timer(ts, expire_time);
+}
+
@@ -369,9 +373,9 @@ Index: ioemu/vl.c
void qemu_mod_timer(QEMUTimer *ts, int64_t expire_time)
Index: ioemu/vl.h
===================================================================
--- ioemu.orig/vl.h 2006-09-21 19:31:03.000000000 +0100
+++ ioemu/vl.h 2006-09-21 19:32:23.000000000 +0100
@@ -405,6 +405,7 @@
--- ioemu.orig/vl.h 2006-10-24 14:33:17.000000000 +0100
+++ ioemu/vl.h 2006-10-24 14:33:24.000000000 +0100
@@ -407,6 +407,7 @@
void qemu_free_timer(QEMUTimer *ts);
void qemu_del_timer(QEMUTimer *ts);
void qemu_mod_timer(QEMUTimer *ts, int64_t expire_time);
+11 -11
View File
@@ -1,8 +1,8 @@
Index: ioemu/vnc.c
===================================================================
--- ioemu.orig/vnc.c 2006-09-21 19:33:31.000000000 +0100
+++ ioemu/vnc.c 2006-09-21 19:33:31.000000000 +0100
@@ -1182,7 +1182,7 @@
--- ioemu.orig/vnc.c 2006-10-24 14:31:09.000000000 +0100
+++ ioemu/vnc.c 2006-10-24 14:31:36.000000000 +0100
@@ -1195,7 +1195,7 @@
}
}
@@ -11,7 +11,7 @@ Index: ioemu/vnc.c
{
struct sockaddr_in addr;
int reuse_addr, ret;
@@ -1213,10 +1213,6 @@
@@ -1226,10 +1226,6 @@
exit(1);
}
@@ -22,7 +22,7 @@ Index: ioemu/vnc.c
reuse_addr = 1;
ret = setsockopt(vs->lsock, SOL_SOCKET, SO_REUSEADDR,
(const char *)&reuse_addr, sizeof(reuse_addr));
@@ -1225,7 +1221,16 @@
@@ -1238,7 +1234,16 @@
exit(1);
}
@@ -39,7 +39,7 @@ Index: ioemu/vnc.c
fprintf(stderr, "bind() failed\n");
exit(1);
}
@@ -1246,6 +1251,8 @@
@@ -1259,6 +1264,8 @@
vs->ds->dpy_refresh = vnc_dpy_refresh;
vnc_dpy_resize(vs->ds, 640, 400);
@@ -50,8 +50,8 @@ Index: ioemu/vnc.c
int vnc_start_viewer(int port)
Index: ioemu/vl.c
===================================================================
--- ioemu.orig/vl.c 2006-09-21 19:33:31.000000000 +0100
+++ ioemu/vl.c 2006-09-21 19:33:31.000000000 +0100
--- ioemu.orig/vl.c 2006-10-24 14:31:09.000000000 +0100
+++ ioemu/vl.c 2006-10-24 14:31:41.000000000 +0100
@@ -121,6 +121,7 @@
static DisplayState display_state;
int nographic;
@@ -99,7 +99,7 @@ Index: ioemu/vl.c
+ case QEMU_OPTION_vncunused:
+ vncunused++;
+ if (vnc_display == -1)
+ vnc_display = -2;
+ vnc_display = 0;
+ break;
}
}
@@ -115,8 +115,8 @@ Index: ioemu/vl.c
} else {
Index: ioemu/vl.h
===================================================================
--- ioemu.orig/vl.h 2006-09-21 19:33:31.000000000 +0100
+++ ioemu/vl.h 2006-09-21 19:33:31.000000000 +0100
--- ioemu.orig/vl.h 2006-10-24 14:31:09.000000000 +0100
+++ ioemu/vl.h 2006-10-24 14:31:36.000000000 +0100
@@ -785,7 +785,7 @@
void cocoa_display_init(DisplayState *ds, int full_screen);
+17 -8
View File
@@ -1,7 +1,7 @@
Index: ioemu/vl.c
===================================================================
--- ioemu.orig/vl.c 2006-09-21 19:08:18.000000000 +0100
+++ ioemu/vl.c 2006-09-21 19:26:24.000000000 +0100
--- ioemu.orig/vl.c 2006-10-24 13:47:23.000000000 +0100
+++ ioemu/vl.c 2006-10-24 14:19:36.000000000 +0100
@@ -6534,8 +6534,10 @@
}
}
@@ -17,8 +17,8 @@ Index: ioemu/vl.c
if (use_gdbstub) {
Index: ioemu/vnc.c
===================================================================
--- ioemu.orig/vnc.c 2006-09-21 19:08:18.000000000 +0100
+++ ioemu/vnc.c 2006-09-21 19:26:38.000000000 +0100
--- ioemu.orig/vnc.c 2006-10-24 13:47:23.000000000 +0100
+++ ioemu/vnc.c 2006-10-24 14:20:00.000000000 +0100
@@ -3,6 +3,7 @@
*
* Copyright (C) 2006 Anthony Liguori <anthony@codemonkey.ws>
@@ -483,7 +483,16 @@ Index: ioemu/vnc.c
vga_hw_invalidate();
vga_hw_update();
@@ -1010,11 +1101,11 @@
@@ -924,6 +1015,8 @@
{
char pad[3] = { 0, 0, 0 };
+ vga_hw_update();
+
vs->width = vs->ds->width;
vs->height = vs->ds->height;
vnc_write_u16(vs, vs->ds->width);
@@ -1010,11 +1103,11 @@
vnc_write(vs, "RFB 003.003\n", 12);
vnc_flush(vs);
vnc_read_when(vs, protocol_version, 12);
@@ -497,7 +506,7 @@ Index: ioemu/vnc.c
}
}
@@ -1071,17 +1162,15 @@
@@ -1071,17 +1164,15 @@
exit(1);
}
@@ -520,8 +529,8 @@ Index: ioemu/vnc.c
}
Index: ioemu/vl.h
===================================================================
--- ioemu.orig/vl.h 2006-09-21 19:00:48.000000000 +0100
+++ ioemu/vl.h 2006-09-21 19:26:24.000000000 +0100
--- ioemu.orig/vl.h 2006-10-24 13:47:23.000000000 +0100
+++ ioemu/vl.h 2006-10-24 14:19:36.000000000 +0100
@@ -319,6 +319,7 @@
int is_graphic_console(void);
CharDriverState *text_console_init(DisplayState *ds);
@@ -0,0 +1,177 @@
# HG changeset patch
# User Christian Limpach <Christian.Limpach@xensource.com>
# Node ID a95dfbc8dca8ecddcb9be51d78f446b0fa461892
# Parent 8959876abbe319963974fab21dda7185e0ad84e6
[HVM/vncserver] Implement a 'vnclisten' option to limit the interface
that the VNC server from qemu listens on.
Defaults to only listen on 127.0.0.1
The old behaviour (listen on all interfaces) can be restored, by
- changing the system-wide default in /etc/xen/xend-config.sxp by adding:
(vnc-listen '0.0.0.0')
- changing individual domain config files by adding:
vnclisten="0.0.0.0"
Also allows specifying the hostname associated with an interface to limit
to that interface.
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Index: ioemu/vl.c
===================================================================
--- ioemu.orig/vl.c 2006-10-24 14:33:46.000000000 +0100
+++ ioemu/vl.c 2006-10-24 14:34:28.000000000 +0100
@@ -122,6 +122,7 @@
int nographic;
int vncviewer;
int vncunused;
+struct sockaddr_in vnclisten_addr;
const char* keyboard_layout = NULL;
int64_t ticks_per_sec;
int boot_device = 'c';
@@ -2777,10 +2778,22 @@
return -1;
}
+int parse_host(struct sockaddr_in *saddr, const char *buf)
+{
+ struct hostent *he;
+
+ if ((he = gethostbyname(buf)) != NULL) {
+ saddr->sin_addr = *(struct in_addr *)he->h_addr;
+ } else {
+ if (!inet_aton(buf, &saddr->sin_addr))
+ return -1;
+ }
+ return 0;
+}
+
int parse_host_port(struct sockaddr_in *saddr, const char *str)
{
char buf[512];
- struct hostent *he;
const char *p, *r;
int port;
@@ -2791,14 +2804,8 @@
if (buf[0] == '\0') {
saddr->sin_addr.s_addr = 0;
} else {
- if (isdigit(buf[0])) {
- if (!inet_aton(buf, &saddr->sin_addr))
- return -1;
- } else {
- if ((he = gethostbyname(buf)) == NULL)
- return - 1;
- saddr->sin_addr = *(struct in_addr *)he->h_addr;
- }
+ if (parse_host(saddr, buf) == -1)
+ return -1;
}
port = strtol(p, (char **)&r, 0);
if (r == p)
@@ -5344,6 +5351,7 @@
"-vnc display start a VNC server on display\n"
"-vncviewer start a vncviewer process for this domain\n"
"-vncunused bind the VNC server to an unused port\n"
+ "-vnclisten bind the VNC server to this address\n"
"-timeoffset time offset (in seconds) from local time\n"
"-acpi disable or enable ACPI of HVM domain \n"
"\n"
@@ -5434,6 +5442,7 @@
QEMU_OPTION_acpi,
QEMU_OPTION_vncviewer,
QEMU_OPTION_vncunused,
+ QEMU_OPTION_vnclisten,
};
typedef struct QEMUOption {
@@ -5510,6 +5519,7 @@
{ "vnc", HAS_ARG, QEMU_OPTION_vnc },
{ "vncviewer", 0, QEMU_OPTION_vncviewer },
{ "vncunused", 0, QEMU_OPTION_vncunused },
+ { "vnclisten", HAS_ARG, QEMU_OPTION_vnclisten },
/* temporary options */
{ "usb", 0, QEMU_OPTION_usb },
@@ -5905,6 +5915,8 @@
nb_nics = 0;
/* default mac address of the first network interface */
+
+ memset(&vnclisten_addr.sin_addr, 0, sizeof(vnclisten_addr.sin_addr));
/* init debug */
sprintf(qemu_dm_logfilename, "/var/log/xen/qemu-dm.%d.log", getpid());
@@ -6280,6 +6292,9 @@
if (vnc_display == -1)
vnc_display = 0;
break;
+ case QEMU_OPTION_vnclisten:
+ parse_host(&vnclisten_addr, optarg);
+ break;
}
}
}
@@ -6493,7 +6508,7 @@
if (nographic) {
dumb_display_init(ds);
} else if (vnc_display != -1) {
- vnc_display = vnc_display_init(ds, vnc_display, vncunused);
+ vnc_display = vnc_display_init(ds, vnc_display, vncunused, &vnclisten_addr);
if (vncviewer)
vnc_start_viewer(vnc_display);
} else {
Index: ioemu/vl.h
===================================================================
--- ioemu.orig/vl.h 2006-10-24 14:33:46.000000000 +0100
+++ ioemu/vl.h 2006-10-24 14:34:22.000000000 +0100
@@ -37,6 +37,8 @@
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
+#include <sys/socket.h>
+#include <sys/types.h>
#include "xenctrl.h"
#include "xs.h"
#include <xen/hvm/e820.h>
@@ -785,7 +787,7 @@
void cocoa_display_init(DisplayState *ds, int full_screen);
/* vnc.c */
-int vnc_display_init(DisplayState *ds, int display, int find_unused);
+int vnc_display_init(DisplayState *ds, int display, int find_unused, struct sockaddr_in *addr);
int vnc_start_viewer(int port);
/* ide.c */
Index: ioemu/vnc.c
===================================================================
--- ioemu.orig/vnc.c 2006-10-24 14:33:46.000000000 +0100
+++ ioemu/vnc.c 2006-10-24 14:34:22.000000000 +0100
@@ -1195,9 +1195,8 @@
}
}
-int vnc_display_init(DisplayState *ds, int display, int find_unused)
+int vnc_display_init(DisplayState *ds, int display, int find_unused, struct sockaddr_in *addr)
{
- struct sockaddr_in addr;
int reuse_addr, ret;
VncState *vs;
@@ -1235,11 +1234,10 @@
}
retry:
- addr.sin_family = AF_INET;
- addr.sin_port = htons(5900 + display);
- memset(&addr.sin_addr, 0, sizeof(addr.sin_addr));
+ addr->sin_family = AF_INET;
+ addr->sin_port = htons(5900 + display);
- if (bind(vs->lsock, (struct sockaddr *)&addr, sizeof(addr)) == -1) {
+ if (bind(vs->lsock, (struct sockaddr *)addr, sizeof(struct sockaddr_in)) == -1) {
if (find_unused && errno == EADDRINUSE) {
display++;
goto retry;
+785
View File
@@ -0,0 +1,785 @@
# HG changeset patch
# User kfraser@localhost.localdomain
# Node ID 02506a7443155611d6bbf03e49fbf193e96d24db
# Parent 328606e0705f0341bebda14cdd17962e463868e8
[HVM] Implement password authentication of VNC connections.
The specification is as mentioned at
http://lists.xensource.com/archives/html/xen-devel/2006-09/msg00666.html
(However, password came to describe plain text)
The difference is follows.
- protocol_authtype() without the necessity was deleted.
- The check on the protocol version was added.
- And, some small modification.
Signed-off-by: Masami Watanabe <masami.watanabe@jp.fujitsu.com>
--- ioemu/Makefile.target Fri Oct 20 09:32:16 2006 +0100
+++ ioemu/Makefile.target Fri Oct 20 09:50:09 2006 +0100
@@ -406,6 +406,7 @@ VL_OBJS+=sdl.o
VL_OBJS+=sdl.o
endif
VL_OBJS+=vnc.o
+VL_OBJS+=d3des.o
ifdef CONFIG_COCOA
VL_OBJS+=cocoa.o
COCOA_LIBS=-F/System/Library/Frameworks -framework Cocoa -framework IOKit
@@ -464,6 +465,9 @@ sdl.o: sdl.c keymaps.c sdl_keysym.h
$(CC) $(CFLAGS) $(DEFINES) $(SDL_CFLAGS) -c -o $@ $<
vnc.o: vnc.c keymaps.c sdl_keysym.h vnchextile.h
+ $(CC) $(CFLAGS) $(DEFINES) -c -o $@ $<
+
+d3des.o: d3des.c d3des.h
$(CC) $(CFLAGS) $(DEFINES) -c -o $@ $<
sdlaudio.o: sdlaudio.c
--- ioemu/vl.c Fri Oct 20 09:32:16 2006 +0100
+++ ioemu/vl.c Fri Oct 20 09:50:09 2006 +0100
@@ -170,6 +170,9 @@ time_t timeoffset = 0;
char domain_name[1024] = { 'H','V', 'M', 'X', 'E', 'N', '-'};
extern int domid;
+
+char vncpasswd[64];
+unsigned char challenge[AUTHCHALLENGESIZE];
/***********************************************************/
/* x86 ISA bus support */
@@ -5911,6 +5914,7 @@ int main(int argc, char **argv)
vncunused = 0;
kernel_filename = NULL;
kernel_cmdline = "";
+ *vncpasswd = '\0';
#ifndef CONFIG_DM
#ifdef TARGET_PPC
cdrom_index = 1;
@@ -6559,6 +6563,10 @@ int main(int argc, char **argv)
init_ioports();
+ /* read vncpasswd from xenstore */
+ if (0 > xenstore_read_vncpasswd(domid))
+ exit(1);
+
/* terminal init */
if (nographic) {
dumb_display_init(ds);
--- ioemu/vl.h Fri Oct 20 09:32:16 2006 +0100
+++ ioemu/vl.h Fri Oct 20 09:50:09 2006 +0100
@@ -1211,6 +1211,7 @@ void xenstore_process_event(void *opaque
void xenstore_process_event(void *opaque);
void xenstore_check_new_media_present(int timeout);
void xenstore_write_vncport(int vnc_display);
+int xenstore_read_vncpasswd(int domid);
/* xen_platform.c */
void pci_xen_platform_init(PCIBus *bus);
@@ -1222,4 +1223,7 @@ extern char domain_name[];
void destroy_hvm_domain(void);
+/* VNC Authentication */
+#define AUTHCHALLENGESIZE 16
+
#endif /* VL_H */
--- ioemu/vnc.c Fri Oct 20 09:32:16 2006 +0100
+++ ioemu/vnc.c Fri Oct 20 09:50:09 2006 +0100
@@ -44,6 +44,7 @@
#include "vnc_keysym.h"
#include "keymaps.c"
+#include "d3des.h"
#define XK_MISCELLANY
#define XK_LATIN1
@@ -137,6 +138,9 @@ static void vnc_update_client(void *opaq
static void vnc_update_client(void *opaque);
static void vnc_client_read(void *opaque);
static void framebuffer_set_updated(VncState *vs, int x, int y, int w, int h);
+static int make_challenge(char *random, int size);
+static void set_seed(unsigned int *seedp);
+static void get_random(int len, unsigned char *buf);
#if 0
static inline void vnc_set_bit(uint32_t *d, int k)
@@ -1208,23 +1212,92 @@ static int protocol_client_init(VncState
return 0;
}
+static int protocol_response(VncState *vs, char *client_response, size_t len)
+{
+ extern char vncpasswd[64];
+ extern unsigned char challenge[AUTHCHALLENGESIZE];
+ unsigned char cryptchallenge[AUTHCHALLENGESIZE];
+ unsigned char key[8];
+ int passwdlen, i, j;
+
+ memcpy(cryptchallenge, challenge, AUTHCHALLENGESIZE);
+
+ /* Calculate the sent challenge */
+ passwdlen = strlen(vncpasswd);
+ for (i=0; i<8; i++)
+ key[i] = i<passwdlen ? vncpasswd[i] : 0;
+ deskey(key, EN0);
+ for (j = 0; j < AUTHCHALLENGESIZE; j += 8)
+ des(cryptchallenge+j, cryptchallenge+j);
+
+ /* Check the actual response */
+ if (memcmp(cryptchallenge, client_response, AUTHCHALLENGESIZE) != 0) {
+ /* password error */
+ vnc_write_u32(vs, 1);
+ vnc_write_u32(vs, 22);
+ vnc_write(vs, "Authentication failure", 22);
+ vnc_flush(vs);
+ fprintf(stderr, "VNC Password error.\n");
+ vnc_client_error(vs);
+ return 0;
+ }
+
+ vnc_write_u32(vs, 0);
+ vnc_flush(vs);
+
+ vnc_read_when(vs, protocol_client_init, 1);
+
+ return 0;
+}
+
static int protocol_version(VncState *vs, char *version, size_t len)
{
+ extern char vncpasswd[64];
+ extern unsigned char challenge[AUTHCHALLENGESIZE];
char local[13];
- int maj, min;
+ int support, maj, min;
memcpy(local, version, 12);
local[12] = 0;
+ /* protocol version check */
if (sscanf(local, "RFB %03d.%03d\n", &maj, &min) != 2) {
+ fprintf(stderr, "Protocol version error.\n");
vnc_client_error(vs);
return 0;
}
- vnc_write_u32(vs, 1); /* None */
- vnc_flush(vs);
-
- vnc_read_when(vs, protocol_client_init, 1);
+
+ support = 0;
+ if (maj = 3) {
+ if (min == 3 || min ==4) {
+ support = 1;
+ }
+ }
+
+ if (! support) {
+ fprintf(stderr, "Client uses unsupported protocol version %d.%d.\n",
+ maj, min);
+ vnc_client_error(vs);
+ return 0;
+ }
+
+ if (*vncpasswd == '\0') {
+ /* AuthType is None */
+ vnc_write_u32(vs, 1);
+ vnc_flush(vs);
+ vnc_read_when(vs, protocol_client_init, 1);
+ } else {
+ /* AuthType is VncAuth */
+ vnc_write_u32(vs, 2);
+
+ /* Challenge-Responce authentication */
+ /* Send Challenge */
+ make_challenge(challenge, AUTHCHALLENGESIZE);
+ vnc_write(vs, challenge, AUTHCHALLENGESIZE);
+ vnc_flush(vs);
+ vnc_read_when(vs, protocol_response, AUTHCHALLENGESIZE);
+ }
return 0;
}
@@ -1342,3 +1415,32 @@ int vnc_start_viewer(int port)
return pid;
}
}
+
+unsigned int seed;
+
+static int make_challenge(char *random, int size)
+{
+
+ set_seed(&seed);
+ get_random(size, random);
+
+ return 0;
+}
+
+static void set_seed(unsigned int *seedp)
+{
+ *seedp += (unsigned int)(time(NULL)+getpid()+getpid()*987654+rand());
+ srand(*seedp);
+
+ return;
+}
+
+static void get_random(int len, unsigned char *buf)
+{
+ int i;
+
+ for (i=0; i<len; i++)
+ buf[i] = (int) (256.0*rand()/(RAND_MAX+1.0));
+
+ return;
+}
--- ioemu/xenstore.c Fri Oct 20 09:32:16 2006 +0100
+++ ioemu/xenstore.c Fri Oct 20 09:50:09 2006 +0100
@@ -213,3 +213,54 @@ void xenstore_write_vncport(int display)
free(portstr);
free(buf);
}
+
+int xenstore_read_vncpasswd(int domid)
+{
+ extern char vncpasswd[64];
+ char *buf = NULL, *path, *uuid = NULL, *passwd = NULL;
+ unsigned int i, len, rc = 0;
+
+ if (xsh == NULL) {
+ return -1;
+ }
+
+ path = xs_get_domain_path(xsh, domid);
+ if (path == NULL) {
+ fprintf(logfile, "xs_get_domain_path() error. domid %d.\n", domid);
+ return -1;
+ }
+
+ pasprintf(&buf, "%s/vm", path);
+ uuid = xs_read(xsh, XBT_NULL, buf, &len);
+ if (uuid == NULL) {
+ fprintf(logfile, "xs_read(): uuid get error. %s.\n", buf);
+ free(path);
+ return -1;
+ }
+
+ pasprintf(&buf, "%s/vncpasswd", uuid);
+ passwd = xs_read(xsh, XBT_NULL, buf, &len);
+ if (passwd == NULL) {
+ fprintf(logfile, "xs_read(): vncpasswd get error. %s.\n", buf);
+ free(uuid);
+ free(path);
+ return rc;
+ }
+
+ for (i=0; i<len && i<63; i++) {
+ vncpasswd[i] = passwd[i];
+ passwd[i] = '\0';
+ }
+ vncpasswd[len] = '\0';
+ pasprintf(&buf, "%s/vncpasswd", uuid);
+ if (xs_write(xsh, XBT_NULL, buf, passwd, len) == 0) {
+ fprintf(logfile, "xs_write() vncpasswd failed.\n");
+ rc = -1;
+ }
+
+ free(passwd);
+ free(uuid);
+ free(path);
+
+ return rc;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ioemu/d3des.c Fri Oct 20 09:50:09 2006 +0100
@@ -0,0 +1,434 @@
+/*
+ * This is D3DES (V5.09) by Richard Outerbridge with the double and
+ * triple-length support removed for use in VNC. Also the bytebit[] array
+ * has been reversed so that the most significant bit in each byte of the
+ * key is ignored, not the least significant.
+ *
+ * These changes are:
+ * Copyright (C) 1999 AT&T Laboratories Cambridge. All Rights Reserved.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* D3DES (V5.09) -
+ *
+ * A portable, public domain, version of the Data Encryption Standard.
+ *
+ * Written with Symantec's THINK (Lightspeed) C by Richard Outerbridge.
+ * Thanks to: Dan Hoey for his excellent Initial and Inverse permutation
+ * code; Jim Gillogly & Phil Karn for the DES key schedule code; Dennis
+ * Ferguson, Eric Young and Dana How for comparing notes; and Ray Lau,
+ * for humouring me on.
+ *
+ * Copyright (c) 1988,1989,1990,1991,1992 by Richard Outerbridge.
+ * (GEnie : OUTER; CIS : [71755,204]) Graven Imagery, 1992.
+ */
+
+#include "d3des.h"
+
+static void scrunch(unsigned char *, unsigned long *);
+static void unscrun(unsigned long *, unsigned char *);
+static void desfunc(unsigned long *, unsigned long *);
+static void cookey(unsigned long *);
+
+static unsigned long KnL[32] = { 0L };
+
+static unsigned short bytebit[8] = {
+ 01, 02, 04, 010, 020, 040, 0100, 0200 };
+
+static unsigned long bigbyte[24] = {
+ 0x800000L, 0x400000L, 0x200000L, 0x100000L,
+ 0x80000L, 0x40000L, 0x20000L, 0x10000L,
+ 0x8000L, 0x4000L, 0x2000L, 0x1000L,
+ 0x800L, 0x400L, 0x200L, 0x100L,
+ 0x80L, 0x40L, 0x20L, 0x10L,
+ 0x8L, 0x4L, 0x2L, 0x1L };
+
+/* Use the key schedule specified in the Standard (ANSI X3.92-1981). */
+
+static unsigned char pc1[56] = {
+ 56, 48, 40, 32, 24, 16, 8, 0, 57, 49, 41, 33, 25, 17,
+ 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35,
+ 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21,
+ 13, 5, 60, 52, 44, 36, 28, 20, 12, 4, 27, 19, 11, 3 };
+
+static unsigned char totrot[16] = {
+ 1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28 };
+
+static unsigned char pc2[48] = {
+ 13, 16, 10, 23, 0, 4, 2, 27, 14, 5, 20, 9,
+ 22, 18, 11, 3, 25, 7, 15, 6, 26, 19, 12, 1,
+ 40, 51, 30, 36, 46, 54, 29, 39, 50, 44, 32, 47,
+ 43, 48, 38, 55, 33, 52, 45, 41, 49, 35, 28, 31 };
+
+void deskey(key, edf) /* Thanks to James Gillogly & Phil Karn! */
+unsigned char *key;
+int edf;
+{
+ register int i, j, l, m, n;
+ unsigned char pc1m[56], pcr[56];
+ unsigned long kn[32];
+
+ for ( j = 0; j < 56; j++ ) {
+ l = pc1[j];
+ m = l & 07;
+ pc1m[j] = (key[l >> 3] & bytebit[m]) ? 1 : 0;
+ }
+ for( i = 0; i < 16; i++ ) {
+ if( edf == DE1 ) m = (15 - i) << 1;
+ else m = i << 1;
+ n = m + 1;
+ kn[m] = kn[n] = 0L;
+ for( j = 0; j < 28; j++ ) {
+ l = j + totrot[i];
+ if( l < 28 ) pcr[j] = pc1m[l];
+ else pcr[j] = pc1m[l - 28];
+ }
+ for( j = 28; j < 56; j++ ) {
+ l = j + totrot[i];
+ if( l < 56 ) pcr[j] = pc1m[l];
+ else pcr[j] = pc1m[l - 28];
+ }
+ for( j = 0; j < 24; j++ ) {
+ if( pcr[pc2[j]] ) kn[m] |= bigbyte[j];
+ if( pcr[pc2[j+24]] ) kn[n] |= bigbyte[j];
+ }
+ }
+ cookey(kn);
+ return;
+ }
+
+static void cookey(raw1)
+register unsigned long *raw1;
+{
+ register unsigned long *cook, *raw0;
+ unsigned long dough[32];
+ register int i;
+
+ cook = dough;
+ for( i = 0; i < 16; i++, raw1++ ) {
+ raw0 = raw1++;
+ *cook = (*raw0 & 0x00fc0000L) << 6;
+ *cook |= (*raw0 & 0x00000fc0L) << 10;
+ *cook |= (*raw1 & 0x00fc0000L) >> 10;
+ *cook++ |= (*raw1 & 0x00000fc0L) >> 6;
+ *cook = (*raw0 & 0x0003f000L) << 12;
+ *cook |= (*raw0 & 0x0000003fL) << 16;
+ *cook |= (*raw1 & 0x0003f000L) >> 4;
+ *cook++ |= (*raw1 & 0x0000003fL);
+ }
+ usekey(dough);
+ return;
+ }
+
+void cpkey(into)
+register unsigned long *into;
+{
+ register unsigned long *from, *endp;
+
+ from = KnL, endp = &KnL[32];
+ while( from < endp ) *into++ = *from++;
+ return;
+ }
+
+void usekey(from)
+register unsigned long *from;
+{
+ register unsigned long *to, *endp;
+
+ to = KnL, endp = &KnL[32];
+ while( to < endp ) *to++ = *from++;
+ return;
+ }
+
+void des(inblock, outblock)
+unsigned char *inblock, *outblock;
+{
+ unsigned long work[2];
+
+ scrunch(inblock, work);
+ desfunc(work, KnL);
+ unscrun(work, outblock);
+ return;
+ }
+
+static void scrunch(outof, into)
+register unsigned char *outof;
+register unsigned long *into;
+{
+ *into = (*outof++ & 0xffL) << 24;
+ *into |= (*outof++ & 0xffL) << 16;
+ *into |= (*outof++ & 0xffL) << 8;
+ *into++ |= (*outof++ & 0xffL);
+ *into = (*outof++ & 0xffL) << 24;
+ *into |= (*outof++ & 0xffL) << 16;
+ *into |= (*outof++ & 0xffL) << 8;
+ *into |= (*outof & 0xffL);
+ return;
+ }
+
+static void unscrun(outof, into)
+register unsigned long *outof;
+register unsigned char *into;
+{
+ *into++ = (unsigned char)((*outof >> 24) & 0xffL);
+ *into++ = (unsigned char)((*outof >> 16) & 0xffL);
+ *into++ = (unsigned char)((*outof >> 8) & 0xffL);
+ *into++ = (unsigned char)(*outof++ & 0xffL);
+ *into++ = (unsigned char)((*outof >> 24) & 0xffL);
+ *into++ = (unsigned char)((*outof >> 16) & 0xffL);
+ *into++ = (unsigned char)((*outof >> 8) & 0xffL);
+ *into = (unsigned char)(*outof & 0xffL);
+ return;
+ }
+
+static unsigned long SP1[64] = {
+ 0x01010400L, 0x00000000L, 0x00010000L, 0x01010404L,
+ 0x01010004L, 0x00010404L, 0x00000004L, 0x00010000L,
+ 0x00000400L, 0x01010400L, 0x01010404L, 0x00000400L,
+ 0x01000404L, 0x01010004L, 0x01000000L, 0x00000004L,
+ 0x00000404L, 0x01000400L, 0x01000400L, 0x00010400L,
+ 0x00010400L, 0x01010000L, 0x01010000L, 0x01000404L,
+ 0x00010004L, 0x01000004L, 0x01000004L, 0x00010004L,
+ 0x00000000L, 0x00000404L, 0x00010404L, 0x01000000L,
+ 0x00010000L, 0x01010404L, 0x00000004L, 0x01010000L,
+ 0x01010400L, 0x01000000L, 0x01000000L, 0x00000400L,
+ 0x01010004L, 0x00010000L, 0x00010400L, 0x01000004L,
+ 0x00000400L, 0x00000004L, 0x01000404L, 0x00010404L,
+ 0x01010404L, 0x00010004L, 0x01010000L, 0x01000404L,
+ 0x01000004L, 0x00000404L, 0x00010404L, 0x01010400L,
+ 0x00000404L, 0x01000400L, 0x01000400L, 0x00000000L,
+ 0x00010004L, 0x00010400L, 0x00000000L, 0x01010004L };
+
+static unsigned long SP2[64] = {
+ 0x80108020L, 0x80008000L, 0x00008000L, 0x00108020L,
+ 0x00100000L, 0x00000020L, 0x80100020L, 0x80008020L,
+ 0x80000020L, 0x80108020L, 0x80108000L, 0x80000000L,
+ 0x80008000L, 0x00100000L, 0x00000020L, 0x80100020L,
+ 0x00108000L, 0x00100020L, 0x80008020L, 0x00000000L,
+ 0x80000000L, 0x00008000L, 0x00108020L, 0x80100000L,
+ 0x00100020L, 0x80000020L, 0x00000000L, 0x00108000L,
+ 0x00008020L, 0x80108000L, 0x80100000L, 0x00008020L,
+ 0x00000000L, 0x00108020L, 0x80100020L, 0x00100000L,
+ 0x80008020L, 0x80100000L, 0x80108000L, 0x00008000L,
+ 0x80100000L, 0x80008000L, 0x00000020L, 0x80108020L,
+ 0x00108020L, 0x00000020L, 0x00008000L, 0x80000000L,
+ 0x00008020L, 0x80108000L, 0x00100000L, 0x80000020L,
+ 0x00100020L, 0x80008020L, 0x80000020L, 0x00100020L,
+ 0x00108000L, 0x00000000L, 0x80008000L, 0x00008020L,
+ 0x80000000L, 0x80100020L, 0x80108020L, 0x00108000L };
+
+static unsigned long SP3[64] = {
+ 0x00000208L, 0x08020200L, 0x00000000L, 0x08020008L,
+ 0x08000200L, 0x00000000L, 0x00020208L, 0x08000200L,
+ 0x00020008L, 0x08000008L, 0x08000008L, 0x00020000L,
+ 0x08020208L, 0x00020008L, 0x08020000L, 0x00000208L,
+ 0x08000000L, 0x00000008L, 0x08020200L, 0x00000200L,
+ 0x00020200L, 0x08020000L, 0x08020008L, 0x00020208L,
+ 0x08000208L, 0x00020200L, 0x00020000L, 0x08000208L,
+ 0x00000008L, 0x08020208L, 0x00000200L, 0x08000000L,
+ 0x08020200L, 0x08000000L, 0x00020008L, 0x00000208L,
+ 0x00020000L, 0x08020200L, 0x08000200L, 0x00000000L,
+ 0x00000200L, 0x00020008L, 0x08020208L, 0x08000200L,
+ 0x08000008L, 0x00000200L, 0x00000000L, 0x08020008L,
+ 0x08000208L, 0x00020000L, 0x08000000L, 0x08020208L,
+ 0x00000008L, 0x00020208L, 0x00020200L, 0x08000008L,
+ 0x08020000L, 0x08000208L, 0x00000208L, 0x08020000L,
+ 0x00020208L, 0x00000008L, 0x08020008L, 0x00020200L };
+
+static unsigned long SP4[64] = {
+ 0x00802001L, 0x00002081L, 0x00002081L, 0x00000080L,
+ 0x00802080L, 0x00800081L, 0x00800001L, 0x00002001L,
+ 0x00000000L, 0x00802000L, 0x00802000L, 0x00802081L,
+ 0x00000081L, 0x00000000L, 0x00800080L, 0x00800001L,
+ 0x00000001L, 0x00002000L, 0x00800000L, 0x00802001L,
+ 0x00000080L, 0x00800000L, 0x00002001L, 0x00002080L,
+ 0x00800081L, 0x00000001L, 0x00002080L, 0x00800080L,
+ 0x00002000L, 0x00802080L, 0x00802081L, 0x00000081L,
+ 0x00800080L, 0x00800001L, 0x00802000L, 0x00802081L,
+ 0x00000081L, 0x00000000L, 0x00000000L, 0x00802000L,
+ 0x00002080L, 0x00800080L, 0x00800081L, 0x00000001L,
+ 0x00802001L, 0x00002081L, 0x00002081L, 0x00000080L,
+ 0x00802081L, 0x00000081L, 0x00000001L, 0x00002000L,
+ 0x00800001L, 0x00002001L, 0x00802080L, 0x00800081L,
+ 0x00002001L, 0x00002080L, 0x00800000L, 0x00802001L,
+ 0x00000080L, 0x00800000L, 0x00002000L, 0x00802080L };
+
+static unsigned long SP5[64] = {
+ 0x00000100L, 0x02080100L, 0x02080000L, 0x42000100L,
+ 0x00080000L, 0x00000100L, 0x40000000L, 0x02080000L,
+ 0x40080100L, 0x00080000L, 0x02000100L, 0x40080100L,
+ 0x42000100L, 0x42080000L, 0x00080100L, 0x40000000L,
+ 0x02000000L, 0x40080000L, 0x40080000L, 0x00000000L,
+ 0x40000100L, 0x42080100L, 0x42080100L, 0x02000100L,
+ 0x42080000L, 0x40000100L, 0x00000000L, 0x42000000L,
+ 0x02080100L, 0x02000000L, 0x42000000L, 0x00080100L,
+ 0x00080000L, 0x42000100L, 0x00000100L, 0x02000000L,
+ 0x40000000L, 0x02080000L, 0x42000100L, 0x40080100L,
+ 0x02000100L, 0x40000000L, 0x42080000L, 0x02080100L,
+ 0x40080100L, 0x00000100L, 0x02000000L, 0x42080000L,
+ 0x42080100L, 0x00080100L, 0x42000000L, 0x42080100L,
+ 0x02080000L, 0x00000000L, 0x40080000L, 0x42000000L,
+ 0x00080100L, 0x02000100L, 0x40000100L, 0x00080000L,
+ 0x00000000L, 0x40080000L, 0x02080100L, 0x40000100L };
+
+static unsigned long SP6[64] = {
+ 0x20000010L, 0x20400000L, 0x00004000L, 0x20404010L,
+ 0x20400000L, 0x00000010L, 0x20404010L, 0x00400000L,
+ 0x20004000L, 0x00404010L, 0x00400000L, 0x20000010L,
+ 0x00400010L, 0x20004000L, 0x20000000L, 0x00004010L,
+ 0x00000000L, 0x00400010L, 0x20004010L, 0x00004000L,
+ 0x00404000L, 0x20004010L, 0x00000010L, 0x20400010L,
+ 0x20400010L, 0x00000000L, 0x00404010L, 0x20404000L,
+ 0x00004010L, 0x00404000L, 0x20404000L, 0x20000000L,
+ 0x20004000L, 0x00000010L, 0x20400010L, 0x00404000L,
+ 0x20404010L, 0x00400000L, 0x00004010L, 0x20000010L,
+ 0x00400000L, 0x20004000L, 0x20000000L, 0x00004010L,
+ 0x20000010L, 0x20404010L, 0x00404000L, 0x20400000L,
+ 0x00404010L, 0x20404000L, 0x00000000L, 0x20400010L,
+ 0x00000010L, 0x00004000L, 0x20400000L, 0x00404010L,
+ 0x00004000L, 0x00400010L, 0x20004010L, 0x00000000L,
+ 0x20404000L, 0x20000000L, 0x00400010L, 0x20004010L };
+
+static unsigned long SP7[64] = {
+ 0x00200000L, 0x04200002L, 0x04000802L, 0x00000000L,
+ 0x00000800L, 0x04000802L, 0x00200802L, 0x04200800L,
+ 0x04200802L, 0x00200000L, 0x00000000L, 0x04000002L,
+ 0x00000002L, 0x04000000L, 0x04200002L, 0x00000802L,
+ 0x04000800L, 0x00200802L, 0x00200002L, 0x04000800L,
+ 0x04000002L, 0x04200000L, 0x04200800L, 0x00200002L,
+ 0x04200000L, 0x00000800L, 0x00000802L, 0x04200802L,
+ 0x00200800L, 0x00000002L, 0x04000000L, 0x00200800L,
+ 0x04000000L, 0x00200800L, 0x00200000L, 0x04000802L,
+ 0x04000802L, 0x04200002L, 0x04200002L, 0x00000002L,
+ 0x00200002L, 0x04000000L, 0x04000800L, 0x00200000L,
+ 0x04200800L, 0x00000802L, 0x00200802L, 0x04200800L,
+ 0x00000802L, 0x04000002L, 0x04200802L, 0x04200000L,
+ 0x00200800L, 0x00000000L, 0x00000002L, 0x04200802L,
+ 0x00000000L, 0x00200802L, 0x04200000L, 0x00000800L,
+ 0x04000002L, 0x04000800L, 0x00000800L, 0x00200002L };
+
+static unsigned long SP8[64] = {
+ 0x10001040L, 0x00001000L, 0x00040000L, 0x10041040L,
+ 0x10000000L, 0x10001040L, 0x00000040L, 0x10000000L,
+ 0x00040040L, 0x10040000L, 0x10041040L, 0x00041000L,
+ 0x10041000L, 0x00041040L, 0x00001000L, 0x00000040L,
+ 0x10040000L, 0x10000040L, 0x10001000L, 0x00001040L,
+ 0x00041000L, 0x00040040L, 0x10040040L, 0x10041000L,
+ 0x00001040L, 0x00000000L, 0x00000000L, 0x10040040L,
+ 0x10000040L, 0x10001000L, 0x00041040L, 0x00040000L,
+ 0x00041040L, 0x00040000L, 0x10041000L, 0x00001000L,
+ 0x00000040L, 0x10040040L, 0x00001000L, 0x00041040L,
+ 0x10001000L, 0x00000040L, 0x10000040L, 0x10040000L,
+ 0x10040040L, 0x10000000L, 0x00040000L, 0x10001040L,
+ 0x00000000L, 0x10041040L, 0x00040040L, 0x10000040L,
+ 0x10040000L, 0x10001000L, 0x10001040L, 0x00000000L,
+ 0x10041040L, 0x00041000L, 0x00041000L, 0x00001040L,
+ 0x00001040L, 0x00040040L, 0x10000000L, 0x10041000L };
+
+static void desfunc(block, keys)
+register unsigned long *block, *keys;
+{
+ register unsigned long fval, work, right, leftt;
+ register int round;
+
+ leftt = block[0];
+ right = block[1];
+ work = ((leftt >> 4) ^ right) & 0x0f0f0f0fL;
+ right ^= work;
+ leftt ^= (work << 4);
+ work = ((leftt >> 16) ^ right) & 0x0000ffffL;
+ right ^= work;
+ leftt ^= (work << 16);
+ work = ((right >> 2) ^ leftt) & 0x33333333L;
+ leftt ^= work;
+ right ^= (work << 2);
+ work = ((right >> 8) ^ leftt) & 0x00ff00ffL;
+ leftt ^= work;
+ right ^= (work << 8);
+ right = ((right << 1) | ((right >> 31) & 1L)) & 0xffffffffL;
+ work = (leftt ^ right) & 0xaaaaaaaaL;
+ leftt ^= work;
+ right ^= work;
+ leftt = ((leftt << 1) | ((leftt >> 31) & 1L)) & 0xffffffffL;
+
+ for( round = 0; round < 8; round++ ) {
+ work = (right << 28) | (right >> 4);
+ work ^= *keys++;
+ fval = SP7[ work & 0x3fL];
+ fval |= SP5[(work >> 8) & 0x3fL];
+ fval |= SP3[(work >> 16) & 0x3fL];
+ fval |= SP1[(work >> 24) & 0x3fL];
+ work = right ^ *keys++;
+ fval |= SP8[ work & 0x3fL];
+ fval |= SP6[(work >> 8) & 0x3fL];
+ fval |= SP4[(work >> 16) & 0x3fL];
+ fval |= SP2[(work >> 24) & 0x3fL];
+ leftt ^= fval;
+ work = (leftt << 28) | (leftt >> 4);
+ work ^= *keys++;
+ fval = SP7[ work & 0x3fL];
+ fval |= SP5[(work >> 8) & 0x3fL];
+ fval |= SP3[(work >> 16) & 0x3fL];
+ fval |= SP1[(work >> 24) & 0x3fL];
+ work = leftt ^ *keys++;
+ fval |= SP8[ work & 0x3fL];
+ fval |= SP6[(work >> 8) & 0x3fL];
+ fval |= SP4[(work >> 16) & 0x3fL];
+ fval |= SP2[(work >> 24) & 0x3fL];
+ right ^= fval;
+ }
+
+ right = (right << 31) | (right >> 1);
+ work = (leftt ^ right) & 0xaaaaaaaaL;
+ leftt ^= work;
+ right ^= work;
+ leftt = (leftt << 31) | (leftt >> 1);
+ work = ((leftt >> 8) ^ right) & 0x00ff00ffL;
+ right ^= work;
+ leftt ^= (work << 8);
+ work = ((leftt >> 2) ^ right) & 0x33333333L;
+ right ^= work;
+ leftt ^= (work << 2);
+ work = ((right >> 16) ^ leftt) & 0x0000ffffL;
+ leftt ^= work;
+ right ^= (work << 16);
+ work = ((right >> 4) ^ leftt) & 0x0f0f0f0fL;
+ leftt ^= work;
+ right ^= (work << 4);
+ *block++ = right;
+ *block = leftt;
+ return;
+ }
+
+/* Validation sets:
+ *
+ * Single-length key, single-length plaintext -
+ * Key : 0123 4567 89ab cdef
+ * Plain : 0123 4567 89ab cde7
+ * Cipher : c957 4425 6a5e d31d
+ *
+ * Double-length key, single-length plaintext -
+ * Key : 0123 4567 89ab cdef fedc ba98 7654 3210
+ * Plain : 0123 4567 89ab cde7
+ * Cipher : 7f1d 0a77 826b 8aff
+ *
+ * Double-length key, double-length plaintext -
+ * Key : 0123 4567 89ab cdef fedc ba98 7654 3210
+ * Plain : 0123 4567 89ab cdef 0123 4567 89ab cdff
+ * Cipher : 27a0 8440 406a df60 278f 47cf 42d6 15d7
+ *
+ * Triple-length key, single-length plaintext -
+ * Key : 0123 4567 89ab cdef fedc ba98 7654 3210 89ab cdef 0123 4567
+ * Plain : 0123 4567 89ab cde7
+ * Cipher : de0b 7c06 ae5e 0ed5
+ *
+ * Triple-length key, double-length plaintext -
+ * Key : 0123 4567 89ab cdef fedc ba98 7654 3210 89ab cdef 0123 4567
+ * Plain : 0123 4567 89ab cdef 0123 4567 89ab cdff
+ * Cipher : ad0d 1b30 ac17 cf07 0ed1 1c63 81e4 4de5
+ *
+ * d3des V5.0a rwo 9208.07 18:44 Graven Imagery
+ **********************************************************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ioemu/d3des.h Fri Oct 20 09:50:09 2006 +0100
@@ -0,0 +1,51 @@
+/*
+ * This is D3DES (V5.09) by Richard Outerbridge with the double and
+ * triple-length support removed for use in VNC.
+ *
+ * These changes are:
+ * Copyright (C) 1999 AT&T Laboratories Cambridge. All Rights Reserved.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* d3des.h -
+ *
+ * Headers and defines for d3des.c
+ * Graven Imagery, 1992.
+ *
+ * Copyright (c) 1988,1989,1990,1991,1992 by Richard Outerbridge
+ * (GEnie : OUTER; CIS : [71755,204])
+ */
+
+#define EN0 0 /* MODE == encrypt */
+#define DE1 1 /* MODE == decrypt */
+
+extern void deskey(unsigned char *, int);
+/* hexkey[8] MODE
+ * Sets the internal key register according to the hexadecimal
+ * key contained in the 8 bytes of hexkey, according to the DES,
+ * for encryption or decryption according to MODE.
+ */
+
+extern void usekey(unsigned long *);
+/* cookedkey[32]
+ * Loads the internal key register with the data in cookedkey.
+ */
+
+extern void cpkey(unsigned long *);
+/* cookedkey[32]
+ * Copies the contents of the internal key register into the storage
+ * located at &cookedkey[0].
+ */
+
+extern void des(unsigned char *, unsigned char *);
+/* from[8] to[8]
+ * Encrypts/Decrypts (according to the key currently loaded in the
+ * internal key register) one block of eight bytes at address 'from'
+ * into the block at address 'to'. They can be the same.
+ */
+
+/* d3des.h V5.09 rwo 9208.04 15:06 Graven Imagery
+ ********************************************************************/
+63
View File
@@ -0,0 +1,63 @@
# HG changeset patch
# User Steven Smith <ssmith@xensource.com>
# Node ID ca3abb3804f4400b24037a4366cb2ca5e51ed742
# Parent 7fca81d456b2cb40d4effe2492f7ed1aafd32f52
[HVM][VNC] Make sure that qemu doesn't go into an infinite loop when
it receives certain invalid requests from the viewer.
Signed-off-by: Steven Smith <sos22@cam.ac.uk>
Index: ioemu/vnc.c
===================================================================
--- ioemu.orig/vnc.c 2006-10-24 14:28:05.000000000 +0100
+++ ioemu/vnc.c 2006-10-24 14:30:11.000000000 +0100
@@ -26,6 +26,7 @@
#include "vl.h"
#include "qemu_socket.h"
+#include <assert.h>
#define VNC_REFRESH_INTERVAL (1000 / 30)
@@ -677,8 +678,10 @@
memmove(vs->input.buffer, vs->input.buffer + len,
vs->input.offset - len);
vs->input.offset -= len;
- } else
+ } else {
+ assert(ret > vs->read_handler_expect);
vs->read_handler_expect = ret;
+ }
}
}
@@ -961,8 +964,12 @@
if (len == 1)
return 4;
- if (len == 4)
- return 4 + (read_u16(data, 2) * 4);
+ if (len == 4) {
+ uint16_t v;
+ v = read_u16(data, 2);
+ if (v)
+ return 4 + v * 4;
+ }
limit = read_u16(data, 2);
for (i = 0; i < limit; i++) {
@@ -996,8 +1003,12 @@
if (len == 1)
return 8;
- if (len == 8)
- return 8 + read_u32(data, 4);
+ if (len == 8) {
+ uint32_t v;
+ v = read_u32(data, 4);
+ if (v)
+ return 8 + v;
+ }
client_cut_text(vs, read_u32(data, 4), data + 8);
break;
+7 -7
View File
@@ -1,8 +1,8 @@
Index: ioemu/vnc.c
===================================================================
--- ioemu.orig/vnc.c 2006-09-21 19:26:38.000000000 +0100
+++ ioemu/vnc.c 2006-09-21 19:29:58.000000000 +0100
@@ -1174,3 +1174,25 @@
--- ioemu.orig/vnc.c 2006-10-24 14:33:46.000000000 +0100
+++ ioemu/vnc.c 2006-10-24 14:33:46.000000000 +0100
@@ -1187,3 +1187,25 @@
vnc_dpy_resize(vs->ds, 640, 400);
}
@@ -30,8 +30,8 @@ Index: ioemu/vnc.c
+}
Index: ioemu/vl.c
===================================================================
--- ioemu.orig/vl.c 2006-09-21 19:26:24.000000000 +0100
+++ ioemu/vl.c 2006-09-21 19:29:50.000000000 +0100
--- ioemu.orig/vl.c 2006-10-24 14:33:46.000000000 +0100
+++ ioemu/vl.c 2006-10-24 14:33:46.000000000 +0100
@@ -120,6 +120,7 @@
int bios_size;
static DisplayState display_state;
@@ -93,8 +93,8 @@ Index: ioemu/vl.c
sdl_display_init(ds, full_screen);
Index: ioemu/vl.h
===================================================================
--- ioemu.orig/vl.h 2006-09-21 19:26:24.000000000 +0100
+++ ioemu/vl.h 2006-09-21 19:29:50.000000000 +0100
--- ioemu.orig/vl.h 2006-10-24 14:33:46.000000000 +0100
+++ ioemu/vl.h 2006-10-24 14:33:46.000000000 +0100
@@ -786,6 +786,7 @@
/* vnc.c */
+5 -5
View File
@@ -1,16 +1,16 @@
Index: ioemu/vnc.c
===================================================================
--- ioemu.orig/vnc.c 2006-09-21 19:33:31.000000000 +0100
+++ ioemu/vnc.c 2006-09-21 19:33:31.000000000 +0100
@@ -1013,6 +1013,7 @@
--- ioemu.orig/vnc.c 2006-10-24 14:33:46.000000000 +0100
+++ ioemu/vnc.c 2006-10-24 14:33:46.000000000 +0100
@@ -1024,6 +1024,7 @@
static int protocol_client_init(VncState *vs, char *data, size_t len)
{
+ size_t l;
char pad[3] = { 0, 0, 0 };
vs->width = vs->ds->width;
@@ -1058,8 +1059,10 @@
vga_hw_update();
@@ -1071,8 +1072,10 @@
vnc_write(vs, pad, 3); /* padding */
+11 -10
View File
@@ -1,7 +1,7 @@
Index: ioemu/Makefile
===================================================================
--- ioemu.orig/Makefile 2006-08-28 20:19:23.000000000 +0100
+++ ioemu/Makefile 2006-08-28 20:20:08.000000000 +0100
--- ioemu.orig/Makefile 2006-10-24 14:37:25.000000000 +0100
+++ ioemu/Makefile 2006-10-24 14:37:28.000000000 +0100
@@ -1,11 +1,14 @@
# Makefile for QEMU.
@@ -85,8 +85,8 @@ Index: ioemu/Makefile
info: qemu-doc.info qemu-tech.info
Index: ioemu/Makefile.target
===================================================================
--- ioemu.orig/Makefile.target 2006-08-28 20:19:23.000000000 +0100
+++ ioemu/Makefile.target 2006-08-28 20:19:47.000000000 +0100
--- ioemu.orig/Makefile.target 2006-10-24 14:37:25.000000000 +0100
+++ ioemu/Makefile.target 2006-10-24 14:40:25.000000000 +0100
@@ -1,5 +1,8 @@
include config.mak
@@ -112,7 +112,7 @@ Index: ioemu/Makefile.target
endif
-CFLAGS=-Wall -O2 -g -fno-strict-aliasing
+CFLAGS+=-Wall -O2 -g -fno-strict-aliasing
+SSE2 := $(call test-gcc-flag,$(CC),-msse2)
+SSE2 := $(call cc-option,$(CC),-msse2,)
+ifeq ($(SSE2),-msse2)
+CFLAGS += -DUSE_SSE2=1 -msse2
+endif
@@ -149,17 +149,18 @@ Index: ioemu/Makefile.target
install: all
+ mkdir -p "$(DESTDIR)$(bindir)" "$(DESTDIR)$(configdir)"
ifneq ($(PROGS),)
$(INSTALL) -m 755 -s $(PROGS) "$(DESTDIR)$(bindir)"
- $(INSTALL) -m 755 -s $(PROGS) "$(DESTDIR)$(bindir)"
+ $(INSTALL_PROG) $(PROGS) "$(DESTDIR)$(bindir)"
endif
+ install -m 755 $(TARGET_PATH)/qemu-dm.debug "$(DESTDIR)$(bindir)"
+ install -m 755 $(TARGET_PATH)/qemu-ifup "$(DESTDIR)$(configdir)"
+ $(INSTALL_PROG) $(TARGET_PATH)/qemu-dm.debug "$(DESTDIR)$(bindir)"
+ $(INSTALL_PROG) $(TARGET_PATH)/qemu-ifup "$(DESTDIR)$(configdir)"
ifneq ($(wildcard .depend),)
include .depend
Index: ioemu/configure
===================================================================
--- ioemu.orig/configure 2006-08-28 20:19:23.000000000 +0100
+++ ioemu/configure 2006-08-28 20:19:47.000000000 +0100
--- ioemu.orig/configure 2006-10-24 14:37:25.000000000 +0100
+++ ioemu/configure 2006-10-24 14:40:20.000000000 +0100
@@ -18,8 +18,8 @@
# default parameters
+16 -10
View File
@@ -3,8 +3,8 @@ will come later.
Index: ioemu/Makefile.target
===================================================================
--- ioemu.orig/Makefile.target 2006-09-21 19:33:31.000000000 +0100
+++ ioemu/Makefile.target 2006-09-21 19:33:32.000000000 +0100
--- ioemu.orig/Makefile.target 2006-10-24 14:41:01.000000000 +0100
+++ ioemu/Makefile.target 2006-10-24 14:41:01.000000000 +0100
@@ -359,6 +359,7 @@
VL_OBJS+= usb-uhci.o
VL_OBJS+= piix4acpi.o
@@ -15,8 +15,8 @@ Index: ioemu/Makefile.target
ifeq ($(TARGET_BASE_ARCH), ppc)
Index: ioemu/hw/pc.c
===================================================================
--- ioemu.orig/hw/pc.c 2006-09-21 19:33:31.000000000 +0100
+++ ioemu/hw/pc.c 2006-09-21 19:33:32.000000000 +0100
--- ioemu.orig/hw/pc.c 2006-10-24 14:41:00.000000000 +0100
+++ ioemu/hw/pc.c 2006-10-24 14:41:01.000000000 +0100
@@ -823,6 +823,9 @@
}
#endif /* !CONFIG_DM */
@@ -30,8 +30,8 @@ Index: ioemu/hw/pc.c
Index: ioemu/hw/xen_platform.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ ioemu/hw/xen_platform.c 2006-09-21 19:33:32.000000000 +0100
@@ -0,0 +1,138 @@
+++ ioemu/hw/xen_platform.c 2006-10-24 14:41:04.000000000 +0100
@@ -0,0 +1,144 @@
+/*
+ * XEN platform fake pci device, formerly known as the event channel device
+ *
@@ -131,7 +131,8 @@ Index: ioemu/hw/xen_platform.c
+ uint8_t bist; /* Built in self test */
+ uint32_t base_address_regs[6];
+ uint32_t reserved1;
+ uint32_t reserved2;
+ uint16_t subsystem_vendor_id;
+ uint16_t subsystem_id;
+ uint32_t rom_addr;
+ uint32_t reserved3;
+ uint32_t reserved4;
@@ -160,6 +161,11 @@ Index: ioemu/hw/xen_platform.c
+ pch->header_type = 0;
+ pch->interrupt_pin = 1;
+
+ /* Microsoft WHQL requires non-zero subsystem IDs. */
+ /* http://www.pcisig.com/reflector/msg02205.html. */
+ pch->subsystem_vendor_id = pch->vendor_id; /* Duplicate vendor id. */
+ pch->subsystem_id = 0x0001; /* Hardcode sub-id as 1. */
+
+ pci_register_io_region(d, 0, 0x100, PCI_ADDRESS_SPACE_IO,
+ platform_ioport_map);
+
@@ -172,9 +178,9 @@ Index: ioemu/hw/xen_platform.c
+}
Index: ioemu/vl.h
===================================================================
--- ioemu.orig/vl.h 2006-09-21 19:33:32.000000000 +0100
+++ ioemu/vl.h 2006-09-21 19:33:32.000000000 +0100
@@ -1210,6 +1210,9 @@
--- ioemu.orig/vl.h 2006-10-24 14:41:01.000000000 +0100
+++ ioemu/vl.h 2006-10-24 14:41:01.000000000 +0100
@@ -1212,6 +1212,9 @@
void xenstore_check_new_media_present(int timeout);
void xenstore_write_vncport(int vnc_display);
@@ -1,8 +1,8 @@
Index: ioemu/vl.c
===================================================================
--- ioemu.orig/vl.c 2006-09-21 19:33:32.000000000 +0100
+++ ioemu/vl.c 2006-09-21 19:33:32.000000000 +0100
@@ -5844,6 +5844,7 @@
--- ioemu.orig/vl.c 2006-10-24 14:33:47.000000000 +0100
+++ ioemu/vl.c 2006-10-24 14:33:47.000000000 +0100
@@ -5854,6 +5854,7 @@
unsigned long nr_pages, tmp_nr_pages, shared_page_nr;
xen_pfn_t *page_array;
extern void *shared_page;
@@ -10,7 +10,7 @@ Index: ioemu/vl.c
char qemu_dm_logfilename[64];
@@ -6425,6 +6426,18 @@
@@ -6440,6 +6441,18 @@
fprintf(logfile, "shared page at pfn:%lx, mfn: %"PRIx64"\n",
shared_page_nr, (uint64_t)(page_array[shared_page_nr]));
@@ -31,8 +31,8 @@ Index: ioemu/vl.c
#elif defined(__ia64__)
Index: ioemu/target-i386-dm/helper2.c
===================================================================
--- ioemu.orig/target-i386-dm/helper2.c 2006-09-21 19:33:30.000000000 +0100
+++ ioemu/target-i386-dm/helper2.c 2006-09-21 19:33:32.000000000 +0100
--- ioemu.orig/target-i386-dm/helper2.c 2006-10-24 14:33:45.000000000 +0100
+++ ioemu/target-i386-dm/helper2.c 2006-10-24 14:33:47.000000000 +0100
@@ -76,6 +76,10 @@
shared_iopage_t *shared_page = NULL;
@@ -1,7 +1,7 @@
Index: ioemu/Makefile.target
===================================================================
--- ioemu.orig/Makefile.target 2006-09-21 19:33:31.000000000 +0100
+++ ioemu/Makefile.target 2006-09-21 19:33:31.000000000 +0100
--- ioemu.orig/Makefile.target 2006-10-24 14:31:36.000000000 +0100
+++ ioemu/Makefile.target 2006-10-24 14:33:28.000000000 +0100
@@ -358,6 +358,7 @@
VL_OBJS+= cirrus_vga.o mixeng.o parallel.o acpi.o piix_pci.o
VL_OBJS+= usb-uhci.o
@@ -13,7 +13,7 @@ Index: ioemu/Makefile.target
Index: ioemu/xenstore.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ ioemu/xenstore.c 2006-09-21 19:33:31.000000000 +0100
+++ ioemu/xenstore.c 2006-10-24 14:33:28.000000000 +0100
@@ -0,0 +1,187 @@
+/*
+ * This file is subject to the terms and conditions of the GNU General
@@ -204,9 +204,9 @@ Index: ioemu/xenstore.c
+}
Index: ioemu/vl.c
===================================================================
--- ioemu.orig/vl.c 2006-09-21 19:33:31.000000000 +0100
+++ ioemu/vl.c 2006-09-21 19:33:31.000000000 +0100
@@ -5249,9 +5249,11 @@
--- ioemu.orig/vl.c 2006-10-24 14:33:24.000000000 +0100
+++ ioemu/vl.c 2006-10-24 14:33:28.000000000 +0100
@@ -5256,9 +5256,11 @@
"Standard options:\n"
"-M machine select emulated machine (-M ? for list)\n"
"-fda/-fdb file use 'file' as floppy disk 0/1 image\n"
@@ -218,7 +218,7 @@ Index: ioemu/vl.c
"-boot [a|c|d] boot on floppy (a), hard disk (c) or CD-ROM (d)\n"
"-snapshot write to temporary files instead of disk image files\n"
#ifdef TARGET_I386
@@ -5378,11 +5380,13 @@
@@ -5386,11 +5388,13 @@
QEMU_OPTION_M,
QEMU_OPTION_fda,
QEMU_OPTION_fdb,
@@ -232,7 +232,7 @@ Index: ioemu/vl.c
QEMU_OPTION_boot,
QEMU_OPTION_snapshot,
#ifdef TARGET_I386
@@ -5454,11 +5458,13 @@
@@ -5463,11 +5467,13 @@
{ "M", HAS_ARG, QEMU_OPTION_M },
{ "fda", HAS_ARG, QEMU_OPTION_fda },
{ "fdb", HAS_ARG, QEMU_OPTION_fdb },
@@ -246,7 +246,7 @@ Index: ioemu/vl.c
{ "boot", HAS_ARG, QEMU_OPTION_boot },
{ "snapshot", 0, QEMU_OPTION_snapshot },
#ifdef TARGET_I386
@@ -5807,10 +5813,16 @@
@@ -5817,10 +5823,16 @@
#ifdef CONFIG_GDBSTUB
int use_gdbstub, gdbstub_port;
#endif
@@ -265,7 +265,7 @@ Index: ioemu/vl.c
const char *kernel_filename, *kernel_cmdline;
DisplayState *ds = &display_state;
int cyls, heads, secs, translation;
@@ -5871,8 +5883,10 @@
@@ -5881,8 +5893,10 @@
initrd_filename = NULL;
for(i = 0; i < MAX_FD; i++)
fd_filename[i] = NULL;
@@ -276,7 +276,7 @@ Index: ioemu/vl.c
ram_size = DEFAULT_RAM_SIZE * 1024 * 1024;
vga_ram_size = VGA_RAM_SIZE;
bios_size = BIOS_SIZE;
@@ -5886,11 +5900,13 @@
@@ -5896,11 +5910,13 @@
vncunused = 0;
kernel_filename = NULL;
kernel_cmdline = "";
@@ -290,7 +290,7 @@ Index: ioemu/vl.c
cyls = heads = secs = 0;
translation = BIOS_ATA_TRANSLATION_AUTO;
pstrcpy(monitor_device, sizeof(monitor_device), "vc");
@@ -5923,7 +5939,11 @@
@@ -5935,7 +5951,11 @@
break;
r = argv[optind];
if (r[0] != '-') {
@@ -302,7 +302,7 @@ Index: ioemu/vl.c
} else {
const QEMUOption *popt;
@@ -5967,6 +5987,7 @@
@@ -5979,6 +5999,7 @@
case QEMU_OPTION_initrd:
initrd_filename = optarg;
break;
@@ -310,7 +310,7 @@ Index: ioemu/vl.c
case QEMU_OPTION_hda:
case QEMU_OPTION_hdb:
case QEMU_OPTION_hdc:
@@ -5979,6 +6000,7 @@
@@ -5991,6 +6012,7 @@
cdrom_index = -1;
}
break;
@@ -318,7 +318,7 @@ Index: ioemu/vl.c
case QEMU_OPTION_snapshot:
snapshot = 1;
break;
@@ -6031,11 +6053,13 @@
@@ -6043,11 +6065,13 @@
case QEMU_OPTION_append:
kernel_cmdline = optarg;
break;
@@ -332,7 +332,7 @@ Index: ioemu/vl.c
case QEMU_OPTION_boot:
boot_device = optarg[0];
if (boot_device != 'a' &&
@@ -6290,12 +6314,18 @@
@@ -6305,12 +6329,18 @@
}
}
@@ -351,7 +351,7 @@ Index: ioemu/vl.c
if (!linux_boot &&
hd_filename[0] == '\0' &&
(cdrom_index >= 0 && hd_filename[cdrom_index] == '\0') &&
@@ -6309,6 +6339,7 @@
@@ -6324,6 +6354,7 @@
else
boot_device = 'd';
}
@@ -359,7 +359,7 @@ Index: ioemu/vl.c
setvbuf(stdout, NULL, _IOLBF, 0);
@@ -6441,6 +6472,7 @@
@@ -6456,6 +6487,7 @@
#endif /* !CONFIG_DM */
@@ -367,7 +367,7 @@ Index: ioemu/vl.c
/* we always create the cdrom drive, even if no disk is there */
bdrv_init();
if (cdrom_index >= 0) {
@@ -6467,6 +6499,7 @@
@@ -6482,6 +6514,7 @@
}
}
}
@@ -375,7 +375,7 @@ Index: ioemu/vl.c
/* we always create at least one floppy disk */
fd_table[0] = bdrv_new("fda");
@@ -6545,6 +6578,8 @@
@@ -6560,6 +6593,8 @@
}
}
@@ -386,8 +386,8 @@ Index: ioemu/vl.c
kernel_filename, kernel_cmdline, initrd_filename,
Index: ioemu/monitor.c
===================================================================
--- ioemu.orig/monitor.c 2006-09-21 19:33:30.000000000 +0100
+++ ioemu/monitor.c 2006-09-21 19:33:31.000000000 +0100
--- ioemu.orig/monitor.c 2006-10-24 14:31:36.000000000 +0100
+++ ioemu/monitor.c 2006-10-24 14:33:28.000000000 +0100
@@ -24,6 +24,7 @@
#include "vl.h"
#include "disas.h"
@@ -416,8 +416,8 @@ Index: ioemu/monitor.c
int i;
Index: ioemu/block.c
===================================================================
--- ioemu.orig/block.c 2006-09-21 19:33:25.000000000 +0100
+++ ioemu/block.c 2006-09-21 19:33:31.000000000 +0100
--- ioemu.orig/block.c 2006-10-24 14:31:36.000000000 +0100
+++ ioemu/block.c 2006-10-24 14:33:28.000000000 +0100
@@ -758,6 +758,7 @@
static void raw_close(BlockDriverState *bs)
{
@@ -428,9 +428,9 @@ Index: ioemu/block.c
Index: ioemu/vl.h
===================================================================
--- ioemu.orig/vl.h 2006-09-21 19:33:31.000000000 +0100
+++ ioemu/vl.h 2006-09-21 19:33:31.000000000 +0100
@@ -1189,6 +1189,8 @@
--- ioemu.orig/vl.h 2006-10-24 14:33:24.000000000 +0100
+++ ioemu/vl.h 2006-10-24 14:33:28.000000000 +0100
@@ -1191,6 +1191,8 @@
void term_print_help(void);
void monitor_readline(const char *prompt, int is_password,
char *buf, int buf_size);
@@ -439,7 +439,7 @@ Index: ioemu/vl.h
/* readline.c */
typedef void ReadLineFunc(void *opaque, const char *str);
@@ -1201,6 +1203,13 @@
@@ -1203,6 +1205,13 @@
void readline_start(const char *prompt, int is_password,
ReadLineFunc *readline_func, void *opaque);
@@ -455,8 +455,8 @@ Index: ioemu/vl.h
extern char domain_name[];
Index: ioemu/hw/ide.c
===================================================================
--- ioemu.orig/hw/ide.c 2006-09-21 19:33:30.000000000 +0100
+++ ioemu/hw/ide.c 2006-09-21 19:33:31.000000000 +0100
--- ioemu.orig/hw/ide.c 2006-10-24 14:31:36.000000000 +0100
+++ ioemu/hw/ide.c 2006-10-24 14:33:28.000000000 +0100
@@ -1158,6 +1158,7 @@
} else {
ide_atapi_cmd_error(s, SENSE_NOT_READY,
+9 -9
View File
@@ -1,7 +1,7 @@
Index: ioemu/xenstore.c
===================================================================
--- ioemu.orig/xenstore.c 2006-09-21 19:33:31.000000000 +0100
+++ ioemu/xenstore.c 2006-09-21 19:33:32.000000000 +0100
--- ioemu.orig/xenstore.c 2006-10-24 14:33:47.000000000 +0100
+++ ioemu/xenstore.c 2006-10-24 14:33:47.000000000 +0100
@@ -185,3 +185,31 @@
free(image);
free(vec);
@@ -36,10 +36,10 @@ Index: ioemu/xenstore.c
+}
Index: ioemu/vl.c
===================================================================
--- ioemu.orig/vl.c 2006-09-21 19:33:31.000000000 +0100
+++ ioemu/vl.c 2006-09-21 19:33:32.000000000 +0100
@@ -6535,6 +6535,7 @@
vnc_display = vnc_display_init(ds, vnc_display, vncunused);
--- ioemu.orig/vl.c 2006-10-24 14:33:47.000000000 +0100
+++ ioemu/vl.c 2006-10-24 14:33:47.000000000 +0100
@@ -6550,6 +6550,7 @@
vnc_display = vnc_display_init(ds, vnc_display, vncunused, &vnclisten_addr);
if (vncviewer)
vnc_start_viewer(vnc_display);
+ xenstore_write_vncport(vnc_display);
@@ -48,9 +48,9 @@ Index: ioemu/vl.c
sdl_display_init(ds, full_screen);
Index: ioemu/vl.h
===================================================================
--- ioemu.orig/vl.h 2006-09-21 19:33:31.000000000 +0100
+++ ioemu/vl.h 2006-09-21 19:33:32.000000000 +0100
@@ -1208,6 +1208,7 @@
--- ioemu.orig/vl.h 2006-10-24 14:33:47.000000000 +0100
+++ ioemu/vl.h 2006-10-24 14:33:47.000000000 +0100
@@ -1210,6 +1210,7 @@
int xenstore_fd(void);
void xenstore_process_event(void *opaque);
void xenstore_check_new_media_present(int timeout);
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.