diff -Nru virtualbox-6.1.32-dfsg/Config.kmk virtualbox-6.1.34-dfsg/Config.kmk --- virtualbox-6.1.32-dfsg/Config.kmk 2022-01-13 18:47:32.000000000 +0000 +++ virtualbox-6.1.34-dfsg/Config.kmk 2022-03-22 23:34:38.000000000 +0000 @@ -3970,13 +3970,14 @@ # @param 3 Optional icon file. # @param 4 The template base name. # @param 5 Additional RC options. +# @param 6 Original filename to use. # # @remarks ASSUMES RCFLAGS isn't a simple variable (var := value). define VBOX_SET_VER_INFO_INTERNAL ifeq ($(KBUILD_TARGET),win) $(1)_SOURCES.win += $(PATH_ROOT)/src/VBox/Artwork/win/$(4) $(1)_RCFLAGS += /nologo /dIN_INTERNAL_NAME="\"$(1)\"" /dIN_FILE_DESCRIPTION="\"$(2)\"" \ - /dIN_ORIGINAL_NAME="\"$$(notdir $$($(1)_1_INST_TARGET))\"" \ + /dIN_ORIGINAL_NAME="\"$(if $(6),$6,$$(notdir $$($(1)_1_INST_TARGET)))\"" \ $(if $(3), /dIN_ICON_FILE="\"$(subst \\,/,$(strip $(3)))\"") $(5) $$$$($(1)_0_OUTDIR)/src/VBox/Artwork/win/$(basename $(4)).res: \ $(PATH_ROOT)/include/VBox/version.h $$$$(VBOX_VERSION_HEADER) @@ -4002,7 +4003,8 @@ # @param 1 The target name. # @param 2 The description # @param 3 Optional icon file. -VBOX_SET_VER_INFO_EXE = $(evalcall2 VBOX_SET_VER_INFO_INTERNAL,$1,$2,$3,TemplateExe.rc,) +# @param 4 Optional OriginalFilename value to use. Defaults to target name w/o dir. +VBOX_SET_VER_INFO_EXE = $(evalcall2 VBOX_SET_VER_INFO_INTERNAL,$1,$2,$3,TemplateExe.rc,,$4) ## # Macro for setting driver version information and description. @@ -7699,7 +7701,7 @@ SVN ?= svn$(HOSTSUFF_EXE) VBOX_SVN_REV_KMK = $(PATH_OUT)/revision.kmk ifndef VBOX_SVN_REV - VBOX_SVN_REV_CONFIG_FALLBACK := $(patsubst %:,, $Rev: 147612 $ ) + VBOX_SVN_REV_CONFIG_FALLBACK := $(patsubst %:,, $Rev: 149328 $ ) VBOX_SVN_REV_FALLBACK := $(if-expr $(VBOX_SVN_REV_CONFIG_FALLBACK) > $(VBOX_SVN_REV_VERSION_FALLBACK),$(VBOX_SVN_REV_CONFIG_FALLBACK),$(VBOX_SVN_REV_VERSION_FALLBACK)) VBOX_SVN_DEP := $(firstword $(wildcard $(PATH_ROOT)/.svn/wc.db $(abspath $(PATH_ROOT)/../.svn/wc.db) $(abspath $(PATH_ROOT)/../../.svn/wc.db) $(PATH_ROOT)/.svn/entries)) ifeq ($(which $(SVN)),) diff -Nru virtualbox-6.1.32-dfsg/debian/changelog virtualbox-6.1.34-dfsg/debian/changelog --- virtualbox-6.1.32-dfsg/debian/changelog 2022-02-08 12:20:46.000000000 +0000 +++ virtualbox-6.1.34-dfsg/debian/changelog 2022-05-13 07:34:48.000000000 +0000 @@ -1,11 +1,36 @@ -virtualbox (6.1.32-dfsg-1~ubuntu1.20.04.1) focal; urgency=medium +virtualbox (6.1.34-dfsg-3~ubuntu1.20.04.1) focal; urgency=medium - * SRU the latest package for Ubuntu focal (LP: #1960171) + * SRU the latest package for Ubuntu focal (LP: #1973275) * Revert drop of *guest-dkms packages for focal only. Such packages are still needed because kernel < 5.5. doesn't provide - vboxsf (LP: #1944744) + vboxsf - -- Gianfranco Costamagna Tue, 08 Feb 2022 13:20:46 +0100 + -- Gianfranco Costamagna Fri, 13 May 2022 09:34:48 +0200 + +virtualbox (6.1.34-dfsg-3) unstable; urgency=medium + + * Add patch from archlinux to fix a build failure with kernel 5.18 + (Closes: #1012122) + + -- Gianfranco Costamagna Tue, 07 Jun 2022 14:12:22 +0200 + +virtualbox (6.1.34-dfsg-2) unstable; urgency=medium + + * Add ffreestanding.patch proposed from upstream to fix a empty memset code + generation with newer gccs + + -- Gianfranco Costamagna Thu, 21 Apr 2022 11:42:03 +0200 + +virtualbox (6.1.34-dfsg-1) unstable; urgency=medium + + * Fix udev rule: + - If there is a NAME, the line "Only network interfaces can be renamed, + ignoring NAME" is written in the log + + [ Gianfranco Costamagna ] + * New upstream version 6.1.34-dfsg + + -- Gianfranco Costamagna Wed, 20 Apr 2022 11:27:31 +0200 virtualbox (6.1.32-dfsg-1) unstable; urgency=medium diff -Nru virtualbox-6.1.32-dfsg/debian/patches/020-linux518.patch virtualbox-6.1.34-dfsg/debian/patches/020-linux518.patch --- virtualbox-6.1.32-dfsg/debian/patches/020-linux518.patch 1970-01-01 00:00:00.000000000 +0000 +++ virtualbox-6.1.34-dfsg/debian/patches/020-linux518.patch 2022-05-13 07:34:48.000000000 +0000 @@ -0,0 +1,17 @@ +Index: trunk/src/VBox/HostDrivers/VBoxNetFlt/linux/VBoxNetFlt-linux.c +=================================================================== +--- trunk/src/VBox/HostDrivers/VBoxNetFlt/linux/VBoxNetFlt-linux.c ++++ trunk/src/VBox/HostDrivers/VBoxNetFlt/linux/VBoxNetFlt-linux.c +@@ -2312,5 +2312,11 @@ + Log6(("vboxNetFltPortOsXmit: pBuf->cb dump:\n%.*Rhxd\n", sizeof(pBuf->cb), pBuf->cb)); + Log6(("vboxNetFltPortOsXmit: netif_rx_ni(%p)\n", pBuf)); ++#if RTLNX_VER_MIN(5,18,0) ++ local_bh_disable(); ++ err = netif_rx(pBuf); ++ local_bh_enable(); ++#else + err = netif_rx_ni(pBuf); ++#endif + if (err) + rc = RTErrConvertFromErrno(err); + diff -Nru virtualbox-6.1.32-dfsg/debian/patches/ffreestanding.patch virtualbox-6.1.34-dfsg/debian/patches/ffreestanding.patch --- virtualbox-6.1.32-dfsg/debian/patches/ffreestanding.patch 1970-01-01 00:00:00.000000000 +0000 +++ virtualbox-6.1.34-dfsg/debian/patches/ffreestanding.patch 2022-04-21 09:41:57.000000000 +0000 @@ -0,0 +1,20 @@ +diff --git a/Config.kmk b/Config.kmk +index 3df197404..4c6bd76bb 100644 +--- a/Config.kmk ++++ b/Config.kmk +@@ -4503,11 +4504,14 @@ ifeq ($(VBOX_LDR_FMT),elf) + TEMPLATE_VBoxR0_TOOL = $(VBOX_GCC_TOOL) + TEMPLATE_VBoxR0_CFLAGS = -fno-pie -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_C) \ + $(VBOX_GCC_Wno-variadic-macros) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fno-strict-aliasing -fno-exceptions \ +- $(VBOX_GCC_fno-stack-protector) -fno-common $(VBOX_GCC_fvisibility-hidden) -std=gnu99 $(VBOX_GCC_IPRT_FMT_CHECK) ++ $(VBOX_GCC_fno-stack-protector) -fno-common -ffreestanding $(VBOX_GCC_fvisibility-hidden) -std=gnu99 $(VBOX_GCC_IPRT_FMT_CHECK) + TEMPLATE_VBoxR0_CXXFLAGS = -fno-pie -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_CXX) \ + $(VBOX_GCC_Wno-variadic-macros) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fno-strict-aliasing -fno-exceptions \ + $(VBOX_GCC_fno-stack-protector) -fno-common $(VBOX_GCC_fvisibility-inlines-hidden) $(VBOX_GCC_fvisibility-hidden) \ + -fno-rtti $(VBOX_GCC_IPRT_FMT_CHECK) ++ if $(VBOX_GCC_VERSION_CC) >= 40500 # 4.1.2 complains, 4.5.2 is okay, didn't check which version inbetween made it okay with g++. ++TEMPLATE_VBoxR0_CXXFLAGS += -ffreestanding ++ endif + TEMPLATE_VBoxR0_CFLAGS.amd64 = -m64 -mno-red-zone -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -fasynchronous-unwind-tables -ffreestanding + TEMPLATE_VBoxR0_CXXFLAGS.amd64 = -m64 -mno-red-zone -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -fasynchronous-unwind-tables + TEMPLATE_VBoxR0_CXXFLAGS.freebsd = -ffreestanding diff -Nru virtualbox-6.1.32-dfsg/debian/patches/series virtualbox-6.1.34-dfsg/debian/patches/series --- virtualbox-6.1.32-dfsg/debian/patches/series 2022-01-17 10:38:04.000000000 +0000 +++ virtualbox-6.1.34-dfsg/debian/patches/series 2022-05-13 07:34:48.000000000 +0000 @@ -15,3 +15,5 @@ 36-fix-vnc-version-string.patch 37-do-not-run-if-not-in-vm.patch python3.10.patch +ffreestanding.patch +020-linux518.patch diff -Nru virtualbox-6.1.32-dfsg/debian/virtualbox-dkms.udev virtualbox-6.1.34-dfsg/debian/virtualbox-dkms.udev --- virtualbox-6.1.32-dfsg/debian/virtualbox-dkms.udev 2021-05-11 09:57:20.000000000 +0000 +++ virtualbox-6.1.34-dfsg/debian/virtualbox-dkms.udev 2022-03-06 16:05:24.000000000 +0000 @@ -1,3 +1,3 @@ -KERNEL=="vboxdrv", NAME="vboxdrv", OWNER="root", GROUP="root", MODE="0600" -KERNEL=="vboxdrvu", NAME="vboxdrvu", OWNER="root", GROUP="root", MODE="0666" -KERNEL=="vboxnetctl", NAME="vboxnetctl", OWNER="root", GROUP="root", MODE="0600" +KERNEL=="vboxdrv", OWNER="root", GROUP="root", MODE="0600" +KERNEL=="vboxdrvu", OWNER="root", GROUP="root", MODE="0666" +KERNEL=="vboxnetctl", OWNER="root", GROUP="root", MODE="0600" diff -Nru virtualbox-6.1.32-dfsg/doc/manual/Config.kmk virtualbox-6.1.34-dfsg/doc/manual/Config.kmk --- virtualbox-6.1.32-dfsg/doc/manual/Config.kmk 2022-01-13 18:47:33.000000000 +0000 +++ virtualbox-6.1.34-dfsg/doc/manual/Config.kmk 2022-03-22 23:34:39.000000000 +0000 @@ -295,7 +295,7 @@ '' \ '' \ '' \ - '' \ + '' \ '' \ '' \ '' \ diff -Nru virtualbox-6.1.32-dfsg/doc/manual/en_US/man_VBoxManage-import.xml virtualbox-6.1.34-dfsg/doc/manual/en_US/man_VBoxManage-import.xml --- virtualbox-6.1.32-dfsg/doc/manual/en_US/man_VBoxManage-import.xml 2022-01-13 18:47:34.000000000 +0000 +++ virtualbox-6.1.34-dfsg/doc/manual/en_US/man_VBoxManage-import.xml 2022-03-22 23:34:40.000000000 +0000 @@ -165,21 +165,23 @@ (change with "--vsys 0 --cpus <n>") 7: Guest memory: 1024 MB (change with "--vsys 0 --memory <MB>") 8: Sound card (appliance expects "ensoniq1371", can change on import) - (disable with "--vsys 0 --unit 5 --ignore") + (disable with "--vsys 0 --unit 8 --ignore") 9: USB controller - (disable with "--vsys 0 --unit 6 --ignore") + (disable with "--vsys 0 --unit 9 --ignore") 10: Network adapter: orig bridged, config 2, extra type=bridged 11: Floppy - (disable with "--vsys 0 --unit 8 --ignore") + (disable with "--vsys 0 --unit 11 --ignore") 12: SCSI controller, type BusLogic - (change with "--vsys 0 --unit 9 --scsitype {BusLogic|LsiLogic}"; - disable with "--vsys 0 --unit 9 --ignore") + (change with "--vsys 0 --unit 12 --scsitype {BusLogic|LsiLogic}"; + disable with "--vsys 0 --unit 12 --ignore") 13: IDE controller, type PIIX4 - (disable with "--vsys 0 --unit 10 --ignore") + (disable with "--vsys 0 --unit 13 --ignore") 14: Hard disk image: source image=Windows10.vmdk, - target path=/home/user1/disks/Windows10.vmdk, controller=9;channel=0 - (change controller with "--vsys 0 --unit 11 --controller <id>"; - disable with "--vsys 0 --unit 11 --ignore") + target path=/home/user1/disks/Windows10.vmdk, controller=12;channel=0 + (change target path with "--vsys 0 --unit 14 --disk <path>"; + change controller with "--vsys 0 --unit 14 --controller <index>"; + change controller port with "--vsys 0 --unit 14 --port <n>"; + disable with "--vsys 0 --unit 14 --ignore") The dry run output lists and numbers the individual configuration items that are described in the Windows10.ovf @@ -201,8 +203,11 @@ Item 14 indicates the hard disk image and the - option specifies the device on which - the image resides. The default value is specified in the OVF file. + option specifies the target path where the + image will be stored, the option specifies + which controller the disk will be attached to, and the + option specifies which port on the controller the + disk will be attached to. The default values are specified in the OVF file. You can combine several items for the same virtual system by diff -Nru virtualbox-6.1.32-dfsg/doc/manual/en_US/user_AdvancedTopics.xml virtualbox-6.1.34-dfsg/doc/manual/en_US/user_AdvancedTopics.xml --- virtualbox-6.1.32-dfsg/doc/manual/en_US/user_AdvancedTopics.xml 2022-01-13 18:47:34.000000000 +0000 +++ virtualbox-6.1.34-dfsg/doc/manual/en_US/user_AdvancedTopics.xml 2022-03-22 23:34:40.000000000 +0000 @@ -7224,7 +7224,7 @@ devices: -VBoxManage usbdevsource add unique-name --backend USB-IP --address device-server[:port] +VBoxManage usbdevsource add unique-name --backend USBIP --address device-server[:port] USB devices exported on the device server are then accessible diff -Nru virtualbox-6.1.32-dfsg/doc/manual/en_US/user_VBoxManage.xml virtualbox-6.1.34-dfsg/doc/manual/en_US/user_VBoxManage.xml --- virtualbox-6.1.32-dfsg/doc/manual/en_US/user_VBoxManage.xml 2022-01-13 18:47:34.000000000 +0000 +++ virtualbox-6.1.34-dfsg/doc/manual/en_US/user_VBoxManage.xml 2022-03-22 23:34:40.000000000 +0000 @@ -2753,21 +2753,23 @@ (change with "--vsys 0 --cpus <n>") 7: Guest memory: 956 MB (change with "--vsys 0 --memory <MB>") 8: Sound card (appliance expects "ensoniq1371", can change on import) - (disable with "--vsys 0 --unit 5 --ignore") + (disable with "--vsys 0 --unit 8 --ignore") 9: USB controller - (disable with "--vsys 0 --unit 6 --ignore") + (disable with "--vsys 0 --unit 9 --ignore") 10: Network adapter: orig bridged, config 2, extra type=bridged 11: Floppy - (disable with "--vsys 0 --unit 8 --ignore") + (disable with "--vsys 0 --unit 11 --ignore") 12: SCSI controller, type BusLogic - (change with "--vsys 0 --unit 9 --scsitype {BusLogic|LsiLogic}"; - disable with "--vsys 0 --unit 9 --ignore") + (change with "--vsys 0 --unit 12 --scsitype {BusLogic|LsiLogic}"; + disable with "--vsys 0 --unit 12 --ignore") 13: IDE controller, type PIIX4 - (disable with "--vsys 0 --unit 10 --ignore") + (disable with "--vsys 0 --unit 13 --ignore") 14: Hard disk image: source image=WindowsXp.vmdk, - target path=/home/user/disks/WindowsXp.vmdk, controller=9;channel=0 - (change controller with "--vsys 0 --unit 11 --controller <id>"; - disable with "--vsys 0 --unit 11 --ignore") + target path=/home/user/disks/WindowsXp.vmdk, controller=12;channel=0 + (change target path with "--vsys 0 --unit 14 --disk <path>"; + change controller with "--vsys 0 --unit 14 --controller <index>"; + change controller port with "--vsys 0 --unit 14 --port <n>"; + disable with "--vsys 0 --unit 14 --ignore") The individual configuration items are numbered, and depending @@ -2798,7 +2800,7 @@ controller, use the following command: -VBoxManage import WindowsXp.ovf +VBoxManage import WindowsXp.ovf \ --vsys 0 --unit 8 --ignore --unit 9 --ignore --unit 14 --controller 13 @@ -2945,8 +2947,8 @@ The import options , , , - , are not - valid for cloud import. + , , + are not valid for cloud import. @@ -2954,8 +2956,8 @@ an instance from &oci;: -# VBoxManage import OCI:// --cloud --vmname import_from_oci --memory 4000 - --cpus 3 --ostype FreeBSD_64 --cloudprofile "standard user" +# VBoxManage import OCI:// --cloud --vmname import_from_oci --memory 4000 \ + --cpus 3 --ostype FreeBSD_64 --cloudprofile "standard user" \ --cloudinstanceid ocid1.instance.oc1.iad.abuwc... --cloudbucket myBucket diff -Nru virtualbox-6.1.32-dfsg/doc/manual/user_ChangeLogImpl.xml virtualbox-6.1.34-dfsg/doc/manual/user_ChangeLogImpl.xml --- virtualbox-6.1.32-dfsg/doc/manual/user_ChangeLogImpl.xml 2022-01-13 18:47:34.000000000 +0000 +++ virtualbox-6.1.34-dfsg/doc/manual/user_ChangeLogImpl.xml 2022-03-22 23:34:41.000000000 +0000 @@ -47,6 +47,143 @@ So, we use chapter and xpointer="xpointer(/chapter/)" with xi:include. --> + Version 6.1.34 (2022-03-22) + + This is a maintenance release. The following items were fixed + and/or added: + + + + + VMM: Fix instruction emulation for "cmpxchg16b" + + + + GUI: Improved GUI behavior on macOS Big Sur and later when kernel + extensions are not loaded + + + + EHCI: Addressed an issue with handling short packets + (bug #20726) + + + + Storage: Fixed a potential hang during disk I/O when the host I/O + cache is disabled (bug #20875) + + + + NVMe: Fixed loading saved state when nothing is attached to it + (bug #20791) + + + + DevPcBios: Addressed an issue which resulted in rejecting the + detected LCHS geometry when the head count was above 16 + + + + virtio-scsi: Improvements + + + + E1000: Improve descriptor handling + + + + VBoxManage: Fixed handling of command line arguments with + incomplete quotes (bug #20740) + + + + VBoxManage: Improved 'natnetwork list' output + + + + VBoxManage: NATNetwork: Provide an option (--ipv6-prefix) to set + IPv6 prefix + + + + VBoxManage: NATNetwork: Provide an option (--ipv6-default) to + advertise default IPv6 route (bug #20714) + + + + VBoxManage: Fix documentation of "usbdevsource add" + (bug #20849) + + + + Networking: General improvements in IPv4 and IPv6 area + (bug #20714) + + + + OVF Import: Allow users to specify a different storage + controller and/or controller port for hard disks when importing + a VM + + + + Unattended install: Improvements + + + + Shared Clipboard: Improved HTML clipboard handling for Windows + host + + + + MacOS host: Fix handling of non-ASCII characters in the guest + control functionality (bug #20792) + + + + Linux host and guest: Introduced initial support for kernel 5.17 + + + + Solaris package: Fixes for API access from Python + + + + Solaris IPS package: Suppress dependency on libpython2.7.so.* + + + + Linux host and guest: Fixes for Linux kernel 5.14 + + + + Linux Guest Additions: Fixed guest screen resize for older guests + which are running libXrandr older than version 1.4 + + + + Linux Guest Additions: Introduced initial support for RHEL 8.6 + kernels (bug #20877) + + + + Windows guest: Make driver install smarter + + + + Solaris guest: Addressed an issue which prevented VBox GAs + 6.1.30 or 6.1.32 from being removed in Solaris 10 guests + (bug #20780) + + + + EFI: Fixed booting from FreeBSD ISO images (bug #19910) + + + + + + Version 6.1.32 (2022-01-18) This is a maintenance release. The following items were fixed diff -Nru virtualbox-6.1.32-dfsg/include/iprt/file.h virtualbox-6.1.34-dfsg/include/iprt/file.h --- virtualbox-6.1.32-dfsg/include/iprt/file.h 2022-01-13 18:47:40.000000000 +0000 +++ virtualbox-6.1.34-dfsg/include/iprt/file.h 2022-03-22 23:34:47.000000000 +0000 @@ -950,6 +950,32 @@ /** + * Creates a new file with a unique name using the given template, returning a + * handle to it. + * + * One or more trailing X'es in the template will be replaced by random alpha + * numeric characters until a RTFileOpen with RTFILE_O_CREATE succeeds or we + * run out of patience. + * For instance: + * "/tmp/myprog-XXXXXX" + * + * As an alternative to trailing X'es, it is possible to put 3 or more X'es + * somewhere inside the file name. In the following string only the last + * bunch of X'es will be modified: + * "/tmp/myprog-XXX-XXX.tmp" + * + * @returns IPRT status code. + * @param phFile Where to return the file handle on success. Set to + * NIL on failure. + * @param pszTemplate The file name template on input. The actual file + * name on success. Empty string on failure. + * @param fOpen The RTFILE_O_XXX flags to open the file with. + * RTFILE_O_CREATE is mandatory. + * @see RTFileCreateTemp + */ +RTDECL(int) RTFileCreateUnique(PRTFILE phFile, char *pszTemplate, uint64_t fOpen); + +/** * Creates a new file with a unique name using the given template. * * One or more trailing X'es in the template will be replaced by random alpha @@ -968,6 +994,7 @@ * name on success. Empty string on failure. * @param fMode The mode to create the file with. Use 0600 unless * you have reason not to. + * @see RTFileCreateUnique */ RTDECL(int) RTFileCreateTemp(char *pszTemplate, RTFMODE fMode); @@ -990,6 +1017,7 @@ * @returns VERR_INSECURE if the file could not be created securely. * @param pszTemplate The file name template on input. The actual * file name on success. Empty string on failure. + * @see RTFileCreateUnique */ RTDECL(int) RTFileCreateTempSecure(char *pszTemplate); diff -Nru virtualbox-6.1.32-dfsg/include/iprt/mangling.h virtualbox-6.1.34-dfsg/include/iprt/mangling.h --- virtualbox-6.1.32-dfsg/include/iprt/mangling.h 2022-01-13 18:47:41.000000000 +0000 +++ virtualbox-6.1.34-dfsg/include/iprt/mangling.h 2022-03-22 23:34:49.000000000 +0000 @@ -926,6 +926,7 @@ # define RTFileCopyPartCleanup RT_MANGLER(RTFileCopyPartCleanup) # define RTFileCopyPartEx RT_MANGLER(RTFileCopyPartEx) # define RTFileCopyPartPrep RT_MANGLER(RTFileCopyPartPrep) +# define RTFileCreateUnique RT_MANGLER(RTFileCreateUnique) # define RTFileCreateTemp RT_MANGLER(RTFileCreateTemp) # define RTFileCreateTempSecure RT_MANGLER(RTFileCreateTempSecure) # define RTFileDelete RT_MANGLER(RTFileDelete) @@ -1611,22 +1612,23 @@ # define RTNetIPv6PseudoChecksum RT_MANGLER(RTNetIPv6PseudoChecksum) # define RTNetIPv6PseudoChecksumBits RT_MANGLER(RTNetIPv6PseudoChecksumBits) # define RTNetIPv6PseudoChecksumEx RT_MANGLER(RTNetIPv6PseudoChecksumEx) +# define RTNetIsIPv4AddrStr RT_MANGLER(RTNetIsIPv4AddrStr) +# define RTNetIsIPv6AddrStr RT_MANGLER(RTNetIsIPv6AddrStr) # define RTNetMaskToPrefixIPv4 RT_MANGLER(RTNetMaskToPrefixIPv4) +# define RTNetMaskToPrefixIPv6 RT_MANGLER(RTNetMaskToPrefixIPv6) # define RTNetPrefixToMaskIPv4 RT_MANGLER(RTNetPrefixToMaskIPv4) -# define RTNetTCPChecksum RT_MANGLER(RTNetTCPChecksum) -# define RTNetUDPChecksum RT_MANGLER(RTNetUDPChecksum) -# define RTNetStrToMacAddr RT_MANGLER(RTNetStrToMacAddr) -# define RTNetIsIPv4AddrStr RT_MANGLER(RTNetIsIPv4AddrStr) +# define RTNetPrefixToMaskIPv6 RT_MANGLER(RTNetPrefixToMaskIPv6) # define RTNetStrIsIPv4AddrAny RT_MANGLER(RTNetStrIsIPv4AddrAny) -# define RTNetStrToIPv4AddrEx RT_MANGLER(RTNetStrToIPv4AddrEx) +# define RTNetStrIsIPv6AddrAny RT_MANGLER(RTNetStrIsIPv6AddrAny) # define RTNetStrToIPv4Addr RT_MANGLER(RTNetStrToIPv4Addr) +# define RTNetStrToIPv4AddrEx RT_MANGLER(RTNetStrToIPv4AddrEx) # define RTNetStrToIPv4Cidr RT_MANGLER(RTNetStrToIPv4Cidr) -# define RTNetIsIPv6AddrStr RT_MANGLER(RTNetIsIPv6AddrStr) -# define RTNetStrIsIPv6AddrAny RT_MANGLER(RTNetStrIsIPv6AddrAny) -# define RTNetStrToIPv6AddrEx RT_MANGLER(RTNetStrToIPv6AddrEx) # define RTNetStrToIPv6Addr RT_MANGLER(RTNetStrToIPv6Addr) -# define RTNetMaskToPrefixIPv6 RT_MANGLER(RTNetMaskToPrefixIPv6) -# define RTNetPrefixToMaskIPv6 RT_MANGLER(RTNetPrefixToMaskIPv6) +# define RTNetStrToIPv6AddrEx RT_MANGLER(RTNetStrToIPv6AddrEx) +# define RTNetStrToIPv6Cidr RT_MANGLER(RTNetStrToIPv6Cidr) +# define RTNetStrToMacAddr RT_MANGLER(RTNetStrToMacAddr) +# define RTNetTCPChecksum RT_MANGLER(RTNetTCPChecksum) +# define RTNetUDPChecksum RT_MANGLER(RTNetUDPChecksum) # define RTOnceSlow RT_MANGLER(RTOnceSlow) # define RTOnceReset RT_MANGLER(RTOnceReset) # define RTPathAbs RT_MANGLER(RTPathAbs) diff -Nru virtualbox-6.1.32-dfsg/include/iprt/net.h virtualbox-6.1.34-dfsg/include/iprt/net.h --- virtualbox-6.1.32-dfsg/include/iprt/net.h 2022-01-13 18:47:41.000000000 +0000 +++ virtualbox-6.1.34-dfsg/include/iprt/net.h 2022-03-22 23:34:49.000000000 +0000 @@ -221,6 +221,25 @@ */ RTDECL(int) RTNetPrefixToMaskIPv6(int iPrefix, PRTNETADDRIPV6 pMask); +/** + * Parses IPv6 prefix notation into RTNETADDRIPV6 representation and + * prefix length. Missing prefix specification is treated as exact + * address specification (prefix length 128). Leading and trailing + * whitespace is ignored. + * + * "CIDR" in the name is a misnomer as IPv6 doesn't have network + * classes, but is parallel to the IPv4 name (and naming things is + * hard). + * + * @returns VINF_SUCCESS on success, VERR_INVALID_PARAMETER on + * failure. + * + * @param pcszAddr The value to convert. + * @param pAddr Where to store the address. + * @param piPrefix Where to store the prefix length; + */ +RTDECL(int) RTNetStrToIPv6Cidr(const char *pcszAddr, PRTNETADDRIPV6 pAddr, int *piPrefix); + /** * IPX address. diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Additions/common/Makefile.kmk virtualbox-6.1.34-dfsg/src/VBox/Additions/common/Makefile.kmk --- virtualbox-6.1.32-dfsg/src/VBox/Additions/common/Makefile.kmk 2022-01-13 18:49:31.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Additions/common/Makefile.kmk 2022-03-22 23:37:45.000000000 +0000 @@ -19,13 +19,11 @@ include $(KBUILD_PATH)/subheader.kmk # Include sub-makefile. -ifndef VBOX_ONLY_VALIDATIONKIT - include $(PATH_SUB_CURRENT)/VBoxControl/Makefile.kmk - include $(PATH_SUB_CURRENT)/VBoxGuest/Makefile.kmk - include $(PATH_SUB_CURRENT)/VBoxService/Makefile.kmk - ifdef VBOX_WITH_PAM - include $(PATH_SUB_CURRENT)/pam/Makefile.kmk - endif -endif # !VBOX_ONLY_VALIDATIONKIT +include $(PATH_SUB_CURRENT)/VBoxControl/Makefile.kmk +include $(PATH_SUB_CURRENT)/VBoxGuest/Makefile.kmk +include $(PATH_SUB_CURRENT)/VBoxService/Makefile.kmk +ifdef VBOX_WITH_PAM + include $(PATH_SUB_CURRENT)/pam/Makefile.kmk +endif include $(FILE_KBUILD_SUB_FOOTER) diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR0LibPhysHeap.cpp virtualbox-6.1.34-dfsg/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR0LibPhysHeap.cpp --- virtualbox-6.1.32-dfsg/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR0LibPhysHeap.cpp 2022-01-13 18:49:31.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR0LibPhysHeap.cpp 2022-03-22 23:37:47.000000000 +0000 @@ -295,58 +295,55 @@ pBlock->pPrev = NULL; } -static VBGLPHYSHEAPBLOCK *vbglPhysHeapChunkAlloc (uint32_t cbSize) +static VBGLPHYSHEAPBLOCK *vbglPhysHeapChunkAlloc(uint32_t cbMinBlock) { - RTCCPHYS physAddr; + RTCCPHYS PhysAddr = NIL_RTHCPHYS; VBGLPHYSHEAPCHUNK *pChunk; - VBGLPHYSHEAPBLOCK *pBlock; - VBGL_PH_dprintf(("Allocating new chunk of size %d\n", cbSize)); + uint32_t cbChunk; + VBGL_PH_dprintf(("Allocating new chunk for %#x byte allocation\n", cbMinBlock)); + AssertReturn(cbMinBlock < _128M, NULL); /* paranoia */ + + /* Compute the size of the new chunk, rounding up to next chunk size, + which must be power of 2. */ + Assert(RT_IS_POWER_OF_TWO(VBGL_PH_CHUNKSIZE)); + cbChunk = cbMinBlock + sizeof(VBGLPHYSHEAPCHUNK) + sizeof(VBGLPHYSHEAPBLOCK); + cbChunk = RT_ALIGN_32(cbChunk, VBGL_PH_CHUNKSIZE); + + /* This function allocates physical contiguous memory below 4 GB. This 4GB + limitation stems from using a 32-bit OUT instruction to pass a block + physical address to the host. */ + pChunk = (VBGLPHYSHEAPCHUNK *)RTMemContAlloc(&PhysAddr, cbChunk); + if (pChunk) + { + VBGLPHYSHEAPCHUNK *pOldHeadChunk; + VBGLPHYSHEAPBLOCK *pBlock; + AssertRelease(PhysAddr < _4G && PhysAddr + cbChunk <= _4G); + + /* Init the new chunk. */ + pChunk->u32Signature = VBGL_PH_CHUNKSIGNATURE; + pChunk->cbSize = cbChunk; + pChunk->physAddr = (uint32_t)PhysAddr; + pChunk->cAllocatedBlocks = 0; + pChunk->pNext = NULL; + pChunk->pPrev = NULL; + + /* Initialize the free block, which now occupies entire chunk. */ + pBlock = (VBGLPHYSHEAPBLOCK *)(pChunk + 1); + vbglPhysHeapInitBlock(pBlock, pChunk, cbChunk - sizeof(VBGLPHYSHEAPCHUNK) - sizeof(VBGLPHYSHEAPBLOCK)); + vbglPhysHeapInsertBlock(NULL, pBlock); + + /* Add the chunk to the list. */ + pOldHeadChunk = g_vbgldata.pChunkHead; + pChunk->pNext = pOldHeadChunk; + if (pOldHeadChunk) + pOldHeadChunk->pPrev = pChunk; + g_vbgldata.pChunkHead = pChunk; - /* Compute chunk size to allocate */ - if (cbSize < VBGL_PH_CHUNKSIZE) - { - /* Includes case of block size 0 during initialization */ - cbSize = VBGL_PH_CHUNKSIZE; - } - else - { - /* Round up to next chunk size, which must be power of 2 */ - cbSize = (cbSize + (VBGL_PH_CHUNKSIZE - 1)) & ~(VBGL_PH_CHUNKSIZE - 1); - } - - physAddr = 0; - /* This function allocates physical contiguous memory (below 4GB) according to the IPRT docs. - * Address < 4G is required for the port IO. - */ - pChunk = (VBGLPHYSHEAPCHUNK *)RTMemContAlloc (&physAddr, cbSize); - - if (!pChunk) - { - LogRel(("vbglPhysHeapChunkAlloc: failed to alloc %u contiguous bytes.\n", cbSize)); - return NULL; + VBGL_PH_dprintf(("Allocated chunk %p LB %#x, block %p LB %#x\n", pChunk, cbChunk, pBlock, pBlock->cbDataSize)); + return pBlock; } - - AssertRelease(physAddr < _4G && physAddr + cbSize <= _4G); - - pChunk->u32Signature = VBGL_PH_CHUNKSIGNATURE; - pChunk->cbSize = cbSize; - pChunk->physAddr = (uint32_t)physAddr; - pChunk->cAllocatedBlocks = 0; - pChunk->pNext = g_vbgldata.pChunkHead; - pChunk->pPrev = NULL; - - /* Initialize the free block, which now occupies entire chunk. */ - pBlock = (VBGLPHYSHEAPBLOCK *)((char *)pChunk + sizeof (VBGLPHYSHEAPCHUNK)); - - vbglPhysHeapInitBlock (pBlock, pChunk, cbSize - sizeof (VBGLPHYSHEAPCHUNK) - sizeof (VBGLPHYSHEAPBLOCK)); - - vbglPhysHeapInsertBlock (NULL, pBlock); - - g_vbgldata.pChunkHead = pChunk; - - VBGL_PH_dprintf(("Allocated chunk %p, block = %p size=%x\n", pChunk, pBlock, cbSize)); - - return pBlock; + LogRel(("vbglPhysHeapChunkAlloc: failed to alloc %u (%#x) contiguous bytes.\n", cbChunk, cbChunk)); + return NULL; } @@ -404,8 +401,14 @@ DECLR0VBGL(void *) VbglR0PhysHeapAlloc (uint32_t cbSize) { VBGLPHYSHEAPBLOCK *pBlock, *pIter; - int rc = vbglPhysHeapEnter (); + int rc; + + /* + * Align the size to a pointer size to avoid getting misaligned header pointers and whatnot. + */ + cbSize = RT_ALIGN_32(cbSize, sizeof(void *)); + rc = vbglPhysHeapEnter (); if (RT_FAILURE(rc)) return NULL; diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Additions/common/VBoxGuest/VBoxGuest.cpp virtualbox-6.1.34-dfsg/src/VBox/Additions/common/VBoxGuest/VBoxGuest.cpp --- virtualbox-6.1.32-dfsg/src/VBox/Additions/common/VBoxGuest/VBoxGuest.cpp 2022-01-13 18:49:31.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Additions/common/VBoxGuest/VBoxGuest.cpp 2022-03-22 23:37:46.000000000 +0000 @@ -2343,6 +2343,7 @@ case VMMDevReq_RegisterPatchMemory: case VMMDevReq_DeregisterPatchMemory: case VMMDevReq_GetMemBalloonChangeRequest: + case VMMDevReq_ChangeMemBalloon: enmRequired = kLevel_OnlyVBoxGuest; break; @@ -2362,7 +2363,6 @@ case VMMDevReq_ReportGuestStats: case VMMDevReq_ReportGuestUserState: case VMMDevReq_GetStatisticsChangeRequest: - case VMMDevReq_ChangeMemBalloon: enmRequired = kLevel_TrustedUsers; break; diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Additions/linux/drm/vbox_drv.c virtualbox-6.1.34-dfsg/src/VBox/Additions/linux/drm/vbox_drv.c --- virtualbox-6.1.32-dfsg/src/VBox/Additions/linux/drm/vbox_drv.c 2022-01-13 18:49:35.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Additions/linux/drm/vbox_drv.c 2022-03-22 23:37:53.000000000 +0000 @@ -43,13 +43,26 @@ # include #endif -#if RTLNX_VER_MIN(5,14,0) +#if RTLNX_VER_MIN(5,14,0) || RTLNX_RHEL_RANGE(8,6, 8,99) # include #endif #include "version-generated.h" #include "revision-generated.h" +/** Detect whether kernel mode setting is OFF. */ +#if defined(CONFIG_VGA_CONSOLE) +# if RTLNX_VER_MIN(5,17,0) +# define VBOX_VIDEO_NOMODESET() drm_firmware_drivers_only() && vbox_modeset == -1 +# elif RTLNX_VER_MIN(4,7,0) +# define VBOX_VIDEO_NOMODESET() vgacon_text_force() && vbox_modeset == -1 +# else /* < 4.7.0 */ +# define VBOX_VIDEO_NOMODESET() 0 +# endif /* < 4.7.0 */ +#else /* !CONFIG_VGA_CONSOLE */ +# define VBOX_VIDEO_NOMODESET() 0 +#endif /* !CONFIG_VGA_CONSOLE */ + static int vbox_modeset = -1; MODULE_PARM_DESC(modeset, "Disable/Enable modesetting"); @@ -69,7 +82,7 @@ struct drm_device *dev = NULL; int ret = 0; -# if RTLNX_VER_MIN(5,14,0) +# if RTLNX_VER_MIN(5,14,0) || RTLNX_RHEL_RANGE(8,6, 8,99) # if RTLNX_VER_MIN(5,15,0) ret = drm_aperture_remove_conflicting_pci_framebuffers(pdev, &driver); # else @@ -87,7 +100,7 @@ ret = PTR_ERR(dev); goto err_drv_alloc; } -# if RTLNX_VER_MAX(5,14,0) +# if RTLNX_VER_MAX(5,14,0) && !RTLNX_RHEL_RANGE(8,6, 8,99) dev->pdev = pdev; # endif pci_set_drvdata(pdev, dev); @@ -398,15 +411,13 @@ static int __init vbox_init(void) { printk("vboxvideo: loading version " VBOX_VERSION_STRING " r" __stringify(VBOX_SVN_REV) "\n"); -#if defined(CONFIG_VGA_CONSOLE) || RTLNX_VER_MIN(4,7,0) - if (vgacon_text_force() && vbox_modeset == -1) + if (VBOX_VIDEO_NOMODESET()) { printk("vboxvideo: kernel is running with *nomodeset* parameter,\n"); printk("vboxvideo: please consider either to remove it or load driver\n"); printk("vboxvideo: with parameter modeset=1, unloading\n"); return -EINVAL; } -#endif if (vbox_modeset == 0) { diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Additions/linux/drm/vbox_drv.h virtualbox-6.1.34-dfsg/src/VBox/Additions/linux/drm/vbox_drv.h --- virtualbox-6.1.32-dfsg/src/VBox/Additions/linux/drm/vbox_drv.h 2022-01-13 18:49:35.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Additions/linux/drm/vbox_drv.h 2022-03-22 23:37:53.000000000 +0000 @@ -175,7 +175,7 @@ #include #include #include -#if RTLNX_VER_MAX(5,13,0) +#if RTLNX_VER_MAX(5,13,0) && !RTLNX_RHEL_RANGE(8,6, 8,99) # include #endif #if RTLNX_VER_MAX(5,12,0) && !RTLNX_RHEL_MAJ_PREREQ(8,5) @@ -232,7 +232,7 @@ /** Field "pdev" of struct drm_device was removed in 5.14. This macro * transparently handles this change. Input argument is a pointer * to struct drm_device. */ -#if RTLNX_VER_MIN(5,14,0) +#if RTLNX_VER_MIN(5,14,0) || RTLNX_RHEL_RANGE(8,6, 8,99) # define VBOX_DRM_TO_PCI_DEV(_dev) to_pci_dev(_dev->dev) #else # define VBOX_DRM_TO_PCI_DEV(_dev) _dev->pdev @@ -276,7 +276,7 @@ struct drm_global_reference mem_global_ref; struct ttm_bo_global_ref bo_global_ref; #endif -#if RTLNX_VER_MIN(5,13,0) +#if RTLNX_VER_MIN(5,13,0) || RTLNX_RHEL_RANGE(8,6, 8,99) struct ttm_device bdev; #else struct ttm_bo_device bdev; diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Additions/linux/drm/vbox_fb.c virtualbox-6.1.34-dfsg/src/VBox/Additions/linux/drm/vbox_fb.c --- virtualbox-6.1.32-dfsg/src/VBox/Additions/linux/drm/vbox_fb.c 2022-01-13 18:49:35.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Additions/linux/drm/vbox_fb.c 2022-03-22 23:37:53.000000000 +0000 @@ -301,7 +301,7 @@ return ret; } -#if RTLNX_VER_MIN(5,14,0) +#if RTLNX_VER_MIN(5,14,0) || RTLNX_RHEL_RANGE(8,6, 8,99) ret = ttm_bo_kmap(&bo->bo, 0, bo->bo.resource->num_pages, &bo->kmap); #elif RTLNX_VER_MIN(5,12,0) || RTLNX_RHEL_MAJ_PREREQ(8,5) ret = ttm_bo_kmap(&bo->bo, 0, bo->bo.mem.num_pages, &bo->kmap); diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Additions/linux/drm/vbox_main.c virtualbox-6.1.34-dfsg/src/VBox/Additions/linux/drm/vbox_main.c --- virtualbox-6.1.32-dfsg/src/VBox/Additions/linux/drm/vbox_main.c 2022-01-13 18:49:35.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Additions/linux/drm/vbox_main.c 2022-03-22 23:37:54.000000000 +0000 @@ -632,7 +632,7 @@ { struct vbox_bo *vbox_bo = gem_to_vbox_bo(obj); -#if RTLNX_VER_MIN(5,14,0) +#if RTLNX_VER_MIN(5,14,0) || RTLNX_RHEL_RANGE(8,6, 8,99) /* Starting from kernel 5.14, there is a warning appears in dmesg * on attempt to desroy pinned buffer object. Make sure it is unpinned. */ while (vbox_bo->bo.pin_count) @@ -684,7 +684,7 @@ bo = gem_to_vbox_bo(obj); *offset = vbox_bo_mmap_offset(bo); -#if RTLNX_VER_MIN(5,14,0) +#if RTLNX_VER_MIN(5,14,0) || RTLNX_RHEL_RANGE(8,6, 8,99) ret = drm_vma_node_allow(&bo->bo.base.vma_node, file); if (ret) { diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Additions/linux/drm/vbox_mode.c virtualbox-6.1.34-dfsg/src/VBox/Additions/linux/drm/vbox_mode.c --- virtualbox-6.1.32-dfsg/src/VBox/Additions/linux/drm/vbox_mode.c 2022-01-13 18:49:35.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Additions/linux/drm/vbox_mode.c 2022-03-22 23:37:54.000000000 +0000 @@ -860,7 +860,7 @@ vbox->cursor_data_size = data_size; dst = vbox->cursor_data; -#if RTLNX_VER_MIN(5,14,0) +#if RTLNX_VER_MIN(5,14,0) || RTLNX_RHEL_RANGE(8,6, 8,99) ret = ttm_bo_kmap(&bo->bo, 0, bo->bo.resource->num_pages, &uobj_map); #elif RTLNX_VER_MIN(5,12,0) || RTLNX_RHEL_MAJ_PREREQ(8,5) ret = ttm_bo_kmap(&bo->bo, 0, bo->bo.mem.num_pages, &uobj_map); diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Additions/linux/drm/vbox_ttm.c virtualbox-6.1.34-dfsg/src/VBox/Additions/linux/drm/vbox_ttm.c --- virtualbox-6.1.32-dfsg/src/VBox/Additions/linux/drm/vbox_ttm.c 2022-01-13 18:49:35.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Additions/linux/drm/vbox_ttm.c 2022-03-22 23:37:54.000000000 +0000 @@ -41,7 +41,7 @@ # include #endif -#if RTLNX_VER_MIN(5,14,0) +#if RTLNX_VER_MIN(5,14,0) || RTLNX_RHEL_RANGE(8,6, 8,99) # include #endif @@ -52,7 +52,7 @@ #endif -#if RTLNX_VER_MIN(5,13,0) +#if RTLNX_VER_MIN(5,13,0) || RTLNX_RHEL_RANGE(8,6, 8,99) static inline struct vbox_private *vbox_bdev(struct ttm_device *bd) #else static inline struct vbox_private *vbox_bdev(struct ttm_bo_device *bd) @@ -178,7 +178,7 @@ *pl = vboxbo->placement; } -#if RTLNX_VER_MAX(5,14,0) +#if RTLNX_VER_MAX(5,14,0) && !RTLNX_RHEL_RANGE(8,6, 8,99) static int vbox_bo_verify_access(struct ttm_buffer_object *bo, struct file *filp) { @@ -215,7 +215,7 @@ return 0; } #else -# if RTLNX_VER_MAX(5,13,0) +# if RTLNX_VER_MAX(5,13,0) && !RTLNX_RHEL_RANGE(8,6, 8,99) static int vbox_ttm_io_mem_reserve(struct ttm_bo_device *bdev, struct ttm_resource *mem) # else /* > 5.13.0 */ @@ -256,7 +256,7 @@ -#if RTLNX_VER_MIN(5,13,0) +#if RTLNX_VER_MIN(5,13,0) || RTLNX_RHEL_RANGE(8,6, 8,99) static void vbox_ttm_io_mem_free(struct ttm_device *bdev, struct ttm_resource *mem) { @@ -273,7 +273,7 @@ } #endif -#if RTLNX_VER_MIN(5,13,0) +#if RTLNX_VER_MIN(5,13,0) || RTLNX_RHEL_RANGE(8,6, 8,99) static void vbox_ttm_tt_destroy(struct ttm_device *bdev, struct ttm_tt *tt) { ttm_tt_fini(tt); @@ -359,7 +359,7 @@ } #endif -#if RTLNX_VER_MIN(5,13,0) +#if RTLNX_VER_MIN(5,13,0) || RTLNX_RHEL_RANGE(8,6, 8,99) static struct ttm_device_funcs vbox_bo_driver = { #else /* < 5.13.0 */ static struct ttm_bo_driver vbox_bo_driver = { @@ -379,7 +379,7 @@ .eviction_valuable = ttm_bo_eviction_valuable, #endif .evict_flags = vbox_bo_evict_flags, -#if RTLNX_VER_MAX(5,14,0) +#if RTLNX_VER_MAX(5,14,0) && !RTLNX_RHEL_RANGE(8,6, 8,99) .verify_access = vbox_bo_verify_access, #endif .io_mem_reserve = &vbox_ttm_io_mem_reserve, @@ -402,7 +402,7 @@ { int ret; struct drm_device *dev = vbox->dev; -#if RTLNX_VER_MIN(5,13,0) +#if RTLNX_VER_MIN(5,13,0) || RTLNX_RHEL_RANGE(8,6, 8,99) struct ttm_device *bdev = &vbox->ttm.bdev; #else struct ttm_bo_device *bdev = &vbox->ttm.bdev; @@ -413,7 +413,7 @@ if (ret) return ret; #endif -#if RTLNX_VER_MIN(5,13,0) +#if RTLNX_VER_MIN(5,13,0) || RTLNX_RHEL_RANGE(8,6, 8,99) ret = ttm_device_init(&vbox->ttm.bdev, #else ret = ttm_bo_device_init(&vbox->ttm.bdev, @@ -469,7 +469,7 @@ return 0; err_device_release: -#if RTLNX_VER_MIN(5,13,0) +#if RTLNX_VER_MIN(5,13,0) || RTLNX_RHEL_RANGE(8,6, 8,99) ttm_device_fini(&vbox->ttm.bdev); #else ttm_bo_device_release(&vbox->ttm.bdev); @@ -490,7 +490,7 @@ #else arch_phys_wc_del(vbox->fb_mtrr); #endif -#if RTLNX_VER_MIN(5,13,0) +#if RTLNX_VER_MIN(5,13,0) || RTLNX_RHEL_RANGE(8,6, 8,99) ttm_device_fini(&vbox->ttm.bdev); #else ttm_bo_device_release(&vbox->ttm.bdev); @@ -568,7 +568,7 @@ static const struct drm_gem_object_funcs vbox_drm_gem_object_funcs = { .free = vbox_gem_free_object, .print_info = drm_gem_ttm_print_info, -# if RTLNX_VER_MIN(5,14,0) +# if RTLNX_VER_MIN(5,14,0) || RTLNX_RHEL_RANGE(8,6, 8,99) .mmap = drm_gem_ttm_mmap, # endif }; @@ -579,7 +579,7 @@ { struct vbox_private *vbox = dev->dev_private; struct vbox_bo *vboxbo; -#if RTLNX_VER_MAX(5,13,0) +#if RTLNX_VER_MAX(5,13,0) && !RTLNX_RHEL_RANGE(8,6, 8,99) size_t acc_size; #endif int ret; @@ -604,12 +604,12 @@ vbox_ttm_placement(vboxbo, VBOX_MEM_TYPE_VRAM | VBOX_MEM_TYPE_SYSTEM); -#if RTLNX_VER_MAX(5,13,0) +#if RTLNX_VER_MAX(5,13,0) && !RTLNX_RHEL_RANGE(8,6, 8,99) acc_size = ttm_bo_dma_acc_size(&vbox->ttm.bdev, size, sizeof(struct vbox_bo)); #endif -#if RTLNX_VER_MIN(5,14,0) +#if RTLNX_VER_MIN(5,14,0) || RTLNX_RHEL_RANGE(8,6, 8,99) /* Initialization of the following was removed from DRM stack * in 5.14, so we need to do it manually. */ vboxbo->bo.base.funcs = &vbox_drm_gem_object_funcs; @@ -624,7 +624,7 @@ ttm_bo_type_device, &vboxbo->placement, #if RTLNX_VER_MAX(4,17,0) && !RTLNX_RHEL_MAJ_PREREQ(7,6) && !RTLNX_SUSE_MAJ_PREREQ(15,1) && !RTLNX_SUSE_MAJ_PREREQ(12,5) align >> PAGE_SHIFT, false, NULL, acc_size, -#elif RTLNX_VER_MAX(5,13,0) /* < 5.13.0 */ +#elif RTLNX_VER_MAX(5,13,0) && !RTLNX_RHEL_RANGE(8,6, 8,99) /* < 5.13.0, < RHEL(8.6, 8.99) */ align >> PAGE_SHIFT, false, acc_size, #else /* > 5.13.0 */ align >> PAGE_SHIFT, false, @@ -653,7 +653,7 @@ static inline u64 vbox_bo_gpu_offset(struct vbox_bo *bo) { -#if RTLNX_VER_MIN(5,14,0) +#if RTLNX_VER_MIN(5,14,0) || RTLNX_RHEL_RANGE(8,6, 8,99) return bo->bo.resource->start << PAGE_SHIFT; #elif RTLNX_VER_MIN(5,9,0) || RTLNX_RHEL_MIN(8,4) || RTLNX_SUSE_MAJ_PREREQ(15,3) return bo->bo.mem.start << PAGE_SHIFT; @@ -802,7 +802,7 @@ file_priv = filp->private_data; vbox = file_priv->minor->dev->dev_private; -#if RTLNX_VER_MIN(5,14,0) +#if RTLNX_VER_MIN(5,14,0) || RTLNX_RHEL_RANGE(8,6, 8,99) if (drm_dev_is_unplugged(file_priv->minor->dev)) return -ENODEV; ret = drm_gem_mmap(filp, vma); diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Additions/Makefile.kmk virtualbox-6.1.34-dfsg/src/VBox/Additions/Makefile.kmk --- virtualbox-6.1.32-dfsg/src/VBox/Additions/Makefile.kmk 2022-01-13 18:49:25.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Additions/Makefile.kmk 2022-03-22 23:37:34.000000000 +0000 @@ -47,69 +47,71 @@ # Include sub-makefiles. include $(PATH_SUB_CURRENT)/common/Makefile.kmk -ifndef VBOX_ONLY_VALIDATIONKIT - ifdef VBOX_WITH_X11_ADDITIONS - include $(PATH_SUB_CURRENT)/x11/Makefile.kmk - endif +ifdef VBOX_WITH_X11_ADDITIONS + include $(PATH_SUB_CURRENT)/x11/Makefile.kmk +endif + +ifeq ($(KBUILD_TARGET),freebsd) + include $(PATH_SUB_CURRENT)/freebsd/Makefile.kmk +endif +ifeq ($(KBUILD_TARGET),linux) + include $(PATH_SUB_CURRENT)/linux/Makefile.kmk +endif +ifeq ($(KBUILD_TARGET),os2) + include $(PATH_SUB_CURRENT)/os2/Makefile.kmk +endif +ifeq ($(KBUILD_TARGET),solaris) + include $(PATH_SUB_CURRENT)/solaris/Makefile.kmk +endif +ifeq ($(KBUILD_TARGET),win) + ifdef VBOX_WITH_MESA3D + include $(PATH_SUB_CURRENT)/3D/Makefile.kmk + endif + include $(PATH_SUB_CURRENT)/WINNT/Makefile.kmk +endif +ifeq ($(KBUILD_TARGET),darwin) + include $(PATH_SUB_CURRENT)/darwin/Makefile.kmk +endif +ifeq ($(KBUILD_TARGET),haiku) + include $(PATH_SUB_CURRENT)/haiku/Makefile.kmk +endif + +ifeq ($(KBUILD_TARGET),linux) + + INSTALLS += LnxAddIso-scripts + LnxAddIso-scripts_INST = $(INST_ADDITIONS) + LnxAddIso-scripts_MODE = a+rx,u+w + LnxAddIso-scripts_SOURCES = \ + ../Installer/linux/runasroot.sh \ + linux/installer/autorun.sh + +endif # KBUILD_TARGET == linux +ifeq ($(KBUILD_TARGET),win) + # + # Inf2Cat requires all the files referenced in the .inf file + # to be present in the directory, so we have to do this from here, + # since VBoxGuest.sys is being built from the common sources. + # + INSTALLS += VBoxGuest-inf + VBoxGuest-inf_INST = $(INST_ADDITIONS) + VBoxGuest-inf_MODE = a+r,u+w + VBoxGuest-inf_SOURCES = \ + $(PATH_TARGET)/VBoxGuestCat.dir/VBoxGuest.inf + VBoxGuest-inf_CLEAN = $(VBoxGuest-inf_SOURCES) + VBoxGuest-inf_BLDDIRS = $(PATH_TARGET)/VBoxGuestCat.dir - ifeq ($(KBUILD_TARGET),freebsd) - include $(PATH_SUB_CURRENT)/freebsd/Makefile.kmk - endif - ifeq ($(KBUILD_TARGET),linux) - include $(PATH_SUB_CURRENT)/linux/Makefile.kmk - endif - ifeq ($(KBUILD_TARGET),os2) - include $(PATH_SUB_CURRENT)/os2/Makefile.kmk - endif - ifeq ($(KBUILD_TARGET),solaris) - include $(PATH_SUB_CURRENT)/solaris/Makefile.kmk - endif - ifeq ($(KBUILD_TARGET),win) - ifdef VBOX_WITH_MESA3D - include $(PATH_SUB_CURRENT)/3D/Makefile.kmk - endif - include $(PATH_SUB_CURRENT)/WINNT/Makefile.kmk - endif - ifeq ($(KBUILD_TARGET),darwin) - include $(PATH_SUB_CURRENT)/darwin/Makefile.kmk - endif - ifeq ($(KBUILD_TARGET),haiku) - include $(PATH_SUB_CURRENT)/haiku/Makefile.kmk - endif - - ifeq ($(KBUILD_TARGET),linux) - - INSTALLS += LnxAddIso-scripts - LnxAddIso-scripts_INST = $(INST_ADDITIONS) - LnxAddIso-scripts_MODE = a+rx,u+w - LnxAddIso-scripts_SOURCES = \ - ../Installer/linux/runasroot.sh \ - linux/installer/autorun.sh - - endif # KBUILD_TARGET == linux - ifeq ($(KBUILD_TARGET),win) - # - # Inf2Cat requires all the files referenced in the .inf file - # to be present in the directory, so we have to do this from here, - # since VBoxGuest.sys is being built from the common sources. - # - INSTALLS += VBoxGuest-inf - VBoxGuest-inf_INST = $(INST_ADDITIONS) - VBoxGuest-inf_MODE = a+r,u+w - VBoxGuest-inf_SOURCES = \ - $(PATH_TARGET)/VBoxGuestCat.dir/VBoxGuest.inf \ - $(if-expr defined(VBOX_SIGN_ADDITIONS),$(PATH_TARGET)/VBoxGuestCat.dir/VBoxGuest.cat,) \ - $(PATH_TARGET)/VBoxGuestCat.dir/VBoxGuest.sys \ - $(PATH_TARGET)/VBoxGuestCat.dir/VBoxControl.exe \ - $(PATH_TARGET)/VBoxGuestCat.dir/VBoxTray.exe - VBoxGuest-inf_CLEAN = $(VBoxGuest-inf_SOURCES) - VBoxGuest-inf_BLDDIRS = \ - $(PATH_TARGET)/VBoxGuestCat.dir - - $(PATH_TARGET)/VBoxGuestCat.dir/VBoxGuest.inf: $(PATH_SUB_CURRENT)/common/VBoxGuest/win/VBoxGuest.inf $(MAKEFILE_CURRENT) | $$(dir $$@) + $(PATH_TARGET)/VBoxGuestCat.dir/VBoxGuest.inf: $(PATH_SUB_CURRENT)/common/VBoxGuest/win/VBoxGuest.inf $(MAKEFILE_CURRENT) | $$(dir $$@) $(call MSG_GENERATE,VBoxGuest-inf,$@,$<) $(call VBOX_EDIT_INF_FN,$<,$@) +if defined(VBOX_SIGNING_MODE) && defined(VBOX_SIGN_ADDITIONS) + VBoxGuest-inf_SOURCES += \ + $(PATH_TARGET)/VBoxGuestCat.dir/VBoxGuest.cat \ + $(PATH_TARGET)/VBoxGuestCat.dir/VBoxGuest.cat=>VBoxGuest-PreW10.cat \ + $(PATH_TARGET)/VBoxGuestCat.dir/VBoxGuest.sys \ + $(PATH_TARGET)/VBoxGuestCat.dir/VBoxControl.exe \ + $(PATH_TARGET)/VBoxGuestCat.dir/VBoxTray.exe + $(PATH_TARGET)/VBoxGuestCat.dir/VBoxGuest.sys: $$(VBoxGuest_1_TARGET) | $$(dir $$@) $(INSTALL) -m 644 $< $(@D) @@ -120,20 +122,20 @@ $(INSTALL) -m 755 $< $(@D) $(PATH_TARGET)/VBoxGuestCat.dir/VBoxGuest.cat: \ - $(PATH_TARGET)/VBoxGuestCat.dir/VBoxGuest.inf \ - $(PATH_TARGET)/VBoxGuestCat.dir/VBoxGuest.sys \ - $(PATH_TARGET)/VBoxGuestCat.dir/VBoxControl.exe \ - $(PATH_TARGET)/VBoxGuestCat.dir/VBoxTray.exe + $(PATH_TARGET)/VBoxGuestCat.dir/VBoxGuest.inf \ + $(PATH_TARGET)/VBoxGuestCat.dir/VBoxGuest.sys \ + $(PATH_TARGET)/VBoxGuestCat.dir/VBoxControl.exe \ + $(PATH_TARGET)/VBoxGuestCat.dir/VBoxTray.exe $(call MSG_TOOL,Inf2Cat,VBoxGuest-inf,$@,$<) $(call VBOX_MAKE_CAT_FN, $(@D),$@) - endif # KBUILD_TARGET == win + endif # signing +endif # KBUILD_TARGET == win - # The packing target rule, but only if we're on the local build box. - # (VBOX_WITHOUT_ADDITIONS_ISO is used by the additions build box, see the root makefile.) - ifndef VBOX_WITHOUT_ADDITIONS_ISO - PACKING += $(VBOX_PATH_ADDITIONS_ISO)/VBoxGuestAdditions.iso - endif -endif # !VBOX_ONLY_VALIDATIONKIT +# The packing target rule, but only if we're on the local build box. +# (VBOX_WITHOUT_ADDITIONS_ISO is used by the additions build box, see the root makefile.) +ifndef VBOX_WITHOUT_ADDITIONS_ISO + PACKING += $(VBOX_PATH_ADDITIONS_ISO)/VBoxGuestAdditions.iso +endif include $(FILE_KBUILD_SUB_FOOTER) diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Additions/solaris/Installer/postinstall.sh virtualbox-6.1.34-dfsg/src/VBox/Additions/solaris/Installer/postinstall.sh --- virtualbox-6.1.32-dfsg/src/VBox/Additions/solaris/Installer/postinstall.sh 2022-01-13 18:49:36.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Additions/solaris/Installer/postinstall.sh 2022-03-22 23:37:57.000000000 +0000 @@ -103,7 +103,7 @@ if [ -f /etc/dev/reserved_devnames ]; then # Solaris 11 SRU6 and later use group root (check a file which isn't # tainted by VirtualBox install scripts and allow no other group) - refgroup=$(LC_ALL=C /usr/bin/ls -lL /etc/dev/reserved_devnames | awk '{ print $4 }' 2>/dev/null) + refgroup=`LC_ALL=C /usr/bin/ls -lL /etc/dev/reserved_devnames | awk '{ print $4 }' 2>/dev/null` if [ $? -eq 0 -a "x$refgroup" = "xroot" ]; then group=root fi diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Additions/solaris/Installer/preremove.sh virtualbox-6.1.34-dfsg/src/VBox/Additions/solaris/Installer/preremove.sh --- virtualbox-6.1.32-dfsg/src/VBox/Additions/solaris/Installer/preremove.sh 2022-01-13 18:49:36.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Additions/solaris/Installer/preremove.sh 2022-03-22 23:37:57.000000000 +0000 @@ -53,7 +53,7 @@ if [ -f /etc/dev/reserved_devnames ]; then # Solaris 11 SRU6 and later use group root (check a file which isn't # tainted by VirtualBox install scripts and allow no other group) - refgroup=$(LC_ALL=C /usr/bin/ls -lL /etc/dev/reserved_devnames | awk '{ print $4 }' 2>/dev/null) + refgroup=`LC_ALL=C /usr/bin/ls -lL /etc/dev/reserved_devnames | awk '{ print $4 }' 2>/dev/null` if [ $? -eq 0 -a "x$refgroup" = "xroot" ]; then group=root fi diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Additions/x11/VBoxClient/display.cpp virtualbox-6.1.34-dfsg/src/VBox/Additions/x11/VBoxClient/display.cpp --- virtualbox-6.1.32-dfsg/src/VBox/Additions/x11/VBoxClient/display.cpp 1970-01-01 00:00:00.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Additions/x11/VBoxClient/display.cpp 2022-03-22 23:37:59.000000000 +0000 @@ -0,0 +1,318 @@ +/* $Id: display.cpp $ */ +/** @file + * X11 guest client - display management. + */ + +/* + * Copyright (C) 2006-2020 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + */ + +#include "VBoxClient.h" + +#include +#include +#include +#include + +#include +#include +#include + +/** @todo this should probably be replaced by something IPRT */ +/* For system() and WEXITSTATUS() */ +#include +#include +#include +#include +#include +#include +#include +#include + +/* TESTING: Dynamic resizing and mouse integration toggling should work + * correctly with a range of X servers (pre-1.3, 1.3 and later under Linux, 1.3 + * and later under Solaris) with Guest Additions installed. Switching to a + * virtual terminal while a user session is in place should disable dynamic + * resizing and cursor integration, switching back should re-enable them. */ + +/** Display magic number, start of a UUID. */ +#define DISPLAYSTATE_MAGIC UINT32_C(0xf0029993) + +/** State information needed for the service. The main VBoxClient code provides + * the daemon logic needed by all services. */ +struct DISPLAYSTATE +{ + /** The service interface. */ + struct VBCLSERVICE *pInterface; + /** Magic number for sanity checks. */ + uint32_t magic; + /** Are we initialised yet? */ + bool mfInit; + /** The connection to the server. */ + Display *pDisplay; + /** The RandR extension base event number. */ + int cRREventBase; + /** Can we use version 1.2 or later of the RandR protocol here? */ + bool fHaveRandR12; + /** The command argument to use for the xrandr binary. Currently only + * used to support the non-standard location on some Solaris systems - + * would it make sense to use absolute paths on all systems? */ + const char *pcszXrandr; + /** Was there a recent mode hint with no following root window resize, and + * if so, have we waited for a reasonable time? */ + time_t timeLastModeHint; + /** Handle to libXrandr. */ + void *pRandLibraryHandle; + /** Handle to pXRRSelectInput. */ + void (*pXRRSelectInput) (Display *, Window, int); + /** Handle to pXRRQueryExtension. */ + Bool (*pXRRQueryExtension) (Display *, int *, int *); +}; + +static unsigned char *getRootProperty(struct DISPLAYSTATE *pState, const char *pszName, + long cItems, Atom type) +{ + Atom actualType = None; + int iFormat = 0; + unsigned long cReturned = 0; + unsigned long cAfter = 0; + unsigned char *pData = 0; + + if (XGetWindowProperty(pState->pDisplay, DefaultRootWindow(pState->pDisplay), + XInternAtom(pState->pDisplay, pszName, 0), 0, cItems, + False /* delete */, type, &actualType, &iFormat, + &cReturned, &cAfter, &pData)) + return NULL; + return pData; +} + +static void doResize(struct DISPLAYSTATE *pState) +{ + /** @note The xrandr command can fail if something else accesses RandR at + * the same time. We just ignore failure for now as we do not know what + * someone else is doing. */ + if (!pState->fHaveRandR12) + { + char szCommand[256]; + unsigned char *pData; + + pData = getRootProperty(pState, "VBOXVIDEO_PREFERRED_MODE", 1, XA_INTEGER); + if (pData != NULL) + { + RTStrPrintf(szCommand, sizeof(szCommand), "%s -s %ux%u", + pState->pcszXrandr, ((unsigned long *)pData)[0] >> 16, ((unsigned long *)pData)[0] & 0xFFFF); + int rcShutUpGcc = system(szCommand); RT_NOREF_PV(rcShutUpGcc); + XFree(pData); + } + } + else + { + const char szCommandBase[] = + "%s --output VGA-0 --auto --output VGA-1 --auto --right-of VGA-0 " + "--output VGA-2 --auto --right-of VGA-1 --output VGA-3 --auto --right-of VGA-2 " + "--output VGA-4 --auto --right-of VGA-3 --output VGA-5 --auto --right-of VGA-4 " + "--output VGA-6 --auto --right-of VGA-5 --output VGA-7 --auto --right-of VGA-6 " + "--output VGA-8 --auto --right-of VGA-7 --output VGA-9 --auto --right-of VGA-8 " + "--output VGA-10 --auto --right-of VGA-9 --output VGA-11 --auto --right-of VGA-10 " + "--output VGA-12 --auto --right-of VGA-11 --output VGA-13 --auto --right-of VGA-12 " + "--output VGA-14 --auto --right-of VGA-13 --output VGA-15 --auto --right-of VGA-14 " + "--output VGA-16 --auto --right-of VGA-15 --output VGA-17 --auto --right-of VGA-16 " + "--output VGA-18 --auto --right-of VGA-17 --output VGA-19 --auto --right-of VGA-18 " + "--output VGA-20 --auto --right-of VGA-19 --output VGA-21 --auto --right-of VGA-20 " + "--output VGA-22 --auto --right-of VGA-21 --output VGA-23 --auto --right-of VGA-22 " + "--output VGA-24 --auto --right-of VGA-23 --output VGA-25 --auto --right-of VGA-24 " + "--output VGA-26 --auto --right-of VGA-25 --output VGA-27 --auto --right-of VGA-26 " + "--output VGA-28 --auto --right-of VGA-27 --output VGA-29 --auto --right-of VGA-28 " + "--output VGA-30 --auto --right-of VGA-29 --output VGA-31 --auto --right-of VGA-30"; + char szCommand[sizeof(szCommandBase) + 256]; + RTStrPrintf(szCommand, sizeof(szCommand), szCommandBase, pState->pcszXrandr); + int rcShutUpGcc = system(szCommand); RT_NOREF_PV(rcShutUpGcc); + } +} + +/** Main loop: handle display hot-plug events, property updates (which can + * signal VT switches hot-plug in old X servers). */ +static void runDisplay(struct DISPLAYSTATE *pState) +{ + Display *pDisplay = pState->pDisplay; + long cValue = 1; + + /* One way or another we want the preferred mode at server start-up. */ + doResize(pState); + XSelectInput(pDisplay, DefaultRootWindow(pDisplay), PropertyChangeMask | StructureNotifyMask); + if (pState->fHaveRandR12) + pState->pXRRSelectInput(pDisplay, DefaultRootWindow(pDisplay), RRScreenChangeNotifyMask); + /* Semantics: when VBOXCLIENT_STARTED is set, pre-1.3 X.Org Server driver + * assumes that a client capable of handling mode hints will be present for the + * rest of the X session. If we crash things will not work as they should. + * I thought that preferable to implementing complex crash-handling logic. + */ + XChangeProperty(pState->pDisplay, DefaultRootWindow(pState->pDisplay), XInternAtom(pState->pDisplay, "VBOXCLIENT_STARTED", 0), + XA_INTEGER, 32, PropModeReplace, (unsigned char *)&cValue, 1); + /* Interrupting this cleanly will be more work than making it robust + * against spontaneous termination, especially as it will never get + * properly tested, so I will go for the second. */ + while (true) + { + XEvent event; + struct pollfd PollFd; + int pollTimeOut = -1; + int cFds; + + /* Do not handle overflow. */ + if (pState->timeLastModeHint > 0 && pState->timeLastModeHint < INT_MAX - 2) + pollTimeOut = 2 - (time(0) - pState->timeLastModeHint); + PollFd.fd = ConnectionNumber(pDisplay); + PollFd.events = POLLIN; /* Hang-up is always reported. */ + XFlush(pDisplay); + cFds = poll(&PollFd, 1, pollTimeOut >= 0 ? pollTimeOut * 1000 : -1); + while (XPending(pDisplay)) + { + XNextEvent(pDisplay, &event); + /* This property is deleted when the server regains the virtual + * terminal. Force the main thread to call xrandr again, as old X + * servers could not handle it while switched out. */ + if ( !pState->fHaveRandR12 + && event.type == PropertyNotify + && event.xproperty.state == PropertyDelete + && event.xproperty.window == DefaultRootWindow(pDisplay) + && event.xproperty.atom == XInternAtom(pDisplay, "VBOXVIDEO_NO_VT", False)) + doResize(pState); + if ( !pState->fHaveRandR12 + && event.type == PropertyNotify + && event.xproperty.state == PropertyNewValue + && event.xproperty.window == DefaultRootWindow(pDisplay) + && event.xproperty.atom == XInternAtom(pDisplay, "VBOXVIDEO_PREFERRED_MODE", False)) + doResize(pState); + if ( pState->fHaveRandR12 + && event.type == pState->cRREventBase + RRScreenChangeNotify) + pState->timeLastModeHint = time(0); + if ( event.type == ConfigureNotify + && event.xproperty.window == DefaultRootWindow(pDisplay)) + pState->timeLastModeHint = 0; + } + if (cFds == 0 && pState->timeLastModeHint > 0) + doResize(pState); + } +} + +static int initDisplay(struct DISPLAYSTATE *pState) +{ + char szCommand[256]; + int status; + + pState->pRandLibraryHandle = dlopen("libXrandr.so", RTLD_LAZY /*| RTLD_LOCAL */); + if (!pState->pRandLibraryHandle) + pState->pRandLibraryHandle = dlopen("libXrandr.so.2", RTLD_LAZY /*| RTLD_LOCAL */); + if (!pState->pRandLibraryHandle) + pState->pRandLibraryHandle = dlopen("libXrandr.so.2.2.0", RTLD_LAZY /*| RTLD_LOCAL */); + + if (!RT_VALID_PTR(pState->pRandLibraryHandle)) + { + VBClLogFatalError("Could not locate libXrandr for dlopen\n"); + return VERR_NOT_FOUND; + } + + *(void **)(&pState->pXRRSelectInput) = dlsym(pState->pRandLibraryHandle, "XRRSelectInput"); + *(void **)(&pState->pXRRQueryExtension) = dlsym(pState->pRandLibraryHandle, "XRRQueryExtension"); + + if ( !RT_VALID_PTR(pState->pXRRSelectInput) + || !RT_VALID_PTR(pState->pXRRQueryExtension)) + { + VBClLogFatalError("Could not load required libXrandr symbols\n"); + dlclose(pState->pRandLibraryHandle); + pState->pRandLibraryHandle = NULL; + return VERR_NOT_FOUND; + } + + pState->pDisplay = XOpenDisplay(NULL); + if (!pState->pDisplay) + return VERR_NOT_FOUND; + if (!pState->pXRRQueryExtension(pState->pDisplay, &pState->cRREventBase, &status)) + return VERR_NOT_FOUND; + pState->fHaveRandR12 = false; + pState->pcszXrandr = "xrandr"; + if (RTFileExists("/usr/X11/bin/xrandr")) + pState->pcszXrandr = "/usr/X11/bin/xrandr"; + status = system(pState->pcszXrandr); + if (WEXITSTATUS(status) != 0) /* Utility or extension not available. */ + VBClLogFatalError("Failed to execute the xrandr utility\n"); + RTStrPrintf(szCommand, sizeof(szCommand), "%s --q12", pState->pcszXrandr); + status = system(szCommand); + if (WEXITSTATUS(status) == 0) + pState->fHaveRandR12 = true; + return VINF_SUCCESS; +} + +static const char *getName() +{ + return "Display"; +} + +static const char *getPidFilePath() +{ + return ".vboxclient-display.pid"; +} + +static struct DISPLAYSTATE *getStateFromInterface(struct VBCLSERVICE **ppInterface) +{ + struct DISPLAYSTATE *pSelf = (struct DISPLAYSTATE *)ppInterface; + if (pSelf->magic != DISPLAYSTATE_MAGIC) + VBClLogFatalError("Bad display service object!\n"); + return pSelf; +} + +static int init(struct VBCLSERVICE **ppInterface) +{ + struct DISPLAYSTATE *pSelf = getStateFromInterface(ppInterface); + int rc; + + if (pSelf->mfInit) + return VERR_WRONG_ORDER; + rc = initDisplay(pSelf); + if (RT_FAILURE(rc)) + return rc; + if (RT_SUCCESS(rc)) + pSelf->mfInit = true; + return rc; +} + +static int run(struct VBCLSERVICE **ppInterface, bool fDaemonised) +{ + RT_NOREF1(fDaemonised); + struct DISPLAYSTATE *pSelf = getStateFromInterface(ppInterface); + + if (!pSelf->mfInit) + return VERR_WRONG_ORDER; + runDisplay(pSelf); + return VERR_INTERNAL_ERROR; /* "Should never reach here." */ +} + +struct VBCLSERVICE vbclDisplayInterface = +{ + getName, + getPidFilePath, + init, + run, + VBClServiceDefaultCleanup +}; + +struct VBCLSERVICE **VBClGetDisplayService() +{ + struct DISPLAYSTATE *pService = (struct DISPLAYSTATE *)RTMemAlloc(sizeof(*pService)); + + if (!pService) + VBClLogFatalError("Out of memory\n"); + pService->pInterface = &vbclDisplayInterface; + pService->magic = DISPLAYSTATE_MAGIC; + pService->mfInit = false; + return &pService->pInterface; +} diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Additions/x11/VBoxClient/display-svga-x11.cpp virtualbox-6.1.34-dfsg/src/VBox/Additions/x11/VBoxClient/display-svga-x11.cpp --- virtualbox-6.1.32-dfsg/src/VBox/Additions/x11/VBoxClient/display-svga-x11.cpp 2022-01-13 18:49:37.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Additions/x11/VBoxClient/display-svga-x11.cpp 2022-03-22 23:37:59.000000000 +0000 @@ -59,6 +59,8 @@ #include #include #include +#include +#include #include #include @@ -203,7 +205,7 @@ #define checkFunctionPtr(pFunction) \ do { \ if (!pFunction) \ - VBClLogFatalError("Could not find symbol address (%s)\n", #pFunction);\ + VBClLogError("Could not find symbol address (%s)\n", #pFunction);\ } while (0) @@ -771,11 +773,25 @@ VBClLogInfo("Starting DRM client.\n"); int rc = execve(szDRMClientPath, argv, env); if (rc == -1) - VBClLogFatalError("execve for % returns the following error %d %s\n", szDRMClientPath, errno, strerror(errno)); + VBClLogFatalError("execve for %s returns the following error %d %s\n", szDRMClientPath, errno, strerror(errno)); /* This is reached only when execve fails. */ return false; } +static bool legacyX11AgentStart() +{ +#if defined(RT_OS_LINUX) +# define VBOX_DRMCLIENT_LEGACY_EXECUTABLE "/usr/bin/VBoxClient" + const char *apszArgs[3] = { VBOX_DRMCLIENT_LEGACY_EXECUTABLE, "--display", NULL }; + + int rc = RTProcCreate(VBOX_DRMCLIENT_LEGACY_EXECUTABLE, apszArgs, RTENV_DEFAULT, + RTPROC_FLAGS_DETACHED | RTPROC_FLAGS_SEARCH_PATH, NULL); + return RT_SUCCESS(rc); +#else + return false; +#endif +} + static bool init() { /* If DRM client is already running don't start this service. */ @@ -857,43 +873,43 @@ x11Context.fMonitorInfoAvailable = x11Context.pXRRGetMonitors && x11Context.pXRRFreeMonitors; *(void **)(&x11Context.pXRRGetScreenResources) = dlsym(x11Context.pRandLibraryHandle, "XRRGetScreenResources"); - checkFunctionPtrReturn(x11Context.pXRRGetScreenResources); + checkFunctionPtr(x11Context.pXRRGetScreenResources); *(void **)(&x11Context.pXRRSetCrtcConfig) = dlsym(x11Context.pRandLibraryHandle, "XRRSetCrtcConfig"); - checkFunctionPtrReturn(x11Context.pXRRSetCrtcConfig); + checkFunctionPtr(x11Context.pXRRSetCrtcConfig); *(void **)(&x11Context.pXRRFreeScreenResources) = dlsym(x11Context.pRandLibraryHandle, "XRRFreeScreenResources"); - checkFunctionPtrReturn(x11Context.pXRRFreeScreenResources); + checkFunctionPtr(x11Context.pXRRFreeScreenResources); *(void **)(&x11Context.pXRRFreeModeInfo) = dlsym(x11Context.pRandLibraryHandle, "XRRFreeModeInfo"); - checkFunctionPtrReturn(x11Context.pXRRFreeModeInfo); + checkFunctionPtr(x11Context.pXRRFreeModeInfo); *(void **)(&x11Context.pXRRFreeOutputInfo) = dlsym(x11Context.pRandLibraryHandle, "XRRFreeOutputInfo"); - checkFunctionPtrReturn(x11Context.pXRRFreeOutputInfo); + checkFunctionPtr(x11Context.pXRRFreeOutputInfo); *(void **)(&x11Context.pXRRSetScreenSize) = dlsym(x11Context.pRandLibraryHandle, "XRRSetScreenSize"); - checkFunctionPtrReturn(x11Context.pXRRSetScreenSize); + checkFunctionPtr(x11Context.pXRRSetScreenSize); *(void **)(&x11Context.pXRRUpdateConfiguration) = dlsym(x11Context.pRandLibraryHandle, "XRRUpdateConfiguration"); - checkFunctionPtrReturn(x11Context.pXRRUpdateConfiguration); + checkFunctionPtr(x11Context.pXRRUpdateConfiguration); *(void **)(&x11Context.pXRRAllocModeInfo) = dlsym(x11Context.pRandLibraryHandle, "XRRAllocModeInfo"); - checkFunctionPtrReturn(x11Context.pXRRAllocModeInfo); + checkFunctionPtr(x11Context.pXRRAllocModeInfo); *(void **)(&x11Context.pXRRCreateMode) = dlsym(x11Context.pRandLibraryHandle, "XRRCreateMode"); - checkFunctionPtrReturn(x11Context.pXRRCreateMode); + checkFunctionPtr(x11Context.pXRRCreateMode); *(void **)(&x11Context.pXRRGetOutputInfo) = dlsym(x11Context.pRandLibraryHandle, "XRRGetOutputInfo"); - checkFunctionPtrReturn(x11Context.pXRRGetOutputInfo); + checkFunctionPtr(x11Context.pXRRGetOutputInfo); *(void **)(&x11Context.pXRRGetCrtcInfo) = dlsym(x11Context.pRandLibraryHandle, "XRRGetCrtcInfo"); - checkFunctionPtrReturn(x11Context.pXRRGetCrtcInfo); + checkFunctionPtr(x11Context.pXRRGetCrtcInfo); *(void **)(&x11Context.pXRRFreeCrtcInfo) = dlsym(x11Context.pRandLibraryHandle, "XRRFreeCrtcInfo"); - checkFunctionPtrReturn(x11Context.pXRRFreeCrtcInfo); + checkFunctionPtr(x11Context.pXRRFreeCrtcInfo); *(void **)(&x11Context.pXRRAddOutputMode) = dlsym(x11Context.pRandLibraryHandle, "XRRAddOutputMode"); - checkFunctionPtrReturn(x11Context.pXRRAddOutputMode); + checkFunctionPtr(x11Context.pXRRAddOutputMode); return VINF_SUCCESS; } @@ -976,11 +992,17 @@ } if (x11Context.hRandRMajor < 1 || x11Context.hRandRMinor <= 3) { - VBClLogFatalError("Resizing service requires libXrandr Version >= 1.4. Detected version is %d.%d\n", x11Context.hRandRMajor, x11Context.hRandRMinor); + VBClLogError("Resizing service requires libXrandr Version >= 1.4. Detected version is %d.%d\n", x11Context.hRandRMajor, x11Context.hRandRMinor); XCloseDisplay(x11Context.pDisplay); x11Context.pDisplay = NULL; + + bool rc = legacyX11AgentStart(); + VBClLogInfo("Attempt to start legacy X11 resize agent has %s\n", rc ? "succeeded" : "failed"); + return; } + else + VBClLogInfo("Found libXrandr %d.%d\n", x11Context.hRandRMajor, x11Context.hRandRMinor); } x11Context.rootWindow = DefaultRootWindow(x11Context.pDisplay); x11Context.hEventMask = RRScreenChangeNotifyMask; diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Additions/x11/VBoxClient/main.cpp virtualbox-6.1.34-dfsg/src/VBox/Additions/x11/VBoxClient/main.cpp --- virtualbox-6.1.32-dfsg/src/VBox/Additions/x11/VBoxClient/main.cpp 2022-01-13 18:49:37.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Additions/x11/VBoxClient/main.cpp 2022-03-22 23:37:59.000000000 +0000 @@ -47,6 +47,7 @@ #define VBOXCLIENT_OPT_DRAGANDDROP VBOXCLIENT_OPT_SERVICES + 2 #define VBOXCLIENT_OPT_SEAMLESS VBOXCLIENT_OPT_SERVICES + 3 #define VBOXCLIENT_OPT_VMSVGA VBOXCLIENT_OPT_SERVICES + 4 +#define VBOXCLIENT_OPT_DISPLAY VBOXCLIENT_OPT_SERVICES + 5 /********************************************************************************************************************************* @@ -188,6 +189,7 @@ #endif RTPrintf(" --seamless starts the seamless windows service\n"); RTPrintf(" --vmsvga starts VMSVGA dynamic resizing for x11/Wayland guests\n"); + RTPrintf(" --display starts VMSVGA dynamic resizing for legacy guests\n"); RTPrintf(" -f, --foreground run in the foreground (no daemonizing)\n"); RTPrintf(" -d, --nodaemon continues running as a system service\n"); RTPrintf(" -h, --help shows this help text\n"); @@ -249,6 +251,7 @@ #endif { "--seamless", VBOXCLIENT_OPT_SEAMLESS, RTGETOPT_REQ_NOTHING }, { "--vmsvga", VBOXCLIENT_OPT_VMSVGA, RTGETOPT_REQ_NOTHING }, + { "--display", VBOXCLIENT_OPT_DISPLAY, RTGETOPT_REQ_NOTHING }, }; int ch; @@ -354,6 +357,14 @@ break; } + case VBOXCLIENT_OPT_DISPLAY: + { + if (g_pService) + return vbclSyntaxOnlyOneService(); + g_pService = VBClGetDisplayService(); + break; + } + case VERR_GETOPT_UNKNOWN_OPTION: { RTMsgError("unrecognized option '%s'", ValueUnion.psz); diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Additions/x11/VBoxClient/Makefile.kmk virtualbox-6.1.34-dfsg/src/VBox/Additions/x11/VBoxClient/Makefile.kmk --- virtualbox-6.1.32-dfsg/src/VBox/Additions/x11/VBoxClient/Makefile.kmk 2022-01-13 18:49:37.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Additions/x11/VBoxClient/Makefile.kmk 2022-03-22 23:37:59.000000000 +0000 @@ -45,6 +45,7 @@ VBoxClient_INCS += ../x11include/randrproto-1.6.0 VBoxClient_SOURCES = \ main.cpp \ + display.cpp \ display-svga-x11.cpp \ seamless.cpp \ seamless-x11.cpp \ diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Additions/x11/VBoxClient/VBoxClient.h virtualbox-6.1.34-dfsg/src/VBox/Additions/x11/VBoxClient/VBoxClient.h --- virtualbox-6.1.32-dfsg/src/VBox/Additions/x11/VBoxClient/VBoxClient.h 2022-01-13 18:49:37.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Additions/x11/VBoxClient/VBoxClient.h 2022-03-22 23:37:59.000000000 +0000 @@ -80,5 +80,6 @@ extern struct VBCLSERVICE **VBClCheck3DService(); extern struct VBCLSERVICE **VBClDisplaySVGAService(); extern struct VBCLSERVICE **VBClDisplaySVGAX11Service(); +extern struct VBCLSERVICE **VBClGetDisplayService(); #endif /* !GA_INCLUDED_SRC_x11_VBoxClient_VBoxClient_h */ diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Devices/EFI/Firmware/OvmfPkg/OvmfPkgIa32.dsc virtualbox-6.1.34-dfsg/src/VBox/Devices/EFI/Firmware/OvmfPkg/OvmfPkgIa32.dsc --- virtualbox-6.1.32-dfsg/src/VBox/Devices/EFI/Firmware/OvmfPkg/OvmfPkgIa32.dsc 2022-01-13 18:55:12.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Devices/EFI/Firmware/OvmfPkg/OvmfPkgIa32.dsc 2022-03-22 23:42:10.000000000 +0000 @@ -873,7 +873,6 @@ PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf } - VBoxPkg/VBoxFsDxe/VBoxIso9660.inf VBoxPkg/VBoxFsDxe/VBoxHfs.inf VBoxPkg/VBoxSysTables/VBoxSysTables.inf VBoxPkg/VBoxAppleSim/VBoxAppleSim.inf diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Devices/EFI/Firmware/OvmfPkg/OvmfPkgIa32.fdf virtualbox-6.1.34-dfsg/src/VBox/Devices/EFI/Firmware/OvmfPkg/OvmfPkgIa32.fdf --- virtualbox-6.1.32-dfsg/src/VBox/Devices/EFI/Firmware/OvmfPkg/OvmfPkgIa32.fdf 2022-01-13 18:55:12.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Devices/EFI/Firmware/OvmfPkg/OvmfPkgIa32.fdf 2022-03-22 23:42:10.000000000 +0000 @@ -278,7 +278,6 @@ !ifdef $(VBOX) INF VBoxPkg/VBoxVgaMiniPortDxe/VBoxVgaMiniPortDxe.inf INF VBoxPkg/VBoxVgaDxe/VBoxVgaDxe.inf -INF VBoxPkg/VBoxFsDxe/VBoxIso9660.inf INF VBoxPkg/VBoxFsDxe/VBoxHfs.inf INF VBoxPkg/VBoxSysTables/VBoxSysTables.inf INF VBoxPkg/VBoxAppleSim/VBoxAppleSim.inf diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Devices/EFI/Firmware/OvmfPkg/OvmfPkgX64.dsc virtualbox-6.1.34-dfsg/src/VBox/Devices/EFI/Firmware/OvmfPkg/OvmfPkgX64.dsc --- virtualbox-6.1.32-dfsg/src/VBox/Devices/EFI/Firmware/OvmfPkg/OvmfPkgX64.dsc 2022-01-13 18:55:12.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Devices/EFI/Firmware/OvmfPkg/OvmfPkgX64.dsc 2022-03-22 23:42:10.000000000 +0000 @@ -879,7 +879,6 @@ PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf } - VBoxPkg/VBoxFsDxe/VBoxIso9660.inf VBoxPkg/VBoxFsDxe/VBoxHfs.inf VBoxPkg/VBoxSysTables/VBoxSysTables.inf VBoxPkg/VBoxAppleSim/VBoxAppleSim.inf diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Devices/EFI/Firmware/OvmfPkg/OvmfPkgX64.fdf virtualbox-6.1.34-dfsg/src/VBox/Devices/EFI/Firmware/OvmfPkg/OvmfPkgX64.fdf --- virtualbox-6.1.32-dfsg/src/VBox/Devices/EFI/Firmware/OvmfPkg/OvmfPkgX64.fdf 2022-01-13 18:55:12.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Devices/EFI/Firmware/OvmfPkg/OvmfPkgX64.fdf 2022-03-22 23:42:10.000000000 +0000 @@ -279,7 +279,6 @@ !ifdef $(VBOX) INF VBoxPkg/VBoxVgaMiniPortDxe/VBoxVgaMiniPortDxe.inf INF VBoxPkg/VBoxVgaDxe/VBoxVgaDxe.inf -INF VBoxPkg/VBoxFsDxe/VBoxIso9660.inf INF VBoxPkg/VBoxFsDxe/VBoxHfs.inf INF VBoxPkg/VBoxSysTables/VBoxSysTables.inf INF VBoxPkg/VBoxAppleSim/VBoxAppleSim.inf diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_efi.c virtualbox-6.1.34-dfsg/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_efi.c --- virtualbox-6.1.32-dfsg/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_efi.c 2022-01-13 18:55:38.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_efi.c 2022-03-22 23:42:40.000000000 +0000 @@ -4,7 +4,7 @@ */ /* - * Copyright (C) 2010-2020 Oracle Corporation + * Copyright (C) 2010-2022 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; @@ -58,11 +58,6 @@ #include "fsw_efi.h" -#ifdef VBOX -# include -# include -#endif - #define DEBUG_LEVEL 0 #ifndef FSTYPE @@ -141,7 +136,7 @@ IN OUT UINTN *BufferSize, OUT VOID *Buffer); -#if defined(VBOX) && defined(FSTYPE_HFS) +#if defined(VBOX) && (FSTYPE == hfs) extern fsw_status_t fsw_hfs_get_blessed_file(void *vol, struct fsw_string *path); #endif @@ -265,125 +260,6 @@ return Status; } -#if defined(VBOX) && !defined(FSTYPE_HFS) -/** - Find UDF volume identifiers in a Volume Recognition Sequence. - - @param[in] BlockIo BlockIo interface. - @param[in] DiskIo DiskIo interface. - - @retval EFI_SUCCESS UDF volume identifiers were found. - @retval EFI_NOT_FOUND UDF volume identifiers were not found. - @retval other Failed to perform disk I/O. - -**/ -EFI_STATUS -FindUdfVolumeIdentifiers ( - IN EFI_BLOCK_IO_PROTOCOL *BlockIo, - IN EFI_DISK_IO_PROTOCOL *DiskIo - ) -{ - EFI_STATUS Status; - UINT64 Offset; - UINT64 EndDiskOffset; - CDROM_VOLUME_DESCRIPTOR VolDescriptor; - CDROM_VOLUME_DESCRIPTOR TerminatingVolDescriptor; - - ZeroMem ((VOID *)&TerminatingVolDescriptor, sizeof (CDROM_VOLUME_DESCRIPTOR)); - - // - // Start Volume Recognition Sequence - // - EndDiskOffset = MultU64x32 (BlockIo->Media->LastBlock, - BlockIo->Media->BlockSize); - - for (Offset = UDF_VRS_START_OFFSET; Offset < EndDiskOffset; - Offset += UDF_LOGICAL_SECTOR_SIZE) { - // - // Check if block device has a Volume Structure Descriptor and an Extended - // Area. - // - Status = DiskIo->ReadDisk ( - DiskIo, - BlockIo->Media->MediaId, - Offset, - sizeof (CDROM_VOLUME_DESCRIPTOR), - (VOID *)&VolDescriptor - ); - if (EFI_ERROR (Status)) { - return Status; - } - - if (CompareMem ((VOID *)VolDescriptor.Unknown.Id, - (VOID *)UDF_BEA_IDENTIFIER, - sizeof (VolDescriptor.Unknown.Id)) == 0) { - break; - } - - if (CompareMem ((VOID *)&VolDescriptor, - (VOID *)&TerminatingVolDescriptor, - sizeof (CDROM_VOLUME_DESCRIPTOR)) == 0) { - return EFI_NOT_FOUND; - } - } - - // - // Look for "NSR0{2,3}" identifiers in the Extended Area. - // - Offset += UDF_LOGICAL_SECTOR_SIZE; - if (Offset >= EndDiskOffset) { - return EFI_NOT_FOUND; - } - - Status = DiskIo->ReadDisk ( - DiskIo, - BlockIo->Media->MediaId, - Offset, - sizeof (CDROM_VOLUME_DESCRIPTOR), - (VOID *)&VolDescriptor - ); - if (EFI_ERROR (Status)) { - return Status; - } - - if ((CompareMem ((VOID *)VolDescriptor.Unknown.Id, - (VOID *)UDF_NSR2_IDENTIFIER, - sizeof (VolDescriptor.Unknown.Id)) != 0) && - (CompareMem ((VOID *)VolDescriptor.Unknown.Id, - (VOID *)UDF_NSR3_IDENTIFIER, - sizeof (VolDescriptor.Unknown.Id)) != 0)) { - return EFI_NOT_FOUND; - } - - // - // Look for "TEA01" identifier in the Extended Area - // - Offset += UDF_LOGICAL_SECTOR_SIZE; - if (Offset >= EndDiskOffset) { - return EFI_NOT_FOUND; - } - - Status = DiskIo->ReadDisk ( - DiskIo, - BlockIo->Media->MediaId, - Offset, - sizeof (CDROM_VOLUME_DESCRIPTOR), - (VOID *)&VolDescriptor - ); - if (EFI_ERROR (Status)) { - return Status; - } - - if (CompareMem ((VOID *)VolDescriptor.Unknown.Id, - (VOID *)UDF_TEA_IDENTIFIER, - sizeof (VolDescriptor.Unknown.Id)) != 0) { - return EFI_NOT_FOUND; - } - - return EFI_SUCCESS; -} -#endif - static EFI_STATUS fsw_efi_ReMount(IN FSW_VOLUME_DATA *pVolume, IN EFI_HANDLE ControllerHandle, EFI_DISK_IO *pDiskIo, @@ -400,20 +276,6 @@ Status = fsw_efi_map_status(fsw_mount(pVolume, &fsw_efi_host_table, &FSW_FSTYPE_TABLE_NAME(FSTYPE), &pVolume->vol), pVolume); -#if defined(VBOX) && !defined(FSTYPE_HFS) - /* - * Don't give the iso9660 filesystem driver a chance to claim a volume which supports UDF - * or we loose booting capability from UDF volumes. - */ - if (!EFI_ERROR(Status)) - { - Status = FindUdfVolumeIdentifiers(pBlockIo, pDiskIo); - if (!EFI_ERROR(Status)) - Status = EFI_UNSUPPORTED; - else - Status = EFI_SUCCESS; - } -#endif if (!EFI_ERROR(Status)) { // register the SimpleFileSystem protocol @@ -1124,9 +986,10 @@ *BufferSize = RequiredSize; Status = EFI_SUCCESS; -#if defined(VBOX) && defined(FSTYPE_HFS) +#ifdef VBOX } else if (CompareGuid(InformationType, &gVBoxFsBlessedFileInfoGuid)) { +# if FSTYPE == hfs struct fsw_string StrBlessedFile; fsw_status_t rc = fsw_hfs_get_blessed_file(Volume->vol, &StrBlessedFile); @@ -1147,6 +1010,7 @@ Status = EFI_SUCCESS; } else +# endif Status = EFI_UNSUPPORTED; #endif diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/VBoxHfs.inf virtualbox-6.1.34-dfsg/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/VBoxHfs.inf --- virtualbox-6.1.32-dfsg/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/VBoxHfs.inf 2022-01-13 18:55:37.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/VBoxHfs.inf 2022-03-22 23:42:40.000000000 +0000 @@ -78,8 +78,8 @@ gEfiMdePkgTokenSpaceGuid.PcdUefiVariableDefaultPlatformLang [BuildOptions.common] - GCC:*_*_*_CC_FLAGS = -DFSTYPE=hfs -DFSTYPE_HFS=1 -DEFI_LOG_ENABLED=1 + GCC:*_*_*_CC_FLAGS = -DFSTYPE=hfs -DEFI_LOG_ENABLED=1 # -DFSW_DEBUG_LEVEL=3 - INTEL:*_*_*_CC_FLAGS = -DFSTYPE=hfs -DFSTYPE_HFS=1 -DEFI_LOG_ENABLED=1 - MSFT:*_*_*_CC_FLAGS = -DFSTYPE=hfs -DFSTYPE_HFS=1 -DEFI_LOG_ENABLED=1 + INTEL:*_*_*_CC_FLAGS = -DFSTYPE=hfs -DEFI_LOG_ENABLED=1 + MSFT:*_*_*_CC_FLAGS = -DFSTYPE=hfs -DEFI_LOG_ENABLED=1 Binary files /tmp/tmphkvfjnif/xQ5SRq8juN/virtualbox-6.1.32-dfsg/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI32.fd and /tmp/tmphkvfjnif/RKsOsTg_TL/virtualbox-6.1.34-dfsg/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI32.fd differ Binary files /tmp/tmphkvfjnif/xQ5SRq8juN/virtualbox-6.1.32-dfsg/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI64.fd and /tmp/tmphkvfjnif/RKsOsTg_TL/virtualbox-6.1.34-dfsg/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI64.fd differ diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative286.asm virtualbox-6.1.34-dfsg/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative286.asm --- virtualbox-6.1.32-dfsg/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative286.asm 2022-01-13 18:55:39.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative286.asm 2022-03-22 23:42:42.000000000 +0000 @@ -2000,7 +2000,7 @@ mov bl, byte [bp-00ch] ; 8a 5e f4 ; 0xc0dc4 vgabios.c:532 xor bh, bh ; 30 ff ; 0xc0dc7 sal bx, 003h ; c1 e3 03 ; 0xc0dc9 - cmp byte [bx+047b4h], 000h ; 80 bf b4 47 00 ; 0xc0dcc + cmp byte [bx+047b0h], 000h ; 80 bf b0 47 00 ; 0xc0dcc jne short 00e03h ; 75 30 ; 0xc0dd1 mov ax, di ; 89 f8 ; 0xc0dd3 vgabios.c:534 mul word [bp-014h] ; f7 66 ec ; 0xc0dd5 @@ -2018,13 +2018,13 @@ add di, dx ; 01 d7 ; 0xc0def add di, di ; 01 ff ; 0xc0df1 add di, cx ; 01 cf ; 0xc0df3 - mov es, [bx+047b7h] ; 8e 87 b7 47 ; 0xc0df5 vgabios.c:45 + mov es, [bx+047b3h] ; 8e 87 b3 47 ; 0xc0df5 vgabios.c:45 mov ax, word [es:di] ; 26 8b 05 ; 0xc0df9 push SS ; 16 ; 0xc0dfc vgabios.c:48 pop ES ; 07 ; 0xc0dfd mov word [es:si], ax ; 26 89 04 ; 0xc0dfe jmp short 00d83h ; eb 80 ; 0xc0e01 vgabios.c:536 - mov bl, byte [bx+047b5h] ; 8a 9f b5 47 ; 0xc0e03 vgabios.c:537 + mov bl, byte [bx+047b1h] ; 8a 9f b1 47 ; 0xc0e03 vgabios.c:537 cmp bl, 005h ; 80 fb 05 ; 0xc0e07 je short 00e5ah ; 74 4e ; 0xc0e0a cmp bl, 002h ; 80 fb 02 ; 0xc0e0c @@ -2127,18 +2127,18 @@ retn 00002h ; c2 02 00 ; 0xc0ef3 mov bx, 0010ch ; bb 0c 01 ; 0xc0ef6 vgabios.c:57 jmp short 00eb4h ; eb b9 ; 0xc0ef9 - mov dx, 05d71h ; ba 71 5d ; 0xc0efb vgabios.c:576 + mov dx, 05d6dh ; ba 6d 5d ; 0xc0efb vgabios.c:576 mov ax, ds ; 8c d8 ; 0xc0efe jmp short 00ebfh ; eb bd ; 0xc0f00 vgabios.c:577 - mov dx, 05571h ; ba 71 55 ; 0xc0f02 vgabios.c:579 + mov dx, 0556dh ; ba 6d 55 ; 0xc0f02 vgabios.c:579 jmp short 00efeh ; eb f7 ; 0xc0f05 - mov dx, 05971h ; ba 71 59 ; 0xc0f07 vgabios.c:582 + mov dx, 0596dh ; ba 6d 59 ; 0xc0f07 vgabios.c:582 jmp short 00efeh ; eb f2 ; 0xc0f0a - mov dx, 07b71h ; ba 71 7b ; 0xc0f0c vgabios.c:585 + mov dx, 07b6dh ; ba 6d 7b ; 0xc0f0c vgabios.c:585 jmp short 00efeh ; eb ed ; 0xc0f0f - mov dx, 06b71h ; ba 71 6b ; 0xc0f11 vgabios.c:588 + mov dx, 06b6dh ; ba 6d 6b ; 0xc0f11 vgabios.c:588 jmp short 00efeh ; eb e8 ; 0xc0f14 - mov dx, 07c9eh ; ba 9e 7c ; 0xc0f16 vgabios.c:591 + mov dx, 07c9ah ; ba 9a 7c ; 0xc0f16 vgabios.c:591 jmp short 00efeh ; eb e3 ; 0xc0f19 jmp short 00ef0h ; eb d3 ; 0xc0f1b vgabios.c:597 ; disGetNextSymbol 0xc0f1d LB 0x3352 -> off=0x0 cb=0000000000000166 uValue=00000000000c0f1d 'vga_read_pixel' @@ -2164,10 +2164,10 @@ mov bl, al ; 88 c3 ; 0xc0f45 vgabios.c:620 xor bh, bh ; 30 ff ; 0xc0f47 sal bx, 003h ; c1 e3 03 ; 0xc0f49 - cmp byte [bx+047b4h], 000h ; 80 bf b4 47 00 ; 0xc0f4c + cmp byte [bx+047b0h], 000h ; 80 bf b0 47 00 ; 0xc0f4c jne short 00f56h ; 75 03 ; 0xc0f51 jmp near 0107ch ; e9 26 01 ; 0xc0f53 vgabios.c:621 - mov ch, byte [bx+047b5h] ; 8a af b5 47 ; 0xc0f56 vgabios.c:624 + mov ch, byte [bx+047b1h] ; 8a af b1 47 ; 0xc0f56 vgabios.c:624 cmp ch, 003h ; 80 fd 03 ; 0xc0f5a jc short 00f6eh ; 72 0f ; 0xc0f5d jbe short 00f76h ; 76 15 ; 0xc0f5f @@ -2223,7 +2223,7 @@ inc byte [bp-006h] ; fe 46 fa ; 0xc0fdc vgabios.c:636 jmp short 00fb0h ; eb cf ; 0xc0fdf jmp near 01074h ; e9 90 00 ; 0xc0fe1 - mov cl, byte [bx+047b6h] ; 8a 8f b6 47 ; 0xc0fe4 vgabios.c:639 + mov cl, byte [bx+047b2h] ; 8a 8f b2 47 ; 0xc0fe4 vgabios.c:639 xor ch, ch ; 30 ed ; 0xc0fe8 mov bx, strict word 00004h ; bb 04 00 ; 0xc0fea sub bx, cx ; 29 cb ; 0xc0fed @@ -2244,7 +2244,7 @@ mov bl, ah ; 88 e3 ; 0xc1010 vgabios.c:643 xor bh, bh ; 30 ff ; 0xc1012 sal bx, 003h ; c1 e3 03 ; 0xc1014 - cmp byte [bx+047b6h], 002h ; 80 bf b6 47 02 ; 0xc1017 + cmp byte [bx+047b2h], 002h ; 80 bf b2 47 02 ; 0xc1017 jne short 01039h ; 75 1b ; 0xc101c mov cx, si ; 89 f1 ; 0xc101e vgabios.c:644 xor ch, ch ; 30 ed ; 0xc1020 @@ -2608,7 +2608,7 @@ xor bh, bh ; 30 ff ; 0xc12df mov si, bx ; 89 de ; 0xc12e1 sal si, 003h ; c1 e6 03 ; 0xc12e3 - cmp byte [si+047b4h], 000h ; 80 bc b4 47 00 ; 0xc12e6 + cmp byte [si+047b0h], 000h ; 80 bc b0 47 00 ; 0xc12e6 jne short 0132ch ; 75 3f ; 0xc12eb mov bx, strict word 0004ah ; bb 4a 00 ; 0xc12ed vgabios.c:47 mov ax, strict word 00040h ; b8 40 00 ; 0xc12f0 @@ -2635,11 +2635,11 @@ lea ax, [di+001h] ; 8d 45 01 ; 0xc1324 mul word [bp-00ch] ; f7 66 f4 ; 0xc1327 jmp short 0133bh ; eb 0f ; 0xc132a vgabios.c:835 - mov bl, byte [bx+04833h] ; 8a 9f 33 48 ; 0xc132c vgabios.c:837 + mov bl, byte [bx+0482fh] ; 8a 9f 2f 48 ; 0xc132c vgabios.c:837 sal bx, 006h ; c1 e3 06 ; 0xc1330 mov al, cl ; 88 c8 ; 0xc1333 xor ah, ah ; 30 e4 ; 0xc1335 - mul word [bx+0484ah] ; f7 a7 4a 48 ; 0xc1337 + mul word [bx+04846h] ; f7 a7 46 48 ; 0xc1337 mov bx, ax ; 89 c3 ; 0xc133b mov si, strict word 00063h ; be 63 00 ; 0xc133d vgabios.c:47 mov ax, strict word 00040h ; b8 40 00 ; 0xc1340 @@ -2708,7 +2708,7 @@ cmp AL, strict byte 0ffh ; 3c ff ; 0xc13bf vgabios.c:910 je short 01420h ; 74 5d ; 0xc13c1 xor bh, bh ; 30 ff ; 0xc13c3 vgabios.c:913 - mov al, byte [bx+04833h] ; 8a 87 33 48 ; 0xc13c5 + mov al, byte [bx+0482fh] ; 8a 87 2f 48 ; 0xc13c5 mov byte [bp-00eh], al ; 88 46 f2 ; 0xc13c9 mov di, 00089h ; bf 89 00 ; 0xc13cc vgabios.c:37 mov ax, strict word 00040h ; b8 40 00 ; 0xc13cf @@ -2718,13 +2718,13 @@ test AL, strict byte 008h ; a8 08 ; 0xc13da vgabios.c:930 jne short 01423h ; 75 45 ; 0xc13dc sal bx, 003h ; c1 e3 03 ; 0xc13de vgabios.c:932 - mov al, byte [bx+047b9h] ; 8a 87 b9 47 ; 0xc13e1 + mov al, byte [bx+047b5h] ; 8a 87 b5 47 ; 0xc13e1 mov dx, 003c6h ; ba c6 03 ; 0xc13e5 out DX, AL ; ee ; 0xc13e8 xor al, al ; 30 c0 ; 0xc13e9 vgabios.c:935 mov dx, 003c8h ; ba c8 03 ; 0xc13eb out DX, AL ; ee ; 0xc13ee - mov bl, byte [bx+047bah] ; 8a 9f ba 47 ; 0xc13ef vgabios.c:938 + mov bl, byte [bx+047b6h] ; 8a 9f b6 47 ; 0xc13ef vgabios.c:938 cmp bl, 001h ; 80 fb 01 ; 0xc13f3 jc short 01406h ; 72 0e ; 0xc13f6 jbe short 0140fh ; 76 15 ; 0xc13f8 @@ -2735,13 +2735,13 @@ jmp short 0141ch ; eb 16 ; 0xc1404 test bl, bl ; 84 db ; 0xc1406 jne short 0141ch ; 75 12 ; 0xc1408 - mov si, 04fc7h ; be c7 4f ; 0xc140a vgabios.c:940 + mov si, 04fc3h ; be c3 4f ; 0xc140a vgabios.c:940 jmp short 0141ch ; eb 0d ; 0xc140d vgabios.c:941 - mov si, 05087h ; be 87 50 ; 0xc140f vgabios.c:943 + mov si, 05083h ; be 83 50 ; 0xc140f vgabios.c:943 jmp short 0141ch ; eb 08 ; 0xc1412 vgabios.c:944 - mov si, 05147h ; be 47 51 ; 0xc1414 vgabios.c:946 + mov si, 05143h ; be 43 51 ; 0xc1414 vgabios.c:946 jmp short 0141ch ; eb 03 ; 0xc1417 vgabios.c:947 - mov si, 05207h ; be 07 52 ; 0xc1419 vgabios.c:949 + mov si, 05203h ; be 03 52 ; 0xc1419 vgabios.c:949 xor cx, cx ; 31 c9 ; 0xc141c vgabios.c:953 jmp short 0142bh ; eb 0b ; 0xc141e jmp near 016e9h ; e9 c6 02 ; 0xc1420 @@ -2751,9 +2751,9 @@ mov bl, byte [bp-010h] ; 8a 5e f0 ; 0xc142b vgabios.c:954 xor bh, bh ; 30 ff ; 0xc142e sal bx, 003h ; c1 e3 03 ; 0xc1430 - mov bl, byte [bx+047bah] ; 8a 9f ba 47 ; 0xc1433 + mov bl, byte [bx+047b6h] ; 8a 9f b6 47 ; 0xc1433 xor bh, bh ; 30 ff ; 0xc1437 - mov al, byte [bx+04843h] ; 8a 87 43 48 ; 0xc1439 + mov al, byte [bx+0483fh] ; 8a 87 3f 48 ; 0xc1439 xor ah, ah ; 30 e4 ; 0xc143d cmp cx, ax ; 39 c1 ; 0xc143f jnbe short 01458h ; 77 15 ; 0xc1441 @@ -2795,7 +2795,7 @@ mov bx, ax ; 89 c3 ; 0xc148b sal bx, 006h ; c1 e3 06 ; 0xc148d add bx, cx ; 01 cb ; 0xc1490 - mov al, byte [bx+0486ah] ; 8a 87 6a 48 ; 0xc1492 + mov al, byte [bx+04866h] ; 8a 87 66 48 ; 0xc1492 out DX, AL ; ee ; 0xc1496 inc cx ; 41 ; 0xc1497 vgabios.c:978 jmp short 0147bh ; eb e1 ; 0xc1498 @@ -2821,7 +2821,7 @@ mov bx, ax ; 89 c3 ; 0xc14c2 sal bx, 006h ; c1 e3 06 ; 0xc14c4 add bx, cx ; 01 cb ; 0xc14c7 - mov al, byte [bx+0484bh] ; 8a 87 4b 48 ; 0xc14c9 + mov al, byte [bx+04847h] ; 8a 87 47 48 ; 0xc14c9 mov dx, 003c5h ; ba c5 03 ; 0xc14cd out DX, AL ; ee ; 0xc14d0 inc cx ; 41 ; 0xc14d1 vgabios.c:988 @@ -2838,7 +2838,7 @@ mov bx, ax ; 89 c3 ; 0xc14e8 sal bx, 006h ; c1 e3 06 ; 0xc14ea add bx, cx ; 01 cb ; 0xc14ed - mov al, byte [bx+0487eh] ; 8a 87 7e 48 ; 0xc14ef + mov al, byte [bx+0487ah] ; 8a 87 7a 48 ; 0xc14ef mov dx, 003cfh ; ba cf 03 ; 0xc14f3 out DX, AL ; ee ; 0xc14f6 inc cx ; 41 ; 0xc14f7 vgabios.c:994 @@ -2846,7 +2846,7 @@ mov bl, byte [bp-010h] ; 8a 5e f0 ; 0xc14fa vgabios.c:997 xor bh, bh ; 30 ff ; 0xc14fd sal bx, 003h ; c1 e3 03 ; 0xc14ff - cmp byte [bx+047b5h], 001h ; 80 bf b5 47 01 ; 0xc1502 + cmp byte [bx+047b1h], 001h ; 80 bf b1 47 01 ; 0xc1502 jne short 0150eh ; 75 05 ; 0xc1507 mov dx, 003b4h ; ba b4 03 ; 0xc1509 jmp short 01511h ; eb 03 ; 0xc150c @@ -2867,11 +2867,11 @@ mov di, bx ; 89 df ; 0xc152d add di, cx ; 01 cf ; 0xc152f lea dx, [si+001h] ; 8d 54 01 ; 0xc1531 - mov al, byte [di+04851h] ; 8a 85 51 48 ; 0xc1534 + mov al, byte [di+0484dh] ; 8a 85 4d 48 ; 0xc1534 out DX, AL ; ee ; 0xc1538 inc cx ; 41 ; 0xc1539 vgabios.c:1005 jmp short 0151bh ; eb df ; 0xc153a - mov al, byte [bx+04850h] ; 8a 87 50 48 ; 0xc153c vgabios.c:1008 + mov al, byte [bx+0484ch] ; 8a 87 4c 48 ; 0xc153c vgabios.c:1008 mov dx, 003c2h ; ba c2 03 ; 0xc1540 out DX, AL ; ee ; 0xc1543 mov AL, strict byte 020h ; b0 20 ; 0xc1544 vgabios.c:1011 @@ -2886,9 +2886,9 @@ mov bl, byte [bp-010h] ; 8a 5e f0 ; 0xc1556 vgabios.c:1016 xor bh, bh ; 30 ff ; 0xc1559 sal bx, 003h ; c1 e3 03 ; 0xc155b - cmp byte [bx+047b4h], 000h ; 80 bf b4 47 00 ; 0xc155e + cmp byte [bx+047b0h], 000h ; 80 bf b0 47 00 ; 0xc155e jne short 01577h ; 75 12 ; 0xc1563 - mov es, [bx+047b7h] ; 8e 87 b7 47 ; 0xc1565 vgabios.c:1018 + mov es, [bx+047b3h] ; 8e 87 b3 47 ; 0xc1565 vgabios.c:1018 mov cx, 04000h ; b9 00 40 ; 0xc1569 mov ax, 00720h ; b8 20 07 ; 0xc156c xor di, di ; 31 ff ; 0xc156f @@ -2897,7 +2897,7 @@ jmp short 015b3h ; eb 3c ; 0xc1575 vgabios.c:1020 cmp byte [bp-00ch], 00dh ; 80 7e f4 0d ; 0xc1577 vgabios.c:1022 jnc short 0158eh ; 73 11 ; 0xc157b - mov es, [bx+047b7h] ; 8e 87 b7 47 ; 0xc157d vgabios.c:1024 + mov es, [bx+047b3h] ; 8e 87 b3 47 ; 0xc157d vgabios.c:1024 mov cx, 04000h ; b9 00 40 ; 0xc1581 xor ax, ax ; 31 c0 ; 0xc1584 xor di, di ; 31 ff ; 0xc1586 @@ -2914,7 +2914,7 @@ mov word [bp-016h], ax ; 89 46 ea ; 0xc159a mov AL, strict byte 00fh ; b0 0f ; 0xc159d vgabios.c:1030 out DX, AL ; ee ; 0xc159f - mov es, [bx+047b7h] ; 8e 87 b7 47 ; 0xc15a0 vgabios.c:1031 + mov es, [bx+047b3h] ; 8e 87 b3 47 ; 0xc15a0 vgabios.c:1031 mov cx, 08000h ; b9 00 80 ; 0xc15a4 xor ax, ax ; 31 c0 ; 0xc15a7 xor di, di ; 31 ff ; 0xc15a9 @@ -2930,19 +2930,19 @@ mov bl, byte [bp-00eh] ; 8a 5e f2 ; 0xc15c1 vgabios.c:1039 xor bh, bh ; 30 ff ; 0xc15c4 sal bx, 006h ; c1 e3 06 ; 0xc15c6 - mov al, byte [bx+04847h] ; 8a 87 47 48 ; 0xc15c9 + mov al, byte [bx+04843h] ; 8a 87 43 48 ; 0xc15c9 xor ah, ah ; 30 e4 ; 0xc15cd mov di, strict word 0004ah ; bf 4a 00 ; 0xc15cf vgabios.c:52 mov word [es:di], ax ; 26 89 05 ; 0xc15d2 - mov ax, word [bx+0484ah] ; 8b 87 4a 48 ; 0xc15d5 vgabios.c:50 + mov ax, word [bx+04846h] ; 8b 87 46 48 ; 0xc15d5 vgabios.c:50 mov di, strict word 0004ch ; bf 4c 00 ; 0xc15d9 vgabios.c:52 mov word [es:di], ax ; 26 89 05 ; 0xc15dc mov di, strict word 00063h ; bf 63 00 ; 0xc15df vgabios.c:52 mov word [es:di], si ; 26 89 35 ; 0xc15e2 - mov al, byte [bx+04848h] ; 8a 87 48 48 ; 0xc15e5 vgabios.c:40 + mov al, byte [bx+04844h] ; 8a 87 44 48 ; 0xc15e5 vgabios.c:40 mov si, 00084h ; be 84 00 ; 0xc15e9 vgabios.c:42 mov byte [es:si], al ; 26 88 04 ; 0xc15ec - mov al, byte [bx+04849h] ; 8a 87 49 48 ; 0xc15ef vgabios.c:1043 + mov al, byte [bx+04845h] ; 8a 87 45 48 ; 0xc15ef vgabios.c:1043 xor ah, ah ; 30 e4 ; 0xc15f3 mov bx, 00085h ; bb 85 00 ; 0xc15f5 vgabios.c:52 mov word [es:bx], ax ; 26 89 07 ; 0xc15f8 @@ -2960,14 +2960,14 @@ mov byte [es:bx], 008h ; 26 c6 07 08 ; 0xc161b mov ax, ds ; 8c d8 ; 0xc161f vgabios.c:1050 mov bx, 000a8h ; bb a8 00 ; 0xc1621 vgabios.c:62 - mov word [es:bx], 05555h ; 26 c7 07 55 55 ; 0xc1624 + mov word [es:bx], 05551h ; 26 c7 07 51 55 ; 0xc1624 mov [es:bx+002h], ds ; 26 8c 5f 02 ; 0xc1629 mov al, byte [bp-00ch] ; 8a 46 f4 ; 0xc162d vgabios.c:1052 cmp AL, strict byte 007h ; 3c 07 ; 0xc1630 jnbe short 0165bh ; 77 27 ; 0xc1632 mov bl, al ; 88 c3 ; 0xc1634 vgabios.c:1054 xor bh, bh ; 30 ff ; 0xc1636 - mov al, byte [bx+07de2h] ; 8a 87 e2 7d ; 0xc1638 vgabios.c:40 + mov al, byte [bx+07ddeh] ; 8a 87 de 7d ; 0xc1638 vgabios.c:40 mov bx, strict word 00065h ; bb 65 00 ; 0xc163c vgabios.c:42 mov byte [es:bx], al ; 26 88 07 ; 0xc163f cmp byte [bp-00ch], 006h ; 80 7e f4 06 ; 0xc1642 vgabios.c:1055 @@ -2982,7 +2982,7 @@ mov bl, byte [bp-010h] ; 8a 5e f0 ; 0xc165b vgabios.c:1059 xor bh, bh ; 30 ff ; 0xc165e sal bx, 003h ; c1 e3 03 ; 0xc1660 - cmp byte [bx+047b4h], 000h ; 80 bf b4 47 00 ; 0xc1663 + cmp byte [bx+047b0h], 000h ; 80 bf b0 47 00 ; 0xc1663 jne short 01673h ; 75 09 ; 0xc1668 mov dx, strict word 00007h ; ba 07 00 ; 0xc166a vgabios.c:1061 mov ax, strict word 00006h ; b8 06 00 ; 0xc166d @@ -3002,7 +3002,7 @@ mov bl, byte [bp-010h] ; 8a 5e f0 ; 0xc168d vgabios.c:1072 xor bh, bh ; 30 ff ; 0xc1690 sal bx, 003h ; c1 e3 03 ; 0xc1692 - cmp byte [bx+047b4h], 000h ; 80 bf b4 47 00 ; 0xc1695 + cmp byte [bx+047b0h], 000h ; 80 bf b0 47 00 ; 0xc1695 jne short 016ach ; 75 10 ; 0xc169a xor dx, dx ; 31 d2 ; 0xc169c vgabios.c:1074 mov ax, strict word 00004h ; b8 04 00 ; 0xc169e @@ -3011,28 +3011,28 @@ mov AL, strict byte 003h ; b0 03 ; 0xc16a6 mov AH, strict byte 011h ; b4 11 ; 0xc16a8 int 06dh ; cd 6d ; 0xc16aa - mov bx, 05971h ; bb 71 59 ; 0xc16ac vgabios.c:1079 + mov bx, 0596dh ; bb 6d 59 ; 0xc16ac vgabios.c:1079 mov cx, ds ; 8c d9 ; 0xc16af mov ax, strict word 0001fh ; b8 1f 00 ; 0xc16b1 call 00980h ; e8 c9 f2 ; 0xc16b4 mov bl, byte [bp-00eh] ; 8a 5e f2 ; 0xc16b7 vgabios.c:1081 xor bh, bh ; 30 ff ; 0xc16ba sal bx, 006h ; c1 e3 06 ; 0xc16bc - mov dl, byte [bx+04849h] ; 8a 97 49 48 ; 0xc16bf + mov dl, byte [bx+04845h] ; 8a 97 45 48 ; 0xc16bf cmp dl, 010h ; 80 fa 10 ; 0xc16c3 je short 016e4h ; 74 1c ; 0xc16c6 cmp dl, 00eh ; 80 fa 0e ; 0xc16c8 je short 016dfh ; 74 12 ; 0xc16cb cmp dl, 008h ; 80 fa 08 ; 0xc16cd jne short 016e9h ; 75 17 ; 0xc16d0 - mov bx, 05571h ; bb 71 55 ; 0xc16d2 vgabios.c:1083 + mov bx, 0556dh ; bb 6d 55 ; 0xc16d2 vgabios.c:1083 mov cx, ds ; 8c d9 ; 0xc16d5 mov ax, strict word 00043h ; b8 43 00 ; 0xc16d7 call 00980h ; e8 a3 f2 ; 0xc16da jmp short 016e9h ; eb 0a ; 0xc16dd vgabios.c:1084 - mov bx, 05d71h ; bb 71 5d ; 0xc16df vgabios.c:1086 + mov bx, 05d6dh ; bb 6d 5d ; 0xc16df vgabios.c:1086 jmp short 016d5h ; eb f1 ; 0xc16e2 - mov bx, 06b71h ; bb 71 6b ; 0xc16e4 vgabios.c:1089 + mov bx, 06b6dh ; bb 6d 6b ; 0xc16e4 vgabios.c:1089 jmp short 016d5h ; eb ec ; 0xc16e7 lea sp, [bp-00ah] ; 8d 66 f6 ; 0xc16e9 vgabios.c:1092 pop di ; 5f ; 0xc16ec @@ -3509,7 +3509,7 @@ mov ax, word [bp-01eh] ; 8b 46 e2 ; 0xc1aec mul word [bp-016h] ; f7 66 ea ; 0xc1aef mov cx, ax ; 89 c1 ; 0xc1af2 - cmp byte [bx+047b4h], 000h ; 80 bf b4 47 00 ; 0xc1af4 + cmp byte [bx+047b0h], 000h ; 80 bf b0 47 00 ; 0xc1af4 jne short 01b44h ; 75 49 ; 0xc1af9 add ax, ax ; 01 c0 ; 0xc1afb vgabios.c:1225 or AL, strict byte 0ffh ; 0c ff ; 0xc1afd @@ -3534,7 +3534,7 @@ mov al, byte [bp-010h] ; 8a 46 f0 ; 0xc1b2d vgabios.c:1232 sal ax, 008h ; c1 e0 08 ; 0xc1b30 add ax, strict word 00020h ; 05 20 00 ; 0xc1b33 - mov es, [bx+047b7h] ; 8e 87 b7 47 ; 0xc1b36 + mov es, [bx+047b3h] ; 8e 87 b3 47 ; 0xc1b36 mov di, word [bp-020h] ; 8b 7e e0 ; 0xc1b3a jcxz 01b41h ; e3 02 ; 0xc1b3d rep stosw ; f3 ab ; 0xc1b3f @@ -3575,7 +3575,7 @@ mov bl, byte [bp-012h] ; 8a 5e ee ; 0xc1b99 xor bh, bh ; 30 ff ; 0xc1b9c sal bx, 003h ; c1 e3 03 ; 0xc1b9e - mov es, [bx+047b7h] ; 8e 87 b7 47 ; 0xc1ba1 + mov es, [bx+047b3h] ; 8e 87 b3 47 ; 0xc1ba1 mov ax, si ; 89 f0 ; 0xc1ba5 jcxz 01babh ; e3 02 ; 0xc1ba7 rep stosw ; f3 ab ; 0xc1ba9 @@ -3594,7 +3594,7 @@ mov bl, byte [bp-012h] ; 8a 5e ee ; 0xc1bca xor bh, bh ; 30 ff ; 0xc1bcd sal bx, 003h ; c1 e3 03 ; 0xc1bcf - mov bx, word [bx+047b7h] ; 8b 9f b7 47 ; 0xc1bd2 + mov bx, word [bx+047b3h] ; 8b 9f b3 47 ; 0xc1bd2 mov ax, word [bp-01ch] ; 8b 46 e4 ; 0xc1bd6 mul word [bp-01eh] ; f7 66 e2 ; 0xc1bd9 add ax, word [bp-018h] ; 03 46 e8 ; 0xc1bdc @@ -3644,7 +3644,7 @@ mov bl, byte [bp-012h] ; 8a 5e ee ; 0xc1c46 xor bh, bh ; 30 ff ; 0xc1c49 sal bx, 003h ; c1 e3 03 ; 0xc1c4b - mov es, [bx+047b7h] ; 8e 87 b7 47 ; 0xc1c4e + mov es, [bx+047b3h] ; 8e 87 b3 47 ; 0xc1c4e mov ax, si ; 89 f0 ; 0xc1c52 jcxz 01c58h ; e3 02 ; 0xc1c54 rep stosw ; f3 ab ; 0xc1c56 @@ -3666,7 +3666,7 @@ mov bl, byte [bp-012h] ; 8a 5e ee ; 0xc1c7d xor bh, bh ; 30 ff ; 0xc1c80 sal bx, 003h ; c1 e3 03 ; 0xc1c82 - mov bx, word [bx+047b7h] ; 8b 9f b7 47 ; 0xc1c85 + mov bx, word [bx+047b3h] ; 8b 9f b3 47 ; 0xc1c85 mov ax, word [bp-01ch] ; 8b 46 e4 ; 0xc1c89 mul word [bp-01eh] ; f7 66 e2 ; 0xc1c8c add ax, cx ; 01 c8 ; 0xc1c8f @@ -3688,13 +3688,13 @@ dec word [bp-01ch] ; ff 4e e4 ; 0xc1cb1 vgabios.c:1253 jmp near 01c00h ; e9 49 ff ; 0xc1cb4 mov si, word [bp-01ah] ; 8b 76 e6 ; 0xc1cb7 vgabios.c:1259 - mov al, byte [si+04833h] ; 8a 84 33 48 ; 0xc1cba + mov al, byte [si+0482fh] ; 8a 84 2f 48 ; 0xc1cba xor ah, ah ; 30 e4 ; 0xc1cbe mov si, ax ; 89 c6 ; 0xc1cc0 sal si, 006h ; c1 e6 06 ; 0xc1cc2 - mov al, byte [si+04849h] ; 8a 84 49 48 ; 0xc1cc5 + mov al, byte [si+04845h] ; 8a 84 45 48 ; 0xc1cc5 mov byte [bp-00eh], al ; 88 46 f2 ; 0xc1cc9 - mov al, byte [bx+047b5h] ; 8a 87 b5 47 ; 0xc1ccc vgabios.c:1260 + mov al, byte [bx+047b1h] ; 8a 87 b1 47 ; 0xc1ccc vgabios.c:1260 cmp AL, strict byte 003h ; 3c 03 ; 0xc1cd0 jc short 01ce0h ; 72 0c ; 0xc1cd2 jbe short 01ce7h ; 76 11 ; 0xc1cd4 @@ -3740,7 +3740,7 @@ mov bl, byte [bp-012h] ; 8a 5e ee ; 0xc1d34 xor bh, bh ; 30 ff ; 0xc1d37 sal bx, 003h ; c1 e3 03 ; 0xc1d39 - mov bx, word [bx+047b7h] ; 8b 9f b7 47 ; 0xc1d3c + mov bx, word [bx+047b3h] ; 8b 9f b3 47 ; 0xc1d3c mov cx, ax ; 89 c1 ; 0xc1d40 mov ax, dx ; 89 d0 ; 0xc1d42 xor di, di ; 31 ff ; 0xc1d44 @@ -3848,7 +3848,7 @@ jc short 01e8eh ; 72 4e ; 0xc1e3e dec word [bp-01ch] ; ff 4e e4 ; 0xc1e40 vgabios.c:1289 jmp short 01dd8h ; eb 93 ; 0xc1e43 - mov al, byte [bx+047b6h] ; 8a 87 b6 47 ; 0xc1e45 vgabios.c:1294 + mov al, byte [bx+047b2h] ; 8a 87 b2 47 ; 0xc1e45 vgabios.c:1294 mov byte [bp-014h], al ; 88 46 ec ; 0xc1e49 cmp byte [bp-006h], 000h ; 80 7e fa 00 ; 0xc1e4c vgabios.c:1295 jne short 01e91h ; 75 3f ; 0xc1e50 @@ -3872,7 +3872,7 @@ mov cx, ax ; 89 c1 ; 0xc1e7d mov al, byte [bp-010h] ; 8a 46 f0 ; 0xc1e7f xor ah, ah ; 30 e4 ; 0xc1e82 - mov es, [bx+047b7h] ; 8e 87 b7 47 ; 0xc1e84 + mov es, [bx+047b3h] ; 8e 87 b3 47 ; 0xc1e84 xor di, di ; 31 ff ; 0xc1e88 jcxz 01e8eh ; e3 02 ; 0xc1e8a rep stosb ; f3 aa ; 0xc1e8c @@ -3998,7 +3998,7 @@ sal cx, 003h ; c1 e1 03 ; 0xc1fb7 mov al, byte [bp-010h] ; 8a 46 f0 ; 0xc1fba xor ah, ah ; 30 e4 ; 0xc1fbd - mov es, [bx+047b7h] ; 8e 87 b7 47 ; 0xc1fbf + mov es, [bx+047b3h] ; 8e 87 b3 47 ; 0xc1fbf xor di, di ; 31 ff ; 0xc1fc3 jcxz 01fc9h ; e3 02 ; 0xc1fc5 rep stosb ; f3 aa ; 0xc1fc7 @@ -4225,7 +4225,7 @@ mov bh, al ; 88 c7 ; 0xc21d3 mov ch, dl ; 88 d5 ; 0xc21d5 mov al, bl ; 88 d8 ; 0xc21d7 - mov di, 05571h ; bf 71 55 ; 0xc21d9 vgabios.c:1421 + mov di, 0556dh ; bf 6d 55 ; 0xc21d9 vgabios.c:1421 xor ah, ah ; 30 e4 ; 0xc21dc vgabios.c:1422 mov dl, byte [bp+00ah] ; 8a 56 0a ; 0xc21de xor dh, dh ; 30 f6 ; 0xc21e1 @@ -4342,7 +4342,7 @@ mov bh, al ; 88 c7 ; 0xc22e5 mov ch, dl ; 88 d5 ; 0xc22e7 mov al, cl ; 88 c8 ; 0xc22e9 - mov di, 05571h ; bf 71 55 ; 0xc22eb vgabios.c:1485 + mov di, 0556dh ; bf 6d 55 ; 0xc22eb vgabios.c:1485 xor ah, ah ; 30 e4 ; 0xc22ee vgabios.c:1486 mov dl, byte [bp+008h] ; 8a 56 08 ; 0xc22f0 xor dh, dh ; 30 f6 ; 0xc22f3 @@ -4457,7 +4457,7 @@ xor bh, bh ; 30 ff ; 0xc23eb mov di, bx ; 89 df ; 0xc23ed sal di, 003h ; c1 e7 03 ; 0xc23ef - cmp byte [di+047b4h], 000h ; 80 bd b4 47 00 ; 0xc23f2 + cmp byte [di+047b0h], 000h ; 80 bd b0 47 00 ; 0xc23f2 jne short 02442h ; 75 49 ; 0xc23f7 mul dx ; f7 e2 ; 0xc23f9 vgabios.c:1528 add ax, ax ; 01 c0 ; 0xc23fb @@ -4484,17 +4484,17 @@ add bx, ax ; 01 c3 ; 0xc242b mov word [bp-020h], bx ; 89 5e e0 ; 0xc242d mov ax, word [bp-020h] ; 8b 46 e0 ; 0xc2430 vgabios.c:1531 - mov es, [di+047b7h] ; 8e 85 b7 47 ; 0xc2433 + mov es, [di+047b3h] ; 8e 85 b3 47 ; 0xc2433 mov cx, si ; 89 f1 ; 0xc2437 mov di, dx ; 89 d7 ; 0xc2439 jcxz 0243fh ; e3 02 ; 0xc243b rep stosw ; f3 ab ; 0xc243d jmp near 024fah ; e9 b8 00 ; 0xc243f vgabios.c:1533 - mov bl, byte [bx+04833h] ; 8a 9f 33 48 ; 0xc2442 vgabios.c:1536 + mov bl, byte [bx+0482fh] ; 8a 9f 2f 48 ; 0xc2442 vgabios.c:1536 sal bx, 006h ; c1 e3 06 ; 0xc2446 - mov al, byte [bx+04849h] ; 8a 87 49 48 ; 0xc2449 + mov al, byte [bx+04845h] ; 8a 87 45 48 ; 0xc2449 mov byte [bp-012h], al ; 88 46 ee ; 0xc244d - mov al, byte [di+047b6h] ; 8a 85 b6 47 ; 0xc2450 vgabios.c:1537 + mov al, byte [di+047b2h] ; 8a 85 b2 47 ; 0xc2450 vgabios.c:1537 mov byte [bp-014h], al ; 88 46 ec ; 0xc2454 dec si ; 4e ; 0xc2457 vgabios.c:1538 cmp si, strict byte 0ffffh ; 83 fe ff ; 0xc2458 @@ -4502,7 +4502,7 @@ mov bl, byte [bp-010h] ; 8a 5e f0 ; 0xc245d vgabios.c:1540 xor bh, bh ; 30 ff ; 0xc2460 sal bx, 003h ; c1 e3 03 ; 0xc2462 - mov bl, byte [bx+047b5h] ; 8a 9f b5 47 ; 0xc2465 + mov bl, byte [bx+047b1h] ; 8a 9f b1 47 ; 0xc2465 cmp bl, 003h ; 80 fb 03 ; 0xc2469 jc short 0247dh ; 72 0f ; 0xc246c jbe short 02484h ; 76 14 ; 0xc246e @@ -4615,7 +4615,7 @@ mov al, byte [bp-010h] ; 8a 46 f0 ; 0xc256e vgabios.c:1583 mov bx, ax ; 89 c3 ; 0xc2571 sal bx, 003h ; c1 e3 03 ; 0xc2573 - cmp byte [bx+047b4h], 000h ; 80 bf b4 47 00 ; 0xc2576 + cmp byte [bx+047b0h], 000h ; 80 bf b0 47 00 ; 0xc2576 jne short 025bfh ; 75 42 ; 0xc257b mov ax, cx ; 89 c8 ; 0xc257d vgabios.c:1586 mul dx ; f7 e2 ; 0xc257f @@ -4641,19 +4641,19 @@ xor ah, ah ; 30 e4 ; 0xc25aa mov di, ax ; 89 c7 ; 0xc25ac sal di, 003h ; c1 e7 03 ; 0xc25ae - mov es, [di+047b7h] ; 8e 85 b7 47 ; 0xc25b1 vgabios.c:40 + mov es, [di+047b3h] ; 8e 85 b3 47 ; 0xc25b1 vgabios.c:40 mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc25b5 vgabios.c:42 mov byte [es:bx], al ; 26 88 07 ; 0xc25b8 inc bx ; 43 ; 0xc25bb vgabios.c:1590 inc bx ; 43 ; 0xc25bc jmp short 025a1h ; eb e2 ; 0xc25bd vgabios.c:1591 mov di, ax ; 89 c7 ; 0xc25bf vgabios.c:1596 - mov al, byte [di+04833h] ; 8a 85 33 48 ; 0xc25c1 + mov al, byte [di+0482fh] ; 8a 85 2f 48 ; 0xc25c1 mov di, ax ; 89 c7 ; 0xc25c5 sal di, 006h ; c1 e7 06 ; 0xc25c7 - mov al, byte [di+04849h] ; 8a 85 49 48 ; 0xc25ca + mov al, byte [di+04845h] ; 8a 85 45 48 ; 0xc25ca mov byte [bp-014h], al ; 88 46 ec ; 0xc25ce - mov al, byte [bx+047b6h] ; 8a 87 b6 47 ; 0xc25d1 vgabios.c:1597 + mov al, byte [bx+047b2h] ; 8a 87 b2 47 ; 0xc25d1 vgabios.c:1597 mov byte [bp-016h], al ; 88 46 ea ; 0xc25d5 dec si ; 4e ; 0xc25d8 vgabios.c:1598 cmp si, strict byte 0ffffh ; 83 fe ff ; 0xc25d9 @@ -4661,7 +4661,7 @@ mov bl, byte [bp-012h] ; 8a 5e ee ; 0xc25de vgabios.c:1600 xor bh, bh ; 30 ff ; 0xc25e1 sal bx, 003h ; c1 e3 03 ; 0xc25e3 - mov bl, byte [bx+047b5h] ; 8a 9f b5 47 ; 0xc25e6 + mov bl, byte [bx+047b1h] ; 8a 9f b1 47 ; 0xc25e6 cmp bl, 003h ; 80 fb 03 ; 0xc25ea jc short 025feh ; 72 0f ; 0xc25ed jbe short 02605h ; 76 14 ; 0xc25ef @@ -4748,9 +4748,9 @@ mov bl, al ; 88 c3 ; 0xc26aa vgabios.c:1633 xor bh, bh ; 30 ff ; 0xc26ac sal bx, 003h ; c1 e3 03 ; 0xc26ae - cmp byte [bx+047b4h], 000h ; 80 bf b4 47 00 ; 0xc26b1 + cmp byte [bx+047b0h], 000h ; 80 bf b0 47 00 ; 0xc26b1 je short 026d0h ; 74 18 ; 0xc26b6 - mov al, byte [bx+047b5h] ; 8a 87 b5 47 ; 0xc26b8 vgabios.c:1635 + mov al, byte [bx+047b1h] ; 8a 87 b1 47 ; 0xc26b8 vgabios.c:1635 cmp AL, strict byte 003h ; 3c 03 ; 0xc26bc jc short 026cch ; 72 0c ; 0xc26be jbe short 026d6h ; 76 14 ; 0xc26c0 @@ -4812,7 +4812,7 @@ mov ax, dx ; 89 d0 ; 0xc2747 vgabios.c:1655 shr ax, 1 ; d1 e8 ; 0xc2749 imul ax, ax, strict byte 00050h ; 6b c0 50 ; 0xc274b - cmp byte [bx+047b6h], 002h ; 80 bf b6 47 02 ; 0xc274e + cmp byte [bx+047b2h], 002h ; 80 bf b2 47 02 ; 0xc274e jne short 0275dh ; 75 08 ; 0xc2753 mov bx, word [bp-008h] ; 8b 5e f8 ; 0xc2755 vgabios.c:1657 shr bx, 002h ; c1 eb 02 ; 0xc2758 @@ -4830,7 +4830,7 @@ xor ah, ah ; 30 e4 ; 0xc2777 mov si, ax ; 89 c6 ; 0xc2779 sal si, 003h ; c1 e6 03 ; 0xc277b - cmp byte [si+047b6h], 002h ; 80 bc b6 47 02 ; 0xc277e + cmp byte [si+047b2h], 002h ; 80 bc b2 47 02 ; 0xc277e jne short 0279eh ; 75 19 ; 0xc2783 mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc2785 vgabios.c:1667 and AL, strict byte 003h ; 24 03 ; 0xc2788 @@ -4952,7 +4952,7 @@ xor ah, ah ; 30 e4 ; 0xc28a1 mov bx, ax ; 89 c3 ; 0xc28a3 sal bx, 003h ; c1 e3 03 ; 0xc28a5 - cmp byte [bx+047b4h], 000h ; 80 bf b4 47 00 ; 0xc28a8 + cmp byte [bx+047b0h], 000h ; 80 bf b0 47 00 ; 0xc28a8 jne short 028f1h ; 75 42 ; 0xc28ad mov ax, word [bp-010h] ; 8b 46 f0 ; 0xc28af vgabios.c:1745 mul word [bp-012h] ; f7 66 ee ; 0xc28b2 @@ -4972,22 +4972,22 @@ add ax, dx ; 01 d0 ; 0xc28d2 add ax, ax ; 01 c0 ; 0xc28d4 add si, ax ; 01 c6 ; 0xc28d6 - mov es, [bx+047b7h] ; 8e 87 b7 47 ; 0xc28d8 vgabios.c:40 + mov es, [bx+047b3h] ; 8e 87 b3 47 ; 0xc28d8 vgabios.c:40 mov byte [es:si], ch ; 26 88 2c ; 0xc28dc vgabios.c:42 cmp cl, 003h ; 80 f9 03 ; 0xc28df vgabios.c:1750 jne short 02920h ; 75 3c ; 0xc28e2 inc si ; 46 ; 0xc28e4 vgabios.c:1751 - mov es, [bx+047b7h] ; 8e 87 b7 47 ; 0xc28e5 vgabios.c:40 + mov es, [bx+047b3h] ; 8e 87 b3 47 ; 0xc28e5 vgabios.c:40 mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc28e9 mov byte [es:si], al ; 26 88 04 ; 0xc28ec jmp short 02920h ; eb 2f ; 0xc28ef vgabios.c:1753 mov si, ax ; 89 c6 ; 0xc28f1 vgabios.c:1756 - mov al, byte [si+04833h] ; 8a 84 33 48 ; 0xc28f3 + mov al, byte [si+0482fh] ; 8a 84 2f 48 ; 0xc28f3 mov si, ax ; 89 c6 ; 0xc28f7 sal si, 006h ; c1 e6 06 ; 0xc28f9 - mov dl, byte [si+04849h] ; 8a 94 49 48 ; 0xc28fc - mov al, byte [bx+047b6h] ; 8a 87 b6 47 ; 0xc2900 vgabios.c:1757 - mov bl, byte [bx+047b5h] ; 8a 9f b5 47 ; 0xc2904 vgabios.c:1758 + mov dl, byte [si+04845h] ; 8a 94 45 48 ; 0xc28fc + mov al, byte [bx+047b2h] ; 8a 87 b2 47 ; 0xc2900 vgabios.c:1757 + mov bl, byte [bx+047b1h] ; 8a 9f b1 47 ; 0xc2904 vgabios.c:1758 cmp bl, 003h ; 80 fb 03 ; 0xc2908 jc short 0291bh ; 72 0e ; 0xc290b jbe short 02922h ; 76 13 ; 0xc290d @@ -5064,7 +5064,7 @@ mov cl, byte [bp-010h] ; 8a 4e f0 ; 0xc29bb db 0feh, 0c9h ; dec cl ; fe c9 ; 0xc29be - cmp byte [bx+047b4h], 000h ; 80 bf b4 47 00 ; 0xc29c0 + cmp byte [bx+047b0h], 000h ; 80 bf b0 47 00 ; 0xc29c0 jne short 02a11h ; 75 4a ; 0xc29c5 mov ax, word [bp-010h] ; 8b 46 f0 ; 0xc29c7 vgabios.c:1790 mul word [bp-012h] ; f7 66 ee ; 0xc29ca @@ -5086,7 +5086,7 @@ add ax, ax ; 01 c0 ; 0xc29ed add si, ax ; 01 c6 ; 0xc29ef inc si ; 46 ; 0xc29f1 vgabios.c:1791 - mov es, [bx+047b7h] ; 8e 87 b7 47 ; 0xc29f2 vgabios.c:35 + mov es, [bx+047b3h] ; 8e 87 b3 47 ; 0xc29f2 vgabios.c:35 mov dl, byte [es:si] ; 26 8a 14 ; 0xc29f6 push strict byte 00001h ; 6a 01 ; 0xc29f9 vgabios.c:1792 mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc29fb @@ -5367,7 +5367,7 @@ mov di, bx ; 89 df ; 0xc2c18 vgabios.c:1888 sal di, 005h ; c1 e7 05 ; 0xc2c1a add di, word [bp-00ch] ; 03 7e f4 ; 0xc2c1d - add si, 05d71h ; 81 c6 71 5d ; 0xc2c20 vgabios.c:1889 + add si, 05d6dh ; 81 c6 6d 5d ; 0xc2c20 vgabios.c:1889 mov cx, strict word 0000eh ; b9 0e 00 ; 0xc2c24 mov dx, 0c000h ; ba 00 c0 ; 0xc2c27 mov ax, 0a000h ; b8 00 a0 ; 0xc2c2a @@ -5422,7 +5422,7 @@ mov di, bx ; 89 df ; 0xc2c87 vgabios.c:1907 sal di, 005h ; c1 e7 05 ; 0xc2c89 add di, word [bp-00ch] ; 03 7e f4 ; 0xc2c8c - add si, 05571h ; 81 c6 71 55 ; 0xc2c8f vgabios.c:1908 + add si, 0556dh ; 81 c6 6d 55 ; 0xc2c8f vgabios.c:1908 mov cx, strict word 00008h ; b9 08 00 ; 0xc2c93 mov dx, 0c000h ; ba 00 c0 ; 0xc2c96 mov ax, 0a000h ; b8 00 a0 ; 0xc2c99 @@ -5477,7 +5477,7 @@ mov di, bx ; 89 df ; 0xc2cf6 vgabios.c:1927 sal di, 005h ; c1 e7 05 ; 0xc2cf8 add di, word [bp-00ch] ; 03 7e f4 ; 0xc2cfb - add si, 06b71h ; 81 c6 71 6b ; 0xc2cfe vgabios.c:1928 + add si, 06b6dh ; 81 c6 6d 6b ; 0xc2cfe vgabios.c:1928 mov cx, strict word 00010h ; b9 10 00 ; 0xc2d02 mov dx, 0c000h ; ba 00 c0 ; 0xc2d05 mov ax, 0a000h ; b8 00 a0 ; 0xc2d08 @@ -5635,7 +5635,7 @@ mov word [bp-00ah], ax ; 89 46 f6 ; 0xc2e14 vgabios.c:48 mov ax, ds ; 8c d8 ; 0xc2e17 vgabios.c:2035 mov es, dx ; 8e c2 ; 0xc2e19 vgabios.c:62 - mov word [es:bx], 05507h ; 26 c7 07 07 55 ; 0xc2e1b + mov word [es:bx], 05503h ; 26 c7 07 03 55 ; 0xc2e1b mov [es:bx+002h], ds ; 26 8c 5f 02 ; 0xc2e20 lea di, [bx+004h] ; 8d 7f 04 ; 0xc2e24 vgabios.c:2040 mov cx, strict word 0001eh ; b9 1e 00 ; 0xc2e27 @@ -6516,7 +6516,7 @@ mov bl, al ; 88 c3 ; 0xc35c6 xor bh, bh ; 30 ff ; 0xc35c8 sal bx, 003h ; c1 e3 03 ; 0xc35ca - cmp dl, byte [bx+047b3h] ; 3a 97 b3 47 ; 0xc35cd + cmp dl, byte [bx+047afh] ; 3a 97 af 47 ; 0xc35cd jne short 035c0h ; 75 ed ; 0xc35d1 mov ah, al ; 88 c4 ; 0xc35d3 mov al, ah ; 88 e0 ; 0xc35d5 vgabios.c:2323 @@ -7278,7 +7278,7 @@ mov word [es:bx], 04556h ; 26 c7 07 56 45 ; 0xc3cea mov word [es:bx+002h], 04153h ; 26 c7 47 02 53 41 ; 0xc3cef vbe.c:320 mov word [es:bx+004h], 00200h ; 26 c7 47 04 00 02 ; 0xc3cf5 vbe.c:324 - mov word [es:bx+006h], 07deah ; 26 c7 47 06 ea 7d ; 0xc3cfb vbe.c:327 + mov word [es:bx+006h], 07de6h ; 26 c7 47 06 e6 7d ; 0xc3cfb vbe.c:327 mov [es:bx+008h], ds ; 26 8c 5f 08 ; 0xc3d01 mov word [es:bx+00ah], strict word 00001h ; 26 c7 47 0a 01 00 ; 0xc3d05 vbe.c:330 mov word [es:bx+00ch], strict word 00000h ; 26 c7 47 0c 00 00 ; 0xc3d0b vbe.c:332 @@ -7294,11 +7294,11 @@ cmp word [bp-00eh], strict byte 00000h ; 83 7e f2 00 ; 0xc3d2f vbe.c:342 je short 03d59h ; 74 24 ; 0xc3d33 mov word [es:bx+014h], strict word 00003h ; 26 c7 47 14 03 00 ; 0xc3d35 vbe.c:345 - mov word [es:bx+016h], 07dffh ; 26 c7 47 16 ff 7d ; 0xc3d3b vbe.c:346 + mov word [es:bx+016h], 07dfbh ; 26 c7 47 16 fb 7d ; 0xc3d3b vbe.c:346 mov [es:bx+018h], ds ; 26 8c 5f 18 ; 0xc3d41 - mov word [es:bx+01ah], 07e12h ; 26 c7 47 1a 12 7e ; 0xc3d45 vbe.c:347 + mov word [es:bx+01ah], 07e0eh ; 26 c7 47 1a 0e 7e ; 0xc3d45 vbe.c:347 mov [es:bx+01ch], ds ; 26 8c 5f 1c ; 0xc3d4b - mov word [es:bx+01eh], 07e33h ; 26 c7 47 1e 33 7e ; 0xc3d4f vbe.c:348 + mov word [es:bx+01eh], 07e2fh ; 26 c7 47 1e 2f 7e ; 0xc3d4f vbe.c:348 mov [es:bx+020h], ds ; 26 8c 5f 20 ; 0xc3d55 mov dx, cx ; 89 ca ; 0xc3d59 vbe.c:355 add dx, strict byte 0001bh ; 83 c2 1b ; 0xc3d5b @@ -8033,12 +8033,12 @@ ; Padding 0x6b bytes at 0xc4715 times 107 db 0 -section _DATA progbits vstart=0x4780 align=1 ; size=0x372f class=DATA group=DGROUP - ; disGetNextSymbol 0xc4780 LB 0x372f -> off=0x0 cb=0000000000000033 uValue=00000000000c0000 '_msg_vga_init' -_msg_vga_init: ; 0xc4780 LB 0x33 - db 'Oracle VM VirtualBox Version 6.1.31_SPB VGA BIOS', 00dh, 00ah, 000h - ; disGetNextSymbol 0xc47b3 LB 0x36fc -> off=0x0 cb=0000000000000080 uValue=00000000000c0033 'vga_modes' -vga_modes: ; 0xc47b3 LB 0x80 +section _DATA progbits vstart=0x4780 align=1 ; size=0x3727 class=DATA group=DGROUP + ; disGetNextSymbol 0xc4780 LB 0x3727 -> off=0x0 cb=000000000000002f uValue=00000000000c0000 '_msg_vga_init' +_msg_vga_init: ; 0xc4780 LB 0x2f + db 'Oracle VM VirtualBox Version 6.1.34 VGA BIOS', 00dh, 00ah, 000h + ; disGetNextSymbol 0xc47af LB 0x36f8 -> off=0x0 cb=0000000000000080 uValue=00000000000c002f 'vga_modes' +vga_modes: ; 0xc47af LB 0x80 db 000h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h, 001h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h db 002h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h, 003h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h db 004h, 001h, 002h, 002h, 000h, 0b8h, 0ffh, 001h, 005h, 001h, 002h, 002h, 000h, 0b8h, 0ffh, 001h @@ -8047,14 +8047,14 @@ db 00fh, 001h, 003h, 001h, 000h, 0a0h, 0ffh, 000h, 010h, 001h, 004h, 004h, 000h, 0a0h, 0ffh, 002h db 011h, 001h, 003h, 001h, 000h, 0a0h, 0ffh, 002h, 012h, 001h, 004h, 004h, 000h, 0a0h, 0ffh, 002h db 013h, 001h, 005h, 008h, 000h, 0a0h, 0ffh, 003h, 06ah, 001h, 004h, 004h, 000h, 0a0h, 0ffh, 002h - ; disGetNextSymbol 0xc4833 LB 0x367c -> off=0x0 cb=0000000000000010 uValue=00000000000c00b3 'line_to_vpti' -line_to_vpti: ; 0xc4833 LB 0x10 + ; disGetNextSymbol 0xc482f LB 0x3678 -> off=0x0 cb=0000000000000010 uValue=00000000000c00af 'line_to_vpti' +line_to_vpti: ; 0xc482f LB 0x10 db 017h, 017h, 018h, 018h, 004h, 005h, 006h, 007h, 00dh, 00eh, 011h, 012h, 01ah, 01bh, 01ch, 01dh - ; disGetNextSymbol 0xc4843 LB 0x366c -> off=0x0 cb=0000000000000004 uValue=00000000000c00c3 'dac_regs' -dac_regs: ; 0xc4843 LB 0x4 + ; disGetNextSymbol 0xc483f LB 0x3668 -> off=0x0 cb=0000000000000004 uValue=00000000000c00bf 'dac_regs' +dac_regs: ; 0xc483f LB 0x4 dd 0ff3f3f3fh - ; disGetNextSymbol 0xc4847 LB 0x3668 -> off=0x0 cb=0000000000000780 uValue=00000000000c00c7 'video_param_table' -video_param_table: ; 0xc4847 LB 0x780 + ; disGetNextSymbol 0xc4843 LB 0x3664 -> off=0x0 cb=0000000000000780 uValue=00000000000c00c3 'video_param_table' +video_param_table: ; 0xc4843 LB 0x780 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h @@ -8175,8 +8175,8 @@ db 072h, 0f0h, 000h, 060h, 000h, 000h, 000h, 000h, 000h, 000h, 059h, 08dh, 057h, 032h, 000h, 057h db 073h, 0e3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 014h, 007h, 038h, 039h, 03ah, 03bh, 03ch db 03dh, 03eh, 03fh, 001h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 005h, 00fh, 0ffh - ; disGetNextSymbol 0xc4fc7 LB 0x2ee8 -> off=0x0 cb=00000000000000c0 uValue=00000000000c0847 'palette0' -palette0: ; 0xc4fc7 LB 0xc0 + ; disGetNextSymbol 0xc4fc3 LB 0x2ee4 -> off=0x0 cb=00000000000000c0 uValue=00000000000c0843 'palette0' +palette0: ; 0xc4fc3 LB 0xc0 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah db 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah @@ -8189,8 +8189,8 @@ db 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah db 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh db 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh - ; disGetNextSymbol 0xc5087 LB 0x2e28 -> off=0x0 cb=00000000000000c0 uValue=00000000000c0907 'palette1' -palette1: ; 0xc5087 LB 0xc0 + ; disGetNextSymbol 0xc5083 LB 0x2e24 -> off=0x0 cb=00000000000000c0 uValue=00000000000c0903 'palette1' +palette1: ; 0xc5083 LB 0xc0 db 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah db 000h, 02ah, 02ah, 015h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah db 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah, 000h, 02ah, 02ah, 015h, 000h, 02ah, 02ah, 02ah @@ -8203,8 +8203,8 @@ db 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh, 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh db 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh db 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh - ; disGetNextSymbol 0xc5147 LB 0x2d68 -> off=0x0 cb=00000000000000c0 uValue=00000000000c09c7 'palette2' -palette2: ; 0xc5147 LB 0xc0 + ; disGetNextSymbol 0xc5143 LB 0x2d64 -> off=0x0 cb=00000000000000c0 uValue=00000000000c09c3 'palette2' +palette2: ; 0xc5143 LB 0xc0 db 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah db 000h, 02ah, 02ah, 02ah, 000h, 02ah, 02ah, 02ah, 000h, 000h, 015h, 000h, 000h, 03fh, 000h, 02ah db 015h, 000h, 02ah, 03fh, 02ah, 000h, 015h, 02ah, 000h, 03fh, 02ah, 02ah, 015h, 02ah, 02ah, 03fh @@ -8217,8 +8217,8 @@ db 015h, 015h, 000h, 015h, 015h, 02ah, 015h, 03fh, 000h, 015h, 03fh, 02ah, 03fh, 015h, 000h, 03fh db 015h, 02ah, 03fh, 03fh, 000h, 03fh, 03fh, 02ah, 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh db 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh - ; disGetNextSymbol 0xc5207 LB 0x2ca8 -> off=0x0 cb=0000000000000300 uValue=00000000000c0a87 'palette3' -palette3: ; 0xc5207 LB 0x300 + ; disGetNextSymbol 0xc5203 LB 0x2ca4 -> off=0x0 cb=0000000000000300 uValue=00000000000c0a83 'palette3' +palette3: ; 0xc5203 LB 0x300 db 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah db 000h, 02ah, 02ah, 015h, 000h, 02ah, 02ah, 02ah, 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh db 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh @@ -8267,24 +8267,24 @@ db 00bh, 010h, 00bh, 00bh, 010h, 00ch, 00bh, 010h, 00dh, 00bh, 010h, 00fh, 00bh, 010h, 010h, 00bh db 00fh, 010h, 00bh, 00dh, 010h, 00bh, 00ch, 010h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h - ; disGetNextSymbol 0xc5507 LB 0x29a8 -> off=0x0 cb=0000000000000010 uValue=00000000000c0d87 'static_functionality' -static_functionality: ; 0xc5507 LB 0x10 + ; disGetNextSymbol 0xc5503 LB 0x29a4 -> off=0x0 cb=0000000000000010 uValue=00000000000c0d83 'static_functionality' +static_functionality: ; 0xc5503 LB 0x10 db 0ffh, 0e0h, 00fh, 000h, 000h, 000h, 000h, 007h, 002h, 008h, 0e7h, 00ch, 000h, 000h, 000h, 000h - ; disGetNextSymbol 0xc5517 LB 0x2998 -> off=0x0 cb=0000000000000024 uValue=00000000000c0d97 '_dcc_table' -_dcc_table: ; 0xc5517 LB 0x24 + ; disGetNextSymbol 0xc5513 LB 0x2994 -> off=0x0 cb=0000000000000024 uValue=00000000000c0d93 '_dcc_table' +_dcc_table: ; 0xc5513 LB 0x24 db 010h, 001h, 007h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h - ; disGetNextSymbol 0xc553b LB 0x2974 -> off=0x0 cb=000000000000001a uValue=00000000000c0dbb '_secondary_save_area' -_secondary_save_area: ; 0xc553b LB 0x1a - db 01ah, 000h, 017h, 055h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h + ; disGetNextSymbol 0xc5537 LB 0x2970 -> off=0x0 cb=000000000000001a uValue=00000000000c0db7 '_secondary_save_area' +_secondary_save_area: ; 0xc5537 LB 0x1a + db 01ah, 000h, 013h, 055h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h - ; disGetNextSymbol 0xc5555 LB 0x295a -> off=0x0 cb=000000000000001c uValue=00000000000c0dd5 '_video_save_pointer_table' -_video_save_pointer_table: ; 0xc5555 LB 0x1c - db 047h, 048h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h - db 03bh, 055h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h - ; disGetNextSymbol 0xc5571 LB 0x293e -> off=0x0 cb=0000000000000800 uValue=00000000000c0df1 'vgafont8' -vgafont8: ; 0xc5571 LB 0x800 + ; disGetNextSymbol 0xc5551 LB 0x2956 -> off=0x0 cb=000000000000001c uValue=00000000000c0dd1 '_video_save_pointer_table' +_video_save_pointer_table: ; 0xc5551 LB 0x1c + db 043h, 048h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h + db 037h, 055h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h + ; disGetNextSymbol 0xc556d LB 0x293a -> off=0x0 cb=0000000000000800 uValue=00000000000c0ded 'vgafont8' +vgafont8: ; 0xc556d LB 0x800 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07eh, 081h, 0a5h, 081h, 0bdh, 099h, 081h, 07eh db 07eh, 0ffh, 0dbh, 0ffh, 0c3h, 0e7h, 0ffh, 07eh, 06ch, 0feh, 0feh, 0feh, 07ch, 038h, 010h, 000h db 010h, 038h, 07ch, 0feh, 07ch, 038h, 010h, 000h, 038h, 07ch, 038h, 0feh, 0feh, 07ch, 038h, 07ch @@ -8413,8 +8413,8 @@ db 000h, 000h, 000h, 000h, 018h, 000h, 000h, 000h, 00fh, 00ch, 00ch, 00ch, 0ech, 06ch, 03ch, 01ch db 078h, 06ch, 06ch, 06ch, 06ch, 000h, 000h, 000h, 070h, 018h, 030h, 060h, 078h, 000h, 000h, 000h db 000h, 000h, 03ch, 03ch, 03ch, 03ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h - ; disGetNextSymbol 0xc5d71 LB 0x213e -> off=0x0 cb=0000000000000e00 uValue=00000000000c15f1 'vgafont14' -vgafont14: ; 0xc5d71 LB 0xe00 + ; disGetNextSymbol 0xc5d6d LB 0x213a -> off=0x0 cb=0000000000000e00 uValue=00000000000c15ed 'vgafont14' +vgafont14: ; 0xc5d6d LB 0xe00 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 07eh, 081h, 0a5h, 081h, 081h, 0bdh, 099h, 081h, 07eh, 000h, 000h, 000h, 000h, 000h, 07eh, 0ffh db 0dbh, 0ffh, 0ffh, 0c3h, 0e7h, 0ffh, 07eh, 000h, 000h, 000h, 000h, 000h, 000h, 06ch, 0feh, 0feh @@ -8639,8 +8639,8 @@ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 070h, 0d8h, 030h, 060h, 0c8h, 0f8h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07ch, 07ch, 07ch, 07ch, 07ch, 07ch, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h - ; disGetNextSymbol 0xc6b71 LB 0x133e -> off=0x0 cb=0000000000001000 uValue=00000000000c23f1 'vgafont16' -vgafont16: ; 0xc6b71 LB 0x1000 + ; disGetNextSymbol 0xc6b6d LB 0x133a -> off=0x0 cb=0000000000001000 uValue=00000000000c23ed 'vgafont16' +vgafont16: ; 0xc6b6d LB 0x1000 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 07eh, 081h, 0a5h, 081h, 081h, 0bdh, 099h, 081h, 081h, 07eh, 000h, 000h, 000h, 000h db 000h, 000h, 07eh, 0ffh, 0dbh, 0ffh, 0ffh, 0c3h, 0e7h, 0ffh, 0ffh, 07eh, 000h, 000h, 000h, 000h @@ -8897,8 +8897,8 @@ db 000h, 070h, 0d8h, 030h, 060h, 0c8h, 0f8h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 07ch, 07ch, 07ch, 07ch, 07ch, 07ch, 07ch, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h - ; disGetNextSymbol 0xc7b71 LB 0x33e -> off=0x0 cb=000000000000012d uValue=00000000000c33f1 'vgafont14alt' -vgafont14alt: ; 0xc7b71 LB 0x12d + ; disGetNextSymbol 0xc7b6d LB 0x33a -> off=0x0 cb=000000000000012d uValue=00000000000c33ed 'vgafont14alt' +vgafont14alt: ; 0xc7b6d LB 0x12d db 01dh, 000h, 000h, 000h, 000h, 024h, 066h, 0ffh, 066h, 024h, 000h, 000h, 000h, 000h, 000h, 022h db 000h, 063h, 063h, 063h, 022h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 02bh, 000h db 000h, 000h, 018h, 018h, 018h, 0ffh, 018h, 018h, 018h, 000h, 000h, 000h, 000h, 02dh, 000h, 000h @@ -8918,8 +8918,8 @@ db 000h, 0fch, 066h, 066h, 07ch, 062h, 066h, 06fh, 066h, 066h, 0f3h, 000h, 000h, 000h, 0f1h, 000h db 000h, 018h, 018h, 018h, 0ffh, 018h, 018h, 018h, 000h, 0ffh, 000h, 000h, 000h, 0f6h, 000h, 000h db 018h, 018h, 000h, 000h, 0ffh, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 000h - ; disGetNextSymbol 0xc7c9e LB 0x211 -> off=0x0 cb=0000000000000144 uValue=00000000000c351e 'vgafont16alt' -vgafont16alt: ; 0xc7c9e LB 0x144 + ; disGetNextSymbol 0xc7c9a LB 0x20d -> off=0x0 cb=0000000000000144 uValue=00000000000c351a 'vgafont16alt' +vgafont16alt: ; 0xc7c9a LB 0x144 db 01dh, 000h, 000h, 000h, 000h, 000h, 024h, 066h, 0ffh, 066h, 024h, 000h, 000h, 000h, 000h, 000h db 000h, 030h, 000h, 000h, 03ch, 066h, 0c3h, 0c3h, 0dbh, 0dbh, 0c3h, 0c3h, 066h, 03ch, 000h, 000h db 000h, 000h, 04dh, 000h, 000h, 0c3h, 0e7h, 0ffh, 0ffh, 0dbh, 0c3h, 0c3h, 0c3h, 0c3h, 0c3h, 000h @@ -8941,43 +8941,45 @@ db 000h, 0abh, 000h, 0c0h, 0c0h, 0c2h, 0c6h, 0cch, 018h, 030h, 060h, 0ceh, 09bh, 006h, 00ch, 01fh db 000h, 000h, 0ach, 000h, 0c0h, 0c0h, 0c2h, 0c6h, 0cch, 018h, 030h, 066h, 0ceh, 096h, 03eh, 006h db 006h, 000h, 000h, 000h - ; disGetNextSymbol 0xc7de2 LB 0xcd -> off=0x0 cb=0000000000000008 uValue=00000000000c3662 '_cga_msr' -_cga_msr: ; 0xc7de2 LB 0x8 + ; disGetNextSymbol 0xc7dde LB 0xc9 -> off=0x0 cb=0000000000000008 uValue=00000000000c365e '_cga_msr' +_cga_msr: ; 0xc7dde LB 0x8 db 02ch, 028h, 02dh, 029h, 02ah, 02eh, 01eh, 029h - ; disGetNextSymbol 0xc7dea LB 0xc5 -> off=0x0 cb=0000000000000015 uValue=00000000000c366a '_vbebios_copyright' -_vbebios_copyright: ; 0xc7dea LB 0x15 + ; disGetNextSymbol 0xc7de6 LB 0xc1 -> off=0x0 cb=0000000000000015 uValue=00000000000c3666 '_vbebios_copyright' +_vbebios_copyright: ; 0xc7de6 LB 0x15 db 'VirtualBox VESA BIOS', 000h - ; disGetNextSymbol 0xc7dff LB 0xb0 -> off=0x0 cb=0000000000000013 uValue=00000000000c367f '_vbebios_vendor_name' -_vbebios_vendor_name: ; 0xc7dff LB 0x13 + ; disGetNextSymbol 0xc7dfb LB 0xac -> off=0x0 cb=0000000000000013 uValue=00000000000c367b '_vbebios_vendor_name' +_vbebios_vendor_name: ; 0xc7dfb LB 0x13 db 'Oracle Corporation', 000h - ; disGetNextSymbol 0xc7e12 LB 0x9d -> off=0x0 cb=0000000000000021 uValue=00000000000c3692 '_vbebios_product_name' -_vbebios_product_name: ; 0xc7e12 LB 0x21 + ; disGetNextSymbol 0xc7e0e LB 0x99 -> off=0x0 cb=0000000000000021 uValue=00000000000c368e '_vbebios_product_name' +_vbebios_product_name: ; 0xc7e0e LB 0x21 db 'Oracle VM VirtualBox VBE Adapter', 000h - ; disGetNextSymbol 0xc7e33 LB 0x7c -> off=0x0 cb=0000000000000028 uValue=00000000000c36b3 '_vbebios_product_revision' -_vbebios_product_revision: ; 0xc7e33 LB 0x28 - db 'Oracle VM VirtualBox Version 6.1.31_SPB', 000h - ; disGetNextSymbol 0xc7e5b LB 0x54 -> off=0x0 cb=000000000000002b uValue=00000000000c36db '_vbebios_info_string' -_vbebios_info_string: ; 0xc7e5b LB 0x2b + ; disGetNextSymbol 0xc7e2f LB 0x78 -> off=0x0 cb=0000000000000024 uValue=00000000000c36af '_vbebios_product_revision' +_vbebios_product_revision: ; 0xc7e2f LB 0x24 + db 'Oracle VM VirtualBox Version 6.1.34', 000h + ; disGetNextSymbol 0xc7e53 LB 0x54 -> off=0x0 cb=000000000000002b uValue=00000000000c36d3 '_vbebios_info_string' +_vbebios_info_string: ; 0xc7e53 LB 0x2b db 'VirtualBox VBE Display Adapter enabled', 00dh, 00ah, 00dh, 00ah, 000h - ; disGetNextSymbol 0xc7e86 LB 0x29 -> off=0x0 cb=0000000000000029 uValue=00000000000c3706 '_no_vbebios_info_string' -_no_vbebios_info_string: ; 0xc7e86 LB 0x29 + ; disGetNextSymbol 0xc7e7e LB 0x29 -> off=0x0 cb=0000000000000029 uValue=00000000000c36fe '_no_vbebios_info_string' +_no_vbebios_info_string: ; 0xc7e7e LB 0x29 db 'No VirtualBox VBE support available!', 00dh, 00ah, 00dh, 00ah, 000h - ; Padding 0x1 bytes at 0xc7eaf + ; Padding 0x1 bytes at 0xc7ea7 db 001h -section CONST progbits vstart=0x7eb0 align=1 ; size=0x0 class=DATA group=DGROUP +section CONST progbits vstart=0x7ea8 align=1 ; size=0x0 class=DATA group=DGROUP -section CONST2 progbits vstart=0x7eb0 align=1 ; size=0x0 class=DATA group=DGROUP +section CONST2 progbits vstart=0x7ea8 align=1 ; size=0x0 class=DATA group=DGROUP - ; Padding 0x150 bytes at 0xc7eb0 - db 000h, 000h, 000h, 000h, 001h, 000h, 000h, 000h, 000h, 000h, 000h, 044h, 03ah, 05ch, 052h, 065h - db 070h, 06fh, 073h, 069h, 074h, 06fh, 072h, 079h, 05ch, 062h, 072h, 061h, 06eh, 063h, 068h, 065h - db 073h, 05ch, 056h, 042h, 06fh, 078h, 02dh, 036h, 02eh, 031h, 05ch, 06fh, 075h, 074h, 05ch, 077h - db 069h, 06eh, 02eh, 061h, 06dh, 064h, 036h, 034h, 05ch, 072h, 065h, 06ch, 065h, 061h, 073h, 065h - db 05ch, 06fh, 062h, 06ah, 05ch, 056h, 042h, 06fh, 078h, 056h, 067h, 061h, 042h, 069h, 06fh, 073h - db 032h, 038h, 036h, 05ch, 056h, 042h, 06fh, 078h, 056h, 067h, 061h, 042h, 069h, 06fh, 073h, 032h - db 038h, 036h, 02eh, 073h, 079h, 06dh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h + ; Padding 0x158 bytes at 0xc7ea8 + db 000h, 000h, 000h, 000h, 001h, 000h, 000h, 000h, 000h, 000h, 000h, 02fh, 068h, 06fh, 06dh, 065h + db 02fh, 067h, 061h, 06ch, 069h, 074h, 073h, 079h, 06eh, 02fh, 063h, 06fh, 06dh, 070h, 069h, 06ch + db 065h, 02dh, 063h, 061h, 063h, 068h, 065h, 02fh, 076h, 062h, 06fh, 078h, 02dh, 072h, 065h, 06ch + db 065h, 061h, 073h, 065h, 02fh, 062h, 072h, 061h, 06eh, 063h, 068h, 065h, 073h, 02fh, 056h, 042h + db 06fh, 078h, 02dh, 036h, 02eh, 031h, 02fh, 06fh, 075h, 074h, 02fh, 06ch, 069h, 06eh, 075h, 078h + db 02eh, 061h, 06dh, 064h, 036h, 034h, 02fh, 072h, 065h, 06ch, 065h, 061h, 073h, 065h, 02fh, 06fh + db 062h, 06ah, 02fh, 056h, 042h, 06fh, 078h, 056h, 067h, 061h, 042h, 069h, 06fh, 073h, 032h, 038h + db 036h, 02fh, 056h, 042h, 06fh, 078h, 056h, 067h, 061h, 042h, 069h, 06fh, 073h, 032h, 038h, 036h + db 02eh, 073h, 079h, 06dh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h @@ -8990,5 +8992,4 @@ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h - db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h - db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0ffh + db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 00ah diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative286.md5sum virtualbox-6.1.34-dfsg/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative286.md5sum --- virtualbox-6.1.32-dfsg/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative286.md5sum 2022-01-13 18:55:39.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative286.md5sum 2022-03-22 23:42:42.000000000 +0000 @@ -1 +1 @@ -5eef08b1108464af4549e2fbb2a7913a *VBoxVgaBios286.rom +1e56cfd41ad0f31e352d8a86b52ee72a *VBoxVgaBios286.rom diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative386.asm virtualbox-6.1.34-dfsg/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative386.asm --- virtualbox-6.1.32-dfsg/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative386.asm 2022-01-13 18:55:39.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative386.asm 2022-03-22 23:42:42.000000000 +0000 @@ -1967,7 +1967,7 @@ mov word [bp-014h], di ; 89 7e ec ; 0xc0d93 vgabios.c:48 movzx bx, byte [bp-012h] ; 0f b6 5e ee ; 0xc0d96 vgabios.c:532 sal bx, 003h ; c1 e3 03 ; 0xc0d9a - cmp byte [bx+047b4h], 000h ; 80 bf b4 47 00 ; 0xc0d9d + cmp byte [bx+047b0h], 000h ; 80 bf b0 47 00 ; 0xc0d9d jne short 00ddah ; 75 36 ; 0xc0da2 imul dx, di ; 0f af d7 ; 0xc0da4 vgabios.c:534 add dx, dx ; 01 d2 ; 0xc0da7 @@ -1984,13 +1984,13 @@ add ax, ax ; 01 c0 ; 0xc0dc5 mov di, dx ; 89 d7 ; 0xc0dc7 add di, ax ; 01 c7 ; 0xc0dc9 - mov es, [bx+047b7h] ; 8e 87 b7 47 ; 0xc0dcb vgabios.c:45 + mov es, [bx+047b3h] ; 8e 87 b3 47 ; 0xc0dcb vgabios.c:45 mov ax, word [es:di] ; 26 8b 05 ; 0xc0dcf push SS ; 16 ; 0xc0dd2 vgabios.c:48 pop ES ; 07 ; 0xc0dd3 mov word [es:si], ax ; 26 89 04 ; 0xc0dd4 jmp near 00e52h ; e9 78 00 ; 0xc0dd7 vgabios.c:536 - mov bl, byte [bx+047b5h] ; 8a 9f b5 47 ; 0xc0dda vgabios.c:537 + mov bl, byte [bx+047b1h] ; 8a 9f b1 47 ; 0xc0dda vgabios.c:537 cmp bl, 005h ; 80 fb 05 ; 0xc0dde je short 00e2eh ; 74 4b ; 0xc0de1 cmp bl, 002h ; 80 fb 02 ; 0xc0de3 @@ -2089,18 +2089,18 @@ retn 00002h ; c2 02 00 ; 0xc0ec4 mov bx, 0010ch ; bb 0c 01 ; 0xc0ec7 vgabios.c:57 jmp short 00e85h ; eb b9 ; 0xc0eca - mov dx, 05d71h ; ba 71 5d ; 0xc0ecc vgabios.c:576 + mov dx, 05d6dh ; ba 6d 5d ; 0xc0ecc vgabios.c:576 mov ax, ds ; 8c d8 ; 0xc0ecf jmp short 00e90h ; eb bd ; 0xc0ed1 vgabios.c:577 - mov dx, 05571h ; ba 71 55 ; 0xc0ed3 vgabios.c:579 + mov dx, 0556dh ; ba 6d 55 ; 0xc0ed3 vgabios.c:579 jmp short 00ecfh ; eb f7 ; 0xc0ed6 - mov dx, 05971h ; ba 71 59 ; 0xc0ed8 vgabios.c:582 + mov dx, 0596dh ; ba 6d 59 ; 0xc0ed8 vgabios.c:582 jmp short 00ecfh ; eb f2 ; 0xc0edb - mov dx, 07b71h ; ba 71 7b ; 0xc0edd vgabios.c:585 + mov dx, 07b6dh ; ba 6d 7b ; 0xc0edd vgabios.c:585 jmp short 00ecfh ; eb ed ; 0xc0ee0 - mov dx, 06b71h ; ba 71 6b ; 0xc0ee2 vgabios.c:588 + mov dx, 06b6dh ; ba 6d 6b ; 0xc0ee2 vgabios.c:588 jmp short 00ecfh ; eb e8 ; 0xc0ee5 - mov dx, 07c9eh ; ba 9e 7c ; 0xc0ee7 vgabios.c:591 + mov dx, 07c9ah ; ba 9a 7c ; 0xc0ee7 vgabios.c:591 jmp short 00ecfh ; eb e3 ; 0xc0eea jmp short 00ec1h ; eb d3 ; 0xc0eec vgabios.c:597 ; disGetNextSymbol 0xc0eee LB 0x310c -> off=0x0 cb=0000000000000156 uValue=00000000000c0eee 'vga_read_pixel' @@ -2124,9 +2124,9 @@ je near 0103dh ; 0f 84 27 01 ; 0xc0f12 movzx bx, al ; 0f b6 d8 ; 0xc0f16 vgabios.c:620 sal bx, 003h ; c1 e3 03 ; 0xc0f19 - cmp byte [bx+047b4h], 000h ; 80 bf b4 47 00 ; 0xc0f1c + cmp byte [bx+047b0h], 000h ; 80 bf b0 47 00 ; 0xc0f1c je near 0103dh ; 0f 84 18 01 ; 0xc0f21 - mov ch, byte [bx+047b5h] ; 8a af b5 47 ; 0xc0f25 vgabios.c:624 + mov ch, byte [bx+047b1h] ; 8a af b1 47 ; 0xc0f25 vgabios.c:624 cmp ch, 003h ; 80 fd 03 ; 0xc0f29 jc short 00f3fh ; 72 11 ; 0xc0f2c jbe short 00f47h ; 76 17 ; 0xc0f2e @@ -2178,7 +2178,7 @@ or ch, al ; 08 c5 ; 0xc0fab inc byte [bp-006h] ; fe 46 fa ; 0xc0fad vgabios.c:636 jmp short 00f80h ; eb ce ; 0xc0fb0 - movzx cx, byte [bx+047b6h] ; 0f b6 8f b6 47 ; 0xc0fb2 vgabios.c:639 + movzx cx, byte [bx+047b2h] ; 0f b6 8f b2 47 ; 0xc0fb2 vgabios.c:639 mov bx, strict word 00004h ; bb 04 00 ; 0xc0fb7 sub bx, cx ; 29 cb ; 0xc0fba mov cx, bx ; 89 d9 ; 0xc0fbc @@ -2197,7 +2197,7 @@ mov al, byte [es:bx] ; 26 8a 07 ; 0xc0fdc movzx bx, ah ; 0f b6 dc ; 0xc0fdf vgabios.c:643 sal bx, 003h ; c1 e3 03 ; 0xc0fe2 - cmp byte [bx+047b6h], 002h ; 80 bf b6 47 02 ; 0xc0fe5 + cmp byte [bx+047b2h], 002h ; 80 bf b2 47 02 ; 0xc0fe5 jne short 01001h ; 75 15 ; 0xc0fea and dx, strict byte 00003h ; 83 e2 03 ; 0xc0fec vgabios.c:644 mov cx, strict word 00003h ; b9 03 00 ; 0xc0fef @@ -2532,7 +2532,7 @@ movzx bx, ch ; 0f b6 dd ; 0xc1285 vgabios.c:822 mov si, bx ; 89 de ; 0xc1288 sal si, 003h ; c1 e6 03 ; 0xc128a - cmp byte [si+047b4h], 000h ; 80 bc b4 47 00 ; 0xc128d + cmp byte [si+047b0h], 000h ; 80 bc b0 47 00 ; 0xc128d jne short 012c8h ; 75 34 ; 0xc1292 mov bx, strict word 0004ah ; bb 4a 00 ; 0xc1294 vgabios.c:47 mov ax, strict word 00040h ; b8 40 00 ; 0xc1297 @@ -2556,10 +2556,10 @@ mov bx, dx ; 89 d3 ; 0xc12c3 inc bx ; 43 ; 0xc12c5 jmp short 012d7h ; eb 0f ; 0xc12c6 vgabios.c:835 - movzx bx, byte [bx+04833h] ; 0f b6 9f 33 48 ; 0xc12c8 vgabios.c:837 + movzx bx, byte [bx+0482fh] ; 0f b6 9f 2f 48 ; 0xc12c8 vgabios.c:837 sal bx, 006h ; c1 e3 06 ; 0xc12cd movzx ax, cl ; 0f b6 c1 ; 0xc12d0 - mov bx, word [bx+0484ah] ; 8b 9f 4a 48 ; 0xc12d3 + mov bx, word [bx+04846h] ; 8b 9f 46 48 ; 0xc12d3 imul bx, ax ; 0f af d8 ; 0xc12d7 mov si, strict word 00063h ; be 63 00 ; 0xc12da vgabios.c:47 mov ax, strict word 00040h ; b8 40 00 ; 0xc12dd @@ -2626,7 +2626,7 @@ cmp AL, strict byte 0ffh ; 3c ff ; 0xc135a vgabios.c:910 je near 01666h ; 0f 84 06 03 ; 0xc135c movzx bx, al ; 0f b6 d8 ; 0xc1360 vgabios.c:913 - mov al, byte [bx+04833h] ; 8a 87 33 48 ; 0xc1363 + mov al, byte [bx+0482fh] ; 8a 87 2f 48 ; 0xc1363 mov byte [bp-012h], al ; 88 46 ee ; 0xc1367 mov di, 00089h ; bf 89 00 ; 0xc136a vgabios.c:37 mov ax, strict word 00040h ; b8 40 00 ; 0xc136d @@ -2636,13 +2636,13 @@ test AL, strict byte 008h ; a8 08 ; 0xc1377 vgabios.c:930 jne near 01405h ; 0f 85 88 00 ; 0xc1379 sal bx, 003h ; c1 e3 03 ; 0xc137d vgabios.c:932 - mov al, byte [bx+047b9h] ; 8a 87 b9 47 ; 0xc1380 + mov al, byte [bx+047b5h] ; 8a 87 b5 47 ; 0xc1380 mov dx, 003c6h ; ba c6 03 ; 0xc1384 out DX, AL ; ee ; 0xc1387 xor al, al ; 30 c0 ; 0xc1388 vgabios.c:935 mov dx, 003c8h ; ba c8 03 ; 0xc138a out DX, AL ; ee ; 0xc138d - mov bl, byte [bx+047bah] ; 8a 9f ba 47 ; 0xc138e vgabios.c:938 + mov bl, byte [bx+047b6h] ; 8a 9f b6 47 ; 0xc138e vgabios.c:938 cmp bl, 001h ; 80 fb 01 ; 0xc1392 jc short 013a5h ; 72 0e ; 0xc1395 jbe short 013aeh ; 76 15 ; 0xc1397 @@ -2653,13 +2653,13 @@ jmp short 013bbh ; eb 16 ; 0xc13a3 test bl, bl ; 84 db ; 0xc13a5 jne short 013bbh ; 75 12 ; 0xc13a7 - mov si, 04fc7h ; be c7 4f ; 0xc13a9 vgabios.c:940 + mov si, 04fc3h ; be c3 4f ; 0xc13a9 vgabios.c:940 jmp short 013bbh ; eb 0d ; 0xc13ac vgabios.c:941 - mov si, 05087h ; be 87 50 ; 0xc13ae vgabios.c:943 + mov si, 05083h ; be 83 50 ; 0xc13ae vgabios.c:943 jmp short 013bbh ; eb 08 ; 0xc13b1 vgabios.c:944 - mov si, 05147h ; be 47 51 ; 0xc13b3 vgabios.c:946 + mov si, 05143h ; be 43 51 ; 0xc13b3 vgabios.c:946 jmp short 013bbh ; eb 03 ; 0xc13b6 vgabios.c:947 - mov si, 05207h ; be 07 52 ; 0xc13b8 vgabios.c:949 + mov si, 05203h ; be 03 52 ; 0xc13b8 vgabios.c:949 xor cx, cx ; 31 c9 ; 0xc13bb vgabios.c:953 jmp short 013ceh ; eb 0f ; 0xc13bd xor al, al ; 30 c0 ; 0xc13bf vgabios.c:960 @@ -2672,8 +2672,8 @@ jnc short 013f8h ; 73 2a ; 0xc13cc movzx bx, byte [bp-00eh] ; 0f b6 5e f2 ; 0xc13ce sal bx, 003h ; c1 e3 03 ; 0xc13d2 - movzx bx, byte [bx+047bah] ; 0f b6 9f ba 47 ; 0xc13d5 - movzx dx, byte [bx+04843h] ; 0f b6 97 43 48 ; 0xc13da + movzx bx, byte [bx+047b6h] ; 0f b6 9f b6 47 ; 0xc13d5 + movzx dx, byte [bx+0483fh] ; 0f b6 97 3f 48 ; 0xc13da cmp cx, dx ; 39 d1 ; 0xc13df jnbe short 013bfh ; 77 dc ; 0xc13e1 imul bx, cx, strict byte 00003h ; 6b d9 03 ; 0xc13e3 @@ -2705,7 +2705,7 @@ movzx bx, byte [bp-012h] ; 0f b6 5e ee ; 0xc141a vgabios.c:977 sal bx, 006h ; c1 e3 06 ; 0xc141e add bx, cx ; 01 cb ; 0xc1421 - mov al, byte [bx+0486ah] ; 8a 87 6a 48 ; 0xc1423 + mov al, byte [bx+04866h] ; 8a 87 66 48 ; 0xc1423 out DX, AL ; ee ; 0xc1427 inc cx ; 41 ; 0xc1428 vgabios.c:978 jmp short 0140fh ; eb e4 ; 0xc1429 @@ -2729,7 +2729,7 @@ movzx bx, byte [bp-012h] ; 0f b6 5e ee ; 0xc144e vgabios.c:987 sal bx, 006h ; c1 e3 06 ; 0xc1452 add bx, cx ; 01 cb ; 0xc1455 - mov al, byte [bx+0484bh] ; 8a 87 4b 48 ; 0xc1457 + mov al, byte [bx+04847h] ; 8a 87 47 48 ; 0xc1457 mov dx, 003c5h ; ba c5 03 ; 0xc145b out DX, AL ; ee ; 0xc145e inc cx ; 41 ; 0xc145f vgabios.c:988 @@ -2744,14 +2744,14 @@ movzx bx, byte [bp-012h] ; 0f b6 5e ee ; 0xc1471 vgabios.c:993 sal bx, 006h ; c1 e3 06 ; 0xc1475 add bx, cx ; 01 cb ; 0xc1478 - mov al, byte [bx+0487eh] ; 8a 87 7e 48 ; 0xc147a + mov al, byte [bx+0487ah] ; 8a 87 7a 48 ; 0xc147a mov dx, 003cfh ; ba cf 03 ; 0xc147e out DX, AL ; ee ; 0xc1481 inc cx ; 41 ; 0xc1482 vgabios.c:994 jmp short 01466h ; eb e1 ; 0xc1483 movzx bx, byte [bp-00eh] ; 0f b6 5e f2 ; 0xc1485 vgabios.c:997 sal bx, 003h ; c1 e3 03 ; 0xc1489 - cmp byte [bx+047b5h], 001h ; 80 bf b5 47 01 ; 0xc148c + cmp byte [bx+047b1h], 001h ; 80 bf b1 47 01 ; 0xc148c jne short 01498h ; 75 05 ; 0xc1491 mov dx, 003b4h ; ba b4 03 ; 0xc1493 jmp short 0149bh ; eb 03 ; 0xc1496 @@ -2771,11 +2771,11 @@ mov di, bx ; 89 df ; 0xc14b6 add di, cx ; 01 cf ; 0xc14b8 lea dx, [si+001h] ; 8d 54 01 ; 0xc14ba - mov al, byte [di+04851h] ; 8a 85 51 48 ; 0xc14bd + mov al, byte [di+0484dh] ; 8a 85 4d 48 ; 0xc14bd out DX, AL ; ee ; 0xc14c1 inc cx ; 41 ; 0xc14c2 vgabios.c:1005 jmp short 014a5h ; eb e0 ; 0xc14c3 - mov al, byte [bx+04850h] ; 8a 87 50 48 ; 0xc14c5 vgabios.c:1008 + mov al, byte [bx+0484ch] ; 8a 87 4c 48 ; 0xc14c5 vgabios.c:1008 mov dx, 003c2h ; ba c2 03 ; 0xc14c9 out DX, AL ; ee ; 0xc14cc mov AL, strict byte 020h ; b0 20 ; 0xc14cd vgabios.c:1011 @@ -2789,9 +2789,9 @@ jne short 0153bh ; 75 5c ; 0xc14dd movzx bx, byte [bp-00eh] ; 0f b6 5e f2 ; 0xc14df vgabios.c:1016 sal bx, 003h ; c1 e3 03 ; 0xc14e3 - cmp byte [bx+047b4h], 000h ; 80 bf b4 47 00 ; 0xc14e6 + cmp byte [bx+047b0h], 000h ; 80 bf b0 47 00 ; 0xc14e6 jne short 014ffh ; 75 12 ; 0xc14eb - mov es, [bx+047b7h] ; 8e 87 b7 47 ; 0xc14ed vgabios.c:1018 + mov es, [bx+047b3h] ; 8e 87 b3 47 ; 0xc14ed vgabios.c:1018 mov cx, 04000h ; b9 00 40 ; 0xc14f1 mov ax, 00720h ; b8 20 07 ; 0xc14f4 xor di, di ; 31 ff ; 0xc14f7 @@ -2800,7 +2800,7 @@ jmp short 0153bh ; eb 3c ; 0xc14fd vgabios.c:1020 cmp byte [bp-010h], 00dh ; 80 7e f0 0d ; 0xc14ff vgabios.c:1022 jnc short 01516h ; 73 11 ; 0xc1503 - mov es, [bx+047b7h] ; 8e 87 b7 47 ; 0xc1505 vgabios.c:1024 + mov es, [bx+047b3h] ; 8e 87 b3 47 ; 0xc1505 vgabios.c:1024 mov cx, 04000h ; b9 00 40 ; 0xc1509 xor ax, ax ; 31 c0 ; 0xc150c xor di, di ; 31 ff ; 0xc150e @@ -2817,7 +2817,7 @@ mov word [bp-014h], ax ; 89 46 ec ; 0xc1522 mov AL, strict byte 00fh ; b0 0f ; 0xc1525 vgabios.c:1030 out DX, AL ; ee ; 0xc1527 - mov es, [bx+047b7h] ; 8e 87 b7 47 ; 0xc1528 vgabios.c:1031 + mov es, [bx+047b3h] ; 8e 87 b3 47 ; 0xc1528 vgabios.c:1031 mov cx, 08000h ; b9 00 80 ; 0xc152c xor ax, ax ; 31 c0 ; 0xc152f xor di, di ; 31 ff ; 0xc1531 @@ -2832,18 +2832,18 @@ mov byte [es:bx], al ; 26 88 07 ; 0xc1546 movzx bx, byte [bp-012h] ; 0f b6 5e ee ; 0xc1549 vgabios.c:1039 sal bx, 006h ; c1 e3 06 ; 0xc154d - movzx ax, byte [bx+04847h] ; 0f b6 87 47 48 ; 0xc1550 + movzx ax, byte [bx+04843h] ; 0f b6 87 43 48 ; 0xc1550 mov di, strict word 0004ah ; bf 4a 00 ; 0xc1555 vgabios.c:52 mov word [es:di], ax ; 26 89 05 ; 0xc1558 - mov ax, word [bx+0484ah] ; 8b 87 4a 48 ; 0xc155b vgabios.c:50 + mov ax, word [bx+04846h] ; 8b 87 46 48 ; 0xc155b vgabios.c:50 mov di, strict word 0004ch ; bf 4c 00 ; 0xc155f vgabios.c:52 mov word [es:di], ax ; 26 89 05 ; 0xc1562 mov di, strict word 00063h ; bf 63 00 ; 0xc1565 vgabios.c:52 mov word [es:di], si ; 26 89 35 ; 0xc1568 - mov al, byte [bx+04848h] ; 8a 87 48 48 ; 0xc156b vgabios.c:40 + mov al, byte [bx+04844h] ; 8a 87 44 48 ; 0xc156b vgabios.c:40 mov si, 00084h ; be 84 00 ; 0xc156f vgabios.c:42 mov byte [es:si], al ; 26 88 04 ; 0xc1572 - movzx ax, byte [bx+04849h] ; 0f b6 87 49 48 ; 0xc1575 vgabios.c:1043 + movzx ax, byte [bx+04845h] ; 0f b6 87 45 48 ; 0xc1575 vgabios.c:1043 mov bx, 00085h ; bb 85 00 ; 0xc157a vgabios.c:52 mov word [es:bx], ax ; 26 89 07 ; 0xc157d mov al, byte [bp-00ch] ; 8a 46 f4 ; 0xc1580 vgabios.c:1044 @@ -2860,13 +2860,13 @@ mov byte [es:bx], 008h ; 26 c6 07 08 ; 0xc15a0 mov ax, ds ; 8c d8 ; 0xc15a4 vgabios.c:1050 mov bx, 000a8h ; bb a8 00 ; 0xc15a6 vgabios.c:62 - mov word [es:bx], 05555h ; 26 c7 07 55 55 ; 0xc15a9 + mov word [es:bx], 05551h ; 26 c7 07 51 55 ; 0xc15a9 mov [es:bx+002h], ds ; 26 8c 5f 02 ; 0xc15ae mov al, byte [bp-010h] ; 8a 46 f0 ; 0xc15b2 vgabios.c:1052 cmp AL, strict byte 007h ; 3c 07 ; 0xc15b5 jnbe short 015dfh ; 77 26 ; 0xc15b7 movzx bx, al ; 0f b6 d8 ; 0xc15b9 vgabios.c:1054 - mov al, byte [bx+07de2h] ; 8a 87 e2 7d ; 0xc15bc vgabios.c:40 + mov al, byte [bx+07ddeh] ; 8a 87 de 7d ; 0xc15bc vgabios.c:40 mov bx, strict word 00065h ; bb 65 00 ; 0xc15c0 vgabios.c:42 mov byte [es:bx], al ; 26 88 07 ; 0xc15c3 cmp byte [bp-010h], 006h ; 80 7e f0 06 ; 0xc15c6 vgabios.c:1055 @@ -2880,7 +2880,7 @@ mov byte [es:bx], al ; 26 88 07 ; 0xc15dc movzx bx, byte [bp-00eh] ; 0f b6 5e f2 ; 0xc15df vgabios.c:1059 sal bx, 003h ; c1 e3 03 ; 0xc15e3 - cmp byte [bx+047b4h], 000h ; 80 bf b4 47 00 ; 0xc15e6 + cmp byte [bx+047b0h], 000h ; 80 bf b0 47 00 ; 0xc15e6 jne short 015f6h ; 75 09 ; 0xc15eb mov dx, strict word 00007h ; ba 07 00 ; 0xc15ed vgabios.c:1061 mov ax, strict word 00006h ; b8 06 00 ; 0xc15f0 @@ -2898,7 +2898,7 @@ call 0124fh ; e8 40 fc ; 0xc160c movzx bx, byte [bp-00eh] ; 0f b6 5e f2 ; 0xc160f vgabios.c:1072 sal bx, 003h ; c1 e3 03 ; 0xc1613 - cmp byte [bx+047b4h], 000h ; 80 bf b4 47 00 ; 0xc1616 + cmp byte [bx+047b0h], 000h ; 80 bf b0 47 00 ; 0xc1616 jne short 0162dh ; 75 10 ; 0xc161b xor dx, dx ; 31 d2 ; 0xc161d vgabios.c:1074 mov ax, strict word 00004h ; b8 04 00 ; 0xc161f @@ -2907,27 +2907,27 @@ mov AL, strict byte 003h ; b0 03 ; 0xc1627 mov AH, strict byte 011h ; b4 11 ; 0xc1629 int 06dh ; cd 6d ; 0xc162b - mov bx, 05971h ; bb 71 59 ; 0xc162d vgabios.c:1079 + mov bx, 0596dh ; bb 6d 59 ; 0xc162d vgabios.c:1079 mov cx, ds ; 8c d9 ; 0xc1630 mov ax, strict word 0001fh ; b8 1f 00 ; 0xc1632 call 00980h ; e8 48 f3 ; 0xc1635 movzx bx, byte [bp-012h] ; 0f b6 5e ee ; 0xc1638 vgabios.c:1081 sal bx, 006h ; c1 e3 06 ; 0xc163c - mov al, byte [bx+04849h] ; 8a 87 49 48 ; 0xc163f + mov al, byte [bx+04845h] ; 8a 87 45 48 ; 0xc163f cmp AL, strict byte 010h ; 3c 10 ; 0xc1643 je short 01661h ; 74 1a ; 0xc1645 cmp AL, strict byte 00eh ; 3c 0e ; 0xc1647 je short 0165ch ; 74 11 ; 0xc1649 cmp AL, strict byte 008h ; 3c 08 ; 0xc164b jne short 01666h ; 75 17 ; 0xc164d - mov bx, 05571h ; bb 71 55 ; 0xc164f vgabios.c:1083 + mov bx, 0556dh ; bb 6d 55 ; 0xc164f vgabios.c:1083 mov cx, ds ; 8c d9 ; 0xc1652 mov ax, strict word 00043h ; b8 43 00 ; 0xc1654 call 00980h ; e8 26 f3 ; 0xc1657 jmp short 01666h ; eb 0a ; 0xc165a vgabios.c:1084 - mov bx, 05d71h ; bb 71 5d ; 0xc165c vgabios.c:1086 + mov bx, 05d6dh ; bb 6d 5d ; 0xc165c vgabios.c:1086 jmp short 01652h ; eb f1 ; 0xc165f - mov bx, 06b71h ; bb 71 6b ; 0xc1661 vgabios.c:1089 + mov bx, 06b6dh ; bb 6d 6b ; 0xc1661 vgabios.c:1089 jmp short 01652h ; eb ec ; 0xc1664 lea sp, [bp-00ah] ; 8d 66 f6 ; 0xc1666 vgabios.c:1092 pop di ; 5f ; 0xc1669 @@ -3323,7 +3323,7 @@ mov word [bp-016h], ax ; 89 46 ea ; 0xc19e7 mov ax, word [bp-014h] ; 8b 46 ec ; 0xc19ea imul ax, cx ; 0f af c1 ; 0xc19ed - cmp byte [bx+047b4h], 000h ; 80 bf b4 47 00 ; 0xc19f0 + cmp byte [bx+047b0h], 000h ; 80 bf b0 47 00 ; 0xc19f0 jne near 01b94h ; 0f 85 9b 01 ; 0xc19f5 mov cx, ax ; 89 c1 ; 0xc19f9 vgabios.c:1225 add cx, ax ; 01 c1 ; 0xc19fb @@ -3347,7 +3347,7 @@ movzx dx, byte [bp-012h] ; 0f b6 56 ee ; 0xc1a2e vgabios.c:1232 sal dx, 008h ; c1 e2 08 ; 0xc1a32 add dx, strict byte 00020h ; 83 c2 20 ; 0xc1a35 - mov bx, word [bx+047b7h] ; 8b 9f b7 47 ; 0xc1a38 + mov bx, word [bx+047b3h] ; 8b 9f b3 47 ; 0xc1a38 mov cx, ax ; 89 c1 ; 0xc1a3c mov ax, dx ; 89 d0 ; 0xc1a3e mov di, word [bp-01ch] ; 8b 7e e4 ; 0xc1a40 @@ -3381,7 +3381,7 @@ add di, dx ; 01 d7 ; 0xc1a97 movzx bx, byte [bp-006h] ; 0f b6 5e fa ; 0xc1a99 sal bx, 003h ; c1 e3 03 ; 0xc1a9d - mov es, [bx+047b7h] ; 8e 87 b7 47 ; 0xc1aa0 + mov es, [bx+047b3h] ; 8e 87 b3 47 ; 0xc1aa0 jcxz 01aa8h ; e3 02 ; 0xc1aa4 rep stosw ; f3 ab ; 0xc1aa6 jmp short 01ae3h ; eb 39 ; 0xc1aa8 vgabios.c:1241 @@ -3393,7 +3393,7 @@ add si, si ; 01 f6 ; 0xc1aba movzx bx, byte [bp-006h] ; 0f b6 5e fa ; 0xc1abc sal bx, 003h ; c1 e3 03 ; 0xc1ac0 - mov ax, word [bx+047b7h] ; 8b 87 b7 47 ; 0xc1ac3 + mov ax, word [bx+047b3h] ; 8b 87 b3 47 ; 0xc1ac3 mov bx, word [bp-01ah] ; 8b 5e e6 ; 0xc1ac7 imul bx, word [bp-014h] ; 0f af 5e ec ; 0xc1aca mov di, dx ; 89 d7 ; 0xc1ace @@ -3434,7 +3434,7 @@ add di, dx ; 01 d7 ; 0xc1b30 movzx bx, byte [bp-006h] ; 0f b6 5e fa ; 0xc1b32 sal bx, 003h ; c1 e3 03 ; 0xc1b36 - mov es, [bx+047b7h] ; 8e 87 b7 47 ; 0xc1b39 + mov es, [bx+047b3h] ; 8e 87 b3 47 ; 0xc1b39 jcxz 01b41h ; e3 02 ; 0xc1b3d rep stosw ; f3 ab ; 0xc1b3f jmp short 01b83h ; eb 40 ; 0xc1b41 vgabios.c:1250 @@ -3448,7 +3448,7 @@ add si, si ; 01 f6 ; 0xc1b5a movzx bx, byte [bp-006h] ; 0f b6 5e fa ; 0xc1b5c sal bx, 003h ; c1 e3 03 ; 0xc1b60 - mov ax, word [bx+047b7h] ; 8b 87 b7 47 ; 0xc1b63 + mov ax, word [bx+047b3h] ; 8b 87 b3 47 ; 0xc1b63 mov bx, word [bp-01ah] ; 8b 5e e6 ; 0xc1b67 imul bx, word [bp-014h] ; 0f af 5e ec ; 0xc1b6a add dx, bx ; 01 da ; 0xc1b6e @@ -3467,11 +3467,11 @@ jc near 01f5dh ; 0f 82 cf 03 ; 0xc1b8a dec word [bp-01ah] ; ff 4e e6 ; 0xc1b8e vgabios.c:1253 jmp near 01af0h ; e9 5c ff ; 0xc1b91 - movzx di, byte [di+04833h] ; 0f b6 bd 33 48 ; 0xc1b94 vgabios.c:1259 + movzx di, byte [di+0482fh] ; 0f b6 bd 2f 48 ; 0xc1b94 vgabios.c:1259 sal di, 006h ; c1 e7 06 ; 0xc1b99 - mov dl, byte [di+04849h] ; 8a 95 49 48 ; 0xc1b9c + mov dl, byte [di+04845h] ; 8a 95 45 48 ; 0xc1b9c mov byte [bp-00eh], dl ; 88 56 f2 ; 0xc1ba0 - mov dl, byte [bx+047b5h] ; 8a 97 b5 47 ; 0xc1ba3 vgabios.c:1260 + mov dl, byte [bx+047b1h] ; 8a 97 b1 47 ; 0xc1ba3 vgabios.c:1260 cmp dl, 003h ; 80 fa 03 ; 0xc1ba7 jc short 01bbdh ; 72 11 ; 0xc1baa jbe short 01bc7h ; 76 19 ; 0xc1bac @@ -3509,7 +3509,7 @@ movzx ax, byte [bp-012h] ; 0f b6 46 ee ; 0xc1c03 movzx bx, byte [bp-006h] ; 0f b6 5e fa ; 0xc1c07 sal bx, 003h ; c1 e3 03 ; 0xc1c0b - mov es, [bx+047b7h] ; 8e 87 b7 47 ; 0xc1c0e + mov es, [bx+047b3h] ; 8e 87 b3 47 ; 0xc1c0e xor di, di ; 31 ff ; 0xc1c12 jcxz 01c18h ; e3 02 ; 0xc1c14 rep stosb ; f3 aa ; 0xc1c16 @@ -3590,7 +3590,7 @@ jc near 01f5dh ; 0f 82 5c 02 ; 0xc1cfd dec word [bp-01ah] ; ff 4e e6 ; 0xc1d01 vgabios.c:1289 jmp short 01c95h ; eb 8f ; 0xc1d04 - mov dl, byte [bx+047b6h] ; 8a 97 b6 47 ; 0xc1d06 vgabios.c:1294 + mov dl, byte [bx+047b2h] ; 8a 97 b2 47 ; 0xc1d06 vgabios.c:1294 cmp byte [bp-008h], 000h ; 80 7e f8 00 ; 0xc1d0a vgabios.c:1295 jne short 01d4bh ; 75 3b ; 0xc1d0e cmp byte [bp-00ch], 000h ; 80 7e f4 00 ; 0xc1d10 @@ -3608,7 +3608,7 @@ movzx cx, dl ; 0f b6 ca ; 0xc1d34 imul cx, ax ; 0f af c8 ; 0xc1d37 movzx ax, byte [bp-012h] ; 0f b6 46 ee ; 0xc1d3a - mov es, [bx+047b7h] ; 8e 87 b7 47 ; 0xc1d3e + mov es, [bx+047b3h] ; 8e 87 b3 47 ; 0xc1d3e xor di, di ; 31 ff ; 0xc1d42 jcxz 01d48h ; e3 02 ; 0xc1d44 rep stosb ; f3 aa ; 0xc1d46 @@ -3709,7 +3709,7 @@ imul cx, dx ; 0f af ca ; 0xc1e69 sal cx, 003h ; c1 e1 03 ; 0xc1e6c movzx ax, byte [bp-012h] ; 0f b6 46 ee ; 0xc1e6f - mov es, [bx+047b7h] ; 8e 87 b7 47 ; 0xc1e73 + mov es, [bx+047b3h] ; 8e 87 b3 47 ; 0xc1e73 xor di, di ; 31 ff ; 0xc1e77 jcxz 01e7dh ; e3 02 ; 0xc1e79 rep stosb ; f3 aa ; 0xc1e7b @@ -3899,7 +3899,7 @@ push si ; 56 ; 0xc2065 vgabios.c:1414 push di ; 57 ; 0xc2066 enter 00006h, 000h ; c8 06 00 00 ; 0xc2067 - mov di, 05571h ; bf 71 55 ; 0xc206b vgabios.c:1421 + mov di, 0556dh ; bf 6d 55 ; 0xc206b vgabios.c:1421 xor bh, bh ; 30 ff ; 0xc206e vgabios.c:1422 movzx si, byte [bp+00ah] ; 0f b6 76 0a ; 0xc2070 imul si, bx ; 0f af f3 ; 0xc2074 @@ -3992,7 +3992,7 @@ push di ; 57 ; 0xc2143 enter 00006h, 000h ; c8 06 00 00 ; 0xc2144 mov dh, dl ; 88 d6 ; 0xc2148 - mov word [bp-002h], 05571h ; c7 46 fe 71 55 ; 0xc214a vgabios.c:1485 + mov word [bp-002h], 0556dh ; c7 46 fe 6d 55 ; 0xc214a vgabios.c:1485 movzx si, cl ; 0f b6 f1 ; 0xc214f vgabios.c:1486 movzx cx, byte [bp+008h] ; 0f b6 4e 08 ; 0xc2152 imul cx, si ; 0f af ce ; 0xc2156 @@ -4088,7 +4088,7 @@ movzx bx, cl ; 0f b6 d9 ; 0xc222c vgabios.c:1525 mov di, bx ; 89 df ; 0xc222f sal di, 003h ; c1 e7 03 ; 0xc2231 - cmp byte [di+047b4h], 000h ; 80 bd b4 47 00 ; 0xc2234 + cmp byte [di+047b0h], 000h ; 80 bd b0 47 00 ; 0xc2234 jne short 02281h ; 75 46 ; 0xc2239 mov bx, word [bp-018h] ; 8b 5e e8 ; 0xc223b vgabios.c:1528 imul bx, ax ; 0f af d8 ; 0xc223e @@ -4110,24 +4110,24 @@ add ax, bx ; 01 d8 ; 0xc226a mov word [bp-01ah], ax ; 89 46 e6 ; 0xc226c mov ax, word [bp-01ah] ; 8b 46 e6 ; 0xc226f vgabios.c:1531 - mov es, [di+047b7h] ; 8e 85 b7 47 ; 0xc2272 + mov es, [di+047b3h] ; 8e 85 b3 47 ; 0xc2272 mov cx, si ; 89 f1 ; 0xc2276 mov di, dx ; 89 d7 ; 0xc2278 jcxz 0227eh ; e3 02 ; 0xc227a rep stosw ; f3 ab ; 0xc227c jmp near 02325h ; e9 a4 00 ; 0xc227e vgabios.c:1533 - movzx bx, byte [bx+04833h] ; 0f b6 9f 33 48 ; 0xc2281 vgabios.c:1536 + movzx bx, byte [bx+0482fh] ; 0f b6 9f 2f 48 ; 0xc2281 vgabios.c:1536 sal bx, 006h ; c1 e3 06 ; 0xc2286 - mov al, byte [bx+04849h] ; 8a 87 49 48 ; 0xc2289 + mov al, byte [bx+04845h] ; 8a 87 45 48 ; 0xc2289 mov byte [bp-006h], al ; 88 46 fa ; 0xc228d - mov al, byte [di+047b6h] ; 8a 85 b6 47 ; 0xc2290 vgabios.c:1537 + mov al, byte [di+047b2h] ; 8a 85 b2 47 ; 0xc2290 vgabios.c:1537 mov byte [bp-00ch], al ; 88 46 f4 ; 0xc2294 dec si ; 4e ; 0xc2297 vgabios.c:1538 cmp si, strict byte 0ffffh ; 83 fe ff ; 0xc2298 je near 02325h ; 0f 84 86 00 ; 0xc229b movzx bx, byte [bp-00ah] ; 0f b6 5e f6 ; 0xc229f vgabios.c:1540 sal bx, 003h ; c1 e3 03 ; 0xc22a3 - mov al, byte [bx+047b5h] ; 8a 87 b5 47 ; 0xc22a6 + mov al, byte [bx+047b1h] ; 8a 87 b1 47 ; 0xc22a6 cmp AL, strict byte 003h ; 3c 03 ; 0xc22aa jc short 022bah ; 72 0c ; 0xc22ac jbe short 022c0h ; 76 10 ; 0xc22ae @@ -4220,7 +4220,7 @@ xor ch, ch ; 30 ed ; 0xc2390 vgabios.c:1583 mov bx, cx ; 89 cb ; 0xc2392 sal bx, 003h ; c1 e3 03 ; 0xc2394 - cmp byte [bx+047b4h], 000h ; 80 bf b4 47 00 ; 0xc2397 + cmp byte [bx+047b0h], 000h ; 80 bf b0 47 00 ; 0xc2397 jne short 023dbh ; 75 3d ; 0xc239c imul di, ax ; 0f af f8 ; 0xc239e vgabios.c:1586 add di, di ; 01 ff ; 0xc23a1 @@ -4239,26 +4239,26 @@ je near 02487h ; 0f 84 c1 00 ; 0xc23c2 movzx di, byte [bp-012h] ; 0f b6 7e ee ; 0xc23c6 vgabios.c:1589 sal di, 003h ; c1 e7 03 ; 0xc23ca - mov es, [di+047b7h] ; 8e 85 b7 47 ; 0xc23cd vgabios.c:40 + mov es, [di+047b3h] ; 8e 85 b3 47 ; 0xc23cd vgabios.c:40 mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc23d1 mov byte [es:bx], al ; 26 88 07 ; 0xc23d4 inc bx ; 43 ; 0xc23d7 vgabios.c:1590 inc bx ; 43 ; 0xc23d8 jmp short 023beh ; eb e3 ; 0xc23d9 vgabios.c:1591 mov di, cx ; 89 cf ; 0xc23db vgabios.c:1596 - movzx ax, byte [di+04833h] ; 0f b6 85 33 48 ; 0xc23dd + movzx ax, byte [di+0482fh] ; 0f b6 85 2f 48 ; 0xc23dd mov di, ax ; 89 c7 ; 0xc23e2 sal di, 006h ; c1 e7 06 ; 0xc23e4 - mov al, byte [di+04849h] ; 8a 85 49 48 ; 0xc23e7 + mov al, byte [di+04845h] ; 8a 85 45 48 ; 0xc23e7 mov byte [bp-00ch], al ; 88 46 f4 ; 0xc23eb - mov al, byte [bx+047b6h] ; 8a 87 b6 47 ; 0xc23ee vgabios.c:1597 + mov al, byte [bx+047b2h] ; 8a 87 b2 47 ; 0xc23ee vgabios.c:1597 mov byte [bp-014h], al ; 88 46 ec ; 0xc23f2 dec si ; 4e ; 0xc23f5 vgabios.c:1598 cmp si, strict byte 0ffffh ; 83 fe ff ; 0xc23f6 je near 02487h ; 0f 84 8a 00 ; 0xc23f9 movzx bx, byte [bp-012h] ; 0f b6 5e ee ; 0xc23fd vgabios.c:1600 sal bx, 003h ; c1 e3 03 ; 0xc2401 - mov bl, byte [bx+047b5h] ; 8a 9f b5 47 ; 0xc2404 + mov bl, byte [bx+047b1h] ; 8a 9f b1 47 ; 0xc2404 cmp bl, 003h ; 80 fb 03 ; 0xc2408 jc short 0241bh ; 72 0e ; 0xc240b jbe short 02422h ; 76 13 ; 0xc240d @@ -4328,9 +4328,9 @@ je near 025ceh ; 0f 84 1a 01 ; 0xc24b0 movzx bx, al ; 0f b6 d8 ; 0xc24b4 vgabios.c:1633 sal bx, 003h ; c1 e3 03 ; 0xc24b7 - cmp byte [bx+047b4h], 000h ; 80 bf b4 47 00 ; 0xc24ba + cmp byte [bx+047b0h], 000h ; 80 bf b0 47 00 ; 0xc24ba je near 025ceh ; 0f 84 0b 01 ; 0xc24bf - mov al, byte [bx+047b5h] ; 8a 87 b5 47 ; 0xc24c3 vgabios.c:1635 + mov al, byte [bx+047b1h] ; 8a 87 b1 47 ; 0xc24c3 vgabios.c:1635 cmp AL, strict byte 003h ; 3c 03 ; 0xc24c7 jc short 024dah ; 72 0f ; 0xc24c9 jbe short 024e1h ; 76 14 ; 0xc24cb @@ -4389,7 +4389,7 @@ mov si, cx ; 89 ce ; 0xc2550 vgabios.c:1655 shr si, 1 ; d1 ee ; 0xc2552 imul si, si, strict byte 00050h ; 6b f6 50 ; 0xc2554 - cmp al, byte [bx+047b6h] ; 3a 87 b6 47 ; 0xc2557 + cmp al, byte [bx+047b2h] ; 3a 87 b2 47 ; 0xc2557 jne short 02564h ; 75 07 ; 0xc255b mov bx, dx ; 89 d3 ; 0xc255d vgabios.c:1657 shr bx, 002h ; c1 eb 02 ; 0xc255f @@ -4405,7 +4405,7 @@ mov al, byte [es:bx] ; 26 8a 07 ; 0xc2578 movzx si, ah ; 0f b6 f4 ; 0xc257b vgabios.c:1665 sal si, 003h ; c1 e6 03 ; 0xc257e - cmp byte [si+047b6h], 002h ; 80 bc b6 47 02 ; 0xc2581 + cmp byte [si+047b2h], 002h ; 80 bc b2 47 02 ; 0xc2581 jne short 0259fh ; 75 17 ; 0xc2586 mov ah, dl ; 88 d4 ; 0xc2588 vgabios.c:1667 and ah, 003h ; 80 e4 03 ; 0xc258a @@ -4522,7 +4522,7 @@ movzx si, byte [bp-00ch] ; 0f b6 76 f4 ; 0xc269f vgabios.c:1742 mov bx, si ; 89 f3 ; 0xc26a3 sal bx, 003h ; c1 e3 03 ; 0xc26a5 - cmp byte [bx+047b4h], 000h ; 80 bf b4 47 00 ; 0xc26a8 + cmp byte [bx+047b0h], 000h ; 80 bf b0 47 00 ; 0xc26a8 jne short 026f2h ; 75 43 ; 0xc26ad mov ax, word [bp-010h] ; 8b 46 f0 ; 0xc26af vgabios.c:1745 imul ax, word [bp-00eh] ; 0f af 46 f2 ; 0xc26b2 @@ -4538,20 +4538,20 @@ add ax, dx ; 01 d0 ; 0xc26d0 add ax, ax ; 01 c0 ; 0xc26d2 add si, ax ; 01 c6 ; 0xc26d4 - mov es, [bx+047b7h] ; 8e 87 b7 47 ; 0xc26d6 vgabios.c:40 + mov es, [bx+047b3h] ; 8e 87 b3 47 ; 0xc26d6 vgabios.c:40 mov byte [es:si], ch ; 26 88 2c ; 0xc26da cmp cl, 003h ; 80 f9 03 ; 0xc26dd vgabios.c:1750 jne near 02780h ; 0f 85 9c 00 ; 0xc26e0 inc si ; 46 ; 0xc26e4 vgabios.c:1751 - mov es, [bx+047b7h] ; 8e 87 b7 47 ; 0xc26e5 vgabios.c:40 + mov es, [bx+047b3h] ; 8e 87 b3 47 ; 0xc26e5 vgabios.c:40 mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc26e9 mov byte [es:si], al ; 26 88 04 ; 0xc26ec jmp near 02780h ; e9 8e 00 ; 0xc26ef vgabios.c:1753 - movzx si, byte [si+04833h] ; 0f b6 b4 33 48 ; 0xc26f2 vgabios.c:1756 + movzx si, byte [si+0482fh] ; 0f b6 b4 2f 48 ; 0xc26f2 vgabios.c:1756 sal si, 006h ; c1 e6 06 ; 0xc26f7 - mov ah, byte [si+04849h] ; 8a a4 49 48 ; 0xc26fa - mov dl, byte [bx+047b6h] ; 8a 97 b6 47 ; 0xc26fe vgabios.c:1757 - mov al, byte [bx+047b5h] ; 8a 87 b5 47 ; 0xc2702 vgabios.c:1758 + mov ah, byte [si+04845h] ; 8a a4 45 48 ; 0xc26fa + mov dl, byte [bx+047b2h] ; 8a 97 b2 47 ; 0xc26fe vgabios.c:1757 + mov al, byte [bx+047b1h] ; 8a 87 b1 47 ; 0xc2702 vgabios.c:1758 cmp AL, strict byte 003h ; 3c 03 ; 0xc2706 jc short 02716h ; 72 0c ; 0xc2708 jbe short 0271ch ; 76 10 ; 0xc270a @@ -4615,7 +4615,7 @@ mov ah, byte [bp-010h] ; 8a 66 f0 ; 0xc27aa db 0feh, 0cch ; dec ah ; fe cc ; 0xc27ad - cmp byte [bx+047b4h], 000h ; 80 bf b4 47 00 ; 0xc27af + cmp byte [bx+047b0h], 000h ; 80 bf b0 47 00 ; 0xc27af jne short 027feh ; 75 48 ; 0xc27b4 mov dx, word [bp-010h] ; 8b 56 f0 ; 0xc27b6 vgabios.c:1790 imul dx, word [bp-00eh] ; 0f af 56 f2 ; 0xc27b9 @@ -4633,7 +4633,7 @@ add dx, dx ; 01 d2 ; 0xc27db add si, dx ; 01 d6 ; 0xc27dd inc si ; 46 ; 0xc27df vgabios.c:1791 - mov es, [bx+047b7h] ; 8e 87 b7 47 ; 0xc27e0 vgabios.c:35 + mov es, [bx+047b3h] ; 8e 87 b3 47 ; 0xc27e0 vgabios.c:35 mov bl, byte [es:si] ; 26 8a 1c ; 0xc27e4 push strict byte 00001h ; 6a 01 ; 0xc27e7 vgabios.c:1792 movzx dx, byte [bp-00ah] ; 0f b6 56 f6 ; 0xc27e9 @@ -4909,7 +4909,7 @@ mov di, bx ; 89 df ; 0xc2a0a vgabios.c:1888 sal di, 005h ; c1 e7 05 ; 0xc2a0c add di, word [bp-00ch] ; 03 7e f4 ; 0xc2a0f - add si, 05d71h ; 81 c6 71 5d ; 0xc2a12 vgabios.c:1889 + add si, 05d6dh ; 81 c6 6d 5d ; 0xc2a12 vgabios.c:1889 mov cx, strict word 0000eh ; b9 0e 00 ; 0xc2a16 mov dx, 0c000h ; ba 00 c0 ; 0xc2a19 mov ax, 0a000h ; b8 00 a0 ; 0xc2a1c @@ -4965,7 +4965,7 @@ mov di, bx ; 89 df ; 0xc2a7b vgabios.c:1907 sal di, 005h ; c1 e7 05 ; 0xc2a7d add di, word [bp-00ch] ; 03 7e f4 ; 0xc2a80 - add si, 05571h ; 81 c6 71 55 ; 0xc2a83 vgabios.c:1908 + add si, 0556dh ; 81 c6 6d 55 ; 0xc2a83 vgabios.c:1908 mov cx, strict word 00008h ; b9 08 00 ; 0xc2a87 mov dx, 0c000h ; ba 00 c0 ; 0xc2a8a mov ax, 0a000h ; b8 00 a0 ; 0xc2a8d @@ -5021,7 +5021,7 @@ mov di, bx ; 89 df ; 0xc2aec vgabios.c:1927 sal di, 005h ; c1 e7 05 ; 0xc2aee add di, word [bp-00ch] ; 03 7e f4 ; 0xc2af1 - add si, 06b71h ; 81 c6 71 6b ; 0xc2af4 vgabios.c:1928 + add si, 06b6dh ; 81 c6 6d 6b ; 0xc2af4 vgabios.c:1928 mov cx, strict word 00010h ; b9 10 00 ; 0xc2af8 mov dx, 0c000h ; ba 00 c0 ; 0xc2afb mov ax, 0a000h ; b8 00 a0 ; 0xc2afe @@ -5172,7 +5172,7 @@ mov word [bp-00ah], ax ; 89 46 f6 ; 0xc2c03 vgabios.c:48 mov ax, ds ; 8c d8 ; 0xc2c06 vgabios.c:2035 mov es, dx ; 8e c2 ; 0xc2c08 vgabios.c:62 - mov word [es:bx], 05507h ; 26 c7 07 07 55 ; 0xc2c0a + mov word [es:bx], 05503h ; 26 c7 07 03 55 ; 0xc2c0a mov [es:bx+002h], ds ; 26 8c 5f 02 ; 0xc2c0f lea di, [bx+004h] ; 8d 7f 04 ; 0xc2c13 vgabios.c:2040 mov cx, strict word 0001eh ; b9 1e 00 ; 0xc2c16 @@ -6048,7 +6048,7 @@ jnbe short 033c2h ; 77 0e ; 0xc33b2 movzx bx, al ; 0f b6 d8 ; 0xc33b4 sal bx, 003h ; c1 e3 03 ; 0xc33b7 - cmp dl, byte [bx+047b3h] ; 3a 97 b3 47 ; 0xc33ba + cmp dl, byte [bx+047afh] ; 3a 97 af 47 ; 0xc33ba jne short 033aeh ; 75 ee ; 0xc33be mov ah, al ; 88 c4 ; 0xc33c0 mov al, ah ; 88 e0 ; 0xc33c2 vgabios.c:2323 @@ -6764,7 +6764,7 @@ db 066h, 026h, 0c7h, 007h, 056h, 045h, 053h, 041h ; mov dword [es:bx], strict dword 041534556h ; 66 26 c7 07 56 45 53 41 ; 0xc3a9e mov word [es:bx+004h], 00200h ; 26 c7 47 04 00 02 ; 0xc3aa6 vbe.c:324 - mov word [es:bx+006h], 07deah ; 26 c7 47 06 ea 7d ; 0xc3aac vbe.c:327 + mov word [es:bx+006h], 07de6h ; 26 c7 47 06 e6 7d ; 0xc3aac vbe.c:327 mov [es:bx+008h], ds ; 26 8c 5f 08 ; 0xc3ab2 db 066h, 026h, 0c7h, 047h, 00ah, 001h, 000h, 000h, 000h ; mov dword [es:bx+00ah], strict dword 000000001h ; 66 26 c7 47 0a 01 00 00 00; 0xc3ab6 vbe.c:330 @@ -6780,11 +6780,11 @@ cmp word [bp-00eh], strict byte 00000h ; 83 7e f2 00 ; 0xc3add vbe.c:342 je short 03b07h ; 74 24 ; 0xc3ae1 mov word [es:bx+014h], strict word 00003h ; 26 c7 47 14 03 00 ; 0xc3ae3 vbe.c:345 - mov word [es:bx+016h], 07dffh ; 26 c7 47 16 ff 7d ; 0xc3ae9 vbe.c:346 + mov word [es:bx+016h], 07dfbh ; 26 c7 47 16 fb 7d ; 0xc3ae9 vbe.c:346 mov [es:bx+018h], ds ; 26 8c 5f 18 ; 0xc3aef - mov word [es:bx+01ah], 07e12h ; 26 c7 47 1a 12 7e ; 0xc3af3 vbe.c:347 + mov word [es:bx+01ah], 07e0eh ; 26 c7 47 1a 0e 7e ; 0xc3af3 vbe.c:347 mov [es:bx+01ch], ds ; 26 8c 5f 1c ; 0xc3af9 - mov word [es:bx+01eh], 07e33h ; 26 c7 47 1e 33 7e ; 0xc3afd vbe.c:348 + mov word [es:bx+01eh], 07e2fh ; 26 c7 47 1e 2f 7e ; 0xc3afd vbe.c:348 mov [es:bx+020h], ds ; 26 8c 5f 20 ; 0xc3b03 mov dx, cx ; 89 ca ; 0xc3b07 vbe.c:355 add dx, strict byte 0001bh ; 83 c2 1b ; 0xc3b09 @@ -7504,12 +7504,12 @@ ; Padding 0x6b bytes at 0xc4715 times 107 db 0 -section _DATA progbits vstart=0x4780 align=1 ; size=0x372f class=DATA group=DGROUP - ; disGetNextSymbol 0xc4780 LB 0x372f -> off=0x0 cb=0000000000000033 uValue=00000000000c0000 '_msg_vga_init' -_msg_vga_init: ; 0xc4780 LB 0x33 - db 'Oracle VM VirtualBox Version 6.1.31_SPB VGA BIOS', 00dh, 00ah, 000h - ; disGetNextSymbol 0xc47b3 LB 0x36fc -> off=0x0 cb=0000000000000080 uValue=00000000000c0033 'vga_modes' -vga_modes: ; 0xc47b3 LB 0x80 +section _DATA progbits vstart=0x4780 align=1 ; size=0x3727 class=DATA group=DGROUP + ; disGetNextSymbol 0xc4780 LB 0x3727 -> off=0x0 cb=000000000000002f uValue=00000000000c0000 '_msg_vga_init' +_msg_vga_init: ; 0xc4780 LB 0x2f + db 'Oracle VM VirtualBox Version 6.1.34 VGA BIOS', 00dh, 00ah, 000h + ; disGetNextSymbol 0xc47af LB 0x36f8 -> off=0x0 cb=0000000000000080 uValue=00000000000c002f 'vga_modes' +vga_modes: ; 0xc47af LB 0x80 db 000h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h, 001h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h db 002h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h, 003h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h db 004h, 001h, 002h, 002h, 000h, 0b8h, 0ffh, 001h, 005h, 001h, 002h, 002h, 000h, 0b8h, 0ffh, 001h @@ -7518,14 +7518,14 @@ db 00fh, 001h, 003h, 001h, 000h, 0a0h, 0ffh, 000h, 010h, 001h, 004h, 004h, 000h, 0a0h, 0ffh, 002h db 011h, 001h, 003h, 001h, 000h, 0a0h, 0ffh, 002h, 012h, 001h, 004h, 004h, 000h, 0a0h, 0ffh, 002h db 013h, 001h, 005h, 008h, 000h, 0a0h, 0ffh, 003h, 06ah, 001h, 004h, 004h, 000h, 0a0h, 0ffh, 002h - ; disGetNextSymbol 0xc4833 LB 0x367c -> off=0x0 cb=0000000000000010 uValue=00000000000c00b3 'line_to_vpti' -line_to_vpti: ; 0xc4833 LB 0x10 + ; disGetNextSymbol 0xc482f LB 0x3678 -> off=0x0 cb=0000000000000010 uValue=00000000000c00af 'line_to_vpti' +line_to_vpti: ; 0xc482f LB 0x10 db 017h, 017h, 018h, 018h, 004h, 005h, 006h, 007h, 00dh, 00eh, 011h, 012h, 01ah, 01bh, 01ch, 01dh - ; disGetNextSymbol 0xc4843 LB 0x366c -> off=0x0 cb=0000000000000004 uValue=00000000000c00c3 'dac_regs' -dac_regs: ; 0xc4843 LB 0x4 + ; disGetNextSymbol 0xc483f LB 0x3668 -> off=0x0 cb=0000000000000004 uValue=00000000000c00bf 'dac_regs' +dac_regs: ; 0xc483f LB 0x4 dd 0ff3f3f3fh - ; disGetNextSymbol 0xc4847 LB 0x3668 -> off=0x0 cb=0000000000000780 uValue=00000000000c00c7 'video_param_table' -video_param_table: ; 0xc4847 LB 0x780 + ; disGetNextSymbol 0xc4843 LB 0x3664 -> off=0x0 cb=0000000000000780 uValue=00000000000c00c3 'video_param_table' +video_param_table: ; 0xc4843 LB 0x780 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h @@ -7646,8 +7646,8 @@ db 072h, 0f0h, 000h, 060h, 000h, 000h, 000h, 000h, 000h, 000h, 059h, 08dh, 057h, 032h, 000h, 057h db 073h, 0e3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 014h, 007h, 038h, 039h, 03ah, 03bh, 03ch db 03dh, 03eh, 03fh, 001h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 005h, 00fh, 0ffh - ; disGetNextSymbol 0xc4fc7 LB 0x2ee8 -> off=0x0 cb=00000000000000c0 uValue=00000000000c0847 'palette0' -palette0: ; 0xc4fc7 LB 0xc0 + ; disGetNextSymbol 0xc4fc3 LB 0x2ee4 -> off=0x0 cb=00000000000000c0 uValue=00000000000c0843 'palette0' +palette0: ; 0xc4fc3 LB 0xc0 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah db 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah @@ -7660,8 +7660,8 @@ db 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah db 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh db 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh - ; disGetNextSymbol 0xc5087 LB 0x2e28 -> off=0x0 cb=00000000000000c0 uValue=00000000000c0907 'palette1' -palette1: ; 0xc5087 LB 0xc0 + ; disGetNextSymbol 0xc5083 LB 0x2e24 -> off=0x0 cb=00000000000000c0 uValue=00000000000c0903 'palette1' +palette1: ; 0xc5083 LB 0xc0 db 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah db 000h, 02ah, 02ah, 015h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah db 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah, 000h, 02ah, 02ah, 015h, 000h, 02ah, 02ah, 02ah @@ -7674,8 +7674,8 @@ db 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh, 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh db 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh db 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh - ; disGetNextSymbol 0xc5147 LB 0x2d68 -> off=0x0 cb=00000000000000c0 uValue=00000000000c09c7 'palette2' -palette2: ; 0xc5147 LB 0xc0 + ; disGetNextSymbol 0xc5143 LB 0x2d64 -> off=0x0 cb=00000000000000c0 uValue=00000000000c09c3 'palette2' +palette2: ; 0xc5143 LB 0xc0 db 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah db 000h, 02ah, 02ah, 02ah, 000h, 02ah, 02ah, 02ah, 000h, 000h, 015h, 000h, 000h, 03fh, 000h, 02ah db 015h, 000h, 02ah, 03fh, 02ah, 000h, 015h, 02ah, 000h, 03fh, 02ah, 02ah, 015h, 02ah, 02ah, 03fh @@ -7688,8 +7688,8 @@ db 015h, 015h, 000h, 015h, 015h, 02ah, 015h, 03fh, 000h, 015h, 03fh, 02ah, 03fh, 015h, 000h, 03fh db 015h, 02ah, 03fh, 03fh, 000h, 03fh, 03fh, 02ah, 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh db 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh - ; disGetNextSymbol 0xc5207 LB 0x2ca8 -> off=0x0 cb=0000000000000300 uValue=00000000000c0a87 'palette3' -palette3: ; 0xc5207 LB 0x300 + ; disGetNextSymbol 0xc5203 LB 0x2ca4 -> off=0x0 cb=0000000000000300 uValue=00000000000c0a83 'palette3' +palette3: ; 0xc5203 LB 0x300 db 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah db 000h, 02ah, 02ah, 015h, 000h, 02ah, 02ah, 02ah, 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh db 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh @@ -7738,24 +7738,24 @@ db 00bh, 010h, 00bh, 00bh, 010h, 00ch, 00bh, 010h, 00dh, 00bh, 010h, 00fh, 00bh, 010h, 010h, 00bh db 00fh, 010h, 00bh, 00dh, 010h, 00bh, 00ch, 010h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h - ; disGetNextSymbol 0xc5507 LB 0x29a8 -> off=0x0 cb=0000000000000010 uValue=00000000000c0d87 'static_functionality' -static_functionality: ; 0xc5507 LB 0x10 + ; disGetNextSymbol 0xc5503 LB 0x29a4 -> off=0x0 cb=0000000000000010 uValue=00000000000c0d83 'static_functionality' +static_functionality: ; 0xc5503 LB 0x10 db 0ffh, 0e0h, 00fh, 000h, 000h, 000h, 000h, 007h, 002h, 008h, 0e7h, 00ch, 000h, 000h, 000h, 000h - ; disGetNextSymbol 0xc5517 LB 0x2998 -> off=0x0 cb=0000000000000024 uValue=00000000000c0d97 '_dcc_table' -_dcc_table: ; 0xc5517 LB 0x24 + ; disGetNextSymbol 0xc5513 LB 0x2994 -> off=0x0 cb=0000000000000024 uValue=00000000000c0d93 '_dcc_table' +_dcc_table: ; 0xc5513 LB 0x24 db 010h, 001h, 007h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h - ; disGetNextSymbol 0xc553b LB 0x2974 -> off=0x0 cb=000000000000001a uValue=00000000000c0dbb '_secondary_save_area' -_secondary_save_area: ; 0xc553b LB 0x1a - db 01ah, 000h, 017h, 055h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h + ; disGetNextSymbol 0xc5537 LB 0x2970 -> off=0x0 cb=000000000000001a uValue=00000000000c0db7 '_secondary_save_area' +_secondary_save_area: ; 0xc5537 LB 0x1a + db 01ah, 000h, 013h, 055h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h - ; disGetNextSymbol 0xc5555 LB 0x295a -> off=0x0 cb=000000000000001c uValue=00000000000c0dd5 '_video_save_pointer_table' -_video_save_pointer_table: ; 0xc5555 LB 0x1c - db 047h, 048h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h - db 03bh, 055h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h - ; disGetNextSymbol 0xc5571 LB 0x293e -> off=0x0 cb=0000000000000800 uValue=00000000000c0df1 'vgafont8' -vgafont8: ; 0xc5571 LB 0x800 + ; disGetNextSymbol 0xc5551 LB 0x2956 -> off=0x0 cb=000000000000001c uValue=00000000000c0dd1 '_video_save_pointer_table' +_video_save_pointer_table: ; 0xc5551 LB 0x1c + db 043h, 048h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h + db 037h, 055h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h + ; disGetNextSymbol 0xc556d LB 0x293a -> off=0x0 cb=0000000000000800 uValue=00000000000c0ded 'vgafont8' +vgafont8: ; 0xc556d LB 0x800 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07eh, 081h, 0a5h, 081h, 0bdh, 099h, 081h, 07eh db 07eh, 0ffh, 0dbh, 0ffh, 0c3h, 0e7h, 0ffh, 07eh, 06ch, 0feh, 0feh, 0feh, 07ch, 038h, 010h, 000h db 010h, 038h, 07ch, 0feh, 07ch, 038h, 010h, 000h, 038h, 07ch, 038h, 0feh, 0feh, 07ch, 038h, 07ch @@ -7884,8 +7884,8 @@ db 000h, 000h, 000h, 000h, 018h, 000h, 000h, 000h, 00fh, 00ch, 00ch, 00ch, 0ech, 06ch, 03ch, 01ch db 078h, 06ch, 06ch, 06ch, 06ch, 000h, 000h, 000h, 070h, 018h, 030h, 060h, 078h, 000h, 000h, 000h db 000h, 000h, 03ch, 03ch, 03ch, 03ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h - ; disGetNextSymbol 0xc5d71 LB 0x213e -> off=0x0 cb=0000000000000e00 uValue=00000000000c15f1 'vgafont14' -vgafont14: ; 0xc5d71 LB 0xe00 + ; disGetNextSymbol 0xc5d6d LB 0x213a -> off=0x0 cb=0000000000000e00 uValue=00000000000c15ed 'vgafont14' +vgafont14: ; 0xc5d6d LB 0xe00 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 07eh, 081h, 0a5h, 081h, 081h, 0bdh, 099h, 081h, 07eh, 000h, 000h, 000h, 000h, 000h, 07eh, 0ffh db 0dbh, 0ffh, 0ffh, 0c3h, 0e7h, 0ffh, 07eh, 000h, 000h, 000h, 000h, 000h, 000h, 06ch, 0feh, 0feh @@ -8110,8 +8110,8 @@ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 070h, 0d8h, 030h, 060h, 0c8h, 0f8h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07ch, 07ch, 07ch, 07ch, 07ch, 07ch, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h - ; disGetNextSymbol 0xc6b71 LB 0x133e -> off=0x0 cb=0000000000001000 uValue=00000000000c23f1 'vgafont16' -vgafont16: ; 0xc6b71 LB 0x1000 + ; disGetNextSymbol 0xc6b6d LB 0x133a -> off=0x0 cb=0000000000001000 uValue=00000000000c23ed 'vgafont16' +vgafont16: ; 0xc6b6d LB 0x1000 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 07eh, 081h, 0a5h, 081h, 081h, 0bdh, 099h, 081h, 081h, 07eh, 000h, 000h, 000h, 000h db 000h, 000h, 07eh, 0ffh, 0dbh, 0ffh, 0ffh, 0c3h, 0e7h, 0ffh, 0ffh, 07eh, 000h, 000h, 000h, 000h @@ -8368,8 +8368,8 @@ db 000h, 070h, 0d8h, 030h, 060h, 0c8h, 0f8h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 07ch, 07ch, 07ch, 07ch, 07ch, 07ch, 07ch, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h - ; disGetNextSymbol 0xc7b71 LB 0x33e -> off=0x0 cb=000000000000012d uValue=00000000000c33f1 'vgafont14alt' -vgafont14alt: ; 0xc7b71 LB 0x12d + ; disGetNextSymbol 0xc7b6d LB 0x33a -> off=0x0 cb=000000000000012d uValue=00000000000c33ed 'vgafont14alt' +vgafont14alt: ; 0xc7b6d LB 0x12d db 01dh, 000h, 000h, 000h, 000h, 024h, 066h, 0ffh, 066h, 024h, 000h, 000h, 000h, 000h, 000h, 022h db 000h, 063h, 063h, 063h, 022h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 02bh, 000h db 000h, 000h, 018h, 018h, 018h, 0ffh, 018h, 018h, 018h, 000h, 000h, 000h, 000h, 02dh, 000h, 000h @@ -8389,8 +8389,8 @@ db 000h, 0fch, 066h, 066h, 07ch, 062h, 066h, 06fh, 066h, 066h, 0f3h, 000h, 000h, 000h, 0f1h, 000h db 000h, 018h, 018h, 018h, 0ffh, 018h, 018h, 018h, 000h, 0ffh, 000h, 000h, 000h, 0f6h, 000h, 000h db 018h, 018h, 000h, 000h, 0ffh, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 000h - ; disGetNextSymbol 0xc7c9e LB 0x211 -> off=0x0 cb=0000000000000144 uValue=00000000000c351e 'vgafont16alt' -vgafont16alt: ; 0xc7c9e LB 0x144 + ; disGetNextSymbol 0xc7c9a LB 0x20d -> off=0x0 cb=0000000000000144 uValue=00000000000c351a 'vgafont16alt' +vgafont16alt: ; 0xc7c9a LB 0x144 db 01dh, 000h, 000h, 000h, 000h, 000h, 024h, 066h, 0ffh, 066h, 024h, 000h, 000h, 000h, 000h, 000h db 000h, 030h, 000h, 000h, 03ch, 066h, 0c3h, 0c3h, 0dbh, 0dbh, 0c3h, 0c3h, 066h, 03ch, 000h, 000h db 000h, 000h, 04dh, 000h, 000h, 0c3h, 0e7h, 0ffh, 0ffh, 0dbh, 0c3h, 0c3h, 0c3h, 0c3h, 0c3h, 000h @@ -8412,43 +8412,45 @@ db 000h, 0abh, 000h, 0c0h, 0c0h, 0c2h, 0c6h, 0cch, 018h, 030h, 060h, 0ceh, 09bh, 006h, 00ch, 01fh db 000h, 000h, 0ach, 000h, 0c0h, 0c0h, 0c2h, 0c6h, 0cch, 018h, 030h, 066h, 0ceh, 096h, 03eh, 006h db 006h, 000h, 000h, 000h - ; disGetNextSymbol 0xc7de2 LB 0xcd -> off=0x0 cb=0000000000000008 uValue=00000000000c3662 '_cga_msr' -_cga_msr: ; 0xc7de2 LB 0x8 + ; disGetNextSymbol 0xc7dde LB 0xc9 -> off=0x0 cb=0000000000000008 uValue=00000000000c365e '_cga_msr' +_cga_msr: ; 0xc7dde LB 0x8 db 02ch, 028h, 02dh, 029h, 02ah, 02eh, 01eh, 029h - ; disGetNextSymbol 0xc7dea LB 0xc5 -> off=0x0 cb=0000000000000015 uValue=00000000000c366a '_vbebios_copyright' -_vbebios_copyright: ; 0xc7dea LB 0x15 + ; disGetNextSymbol 0xc7de6 LB 0xc1 -> off=0x0 cb=0000000000000015 uValue=00000000000c3666 '_vbebios_copyright' +_vbebios_copyright: ; 0xc7de6 LB 0x15 db 'VirtualBox VESA BIOS', 000h - ; disGetNextSymbol 0xc7dff LB 0xb0 -> off=0x0 cb=0000000000000013 uValue=00000000000c367f '_vbebios_vendor_name' -_vbebios_vendor_name: ; 0xc7dff LB 0x13 + ; disGetNextSymbol 0xc7dfb LB 0xac -> off=0x0 cb=0000000000000013 uValue=00000000000c367b '_vbebios_vendor_name' +_vbebios_vendor_name: ; 0xc7dfb LB 0x13 db 'Oracle Corporation', 000h - ; disGetNextSymbol 0xc7e12 LB 0x9d -> off=0x0 cb=0000000000000021 uValue=00000000000c3692 '_vbebios_product_name' -_vbebios_product_name: ; 0xc7e12 LB 0x21 + ; disGetNextSymbol 0xc7e0e LB 0x99 -> off=0x0 cb=0000000000000021 uValue=00000000000c368e '_vbebios_product_name' +_vbebios_product_name: ; 0xc7e0e LB 0x21 db 'Oracle VM VirtualBox VBE Adapter', 000h - ; disGetNextSymbol 0xc7e33 LB 0x7c -> off=0x0 cb=0000000000000028 uValue=00000000000c36b3 '_vbebios_product_revision' -_vbebios_product_revision: ; 0xc7e33 LB 0x28 - db 'Oracle VM VirtualBox Version 6.1.31_SPB', 000h - ; disGetNextSymbol 0xc7e5b LB 0x54 -> off=0x0 cb=000000000000002b uValue=00000000000c36db '_vbebios_info_string' -_vbebios_info_string: ; 0xc7e5b LB 0x2b + ; disGetNextSymbol 0xc7e2f LB 0x78 -> off=0x0 cb=0000000000000024 uValue=00000000000c36af '_vbebios_product_revision' +_vbebios_product_revision: ; 0xc7e2f LB 0x24 + db 'Oracle VM VirtualBox Version 6.1.34', 000h + ; disGetNextSymbol 0xc7e53 LB 0x54 -> off=0x0 cb=000000000000002b uValue=00000000000c36d3 '_vbebios_info_string' +_vbebios_info_string: ; 0xc7e53 LB 0x2b db 'VirtualBox VBE Display Adapter enabled', 00dh, 00ah, 00dh, 00ah, 000h - ; disGetNextSymbol 0xc7e86 LB 0x29 -> off=0x0 cb=0000000000000029 uValue=00000000000c3706 '_no_vbebios_info_string' -_no_vbebios_info_string: ; 0xc7e86 LB 0x29 + ; disGetNextSymbol 0xc7e7e LB 0x29 -> off=0x0 cb=0000000000000029 uValue=00000000000c36fe '_no_vbebios_info_string' +_no_vbebios_info_string: ; 0xc7e7e LB 0x29 db 'No VirtualBox VBE support available!', 00dh, 00ah, 00dh, 00ah, 000h - ; Padding 0x1 bytes at 0xc7eaf + ; Padding 0x1 bytes at 0xc7ea7 db 001h -section CONST progbits vstart=0x7eb0 align=1 ; size=0x0 class=DATA group=DGROUP +section CONST progbits vstart=0x7ea8 align=1 ; size=0x0 class=DATA group=DGROUP -section CONST2 progbits vstart=0x7eb0 align=1 ; size=0x0 class=DATA group=DGROUP +section CONST2 progbits vstart=0x7ea8 align=1 ; size=0x0 class=DATA group=DGROUP - ; Padding 0x150 bytes at 0xc7eb0 - db 000h, 000h, 000h, 000h, 001h, 000h, 000h, 000h, 000h, 000h, 000h, 044h, 03ah, 05ch, 052h, 065h - db 070h, 06fh, 073h, 069h, 074h, 06fh, 072h, 079h, 05ch, 062h, 072h, 061h, 06eh, 063h, 068h, 065h - db 073h, 05ch, 056h, 042h, 06fh, 078h, 02dh, 036h, 02eh, 031h, 05ch, 06fh, 075h, 074h, 05ch, 077h - db 069h, 06eh, 02eh, 061h, 06dh, 064h, 036h, 034h, 05ch, 072h, 065h, 06ch, 065h, 061h, 073h, 065h - db 05ch, 06fh, 062h, 06ah, 05ch, 056h, 042h, 06fh, 078h, 056h, 067h, 061h, 042h, 069h, 06fh, 073h - db 033h, 038h, 036h, 05ch, 056h, 042h, 06fh, 078h, 056h, 067h, 061h, 042h, 069h, 06fh, 073h, 033h - db 038h, 036h, 02eh, 073h, 079h, 06dh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h + ; Padding 0x158 bytes at 0xc7ea8 + db 000h, 000h, 000h, 000h, 001h, 000h, 000h, 000h, 000h, 000h, 000h, 02fh, 068h, 06fh, 06dh, 065h + db 02fh, 067h, 061h, 06ch, 069h, 074h, 073h, 079h, 06eh, 02fh, 063h, 06fh, 06dh, 070h, 069h, 06ch + db 065h, 02dh, 063h, 061h, 063h, 068h, 065h, 02fh, 076h, 062h, 06fh, 078h, 02dh, 072h, 065h, 06ch + db 065h, 061h, 073h, 065h, 02fh, 062h, 072h, 061h, 06eh, 063h, 068h, 065h, 073h, 02fh, 056h, 042h + db 06fh, 078h, 02dh, 036h, 02eh, 031h, 02fh, 06fh, 075h, 074h, 02fh, 06ch, 069h, 06eh, 075h, 078h + db 02eh, 061h, 06dh, 064h, 036h, 034h, 02fh, 072h, 065h, 06ch, 065h, 061h, 073h, 065h, 02fh, 06fh + db 062h, 06ah, 02fh, 056h, 042h, 06fh, 078h, 056h, 067h, 061h, 042h, 069h, 06fh, 073h, 033h, 038h + db 036h, 02fh, 056h, 042h, 06fh, 078h, 056h, 067h, 061h, 042h, 069h, 06fh, 073h, 033h, 038h, 036h + db 02eh, 073h, 079h, 06dh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h @@ -8461,5 +8463,4 @@ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h - db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h - db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 087h + db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 092h diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative386.md5sum virtualbox-6.1.34-dfsg/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative386.md5sum --- virtualbox-6.1.32-dfsg/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative386.md5sum 2022-01-13 18:55:39.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative386.md5sum 2022-03-22 23:42:42.000000000 +0000 @@ -1 +1 @@ -8eecf0ef7049d28a8875b9eea455734d *VBoxVgaBios386.rom +e869c929d4a8b77a10728333b0b69c9f *VBoxVgaBios386.rom diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative8086.asm virtualbox-6.1.34-dfsg/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative8086.asm --- virtualbox-6.1.32-dfsg/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative8086.asm 2022-01-13 18:55:39.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative8086.asm 2022-03-22 23:42:42.000000000 +0000 @@ -2091,7 +2091,7 @@ xor bh, bh ; 30 ff ; 0xc0de0 mov CL, strict byte 003h ; b1 03 ; 0xc0de2 sal bx, CL ; d3 e3 ; 0xc0de4 - cmp byte [bx+047b4h], 000h ; 80 bf b4 47 00 ; 0xc0de6 + cmp byte [bx+047b0h], 000h ; 80 bf b0 47 00 ; 0xc0de6 jne short 00e23h ; 75 36 ; 0xc0deb mov ax, di ; 89 f8 ; 0xc0ded vgabios.c:534 mul dx ; f7 e2 ; 0xc0def @@ -2111,13 +2111,13 @@ sal ax, 1 ; d1 e0 ; 0xc0e0d mov di, word [bp-010h] ; 8b 7e f0 ; 0xc0e0f add di, ax ; 01 c7 ; 0xc0e12 - mov es, [bx+047b7h] ; 8e 87 b7 47 ; 0xc0e14 vgabios.c:45 + mov es, [bx+047b3h] ; 8e 87 b3 47 ; 0xc0e14 vgabios.c:45 mov ax, word [es:di] ; 26 8b 05 ; 0xc0e18 push SS ; 16 ; 0xc0e1b vgabios.c:48 pop ES ; 07 ; 0xc0e1c mov word [es:si], ax ; 26 89 04 ; 0xc0e1d jmp near 00eafh ; e9 8c 00 ; 0xc0e20 vgabios.c:536 - mov bl, byte [bx+047b5h] ; 8a 9f b5 47 ; 0xc0e23 vgabios.c:537 + mov bl, byte [bx+047b1h] ; 8a 9f b1 47 ; 0xc0e23 vgabios.c:537 cmp bl, 005h ; 80 fb 05 ; 0xc0e27 je short 00e82h ; 74 56 ; 0xc0e2a cmp bl, 002h ; 80 fb 02 ; 0xc0e2c @@ -2225,18 +2225,18 @@ retn 00002h ; c2 02 00 ; 0xc0f21 mov bx, 0010ch ; bb 0c 01 ; 0xc0f24 vgabios.c:57 jmp short 00ee2h ; eb b9 ; 0xc0f27 - mov dx, 05d71h ; ba 71 5d ; 0xc0f29 vgabios.c:576 + mov dx, 05d6dh ; ba 6d 5d ; 0xc0f29 vgabios.c:576 mov ax, ds ; 8c d8 ; 0xc0f2c jmp short 00eedh ; eb bd ; 0xc0f2e vgabios.c:577 - mov dx, 05571h ; ba 71 55 ; 0xc0f30 vgabios.c:579 + mov dx, 0556dh ; ba 6d 55 ; 0xc0f30 vgabios.c:579 jmp short 00f2ch ; eb f7 ; 0xc0f33 - mov dx, 05971h ; ba 71 59 ; 0xc0f35 vgabios.c:582 + mov dx, 0596dh ; ba 6d 59 ; 0xc0f35 vgabios.c:582 jmp short 00f2ch ; eb f2 ; 0xc0f38 - mov dx, 07b71h ; ba 71 7b ; 0xc0f3a vgabios.c:585 + mov dx, 07b6dh ; ba 6d 7b ; 0xc0f3a vgabios.c:585 jmp short 00f2ch ; eb ed ; 0xc0f3d - mov dx, 06b71h ; ba 71 6b ; 0xc0f3f vgabios.c:588 + mov dx, 06b6dh ; ba 6d 6b ; 0xc0f3f vgabios.c:588 jmp short 00f2ch ; eb e8 ; 0xc0f42 - mov dx, 07c9eh ; ba 9e 7c ; 0xc0f44 vgabios.c:591 + mov dx, 07c9ah ; ba 9a 7c ; 0xc0f44 vgabios.c:591 jmp short 00f2ch ; eb e3 ; 0xc0f47 jmp short 00f1eh ; eb d3 ; 0xc0f49 vgabios.c:597 ; disGetNextSymbol 0xc0f4b LB 0x3349 -> off=0x0 cb=000000000000016d uValue=00000000000c0f4b 'vga_read_pixel' @@ -2263,10 +2263,10 @@ xor bh, bh ; 30 ff ; 0xc0f77 mov CL, strict byte 003h ; b1 03 ; 0xc0f79 sal bx, CL ; d3 e3 ; 0xc0f7b - cmp byte [bx+047b4h], 000h ; 80 bf b4 47 00 ; 0xc0f7d + cmp byte [bx+047b0h], 000h ; 80 bf b0 47 00 ; 0xc0f7d jne short 00f87h ; 75 03 ; 0xc0f82 jmp near 010b1h ; e9 2a 01 ; 0xc0f84 vgabios.c:621 - mov ch, byte [bx+047b5h] ; 8a af b5 47 ; 0xc0f87 vgabios.c:624 + mov ch, byte [bx+047b1h] ; 8a af b1 47 ; 0xc0f87 vgabios.c:624 cmp ch, cl ; 38 cd ; 0xc0f8b jc short 00f9eh ; 72 0f ; 0xc0f8d jbe short 00fa6h ; 76 15 ; 0xc0f8f @@ -2322,7 +2322,7 @@ inc byte [bp-008h] ; fe 46 f8 ; 0xc100b vgabios.c:636 jmp short 00fe2h ; eb d2 ; 0xc100e jmp near 010a9h ; e9 96 00 ; 0xc1010 - mov al, byte [bx+047b6h] ; 8a 87 b6 47 ; 0xc1013 vgabios.c:639 + mov al, byte [bx+047b2h] ; 8a 87 b2 47 ; 0xc1013 vgabios.c:639 xor ah, ah ; 30 e4 ; 0xc1017 mov cx, strict word 00004h ; b9 04 00 ; 0xc1019 sub cx, ax ; 29 c1 ; 0xc101c @@ -2345,7 +2345,7 @@ xor bh, bh ; 30 ff ; 0xc1046 mov CL, strict byte 003h ; b1 03 ; 0xc1048 sal bx, CL ; d3 e3 ; 0xc104a - cmp byte [bx+047b6h], 002h ; 80 bf b6 47 02 ; 0xc104c + cmp byte [bx+047b2h], 002h ; 80 bf b2 47 02 ; 0xc104c jne short 0106eh ; 75 1b ; 0xc1051 mov cx, si ; 89 f1 ; 0xc1053 vgabios.c:644 xor ch, ch ; 30 ed ; 0xc1055 @@ -2715,7 +2715,7 @@ mov CL, strict byte 003h ; b1 03 ; 0xc131d mov si, bx ; 89 de ; 0xc131f sal si, CL ; d3 e6 ; 0xc1321 - cmp byte [si+047b4h], 000h ; 80 bc b4 47 00 ; 0xc1323 + cmp byte [si+047b0h], 000h ; 80 bc b0 47 00 ; 0xc1323 jne short 01365h ; 75 3b ; 0xc1328 mov bx, strict word 0004ah ; bb 4a 00 ; 0xc132a vgabios.c:47 mov ax, strict word 00040h ; b8 40 00 ; 0xc132d @@ -2742,12 +2742,12 @@ lea ax, [di+001h] ; 8d 45 01 ; 0xc135e mul bx ; f7 e3 ; 0xc1361 jmp short 01376h ; eb 11 ; 0xc1363 vgabios.c:835 - mov bl, byte [bx+04833h] ; 8a 9f 33 48 ; 0xc1365 vgabios.c:837 + mov bl, byte [bx+0482fh] ; 8a 9f 2f 48 ; 0xc1365 vgabios.c:837 mov CL, strict byte 006h ; b1 06 ; 0xc1369 sal bx, CL ; d3 e3 ; 0xc136b mov al, byte [bp-00ch] ; 8a 46 f4 ; 0xc136d xor ah, ah ; 30 e4 ; 0xc1370 - mul word [bx+0484ah] ; f7 a7 4a 48 ; 0xc1372 + mul word [bx+04846h] ; f7 a7 46 48 ; 0xc1372 mov cx, ax ; 89 c1 ; 0xc1376 mov bx, strict word 00063h ; bb 63 00 ; 0xc1378 vgabios.c:47 mov ax, strict word 00040h ; b8 40 00 ; 0xc137b @@ -2814,7 +2814,7 @@ cmp AL, strict byte 0ffh ; 3c ff ; 0xc13f6 vgabios.c:910 je short 01456h ; 74 5c ; 0xc13f8 xor bh, bh ; 30 ff ; 0xc13fa vgabios.c:913 - mov al, byte [bx+04833h] ; 8a 87 33 48 ; 0xc13fc + mov al, byte [bx+0482fh] ; 8a 87 2f 48 ; 0xc13fc mov byte [bp-00eh], al ; 88 46 f2 ; 0xc1400 mov si, 00089h ; be 89 00 ; 0xc1403 vgabios.c:37 mov ax, strict word 00040h ; b8 40 00 ; 0xc1406 @@ -2825,13 +2825,13 @@ jne short 01459h ; 75 45 ; 0xc1412 mov CL, strict byte 003h ; b1 03 ; 0xc1414 vgabios.c:932 sal bx, CL ; d3 e3 ; 0xc1416 - mov al, byte [bx+047b9h] ; 8a 87 b9 47 ; 0xc1418 + mov al, byte [bx+047b5h] ; 8a 87 b5 47 ; 0xc1418 mov dx, 003c6h ; ba c6 03 ; 0xc141c out DX, AL ; ee ; 0xc141f xor al, al ; 30 c0 ; 0xc1420 vgabios.c:935 mov dx, 003c8h ; ba c8 03 ; 0xc1422 out DX, AL ; ee ; 0xc1425 - mov bl, byte [bx+047bah] ; 8a 9f ba 47 ; 0xc1426 vgabios.c:938 + mov bl, byte [bx+047b6h] ; 8a 9f b6 47 ; 0xc1426 vgabios.c:938 cmp bl, 001h ; 80 fb 01 ; 0xc142a jc short 0143ch ; 72 0d ; 0xc142d jbe short 01445h ; 76 14 ; 0xc142f @@ -2842,13 +2842,13 @@ jmp short 01452h ; eb 16 ; 0xc143a test bl, bl ; 84 db ; 0xc143c jne short 01452h ; 75 12 ; 0xc143e - mov di, 04fc7h ; bf c7 4f ; 0xc1440 vgabios.c:940 + mov di, 04fc3h ; bf c3 4f ; 0xc1440 vgabios.c:940 jmp short 01452h ; eb 0d ; 0xc1443 vgabios.c:941 - mov di, 05087h ; bf 87 50 ; 0xc1445 vgabios.c:943 + mov di, 05083h ; bf 83 50 ; 0xc1445 vgabios.c:943 jmp short 01452h ; eb 08 ; 0xc1448 vgabios.c:944 - mov di, 05147h ; bf 47 51 ; 0xc144a vgabios.c:946 + mov di, 05143h ; bf 43 51 ; 0xc144a vgabios.c:946 jmp short 01452h ; eb 03 ; 0xc144d vgabios.c:947 - mov di, 05207h ; bf 07 52 ; 0xc144f vgabios.c:949 + mov di, 05203h ; bf 03 52 ; 0xc144f vgabios.c:949 xor bx, bx ; 31 db ; 0xc1452 vgabios.c:953 jmp short 01461h ; eb 0b ; 0xc1454 jmp near 01732h ; e9 d9 02 ; 0xc1456 @@ -2860,9 +2860,9 @@ mov CL, strict byte 003h ; b1 03 ; 0xc1466 mov si, ax ; 89 c6 ; 0xc1468 sal si, CL ; d3 e6 ; 0xc146a - mov al, byte [si+047bah] ; 8a 84 ba 47 ; 0xc146c + mov al, byte [si+047b6h] ; 8a 84 b6 47 ; 0xc146c mov si, ax ; 89 c6 ; 0xc1470 - mov al, byte [si+04843h] ; 8a 84 43 48 ; 0xc1472 + mov al, byte [si+0483fh] ; 8a 84 3f 48 ; 0xc1472 cmp bx, ax ; 39 c3 ; 0xc1476 jnbe short 01495h ; 77 1b ; 0xc1478 mov ax, bx ; 89 d8 ; 0xc147a vgabios.c:955 @@ -2907,7 +2907,7 @@ mov si, ax ; 89 c6 ; 0xc14c9 sal si, CL ; d3 e6 ; 0xc14cb add si, bx ; 01 de ; 0xc14cd - mov al, byte [si+0486ah] ; 8a 84 6a 48 ; 0xc14cf + mov al, byte [si+04866h] ; 8a 84 66 48 ; 0xc14cf out DX, AL ; ee ; 0xc14d3 inc bx ; 43 ; 0xc14d4 vgabios.c:978 jmp short 014b7h ; eb e0 ; 0xc14d5 @@ -2934,7 +2934,7 @@ mov si, ax ; 89 c6 ; 0xc1501 sal si, CL ; d3 e6 ; 0xc1503 add si, bx ; 01 de ; 0xc1505 - mov al, byte [si+0484bh] ; 8a 84 4b 48 ; 0xc1507 + mov al, byte [si+04847h] ; 8a 84 47 48 ; 0xc1507 mov dx, 003c5h ; ba c5 03 ; 0xc150b out DX, AL ; ee ; 0xc150e inc bx ; 43 ; 0xc150f vgabios.c:988 @@ -2952,7 +2952,7 @@ mov si, ax ; 89 c6 ; 0xc1528 sal si, CL ; d3 e6 ; 0xc152a add si, bx ; 01 de ; 0xc152c - mov al, byte [si+0487eh] ; 8a 84 7e 48 ; 0xc152e + mov al, byte [si+0487ah] ; 8a 84 7a 48 ; 0xc152e mov dx, 003cfh ; ba cf 03 ; 0xc1532 out DX, AL ; ee ; 0xc1535 inc bx ; 43 ; 0xc1536 vgabios.c:994 @@ -2961,7 +2961,7 @@ xor bh, bh ; 30 ff ; 0xc153c mov CL, strict byte 003h ; b1 03 ; 0xc153e sal bx, CL ; d3 e3 ; 0xc1540 - cmp byte [bx+047b5h], 001h ; 80 bf b5 47 01 ; 0xc1542 + cmp byte [bx+047b1h], 001h ; 80 bf b1 47 01 ; 0xc1542 jne short 0154eh ; 75 05 ; 0xc1547 mov dx, 003b4h ; ba b4 03 ; 0xc1549 jmp short 01551h ; eb 03 ; 0xc154c @@ -2984,12 +2984,12 @@ mov di, ax ; 89 c7 ; 0xc1570 add di, bx ; 01 df ; 0xc1572 lea dx, [si+001h] ; 8d 54 01 ; 0xc1574 - mov al, byte [di+04851h] ; 8a 85 51 48 ; 0xc1577 + mov al, byte [di+0484dh] ; 8a 85 4d 48 ; 0xc1577 out DX, AL ; ee ; 0xc157b inc bx ; 43 ; 0xc157c vgabios.c:1005 jmp short 0155bh ; eb dc ; 0xc157d mov bx, cx ; 89 cb ; 0xc157f vgabios.c:1008 - mov al, byte [bx+04850h] ; 8a 87 50 48 ; 0xc1581 + mov al, byte [bx+0484ch] ; 8a 87 4c 48 ; 0xc1581 mov dx, 003c2h ; ba c2 03 ; 0xc1585 out DX, AL ; ee ; 0xc1588 mov AL, strict byte 020h ; b0 20 ; 0xc1589 vgabios.c:1011 @@ -3005,9 +3005,9 @@ xor bh, ch ; 30 ef ; 0xc159e mov CL, strict byte 003h ; b1 03 ; 0xc15a0 sal bx, CL ; d3 e3 ; 0xc15a2 - cmp byte [bx+047b4h], 000h ; 80 bf b4 47 00 ; 0xc15a4 + cmp byte [bx+047b0h], 000h ; 80 bf b0 47 00 ; 0xc15a4 jne short 015bdh ; 75 12 ; 0xc15a9 - mov es, [bx+047b7h] ; 8e 87 b7 47 ; 0xc15ab vgabios.c:1018 + mov es, [bx+047b3h] ; 8e 87 b3 47 ; 0xc15ab vgabios.c:1018 mov cx, 04000h ; b9 00 40 ; 0xc15af mov ax, 00720h ; b8 20 07 ; 0xc15b2 xor di, di ; 31 ff ; 0xc15b5 @@ -3016,7 +3016,7 @@ jmp short 015f9h ; eb 3c ; 0xc15bb vgabios.c:1020 cmp byte [bp-00ch], 00dh ; 80 7e f4 0d ; 0xc15bd vgabios.c:1022 jnc short 015d4h ; 73 11 ; 0xc15c1 - mov es, [bx+047b7h] ; 8e 87 b7 47 ; 0xc15c3 vgabios.c:1024 + mov es, [bx+047b3h] ; 8e 87 b3 47 ; 0xc15c3 vgabios.c:1024 mov cx, 04000h ; b9 00 40 ; 0xc15c7 xor ax, ax ; 31 c0 ; 0xc15ca xor di, di ; 31 ff ; 0xc15cc @@ -3033,7 +3033,7 @@ mov word [bp-014h], ax ; 89 46 ec ; 0xc15e0 mov AL, strict byte 00fh ; b0 0f ; 0xc15e3 vgabios.c:1030 out DX, AL ; ee ; 0xc15e5 - mov es, [bx+047b7h] ; 8e 87 b7 47 ; 0xc15e6 vgabios.c:1031 + mov es, [bx+047b3h] ; 8e 87 b3 47 ; 0xc15e6 vgabios.c:1031 mov cx, 08000h ; b9 00 80 ; 0xc15ea xor ax, ax ; 31 c0 ; 0xc15ed xor di, di ; 31 ff ; 0xc15ef @@ -3050,19 +3050,19 @@ xor bh, bh ; 30 ff ; 0xc160a mov CL, strict byte 006h ; b1 06 ; 0xc160c sal bx, CL ; d3 e3 ; 0xc160e - mov al, byte [bx+04847h] ; 8a 87 47 48 ; 0xc1610 + mov al, byte [bx+04843h] ; 8a 87 43 48 ; 0xc1610 xor ah, ah ; 30 e4 ; 0xc1614 mov di, strict word 0004ah ; bf 4a 00 ; 0xc1616 vgabios.c:52 mov word [es:di], ax ; 26 89 05 ; 0xc1619 - mov ax, word [bx+0484ah] ; 8b 87 4a 48 ; 0xc161c vgabios.c:50 + mov ax, word [bx+04846h] ; 8b 87 46 48 ; 0xc161c vgabios.c:50 mov di, strict word 0004ch ; bf 4c 00 ; 0xc1620 vgabios.c:52 mov word [es:di], ax ; 26 89 05 ; 0xc1623 mov di, strict word 00063h ; bf 63 00 ; 0xc1626 vgabios.c:52 mov word [es:di], si ; 26 89 35 ; 0xc1629 - mov al, byte [bx+04848h] ; 8a 87 48 48 ; 0xc162c vgabios.c:40 + mov al, byte [bx+04844h] ; 8a 87 44 48 ; 0xc162c vgabios.c:40 mov si, 00084h ; be 84 00 ; 0xc1630 vgabios.c:42 mov byte [es:si], al ; 26 88 04 ; 0xc1633 - mov al, byte [bx+04849h] ; 8a 87 49 48 ; 0xc1636 vgabios.c:1043 + mov al, byte [bx+04845h] ; 8a 87 45 48 ; 0xc1636 vgabios.c:1043 xor ah, ah ; 30 e4 ; 0xc163a mov bx, 00085h ; bb 85 00 ; 0xc163c vgabios.c:52 mov word [es:bx], ax ; 26 89 07 ; 0xc163f @@ -3080,14 +3080,14 @@ mov byte [es:bx], 008h ; 26 c6 07 08 ; 0xc1662 mov ax, ds ; 8c d8 ; 0xc1666 vgabios.c:1050 mov bx, 000a8h ; bb a8 00 ; 0xc1668 vgabios.c:62 - mov word [es:bx], 05555h ; 26 c7 07 55 55 ; 0xc166b + mov word [es:bx], 05551h ; 26 c7 07 51 55 ; 0xc166b mov [es:bx+002h], ds ; 26 8c 5f 02 ; 0xc1670 mov al, byte [bp-00ch] ; 8a 46 f4 ; 0xc1674 vgabios.c:1052 cmp AL, strict byte 007h ; 3c 07 ; 0xc1677 jnbe short 016a1h ; 77 26 ; 0xc1679 mov bl, al ; 88 c3 ; 0xc167b vgabios.c:1054 xor bh, bh ; 30 ff ; 0xc167d - mov al, byte [bx+07de2h] ; 8a 87 e2 7d ; 0xc167f vgabios.c:40 + mov al, byte [bx+07ddeh] ; 8a 87 de 7d ; 0xc167f vgabios.c:40 mov bx, strict word 00065h ; bb 65 00 ; 0xc1683 vgabios.c:42 mov byte [es:bx], al ; 26 88 07 ; 0xc1686 cmp cl, byte [bp-00ch] ; 3a 4e f4 ; 0xc1689 vgabios.c:1055 @@ -3103,7 +3103,7 @@ xor bh, bh ; 30 ff ; 0xc16a4 mov CL, strict byte 003h ; b1 03 ; 0xc16a6 sal bx, CL ; d3 e3 ; 0xc16a8 - cmp byte [bx+047b4h], 000h ; 80 bf b4 47 00 ; 0xc16aa + cmp byte [bx+047b0h], 000h ; 80 bf b0 47 00 ; 0xc16aa jne short 016bah ; 75 09 ; 0xc16af mov dx, strict word 00007h ; ba 07 00 ; 0xc16b1 vgabios.c:1061 mov ax, strict word 00006h ; b8 06 00 ; 0xc16b4 @@ -3124,7 +3124,7 @@ xor bh, bh ; 30 ff ; 0xc16d7 mov CL, strict byte 003h ; b1 03 ; 0xc16d9 sal bx, CL ; d3 e3 ; 0xc16db - cmp byte [bx+047b4h], 000h ; 80 bf b4 47 00 ; 0xc16dd + cmp byte [bx+047b0h], 000h ; 80 bf b0 47 00 ; 0xc16dd jne short 016f4h ; 75 10 ; 0xc16e2 xor dx, dx ; 31 d2 ; 0xc16e4 vgabios.c:1074 mov ax, strict word 00004h ; b8 04 00 ; 0xc16e6 @@ -3133,7 +3133,7 @@ mov al, cl ; 88 c8 ; 0xc16ee mov AH, strict byte 011h ; b4 11 ; 0xc16f0 int 06dh ; cd 6d ; 0xc16f2 - mov bx, 05971h ; bb 71 59 ; 0xc16f4 vgabios.c:1079 + mov bx, 0596dh ; bb 6d 59 ; 0xc16f4 vgabios.c:1079 mov cx, ds ; 8c d9 ; 0xc16f7 mov ax, strict word 0001fh ; b8 1f 00 ; 0xc16f9 call 00980h ; e8 81 f2 ; 0xc16fc @@ -3141,21 +3141,21 @@ xor bh, bh ; 30 ff ; 0xc1702 mov CL, strict byte 006h ; b1 06 ; 0xc1704 sal bx, CL ; d3 e3 ; 0xc1706 - mov dl, byte [bx+04849h] ; 8a 97 49 48 ; 0xc1708 + mov dl, byte [bx+04845h] ; 8a 97 45 48 ; 0xc1708 cmp dl, 010h ; 80 fa 10 ; 0xc170c je short 0172dh ; 74 1c ; 0xc170f cmp dl, 00eh ; 80 fa 0e ; 0xc1711 je short 01728h ; 74 12 ; 0xc1714 cmp dl, 008h ; 80 fa 08 ; 0xc1716 jne short 01732h ; 75 17 ; 0xc1719 - mov bx, 05571h ; bb 71 55 ; 0xc171b vgabios.c:1083 + mov bx, 0556dh ; bb 6d 55 ; 0xc171b vgabios.c:1083 mov cx, ds ; 8c d9 ; 0xc171e mov ax, strict word 00043h ; b8 43 00 ; 0xc1720 call 00980h ; e8 5a f2 ; 0xc1723 jmp short 01732h ; eb 0a ; 0xc1726 vgabios.c:1084 - mov bx, 05d71h ; bb 71 5d ; 0xc1728 vgabios.c:1086 + mov bx, 05d6dh ; bb 6d 5d ; 0xc1728 vgabios.c:1086 jmp short 0171eh ; eb f1 ; 0xc172b - mov bx, 06b71h ; bb 71 6b ; 0xc172d vgabios.c:1089 + mov bx, 06b6dh ; bb 6d 6b ; 0xc172d vgabios.c:1089 jmp short 0171eh ; eb ec ; 0xc1730 lea sp, [bp-00ah] ; 8d 66 f6 ; 0xc1732 vgabios.c:1092 pop di ; 5f ; 0xc1735 @@ -3636,7 +3636,7 @@ mov ax, word [bp-018h] ; 8b 46 e8 ; 0xc1b37 mul word [bp-024h] ; f7 66 dc ; 0xc1b3a mov di, ax ; 89 c7 ; 0xc1b3d - cmp byte [bx+047b4h], 000h ; 80 bf b4 47 00 ; 0xc1b3f + cmp byte [bx+047b0h], 000h ; 80 bf b0 47 00 ; 0xc1b3f jne short 01b90h ; 75 4a ; 0xc1b44 sal ax, 1 ; d1 e0 ; 0xc1b46 vgabios.c:1225 or AL, strict byte 0ffh ; 0c ff ; 0xc1b48 @@ -3661,7 +3661,7 @@ mov ah, byte [bp-010h] ; 8a 66 f0 ; 0xc1b78 vgabios.c:1232 xor al, ch ; 30 e8 ; 0xc1b7b add ax, strict word 00020h ; 05 20 00 ; 0xc1b7d - mov es, [bx+047b7h] ; 8e 87 b7 47 ; 0xc1b80 + mov es, [bx+047b3h] ; 8e 87 b3 47 ; 0xc1b80 mov cx, di ; 89 f9 ; 0xc1b84 mov di, word [bp-01ch] ; 8b 7e e4 ; 0xc1b86 jcxz 01b8dh ; e3 02 ; 0xc1b89 @@ -3704,7 +3704,7 @@ xor bh, bh ; 30 ff ; 0xc1be9 mov CL, strict byte 003h ; b1 03 ; 0xc1beb sal bx, CL ; d3 e3 ; 0xc1bed - mov es, [bx+047b7h] ; 8e 87 b7 47 ; 0xc1bef + mov es, [bx+047b3h] ; 8e 87 b3 47 ; 0xc1bef mov cx, word [bp-01ah] ; 8b 4e e6 ; 0xc1bf3 mov ax, si ; 89 f0 ; 0xc1bf6 jcxz 01bfch ; e3 02 ; 0xc1bf8 @@ -3726,7 +3726,7 @@ xor bh, bh ; 30 ff ; 0xc1c23 mov CL, strict byte 003h ; b1 03 ; 0xc1c25 sal bx, CL ; d3 e3 ; 0xc1c27 - mov bx, word [bx+047b7h] ; 8b 9f b7 47 ; 0xc1c29 + mov bx, word [bx+047b3h] ; 8b 9f b3 47 ; 0xc1c29 mov ax, word [bp-016h] ; 8b 46 ea ; 0xc1c2d mul word [bp-018h] ; f7 66 e8 ; 0xc1c30 add ax, word [bp-01ah] ; 03 46 e6 ; 0xc1c33 @@ -3778,7 +3778,7 @@ mov CL, strict byte 003h ; b1 03 ; 0xc1ca2 mov di, ax ; 89 c7 ; 0xc1ca4 sal di, CL ; d3 e7 ; 0xc1ca6 - mov es, [di+047b7h] ; 8e 85 b7 47 ; 0xc1ca8 + mov es, [di+047b3h] ; 8e 85 b3 47 ; 0xc1ca8 mov cx, bx ; 89 d9 ; 0xc1cac mov ax, si ; 89 f0 ; 0xc1cae mov di, dx ; 89 d7 ; 0xc1cb0 @@ -3804,7 +3804,7 @@ xor bh, bh ; 30 ff ; 0xc1ce4 mov CL, strict byte 003h ; b1 03 ; 0xc1ce6 sal bx, CL ; d3 e3 ; 0xc1ce8 - mov bx, word [bx+047b7h] ; 8b 9f b7 47 ; 0xc1cea + mov bx, word [bx+047b3h] ; 8b 9f b3 47 ; 0xc1cea mov ax, word [bp-016h] ; 8b 46 ea ; 0xc1cee mul word [bp-018h] ; f7 66 e8 ; 0xc1cf1 add ax, word [bp-014h] ; 03 46 ec ; 0xc1cf4 @@ -3826,14 +3826,14 @@ dec word [bp-016h] ; ff 4e ea ; 0xc1d17 vgabios.c:1253 jmp near 01c5ah ; e9 3d ff ; 0xc1d1a mov si, word [bp-01eh] ; 8b 76 e2 ; 0xc1d1d vgabios.c:1259 - mov al, byte [si+04833h] ; 8a 84 33 48 ; 0xc1d20 + mov al, byte [si+0482fh] ; 8a 84 2f 48 ; 0xc1d20 xor ah, ah ; 30 e4 ; 0xc1d24 mov CL, strict byte 006h ; b1 06 ; 0xc1d26 mov si, ax ; 89 c6 ; 0xc1d28 sal si, CL ; d3 e6 ; 0xc1d2a - mov al, byte [si+04849h] ; 8a 84 49 48 ; 0xc1d2c + mov al, byte [si+04845h] ; 8a 84 45 48 ; 0xc1d2c mov byte [bp-00eh], al ; 88 46 f2 ; 0xc1d30 - mov al, byte [bx+047b5h] ; 8a 87 b5 47 ; 0xc1d33 vgabios.c:1260 + mov al, byte [bx+047b1h] ; 8a 87 b1 47 ; 0xc1d33 vgabios.c:1260 cmp AL, strict byte 003h ; 3c 03 ; 0xc1d37 jc short 01d47h ; 72 0c ; 0xc1d39 jbe short 01d4eh ; 76 11 ; 0xc1d3b @@ -3881,7 +3881,7 @@ xor bh, bh ; 30 ff ; 0xc1d9f mov CL, strict byte 003h ; b1 03 ; 0xc1da1 sal bx, CL ; d3 e3 ; 0xc1da3 - mov bx, word [bx+047b7h] ; 8b 9f b7 47 ; 0xc1da5 + mov bx, word [bx+047b3h] ; 8b 9f b3 47 ; 0xc1da5 mov cx, dx ; 89 d1 ; 0xc1da9 xor di, di ; 31 ff ; 0xc1dab mov es, bx ; 8e c3 ; 0xc1dad @@ -3987,7 +3987,7 @@ jc short 01ef1h ; 72 4e ; 0xc1ea1 dec word [bp-016h] ; ff 4e ea ; 0xc1ea3 vgabios.c:1289 jmp short 01e36h ; eb 8e ; 0xc1ea6 - mov cl, byte [bx+047b6h] ; 8a 8f b6 47 ; 0xc1ea8 vgabios.c:1294 + mov cl, byte [bx+047b2h] ; 8a 8f b2 47 ; 0xc1ea8 vgabios.c:1294 cmp byte [bp-006h], 000h ; 80 7e fa 00 ; 0xc1eac vgabios.c:1295 jne short 01ef4h ; 75 42 ; 0xc1eb0 cmp byte [bp-00ch], 000h ; 80 7e f4 00 ; 0xc1eb2 @@ -4009,7 +4009,7 @@ mul dx ; f7 e2 ; 0xc1eda mov dl, byte [bp-010h] ; 8a 56 f0 ; 0xc1edc xor dh, dh ; 30 f6 ; 0xc1edf - mov bx, word [bx+047b7h] ; 8b 9f b7 47 ; 0xc1ee1 + mov bx, word [bx+047b3h] ; 8b 9f b3 47 ; 0xc1ee1 mov cx, ax ; 89 c1 ; 0xc1ee5 mov ax, dx ; 89 d0 ; 0xc1ee7 xor di, di ; 31 ff ; 0xc1ee9 @@ -4143,7 +4143,7 @@ mov cx, ax ; 89 c1 ; 0xc202a mov al, byte [bp-010h] ; 8a 46 f0 ; 0xc202c xor ah, ah ; 30 e4 ; 0xc202f - mov es, [bx+047b7h] ; 8e 87 b7 47 ; 0xc2031 + mov es, [bx+047b3h] ; 8e 87 b3 47 ; 0xc2031 xor di, di ; 31 ff ; 0xc2035 jcxz 0203bh ; e3 02 ; 0xc2037 rep stosb ; f3 aa ; 0xc2039 @@ -4368,7 +4368,7 @@ mov ch, al ; 88 c5 ; 0xc223b mov byte [bp-002h], dl ; 88 56 fe ; 0xc223d mov al, bl ; 88 d8 ; 0xc2240 - mov si, 05571h ; be 71 55 ; 0xc2242 vgabios.c:1421 + mov si, 0556dh ; be 6d 55 ; 0xc2242 vgabios.c:1421 xor ah, ah ; 30 e4 ; 0xc2245 vgabios.c:1422 mov bl, byte [bp+00ah] ; 8a 5e 0a ; 0xc2247 xor bh, bh ; 30 ff ; 0xc224a @@ -4489,7 +4489,7 @@ mov bh, al ; 88 c7 ; 0xc234d mov ch, dl ; 88 d5 ; 0xc234f mov al, cl ; 88 c8 ; 0xc2351 - mov di, 05571h ; bf 71 55 ; 0xc2353 vgabios.c:1485 + mov di, 0556dh ; bf 6d 55 ; 0xc2353 vgabios.c:1485 xor ah, ah ; 30 e4 ; 0xc2356 vgabios.c:1486 mov dl, byte [bp+008h] ; 8a 56 08 ; 0xc2358 xor dh, dh ; 30 f6 ; 0xc235b @@ -4609,7 +4609,7 @@ mov CL, strict byte 003h ; b1 03 ; 0xc2458 mov di, bx ; 89 df ; 0xc245a sal di, CL ; d3 e7 ; 0xc245c - cmp byte [di+047b4h], 000h ; 80 bd b4 47 00 ; 0xc245e + cmp byte [di+047b0h], 000h ; 80 bd b0 47 00 ; 0xc245e jne short 024a5h ; 75 40 ; 0xc2463 mul dx ; f7 e2 ; 0xc2465 vgabios.c:1528 sal ax, 1 ; d1 e0 ; 0xc2467 @@ -4632,18 +4632,18 @@ mov al, byte [bp-00ch] ; 8a 46 f4 ; 0xc248d mov word [bp-01eh], ax ; 89 46 e2 ; 0xc2490 mov ax, word [bp-01eh] ; 8b 46 e2 ; 0xc2493 vgabios.c:1531 - mov es, [di+047b7h] ; 8e 85 b7 47 ; 0xc2496 + mov es, [di+047b3h] ; 8e 85 b3 47 ; 0xc2496 mov cx, si ; 89 f1 ; 0xc249a mov di, bx ; 89 df ; 0xc249c jcxz 024a2h ; e3 02 ; 0xc249e rep stosw ; f3 ab ; 0xc24a0 jmp near 02551h ; e9 ac 00 ; 0xc24a2 vgabios.c:1533 - mov bl, byte [bx+04833h] ; 8a 9f 33 48 ; 0xc24a5 vgabios.c:1536 + mov bl, byte [bx+0482fh] ; 8a 9f 2f 48 ; 0xc24a5 vgabios.c:1536 mov CL, strict byte 006h ; b1 06 ; 0xc24a9 sal bx, CL ; d3 e3 ; 0xc24ab - mov al, byte [bx+04849h] ; 8a 87 49 48 ; 0xc24ad + mov al, byte [bx+04845h] ; 8a 87 45 48 ; 0xc24ad mov byte [bp-010h], al ; 88 46 f0 ; 0xc24b1 - mov al, byte [di+047b6h] ; 8a 85 b6 47 ; 0xc24b4 vgabios.c:1537 + mov al, byte [di+047b2h] ; 8a 85 b2 47 ; 0xc24b4 vgabios.c:1537 mov byte [bp-012h], al ; 88 46 ee ; 0xc24b8 dec si ; 4e ; 0xc24bb vgabios.c:1538 cmp si, strict byte 0ffffh ; 83 fe ff ; 0xc24bc @@ -4652,7 +4652,7 @@ xor bh, bh ; 30 ff ; 0xc24c4 mov CL, strict byte 003h ; b1 03 ; 0xc24c6 sal bx, CL ; d3 e3 ; 0xc24c8 - mov al, byte [bx+047b5h] ; 8a 87 b5 47 ; 0xc24ca + mov al, byte [bx+047b1h] ; 8a 87 b1 47 ; 0xc24ca cmp al, cl ; 38 c8 ; 0xc24ce jc short 024deh ; 72 0c ; 0xc24d0 jbe short 024e4h ; 76 10 ; 0xc24d2 @@ -4763,7 +4763,7 @@ mov CL, strict byte 003h ; b1 03 ; 0xc25c5 mov bx, ax ; 89 c3 ; 0xc25c7 sal bx, CL ; d3 e3 ; 0xc25c9 - cmp byte [bx+047b4h], 000h ; 80 bf b4 47 00 ; 0xc25cb + cmp byte [bx+047b0h], 000h ; 80 bf b0 47 00 ; 0xc25cb jne short 02617h ; 75 45 ; 0xc25d0 mov ax, di ; 89 f8 ; 0xc25d2 vgabios.c:1586 mul dx ; f7 e2 ; 0xc25d4 @@ -4791,20 +4791,20 @@ mov CL, strict byte 003h ; b1 03 ; 0xc2603 mov di, ax ; 89 c7 ; 0xc2605 sal di, CL ; d3 e7 ; 0xc2607 - mov es, [di+047b7h] ; 8e 85 b7 47 ; 0xc2609 vgabios.c:40 + mov es, [di+047b3h] ; 8e 85 b3 47 ; 0xc2609 vgabios.c:40 mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc260d vgabios.c:42 mov byte [es:bx], al ; 26 88 07 ; 0xc2610 inc bx ; 43 ; 0xc2613 vgabios.c:1590 inc bx ; 43 ; 0xc2614 jmp short 025f8h ; eb e1 ; 0xc2615 vgabios.c:1591 mov di, ax ; 89 c7 ; 0xc2617 vgabios.c:1596 - mov al, byte [di+04833h] ; 8a 85 33 48 ; 0xc2619 + mov al, byte [di+0482fh] ; 8a 85 2f 48 ; 0xc2619 mov CL, strict byte 006h ; b1 06 ; 0xc261d mov di, ax ; 89 c7 ; 0xc261f sal di, CL ; d3 e7 ; 0xc2621 - mov al, byte [di+04849h] ; 8a 85 49 48 ; 0xc2623 + mov al, byte [di+04845h] ; 8a 85 45 48 ; 0xc2623 mov byte [bp-012h], al ; 88 46 ee ; 0xc2627 - mov al, byte [bx+047b6h] ; 8a 87 b6 47 ; 0xc262a vgabios.c:1597 + mov al, byte [bx+047b2h] ; 8a 87 b2 47 ; 0xc262a vgabios.c:1597 mov byte [bp-014h], al ; 88 46 ec ; 0xc262e dec si ; 4e ; 0xc2631 vgabios.c:1598 cmp si, strict byte 0ffffh ; 83 fe ff ; 0xc2632 @@ -4813,7 +4813,7 @@ xor bh, bh ; 30 ff ; 0xc263a mov CL, strict byte 003h ; b1 03 ; 0xc263c sal bx, CL ; d3 e3 ; 0xc263e - mov bl, byte [bx+047b5h] ; 8a 9f b5 47 ; 0xc2640 + mov bl, byte [bx+047b1h] ; 8a 9f b1 47 ; 0xc2640 cmp bl, cl ; 38 cb ; 0xc2644 jc short 02657h ; 72 0f ; 0xc2646 jbe short 0265eh ; 76 14 ; 0xc2648 @@ -4901,9 +4901,9 @@ xor bh, bh ; 30 ff ; 0xc2706 mov CL, strict byte 003h ; b1 03 ; 0xc2708 sal bx, CL ; d3 e3 ; 0xc270a - cmp byte [bx+047b4h], 000h ; 80 bf b4 47 00 ; 0xc270c + cmp byte [bx+047b0h], 000h ; 80 bf b0 47 00 ; 0xc270c je short 0272bh ; 74 18 ; 0xc2711 - mov al, byte [bx+047b5h] ; 8a 87 b5 47 ; 0xc2713 vgabios.c:1635 + mov al, byte [bx+047b1h] ; 8a 87 b1 47 ; 0xc2713 vgabios.c:1635 cmp al, cl ; 38 c8 ; 0xc2717 jc short 02727h ; 72 0c ; 0xc2719 jbe short 02731h ; 76 14 ; 0xc271b @@ -4967,7 +4967,7 @@ shr ax, 1 ; d1 e8 ; 0xc27a6 mov dx, strict word 00050h ; ba 50 00 ; 0xc27a8 mul dx ; f7 e2 ; 0xc27ab - cmp byte [bx+047b6h], 002h ; 80 bf b6 47 02 ; 0xc27ad + cmp byte [bx+047b2h], 002h ; 80 bf b2 47 02 ; 0xc27ad jne short 027bdh ; 75 09 ; 0xc27b2 mov bx, word [bp-008h] ; 8b 5e f8 ; 0xc27b4 vgabios.c:1657 shr bx, 1 ; d1 eb ; 0xc27b7 @@ -4987,7 +4987,7 @@ mov CL, strict byte 003h ; b1 03 ; 0xc27d9 mov si, dx ; 89 d6 ; 0xc27db sal si, CL ; d3 e6 ; 0xc27dd - cmp byte [si+047b6h], 002h ; 80 bc b6 47 02 ; 0xc27df + cmp byte [si+047b2h], 002h ; 80 bc b2 47 02 ; 0xc27df jne short 02800h ; 75 1a ; 0xc27e4 mov ah, byte [bp-008h] ; 8a 66 f8 ; 0xc27e6 vgabios.c:1667 and ah, cl ; 20 cc ; 0xc27e9 @@ -5111,7 +5111,7 @@ mov CL, strict byte 003h ; b1 03 ; 0xc2904 mov bx, ax ; 89 c3 ; 0xc2906 sal bx, CL ; d3 e3 ; 0xc2908 - cmp byte [bx+047b4h], 000h ; 80 bf b4 47 00 ; 0xc290a + cmp byte [bx+047b0h], 000h ; 80 bf b0 47 00 ; 0xc290a jne short 02953h ; 75 42 ; 0xc290f mov ax, word [bp-012h] ; 8b 46 ee ; 0xc2911 vgabios.c:1745 mul word [bp-014h] ; f7 66 ec ; 0xc2914 @@ -5131,23 +5131,23 @@ add ax, dx ; 01 d0 ; 0xc2934 sal ax, 1 ; d1 e0 ; 0xc2936 add si, ax ; 01 c6 ; 0xc2938 - mov es, [bx+047b7h] ; 8e 87 b7 47 ; 0xc293a vgabios.c:40 + mov es, [bx+047b3h] ; 8e 87 b3 47 ; 0xc293a vgabios.c:40 mov byte [es:si], ch ; 26 88 2c ; 0xc293e vgabios.c:42 cmp cl, byte [bp-004h] ; 3a 4e fc ; 0xc2941 vgabios.c:1750 jne short 02983h ; 75 3d ; 0xc2944 inc si ; 46 ; 0xc2946 vgabios.c:1751 - mov es, [bx+047b7h] ; 8e 87 b7 47 ; 0xc2947 vgabios.c:40 + mov es, [bx+047b3h] ; 8e 87 b3 47 ; 0xc2947 vgabios.c:40 mov al, byte [bp-00ch] ; 8a 46 f4 ; 0xc294b mov byte [es:si], al ; 26 88 04 ; 0xc294e jmp short 02983h ; eb 30 ; 0xc2951 vgabios.c:1753 mov si, ax ; 89 c6 ; 0xc2953 vgabios.c:1756 - mov al, byte [si+04833h] ; 8a 84 33 48 ; 0xc2955 + mov al, byte [si+0482fh] ; 8a 84 2f 48 ; 0xc2955 mov CL, strict byte 006h ; b1 06 ; 0xc2959 mov si, ax ; 89 c6 ; 0xc295b sal si, CL ; d3 e6 ; 0xc295d - mov dl, byte [si+04849h] ; 8a 94 49 48 ; 0xc295f - mov al, byte [bx+047b6h] ; 8a 87 b6 47 ; 0xc2963 vgabios.c:1757 - mov bl, byte [bx+047b5h] ; 8a 9f b5 47 ; 0xc2967 vgabios.c:1758 + mov dl, byte [si+04845h] ; 8a 94 45 48 ; 0xc295f + mov al, byte [bx+047b2h] ; 8a 87 b2 47 ; 0xc2963 vgabios.c:1757 + mov bl, byte [bx+047b1h] ; 8a 9f b1 47 ; 0xc2967 vgabios.c:1758 cmp bl, 003h ; 80 fb 03 ; 0xc296b jc short 0297eh ; 72 0e ; 0xc296e jbe short 02985h ; 76 13 ; 0xc2970 @@ -5225,7 +5225,7 @@ mov ch, byte [bp-012h] ; 8a 6e ee ; 0xc2a1f db 0feh, 0cdh ; dec ch ; fe cd ; 0xc2a22 - cmp byte [bx+047b4h], 000h ; 80 bf b4 47 00 ; 0xc2a24 + cmp byte [bx+047b0h], 000h ; 80 bf b0 47 00 ; 0xc2a24 jne short 02a77h ; 75 4c ; 0xc2a29 mov ax, word [bp-012h] ; 8b 46 ee ; 0xc2a2b vgabios.c:1790 mul word [bp-014h] ; f7 66 ec ; 0xc2a2e @@ -5247,7 +5247,7 @@ sal ax, 1 ; d1 e0 ; 0xc2a51 add si, ax ; 01 c6 ; 0xc2a53 inc si ; 46 ; 0xc2a55 vgabios.c:1791 - mov es, [bx+047b7h] ; 8e 87 b7 47 ; 0xc2a56 vgabios.c:35 + mov es, [bx+047b3h] ; 8e 87 b3 47 ; 0xc2a56 vgabios.c:35 mov dl, byte [es:si] ; 26 8a 14 ; 0xc2a5a vgabios.c:37 mov ax, strict word 00001h ; b8 01 00 ; 0xc2a5d vgabios.c:1792 push ax ; 50 ; 0xc2a60 @@ -5545,7 +5545,7 @@ mov di, bx ; 89 df ; 0xc2c95 sal di, CL ; d3 e7 ; 0xc2c97 add di, word [bp-00ch] ; 03 7e f4 ; 0xc2c99 - mov si, 05d71h ; be 71 5d ; 0xc2c9c vgabios.c:1889 + mov si, 05d6dh ; be 6d 5d ; 0xc2c9c vgabios.c:1889 add si, ax ; 01 c6 ; 0xc2c9f mov cx, strict word 0000eh ; b9 0e 00 ; 0xc2ca1 mov dx, 0c000h ; ba 00 c0 ; 0xc2ca4 @@ -5605,7 +5605,7 @@ mov di, bx ; 89 df ; 0xc2d09 sal di, CL ; d3 e7 ; 0xc2d0b add di, word [bp-00ch] ; 03 7e f4 ; 0xc2d0d - add si, 05571h ; 81 c6 71 55 ; 0xc2d10 vgabios.c:1908 + add si, 0556dh ; 81 c6 6d 55 ; 0xc2d10 vgabios.c:1908 mov cx, strict word 00008h ; b9 08 00 ; 0xc2d14 mov dx, 0c000h ; ba 00 c0 ; 0xc2d17 mov ax, 0a000h ; b8 00 a0 ; 0xc2d1a @@ -5664,7 +5664,7 @@ mov di, bx ; 89 df ; 0xc2d7c sal di, CL ; d3 e7 ; 0xc2d7e add di, word [bp-00ch] ; 03 7e f4 ; 0xc2d80 - add si, 06b71h ; 81 c6 71 6b ; 0xc2d83 vgabios.c:1928 + add si, 06b6dh ; 81 c6 6d 6b ; 0xc2d83 vgabios.c:1928 mov cx, strict word 00010h ; b9 10 00 ; 0xc2d87 mov dx, 0c000h ; ba 00 c0 ; 0xc2d8a mov ax, 0a000h ; b8 00 a0 ; 0xc2d8d @@ -5816,7 +5816,7 @@ mov word [bp-00ah], ax ; 89 46 f6 ; 0xc2e8b vgabios.c:48 mov ax, ds ; 8c d8 ; 0xc2e8e vgabios.c:2035 mov es, dx ; 8e c2 ; 0xc2e90 vgabios.c:62 - mov word [es:bx], 05507h ; 26 c7 07 07 55 ; 0xc2e92 + mov word [es:bx], 05503h ; 26 c7 07 03 55 ; 0xc2e92 mov [es:bx+002h], ds ; 26 8c 5f 02 ; 0xc2e97 lea di, [bx+004h] ; 8d 7f 04 ; 0xc2e9b vgabios.c:2040 mov cx, strict word 0001eh ; b9 1e 00 ; 0xc2e9e @@ -6705,7 +6705,7 @@ xor bh, bh ; 30 ff ; 0xc3646 mov CL, strict byte 003h ; b1 03 ; 0xc3648 sal bx, CL ; d3 e3 ; 0xc364a - cmp dl, byte [bx+047b3h] ; 3a 97 b3 47 ; 0xc364c + cmp dl, byte [bx+047afh] ; 3a 97 af 47 ; 0xc364c jne short 0363eh ; 75 ec ; 0xc3650 mov ah, al ; 88 c4 ; 0xc3652 mov al, ah ; 88 e0 ; 0xc3654 vgabios.c:2323 @@ -7431,7 +7431,7 @@ mov word [es:bx], 04556h ; 26 c7 07 56 45 ; 0xc3d06 mov word [es:bx+002h], 04153h ; 26 c7 47 02 53 41 ; 0xc3d0b vbe.c:320 mov word [es:bx+004h], 00200h ; 26 c7 47 04 00 02 ; 0xc3d11 vbe.c:324 - mov word [es:bx+006h], 07deah ; 26 c7 47 06 ea 7d ; 0xc3d17 vbe.c:327 + mov word [es:bx+006h], 07de6h ; 26 c7 47 06 e6 7d ; 0xc3d17 vbe.c:327 mov [es:bx+008h], ds ; 26 8c 5f 08 ; 0xc3d1d mov word [es:bx+00ah], strict word 00001h ; 26 c7 47 0a 01 00 ; 0xc3d21 vbe.c:330 mov word [es:bx+00ch], strict word 00000h ; 26 c7 47 0c 00 00 ; 0xc3d27 vbe.c:332 @@ -7447,11 +7447,11 @@ cmp word [bp-00eh], strict byte 00000h ; 83 7e f2 00 ; 0xc3d4b vbe.c:342 je short 03d75h ; 74 24 ; 0xc3d4f mov word [es:bx+014h], strict word 00003h ; 26 c7 47 14 03 00 ; 0xc3d51 vbe.c:345 - mov word [es:bx+016h], 07dffh ; 26 c7 47 16 ff 7d ; 0xc3d57 vbe.c:346 + mov word [es:bx+016h], 07dfbh ; 26 c7 47 16 fb 7d ; 0xc3d57 vbe.c:346 mov [es:bx+018h], ds ; 26 8c 5f 18 ; 0xc3d5d - mov word [es:bx+01ah], 07e12h ; 26 c7 47 1a 12 7e ; 0xc3d61 vbe.c:347 + mov word [es:bx+01ah], 07e0eh ; 26 c7 47 1a 0e 7e ; 0xc3d61 vbe.c:347 mov [es:bx+01ch], ds ; 26 8c 5f 1c ; 0xc3d67 - mov word [es:bx+01eh], 07e33h ; 26 c7 47 1e 33 7e ; 0xc3d6b vbe.c:348 + mov word [es:bx+01eh], 07e2fh ; 26 c7 47 1e 2f 7e ; 0xc3d6b vbe.c:348 mov [es:bx+020h], ds ; 26 8c 5f 20 ; 0xc3d71 mov dx, cx ; 89 ca ; 0xc3d75 vbe.c:355 add dx, strict byte 0001bh ; 83 c2 1b ; 0xc3d77 @@ -8193,12 +8193,12 @@ ; Padding 0x6b bytes at 0xc4715 times 107 db 0 -section _DATA progbits vstart=0x4780 align=1 ; size=0x372f class=DATA group=DGROUP - ; disGetNextSymbol 0xc4780 LB 0x372f -> off=0x0 cb=0000000000000033 uValue=00000000000c0000 '_msg_vga_init' -_msg_vga_init: ; 0xc4780 LB 0x33 - db 'Oracle VM VirtualBox Version 6.1.31_SPB VGA BIOS', 00dh, 00ah, 000h - ; disGetNextSymbol 0xc47b3 LB 0x36fc -> off=0x0 cb=0000000000000080 uValue=00000000000c0033 'vga_modes' -vga_modes: ; 0xc47b3 LB 0x80 +section _DATA progbits vstart=0x4780 align=1 ; size=0x3727 class=DATA group=DGROUP + ; disGetNextSymbol 0xc4780 LB 0x3727 -> off=0x0 cb=000000000000002f uValue=00000000000c0000 '_msg_vga_init' +_msg_vga_init: ; 0xc4780 LB 0x2f + db 'Oracle VM VirtualBox Version 6.1.34 VGA BIOS', 00dh, 00ah, 000h + ; disGetNextSymbol 0xc47af LB 0x36f8 -> off=0x0 cb=0000000000000080 uValue=00000000000c002f 'vga_modes' +vga_modes: ; 0xc47af LB 0x80 db 000h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h, 001h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h db 002h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h, 003h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h db 004h, 001h, 002h, 002h, 000h, 0b8h, 0ffh, 001h, 005h, 001h, 002h, 002h, 000h, 0b8h, 0ffh, 001h @@ -8207,14 +8207,14 @@ db 00fh, 001h, 003h, 001h, 000h, 0a0h, 0ffh, 000h, 010h, 001h, 004h, 004h, 000h, 0a0h, 0ffh, 002h db 011h, 001h, 003h, 001h, 000h, 0a0h, 0ffh, 002h, 012h, 001h, 004h, 004h, 000h, 0a0h, 0ffh, 002h db 013h, 001h, 005h, 008h, 000h, 0a0h, 0ffh, 003h, 06ah, 001h, 004h, 004h, 000h, 0a0h, 0ffh, 002h - ; disGetNextSymbol 0xc4833 LB 0x367c -> off=0x0 cb=0000000000000010 uValue=00000000000c00b3 'line_to_vpti' -line_to_vpti: ; 0xc4833 LB 0x10 + ; disGetNextSymbol 0xc482f LB 0x3678 -> off=0x0 cb=0000000000000010 uValue=00000000000c00af 'line_to_vpti' +line_to_vpti: ; 0xc482f LB 0x10 db 017h, 017h, 018h, 018h, 004h, 005h, 006h, 007h, 00dh, 00eh, 011h, 012h, 01ah, 01bh, 01ch, 01dh - ; disGetNextSymbol 0xc4843 LB 0x366c -> off=0x0 cb=0000000000000004 uValue=00000000000c00c3 'dac_regs' -dac_regs: ; 0xc4843 LB 0x4 + ; disGetNextSymbol 0xc483f LB 0x3668 -> off=0x0 cb=0000000000000004 uValue=00000000000c00bf 'dac_regs' +dac_regs: ; 0xc483f LB 0x4 dd 0ff3f3f3fh - ; disGetNextSymbol 0xc4847 LB 0x3668 -> off=0x0 cb=0000000000000780 uValue=00000000000c00c7 'video_param_table' -video_param_table: ; 0xc4847 LB 0x780 + ; disGetNextSymbol 0xc4843 LB 0x3664 -> off=0x0 cb=0000000000000780 uValue=00000000000c00c3 'video_param_table' +video_param_table: ; 0xc4843 LB 0x780 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h @@ -8335,8 +8335,8 @@ db 072h, 0f0h, 000h, 060h, 000h, 000h, 000h, 000h, 000h, 000h, 059h, 08dh, 057h, 032h, 000h, 057h db 073h, 0e3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 014h, 007h, 038h, 039h, 03ah, 03bh, 03ch db 03dh, 03eh, 03fh, 001h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 005h, 00fh, 0ffh - ; disGetNextSymbol 0xc4fc7 LB 0x2ee8 -> off=0x0 cb=00000000000000c0 uValue=00000000000c0847 'palette0' -palette0: ; 0xc4fc7 LB 0xc0 + ; disGetNextSymbol 0xc4fc3 LB 0x2ee4 -> off=0x0 cb=00000000000000c0 uValue=00000000000c0843 'palette0' +palette0: ; 0xc4fc3 LB 0xc0 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah db 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah @@ -8349,8 +8349,8 @@ db 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah db 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh db 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh - ; disGetNextSymbol 0xc5087 LB 0x2e28 -> off=0x0 cb=00000000000000c0 uValue=00000000000c0907 'palette1' -palette1: ; 0xc5087 LB 0xc0 + ; disGetNextSymbol 0xc5083 LB 0x2e24 -> off=0x0 cb=00000000000000c0 uValue=00000000000c0903 'palette1' +palette1: ; 0xc5083 LB 0xc0 db 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah db 000h, 02ah, 02ah, 015h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah db 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah, 000h, 02ah, 02ah, 015h, 000h, 02ah, 02ah, 02ah @@ -8363,8 +8363,8 @@ db 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh, 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh db 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh db 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh - ; disGetNextSymbol 0xc5147 LB 0x2d68 -> off=0x0 cb=00000000000000c0 uValue=00000000000c09c7 'palette2' -palette2: ; 0xc5147 LB 0xc0 + ; disGetNextSymbol 0xc5143 LB 0x2d64 -> off=0x0 cb=00000000000000c0 uValue=00000000000c09c3 'palette2' +palette2: ; 0xc5143 LB 0xc0 db 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah db 000h, 02ah, 02ah, 02ah, 000h, 02ah, 02ah, 02ah, 000h, 000h, 015h, 000h, 000h, 03fh, 000h, 02ah db 015h, 000h, 02ah, 03fh, 02ah, 000h, 015h, 02ah, 000h, 03fh, 02ah, 02ah, 015h, 02ah, 02ah, 03fh @@ -8377,8 +8377,8 @@ db 015h, 015h, 000h, 015h, 015h, 02ah, 015h, 03fh, 000h, 015h, 03fh, 02ah, 03fh, 015h, 000h, 03fh db 015h, 02ah, 03fh, 03fh, 000h, 03fh, 03fh, 02ah, 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh db 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh - ; disGetNextSymbol 0xc5207 LB 0x2ca8 -> off=0x0 cb=0000000000000300 uValue=00000000000c0a87 'palette3' -palette3: ; 0xc5207 LB 0x300 + ; disGetNextSymbol 0xc5203 LB 0x2ca4 -> off=0x0 cb=0000000000000300 uValue=00000000000c0a83 'palette3' +palette3: ; 0xc5203 LB 0x300 db 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah db 000h, 02ah, 02ah, 015h, 000h, 02ah, 02ah, 02ah, 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh db 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh @@ -8427,24 +8427,24 @@ db 00bh, 010h, 00bh, 00bh, 010h, 00ch, 00bh, 010h, 00dh, 00bh, 010h, 00fh, 00bh, 010h, 010h, 00bh db 00fh, 010h, 00bh, 00dh, 010h, 00bh, 00ch, 010h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h - ; disGetNextSymbol 0xc5507 LB 0x29a8 -> off=0x0 cb=0000000000000010 uValue=00000000000c0d87 'static_functionality' -static_functionality: ; 0xc5507 LB 0x10 + ; disGetNextSymbol 0xc5503 LB 0x29a4 -> off=0x0 cb=0000000000000010 uValue=00000000000c0d83 'static_functionality' +static_functionality: ; 0xc5503 LB 0x10 db 0ffh, 0e0h, 00fh, 000h, 000h, 000h, 000h, 007h, 002h, 008h, 0e7h, 00ch, 000h, 000h, 000h, 000h - ; disGetNextSymbol 0xc5517 LB 0x2998 -> off=0x0 cb=0000000000000024 uValue=00000000000c0d97 '_dcc_table' -_dcc_table: ; 0xc5517 LB 0x24 + ; disGetNextSymbol 0xc5513 LB 0x2994 -> off=0x0 cb=0000000000000024 uValue=00000000000c0d93 '_dcc_table' +_dcc_table: ; 0xc5513 LB 0x24 db 010h, 001h, 007h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h - ; disGetNextSymbol 0xc553b LB 0x2974 -> off=0x0 cb=000000000000001a uValue=00000000000c0dbb '_secondary_save_area' -_secondary_save_area: ; 0xc553b LB 0x1a - db 01ah, 000h, 017h, 055h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h + ; disGetNextSymbol 0xc5537 LB 0x2970 -> off=0x0 cb=000000000000001a uValue=00000000000c0db7 '_secondary_save_area' +_secondary_save_area: ; 0xc5537 LB 0x1a + db 01ah, 000h, 013h, 055h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h - ; disGetNextSymbol 0xc5555 LB 0x295a -> off=0x0 cb=000000000000001c uValue=00000000000c0dd5 '_video_save_pointer_table' -_video_save_pointer_table: ; 0xc5555 LB 0x1c - db 047h, 048h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h - db 03bh, 055h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h - ; disGetNextSymbol 0xc5571 LB 0x293e -> off=0x0 cb=0000000000000800 uValue=00000000000c0df1 'vgafont8' -vgafont8: ; 0xc5571 LB 0x800 + ; disGetNextSymbol 0xc5551 LB 0x2956 -> off=0x0 cb=000000000000001c uValue=00000000000c0dd1 '_video_save_pointer_table' +_video_save_pointer_table: ; 0xc5551 LB 0x1c + db 043h, 048h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h + db 037h, 055h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h + ; disGetNextSymbol 0xc556d LB 0x293a -> off=0x0 cb=0000000000000800 uValue=00000000000c0ded 'vgafont8' +vgafont8: ; 0xc556d LB 0x800 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07eh, 081h, 0a5h, 081h, 0bdh, 099h, 081h, 07eh db 07eh, 0ffh, 0dbh, 0ffh, 0c3h, 0e7h, 0ffh, 07eh, 06ch, 0feh, 0feh, 0feh, 07ch, 038h, 010h, 000h db 010h, 038h, 07ch, 0feh, 07ch, 038h, 010h, 000h, 038h, 07ch, 038h, 0feh, 0feh, 07ch, 038h, 07ch @@ -8573,8 +8573,8 @@ db 000h, 000h, 000h, 000h, 018h, 000h, 000h, 000h, 00fh, 00ch, 00ch, 00ch, 0ech, 06ch, 03ch, 01ch db 078h, 06ch, 06ch, 06ch, 06ch, 000h, 000h, 000h, 070h, 018h, 030h, 060h, 078h, 000h, 000h, 000h db 000h, 000h, 03ch, 03ch, 03ch, 03ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h - ; disGetNextSymbol 0xc5d71 LB 0x213e -> off=0x0 cb=0000000000000e00 uValue=00000000000c15f1 'vgafont14' -vgafont14: ; 0xc5d71 LB 0xe00 + ; disGetNextSymbol 0xc5d6d LB 0x213a -> off=0x0 cb=0000000000000e00 uValue=00000000000c15ed 'vgafont14' +vgafont14: ; 0xc5d6d LB 0xe00 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 07eh, 081h, 0a5h, 081h, 081h, 0bdh, 099h, 081h, 07eh, 000h, 000h, 000h, 000h, 000h, 07eh, 0ffh db 0dbh, 0ffh, 0ffh, 0c3h, 0e7h, 0ffh, 07eh, 000h, 000h, 000h, 000h, 000h, 000h, 06ch, 0feh, 0feh @@ -8799,8 +8799,8 @@ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 070h, 0d8h, 030h, 060h, 0c8h, 0f8h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07ch, 07ch, 07ch, 07ch, 07ch, 07ch, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h - ; disGetNextSymbol 0xc6b71 LB 0x133e -> off=0x0 cb=0000000000001000 uValue=00000000000c23f1 'vgafont16' -vgafont16: ; 0xc6b71 LB 0x1000 + ; disGetNextSymbol 0xc6b6d LB 0x133a -> off=0x0 cb=0000000000001000 uValue=00000000000c23ed 'vgafont16' +vgafont16: ; 0xc6b6d LB 0x1000 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 07eh, 081h, 0a5h, 081h, 081h, 0bdh, 099h, 081h, 081h, 07eh, 000h, 000h, 000h, 000h db 000h, 000h, 07eh, 0ffh, 0dbh, 0ffh, 0ffh, 0c3h, 0e7h, 0ffh, 0ffh, 07eh, 000h, 000h, 000h, 000h @@ -9057,8 +9057,8 @@ db 000h, 070h, 0d8h, 030h, 060h, 0c8h, 0f8h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 07ch, 07ch, 07ch, 07ch, 07ch, 07ch, 07ch, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h - ; disGetNextSymbol 0xc7b71 LB 0x33e -> off=0x0 cb=000000000000012d uValue=00000000000c33f1 'vgafont14alt' -vgafont14alt: ; 0xc7b71 LB 0x12d + ; disGetNextSymbol 0xc7b6d LB 0x33a -> off=0x0 cb=000000000000012d uValue=00000000000c33ed 'vgafont14alt' +vgafont14alt: ; 0xc7b6d LB 0x12d db 01dh, 000h, 000h, 000h, 000h, 024h, 066h, 0ffh, 066h, 024h, 000h, 000h, 000h, 000h, 000h, 022h db 000h, 063h, 063h, 063h, 022h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 02bh, 000h db 000h, 000h, 018h, 018h, 018h, 0ffh, 018h, 018h, 018h, 000h, 000h, 000h, 000h, 02dh, 000h, 000h @@ -9078,8 +9078,8 @@ db 000h, 0fch, 066h, 066h, 07ch, 062h, 066h, 06fh, 066h, 066h, 0f3h, 000h, 000h, 000h, 0f1h, 000h db 000h, 018h, 018h, 018h, 0ffh, 018h, 018h, 018h, 000h, 0ffh, 000h, 000h, 000h, 0f6h, 000h, 000h db 018h, 018h, 000h, 000h, 0ffh, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 000h - ; disGetNextSymbol 0xc7c9e LB 0x211 -> off=0x0 cb=0000000000000144 uValue=00000000000c351e 'vgafont16alt' -vgafont16alt: ; 0xc7c9e LB 0x144 + ; disGetNextSymbol 0xc7c9a LB 0x20d -> off=0x0 cb=0000000000000144 uValue=00000000000c351a 'vgafont16alt' +vgafont16alt: ; 0xc7c9a LB 0x144 db 01dh, 000h, 000h, 000h, 000h, 000h, 024h, 066h, 0ffh, 066h, 024h, 000h, 000h, 000h, 000h, 000h db 000h, 030h, 000h, 000h, 03ch, 066h, 0c3h, 0c3h, 0dbh, 0dbh, 0c3h, 0c3h, 066h, 03ch, 000h, 000h db 000h, 000h, 04dh, 000h, 000h, 0c3h, 0e7h, 0ffh, 0ffh, 0dbh, 0c3h, 0c3h, 0c3h, 0c3h, 0c3h, 000h @@ -9101,43 +9101,45 @@ db 000h, 0abh, 000h, 0c0h, 0c0h, 0c2h, 0c6h, 0cch, 018h, 030h, 060h, 0ceh, 09bh, 006h, 00ch, 01fh db 000h, 000h, 0ach, 000h, 0c0h, 0c0h, 0c2h, 0c6h, 0cch, 018h, 030h, 066h, 0ceh, 096h, 03eh, 006h db 006h, 000h, 000h, 000h - ; disGetNextSymbol 0xc7de2 LB 0xcd -> off=0x0 cb=0000000000000008 uValue=00000000000c3662 '_cga_msr' -_cga_msr: ; 0xc7de2 LB 0x8 + ; disGetNextSymbol 0xc7dde LB 0xc9 -> off=0x0 cb=0000000000000008 uValue=00000000000c365e '_cga_msr' +_cga_msr: ; 0xc7dde LB 0x8 db 02ch, 028h, 02dh, 029h, 02ah, 02eh, 01eh, 029h - ; disGetNextSymbol 0xc7dea LB 0xc5 -> off=0x0 cb=0000000000000015 uValue=00000000000c366a '_vbebios_copyright' -_vbebios_copyright: ; 0xc7dea LB 0x15 + ; disGetNextSymbol 0xc7de6 LB 0xc1 -> off=0x0 cb=0000000000000015 uValue=00000000000c3666 '_vbebios_copyright' +_vbebios_copyright: ; 0xc7de6 LB 0x15 db 'VirtualBox VESA BIOS', 000h - ; disGetNextSymbol 0xc7dff LB 0xb0 -> off=0x0 cb=0000000000000013 uValue=00000000000c367f '_vbebios_vendor_name' -_vbebios_vendor_name: ; 0xc7dff LB 0x13 + ; disGetNextSymbol 0xc7dfb LB 0xac -> off=0x0 cb=0000000000000013 uValue=00000000000c367b '_vbebios_vendor_name' +_vbebios_vendor_name: ; 0xc7dfb LB 0x13 db 'Oracle Corporation', 000h - ; disGetNextSymbol 0xc7e12 LB 0x9d -> off=0x0 cb=0000000000000021 uValue=00000000000c3692 '_vbebios_product_name' -_vbebios_product_name: ; 0xc7e12 LB 0x21 + ; disGetNextSymbol 0xc7e0e LB 0x99 -> off=0x0 cb=0000000000000021 uValue=00000000000c368e '_vbebios_product_name' +_vbebios_product_name: ; 0xc7e0e LB 0x21 db 'Oracle VM VirtualBox VBE Adapter', 000h - ; disGetNextSymbol 0xc7e33 LB 0x7c -> off=0x0 cb=0000000000000028 uValue=00000000000c36b3 '_vbebios_product_revision' -_vbebios_product_revision: ; 0xc7e33 LB 0x28 - db 'Oracle VM VirtualBox Version 6.1.31_SPB', 000h - ; disGetNextSymbol 0xc7e5b LB 0x54 -> off=0x0 cb=000000000000002b uValue=00000000000c36db '_vbebios_info_string' -_vbebios_info_string: ; 0xc7e5b LB 0x2b + ; disGetNextSymbol 0xc7e2f LB 0x78 -> off=0x0 cb=0000000000000024 uValue=00000000000c36af '_vbebios_product_revision' +_vbebios_product_revision: ; 0xc7e2f LB 0x24 + db 'Oracle VM VirtualBox Version 6.1.34', 000h + ; disGetNextSymbol 0xc7e53 LB 0x54 -> off=0x0 cb=000000000000002b uValue=00000000000c36d3 '_vbebios_info_string' +_vbebios_info_string: ; 0xc7e53 LB 0x2b db 'VirtualBox VBE Display Adapter enabled', 00dh, 00ah, 00dh, 00ah, 000h - ; disGetNextSymbol 0xc7e86 LB 0x29 -> off=0x0 cb=0000000000000029 uValue=00000000000c3706 '_no_vbebios_info_string' -_no_vbebios_info_string: ; 0xc7e86 LB 0x29 + ; disGetNextSymbol 0xc7e7e LB 0x29 -> off=0x0 cb=0000000000000029 uValue=00000000000c36fe '_no_vbebios_info_string' +_no_vbebios_info_string: ; 0xc7e7e LB 0x29 db 'No VirtualBox VBE support available!', 00dh, 00ah, 00dh, 00ah, 000h - ; Padding 0x1 bytes at 0xc7eaf + ; Padding 0x1 bytes at 0xc7ea7 db 001h -section CONST progbits vstart=0x7eb0 align=1 ; size=0x0 class=DATA group=DGROUP +section CONST progbits vstart=0x7ea8 align=1 ; size=0x0 class=DATA group=DGROUP -section CONST2 progbits vstart=0x7eb0 align=1 ; size=0x0 class=DATA group=DGROUP +section CONST2 progbits vstart=0x7ea8 align=1 ; size=0x0 class=DATA group=DGROUP - ; Padding 0x150 bytes at 0xc7eb0 - db 000h, 000h, 000h, 000h, 001h, 000h, 000h, 000h, 000h, 000h, 000h, 044h, 03ah, 05ch, 052h, 065h - db 070h, 06fh, 073h, 069h, 074h, 06fh, 072h, 079h, 05ch, 062h, 072h, 061h, 06eh, 063h, 068h, 065h - db 073h, 05ch, 056h, 042h, 06fh, 078h, 02dh, 036h, 02eh, 031h, 05ch, 06fh, 075h, 074h, 05ch, 077h - db 069h, 06eh, 02eh, 061h, 06dh, 064h, 036h, 034h, 05ch, 072h, 065h, 06ch, 065h, 061h, 073h, 065h - db 05ch, 06fh, 062h, 06ah, 05ch, 056h, 042h, 06fh, 078h, 056h, 067h, 061h, 042h, 069h, 06fh, 073h - db 038h, 030h, 038h, 036h, 05ch, 056h, 042h, 06fh, 078h, 056h, 067h, 061h, 042h, 069h, 06fh, 073h - db 038h, 030h, 038h, 036h, 02eh, 073h, 079h, 06dh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h + ; Padding 0x158 bytes at 0xc7ea8 + db 000h, 000h, 000h, 000h, 001h, 000h, 000h, 000h, 000h, 000h, 000h, 02fh, 068h, 06fh, 06dh, 065h + db 02fh, 067h, 061h, 06ch, 069h, 074h, 073h, 079h, 06eh, 02fh, 063h, 06fh, 06dh, 070h, 069h, 06ch + db 065h, 02dh, 063h, 061h, 063h, 068h, 065h, 02fh, 076h, 062h, 06fh, 078h, 02dh, 072h, 065h, 06ch + db 065h, 061h, 073h, 065h, 02fh, 062h, 072h, 061h, 06eh, 063h, 068h, 065h, 073h, 02fh, 056h, 042h + db 06fh, 078h, 02dh, 036h, 02eh, 031h, 02fh, 06fh, 075h, 074h, 02fh, 06ch, 069h, 06eh, 075h, 078h + db 02eh, 061h, 06dh, 064h, 036h, 034h, 02fh, 072h, 065h, 06ch, 065h, 061h, 073h, 065h, 02fh, 06fh + db 062h, 06ah, 02fh, 056h, 042h, 06fh, 078h, 056h, 067h, 061h, 042h, 069h, 06fh, 073h, 038h, 030h + db 038h, 036h, 02fh, 056h, 042h, 06fh, 078h, 056h, 067h, 061h, 042h, 069h, 06fh, 073h, 038h, 030h + db 038h, 036h, 02eh, 073h, 079h, 06dh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h @@ -9150,5 +9152,4 @@ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h - db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h - db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 074h + db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07fh diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative8086.md5sum virtualbox-6.1.34-dfsg/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative8086.md5sum --- virtualbox-6.1.32-dfsg/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative8086.md5sum 2022-01-13 18:55:39.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative8086.md5sum 2022-03-22 23:42:42.000000000 +0000 @@ -1 +1 @@ -21c339c0bda9b04154de002e710cf966 *VBoxVgaBios8086.rom +970b398262f95a2e18ca380c7a3a9fb5 *VBoxVgaBios8086.rom diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Devices/Network/DevE1000.cpp virtualbox-6.1.34-dfsg/src/VBox/Devices/Network/DevE1000.cpp --- virtualbox-6.1.32-dfsg/src/VBox/Devices/Network/DevE1000.cpp 2022-01-13 18:55:54.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Devices/Network/DevE1000.cpp 2022-03-22 23:43:01.000000000 +0000 @@ -773,6 +773,7 @@ #define E1K_DTYP_LEGACY -1 #define E1K_DTYP_CONTEXT 0 #define E1K_DTYP_DATA 1 +#define E1K_DTYP_INVALID 2 struct E1kTDLegacy { @@ -1682,6 +1683,7 @@ uint32_t tdlen; uint32_t tdh; uint32_t tdt; + uint8_t nextPacket; }; typedef struct E1kTxDContext E1KTXDC, *PE1KTXDC; @@ -3742,7 +3744,7 @@ * @param pGso The GSO context to setup. * @param pCtx The context descriptor. */ -DECLINLINE(void) e1kSetupGsoCtx(PPDMNETWORKGSO pGso, E1KTXCTX const *pCtx) +DECLINLINE(bool) e1kSetupGsoCtx(PPDMNETWORKGSO pGso, E1KTXCTX const *pCtx) { pGso->u8Type = PDMNETWORKGSOTYPE_INVALID; @@ -3754,33 +3756,33 @@ if (RT_UNLIKELY( pCtx->ip.u8CSS < sizeof(RTNETETHERHDR) )) { E1kLog(("e1kSetupGsoCtx: IPCSS=%#x\n", pCtx->ip.u8CSS)); - return; + return false; } if (RT_UNLIKELY( pCtx->tu.u8CSS < (size_t)pCtx->ip.u8CSS + (pCtx->dw2.fIP ? RTNETIPV4_MIN_LEN : RTNETIPV6_MIN_LEN) )) { E1kLog(("e1kSetupGsoCtx: TUCSS=%#x\n", pCtx->tu.u8CSS)); - return; + return false; } if (RT_UNLIKELY( pCtx->dw2.fTCP ? pCtx->dw3.u8HDRLEN < (size_t)pCtx->tu.u8CSS + RTNETTCP_MIN_LEN : pCtx->dw3.u8HDRLEN != (size_t)pCtx->tu.u8CSS + RTNETUDP_MIN_LEN )) { E1kLog(("e1kSetupGsoCtx: HDRLEN=%#x TCP=%d\n", pCtx->dw3.u8HDRLEN, pCtx->dw2.fTCP)); - return; + return false; } /* The end of the TCP/UDP checksum should stop at the end of the packet or at least after the headers. */ if (RT_UNLIKELY( pCtx->tu.u16CSE > 0 && pCtx->tu.u16CSE <= pCtx->dw3.u8HDRLEN )) { E1kLog(("e1kSetupGsoCtx: TUCSE=%#x HDRLEN=%#x\n", pCtx->tu.u16CSE, pCtx->dw3.u8HDRLEN)); - return; + return false; } /* IPv4 checksum offset. */ if (RT_UNLIKELY( pCtx->dw2.fIP && (size_t)pCtx->ip.u8CSO - pCtx->ip.u8CSS != RT_UOFFSETOF(RTNETIPV4, ip_sum) )) { E1kLog(("e1kSetupGsoCtx: IPCSO=%#x IPCSS=%#x\n", pCtx->ip.u8CSO, pCtx->ip.u8CSS)); - return; + return false; } /* TCP/UDP checksum offsets. */ @@ -3790,7 +3792,7 @@ : RT_UOFFSETOF(RTNETUDP, uh_sum) ) )) { E1kLog(("e1kSetupGsoCtx: TUCSO=%#x TUCSS=%#x TCP=%d\n", pCtx->ip.u8CSO, pCtx->ip.u8CSS, pCtx->dw2.fTCP)); - return; + return false; } /* @@ -3801,7 +3803,7 @@ { E1kLog(("e1kSetupGsoCtx: HDRLEN(=%#x) + PAYLEN(=%#x) = %#x, max is %#x\n", pCtx->dw3.u8HDRLEN, pCtx->dw2.u20PAYLEN, pCtx->dw3.u8HDRLEN + pCtx->dw2.u20PAYLEN, VBOX_MAX_GSO_SIZE)); - return; + return false; } /* @@ -3838,6 +3840,7 @@ Assert(PDMNetGsoIsValid(pGso, sizeof(*pGso), pGso->cbMaxSeg * 5)); E1kLog2(("e1kSetupGsoCtx: mss=%#x hdr=%#x hdrseg=%#x hdr1=%#x hdr2=%#x %s\n", pGso->cbMaxSeg, pGso->cbHdrsTotal, pGso->cbHdrsSeg, pGso->offHdr1, pGso->offHdr2, PDMNetGsoTypeName((PDMNETWORKGSOTYPE)pGso->u8Type) )); + return PDMNetGsoIsValid(pGso, sizeof(*pGso), pGso->cbMaxSeg * 5); } /** @@ -4201,6 +4204,11 @@ uint32_t cbFrame = pSg ? (uint32_t)pSg->cbUsed : 0; Assert(!pSg || pSg->cSegs == 1); + if (cbFrame < 14) + { + Log(("%s Ignoring invalid frame (%u bytes)\n", pThis->szPrf, cbFrame)); + return; + } if (cbFrame > 70) /* unqualified guess */ pThis->led.Asserted.s.fWriting = pThis->led.Actual.s.fWriting = 1; @@ -4226,7 +4234,7 @@ #endif /* E1K_INT_STATS */ /* Add VLAN tag */ - if (cbFrame > 12 && pThis->fVTag) + if (cbFrame > 12 && pThis->fVTag && pSg->cbUsed + 4 <= pSg->cbAvailable) { E1kLog3(("%s Inserting VLAN tag %08x\n", pThis->szPrf, RT_BE2H_U16((uint16_t)VET) | (RT_BE2H_U16(pThis->u16VTagTCI) << 16))); @@ -5300,6 +5308,11 @@ if (pDesc->legacy.cmd.u16Length == 0 || pDesc->legacy.u64BufAddr == 0) { E1kLog(("%s Empty legacy descriptor, skipped.\n", pThis->szPrf)); + if (pDesc->data.cmd.fEOP) + { + e1kTransmitFrame(pDevIns, pThis, pThisCC, fOnWorkerThread); + pThis->u16TxPktLen = 0; + } } else { @@ -5348,6 +5361,11 @@ { if (pDesc->context.dw2.fTSE) { + if (!e1kSetupGsoCtx(&pThis->GsoCtx, &pDesc->context)) + { + pThis->contextTSE.dw2.u4DTYP = E1K_DTYP_INVALID; + return false; + } pThis->contextTSE = pDesc->context; uint32_t cbMaxSegmentSize = pThis->contextTSE.dw3.u16MSS + pThis->contextTSE.dw3.u8HDRLEN + 4; /*VTAG*/ if (RT_UNLIKELY(cbMaxSegmentSize > E1K_MAX_TX_PKT_SIZE)) @@ -5378,7 +5396,15 @@ return true; /* Consider returning false for invalid descriptors */ } -static bool e1kLocateTxPacket(PE1KSTATE pThis) +enum E1kPacketType +{ + E1K_PACKET_NONE = 0, + E1K_PACKET_LEGACY, + E1K_PACKET_NORMAL, + E1K_PACKET_TSE +}; + +static int e1kLocateTxPacket(PE1KSTATE pThis, PE1KTXDC pTxdc) { LogFlow(("%s e1kLocateTxPacket: ENTER cbTxAlloc=%d\n", pThis->szPrf, pThis->cbTxAlloc)); @@ -5390,6 +5416,23 @@ return true; } + pThis->fGSO = false; + pThis->fVTag = false; + pThis->fIPcsum = false; + pThis->fTCPcsum = false; + pThis->u16TxPktLen = 0; + + enum E1kPacketType packetType = E1K_PACKET_NONE; + enum E1kPacketType expectedPacketType = E1K_PACKET_NONE; + /* + * Valid packets start with 1 or 0 context descriptors, followed by 1 or + * more data descriptors of the same type: legacy, normal or TSE. Note + * that legacy descriptors do not belong to neither normal nor segmentation + * contexts rendering the sequence (context_descriptor, legacy_descriptor) + * invalid, but the context descriptor will still be applied and the legacy + * descriptor will be treated as the beginning of next packet. + */ + bool fInvalidPacket = false; bool fTSE = false; uint32_t cbPacket = 0; @@ -5398,11 +5441,17 @@ for (int i = pThis->iTxDCurrent; i < pThis->nTxDFetched; ++i) { E1KTXDESC *pDesc = &pThis->aTxDescriptors[i]; - /* Assume the descriptor valid until proven otherwise. */ - pThis->afTxDValid[i] = true; + switch (e1kGetDescType(pDesc)) { case E1K_DTYP_CONTEXT: + /* There can be only one context per packet. Each context descriptor starts a new packet. */ + if (packetType != E1K_PACKET_NONE) + { + fInvalidPacket = true; + break; + } + packetType = (pDesc->context.dw2.fTSE) ? E1K_PACKET_TSE : E1K_PACKET_NORMAL; if (cbPacket == 0) pThis->afTxDValid[i] = e1kUpdateTxContext(pThis, pDesc); else @@ -5410,14 +5459,21 @@ pThis->szPrf, cbPacket)); continue; case E1K_DTYP_LEGACY: + if (packetType != E1K_PACKET_NONE && packetType != E1K_PACKET_LEGACY) + { + fInvalidPacket = true; + break; + } + packetType = E1K_PACKET_LEGACY; /* Skip invalid descriptors. */ if (cbPacket > 0 && (pThis->fGSO || fTSE)) { E1kLog(("%s e1kLocateTxPacket: ignoring a legacy descriptor in the segmentation context, cbPacket=%d\n", pThis->szPrf, cbPacket)); - pThis->afTxDValid[i] = false; /* Make sure it is skipped by processing */ continue; } + pThis->afTxDValid[i] = true; /* Passed all checks, process it */ + /* Skip empty descriptors. */ if (!pDesc->legacy.u64BufAddr || !pDesc->legacy.cmd.u16Length) break; @@ -5425,14 +5481,39 @@ pThis->fGSO = false; break; case E1K_DTYP_DATA: + expectedPacketType = pDesc->data.cmd.fTSE ? E1K_PACKET_TSE : E1K_PACKET_NORMAL; + if (packetType != E1K_PACKET_NONE && packetType != expectedPacketType) + { + fInvalidPacket = true; + break; + } /* Skip invalid descriptors. */ + if (pDesc->data.cmd.fTSE) + { + if (pThis->contextTSE.dw2.u4DTYP == E1K_DTYP_INVALID) + { + E1kLog(("%s e1kLocateTxPacket: ignoring TSE descriptor in invalid segmentation context, cbPacket=%d\n", + pThis->szPrf, cbPacket)); + continue; + } + } + else /* !TSE */ + { + if (pThis->contextNormal.dw2.u4DTYP == E1K_DTYP_INVALID) + { + E1kLog(("%s e1kLocateTxPacket: ignoring non-TSE descriptor in invalid normal context, cbPacket=%d\n", + pThis->szPrf, cbPacket)); + continue; + } + } if (cbPacket > 0 && (bool)pDesc->data.cmd.fTSE != fTSE) { E1kLog(("%s e1kLocateTxPacket: ignoring %sTSE descriptor in the %ssegmentation context, cbPacket=%d\n", pThis->szPrf, pDesc->data.cmd.fTSE ? "" : "non-", fTSE ? "" : "non-", cbPacket)); - pThis->afTxDValid[i] = false; /* Make sure it is skipped by processing */ continue; } + pThis->afTxDValid[i] = true; /* Passed all checks, process it */ + /* Skip empty descriptors. */ if (!pDesc->data.u64BufAddr || !pDesc->data.cmd.u20DTALEN) break; @@ -5462,6 +5543,17 @@ AssertMsgFailed(("Impossible descriptor type!")); continue; } + if (fInvalidPacket) + { + for (int index = pThis->iTxDCurrent; index < i; ++index) + pThis->afTxDValid[index] = false; /* Make sure all descriptors for this packet are skipped by processing */ + LogFlow(("%s e1kLocateTxPacket: marked %d descriptors as invalid\n", pThis->szPrf, i - pThis->iTxDCurrent)); + LogFlow(("%s e1kLocateTxPacket: RET true cbTxAlloc=%d cbPacket=%d%s%s\n", + pThis->szPrf, pThis->cbTxAlloc, cbPacket, + pThis->fGSO ? " GSO" : "", fTSE ? " TSE" : "")); + pTxdc->nextPacket = i; + return true; + } if (pDesc->legacy.cmd.fEOP) { /* @@ -5486,6 +5578,7 @@ LogFlow(("%s e1kLocateTxPacket: RET true cbTxAlloc=%d cbPacket=%d%s%s\n", pThis->szPrf, pThis->cbTxAlloc, cbPacket, pThis->fGSO ? " GSO" : "", fTSE ? " TSE" : "")); + pTxdc->nextPacket = i + 1; return true; } } @@ -5495,6 +5588,7 @@ /* All descriptors were empty, we need to process them as a dummy packet */ LogFlow(("%s e1kLocateTxPacket: RET true cbTxAlloc=%d, zero packet!\n", pThis->szPrf, pThis->cbTxAlloc)); + pTxdc->nextPacket = pThis->nTxDFetched; return true; } LogFlow(("%s e1kLocateTxPacket: RET false cbTxAlloc=%d cbPacket=%d\n", @@ -5510,7 +5604,7 @@ LogFlow(("%s e1kXmitPacket: ENTER current=%d fetched=%d\n", pThis->szPrf, pThis->iTxDCurrent, pThis->nTxDFetched)); - while (pThis->iTxDCurrent < pThis->nTxDFetched) + while (pThis->iTxDCurrent < pTxdc->nextPacket && pThis->iTxDCurrent < pThis->nTxDFetched) { E1KTXDESC *pDesc = &pThis->aTxDescriptors[pThis->iTxDCurrent]; E1kLog3(("%s About to process new TX descriptor at %08x%08x, TDLEN=%08x, TDH=%08x, TDT=%08x\n", @@ -5702,8 +5796,10 @@ bool fIncomplete = false; while (fTxContextValid && !pThis->fLocked && e1kTxDLazyLoad(pDevIns, pThis, &txdc)) { - while (e1kLocateTxPacket(pThis)) + while (e1kLocateTxPacket(pThis, &txdc)) { + Log4(("%s e1kXmitPending: Located packet at %d. Next packet at %d\n", + pThis->szPrf, pThis->iTxDCurrent, txdc.nextPacket)); fIncomplete = false; /* Found a complete packet, allocate it. */ rc = e1kXmitAllocBuf(pThis, pThisCC, pThis->fGSO); diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative286.asm virtualbox-6.1.34-dfsg/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative286.asm --- virtualbox-6.1.32-dfsg/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative286.asm 2022-01-13 18:55:59.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative286.asm 2022-03-22 23:43:08.000000000 +0000 @@ -1205,26 +1205,26 @@ db 'APM: Unsupported function AX=%04X BX=%04X called', 00ah, 000h, 000h db 'PCI: Unsupported function AX=%04X BX=%04X called', 00ah, 000h -section CONST2 progbits vstart=0xed8 align=1 ; size=0x3fe class=DATA group=DGROUP - ; disGetNextSymbol 0xf0ed8 LB 0x3fe -> off=0x0 cb=0000000000000016 uValue=00000000000f0ed8 'bios_cvs_version_string' -bios_cvs_version_string: ; 0xf0ed8 LB 0x16 - db 'VirtualBox 6.1.31_SPB', 000h - ; disGetNextSymbol 0xf0eee LB 0x3e8 -> off=0x0 cb=0000000000000008 uValue=00000000000f0eee '_bios_prefix_string' -_bios_prefix_string: ; 0xf0eee LB 0x8 +section CONST2 progbits vstart=0xed8 align=1 ; size=0x3fa class=DATA group=DGROUP + ; disGetNextSymbol 0xf0ed8 LB 0x3fa -> off=0x0 cb=0000000000000012 uValue=00000000000f0ed8 'bios_cvs_version_string' +bios_cvs_version_string: ; 0xf0ed8 LB 0x12 + db 'VirtualBox 6.1.34', 000h + ; disGetNextSymbol 0xf0eea LB 0x3e8 -> off=0x0 cb=0000000000000008 uValue=00000000000f0eea '_bios_prefix_string' +_bios_prefix_string: ; 0xf0eea LB 0x8 db 'BIOS: ', 000h, 000h - ; disGetNextSymbol 0xf0ef6 LB 0x3e0 -> off=0x0 cb=0000000000000006 uValue=00000000000f0ef6 'isotag' -isotag: ; 0xf0ef6 LB 0x6 + ; disGetNextSymbol 0xf0ef2 LB 0x3e0 -> off=0x0 cb=0000000000000006 uValue=00000000000f0ef2 'isotag' +isotag: ; 0xf0ef2 LB 0x6 db 'CD001', 000h - ; disGetNextSymbol 0xf0efc LB 0x3da -> off=0x0 cb=0000000000000018 uValue=00000000000f0efc 'eltorito' -eltorito: ; 0xf0efc LB 0x18 + ; disGetNextSymbol 0xf0ef8 LB 0x3da -> off=0x0 cb=0000000000000018 uValue=00000000000f0ef8 'eltorito' +eltorito: ; 0xf0ef8 LB 0x18 db 'EL TORITO SPECIFICATION', 000h - ; disGetNextSymbol 0xf0f14 LB 0x3c2 -> off=0x0 cb=0000000000000028 uValue=00000000000f0f14 'drivetypes' -drivetypes: ; 0xf0f14 LB 0x28 + ; disGetNextSymbol 0xf0f10 LB 0x3c2 -> off=0x0 cb=0000000000000028 uValue=00000000000f0f10 'drivetypes' +drivetypes: ; 0xf0f10 LB 0x28 db 046h, 06ch, 06fh, 070h, 070h, 079h, 000h, 000h, 000h, 000h, 048h, 061h, 072h, 064h, 020h, 044h db 069h, 073h, 06bh, 000h, 043h, 044h, 02dh, 052h, 04fh, 04dh, 000h, 000h, 000h, 000h, 04ch, 041h db 04eh, 000h, 000h, 000h, 000h, 000h, 000h, 000h - ; disGetNextSymbol 0xf0f3c LB 0x39a -> off=0x0 cb=000000000000037a uValue=00000000000f0f3c 'scan_to_scanascii' -scan_to_scanascii: ; 0xf0f3c LB 0x37a + ; disGetNextSymbol 0xf0f38 LB 0x39a -> off=0x0 cb=000000000000037a uValue=00000000000f0f38 'scan_to_scanascii' +scan_to_scanascii: ; 0xf0f38 LB 0x37a db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 01bh, 001h, 01bh, 001h, 01bh, 001h db 000h, 001h, 000h, 000h, 031h, 002h, 021h, 002h, 000h, 000h, 000h, 078h, 000h, 000h, 032h, 003h db 040h, 003h, 000h, 003h, 000h, 079h, 000h, 000h, 033h, 004h, 023h, 004h, 000h, 000h, 000h, 07ah @@ -1281,12 +1281,12 @@ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 05ch, 056h, 07ch, 056h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 085h, 000h, 087h, 000h, 089h, 000h, 08bh, 000h, 000h db 000h, 086h, 000h, 088h, 000h, 08ah, 000h, 08ch, 000h, 000h - ; disGetNextSymbol 0xf12b6 LB 0x20 -> off=0x0 cb=0000000000000020 uValue=00000000000f12b6 'panic_msg_keyb_buffer_full' -panic_msg_keyb_buffer_full: ; 0xf12b6 LB 0x20 + ; disGetNextSymbol 0xf12b2 LB 0x20 -> off=0x0 cb=0000000000000020 uValue=00000000000f12b2 'panic_msg_keyb_buffer_full' +panic_msg_keyb_buffer_full: ; 0xf12b2 LB 0x20 db '%s: keyboard input buffer full', 00ah, 000h - ; Padding 0x32a bytes at 0xf12d6 - times 810 db 0 + ; Padding 0x32e bytes at 0xf12d2 + times 814 db 0 section _TEXT progbits vstart=0x1600 align=1 ; size=0x9cd8 class=CODE group=AUTO ; disGetNextSymbol 0xf1600 LB 0x9cd8 -> off=0x0 cb=000000000000005f uValue=00000000000f0000 'rom_scan' @@ -1455,7 +1455,7 @@ log_bios_start: ; 0xf171c LB 0x20 push bp ; 55 ; 0xf171c bios.c:126 mov bp, sp ; 89 e5 ; 0xf171d - mov bx, 00eeeh ; bb ee 0e ; 0xf171f bios.c:131 + mov bx, 00eeah ; bb ea 0e ; 0xf171f bios.c:131 mov cx, ds ; 8c d9 ; 0xf1722 mov ax, strict word 00004h ; b8 04 00 ; 0xf1724 call 018cbh ; e8 a1 01 ; 0xf1727 @@ -2759,7 +2759,7 @@ mov dx, ss ; 8c d2 ; 0xf237b lea ax, [bp-036h] ; 8d 46 ca ; 0xf237d call 058d1h ; e8 4e 35 ; 0xf2380 - mov bx, 00eeeh ; bb ee 0e ; 0xf2383 ata.c:618 + mov bx, 00eeah ; bb ea 0e ; 0xf2383 ata.c:618 mov cx, ds ; 8c d9 ; 0xf2386 mov ax, strict word 00004h ; b8 04 00 ; 0xf2388 call 018cbh ; e8 3d f5 ; 0xf238b @@ -3534,7 +3534,7 @@ mov byte [bp-008h], al ; 88 46 f8 ; 0xf2b3e cmp byte [bp+00ah], 002h ; 80 7e 0a 02 ; 0xf2b41 ata.c:1032 jne short 02b66h ; 75 1f ; 0xf2b45 - mov bx, 00eeeh ; bb ee 0e ; 0xf2b47 ata.c:1033 + mov bx, 00eeah ; bb ea 0e ; 0xf2b47 ata.c:1033 mov cx, ds ; 8c d9 ; 0xf2b4a mov ax, strict word 00004h ; b8 04 00 ; 0xf2b4c call 018cbh ; e8 79 ed ; 0xf2b4f @@ -4365,7 +4365,7 @@ je short 0326fh ; 74 05 ; 0xf3268 cmp bh, 048h ; 80 ff 48 ; 0xf326a jbe short 032a2h ; 76 33 ; 0xf326d - mov bx, 00eeeh ; bb ee 0e ; 0xf326f floppy.c:532 + mov bx, 00eeah ; bb ea 0e ; 0xf326f floppy.c:532 mov cx, ds ; 8c d9 ; 0xf3272 mov ax, strict word 00004h ; b8 04 00 ; 0xf3274 call 018cbh ; e8 51 e6 ; 0xf3277 @@ -5268,7 +5268,7 @@ mov es, ax ; 8e c0 ; 0xf3b01 mov byte [es:bx], 000h ; 26 c6 07 00 ; 0xf3b03 jmp near 0349ch ; e9 92 f9 ; 0xf3b07 - mov bx, 00eeeh ; bb ee 0e ; 0xf3b0a floppy.c:1322 + mov bx, 00eeah ; bb ea 0e ; 0xf3b0a floppy.c:1322 mov cx, ds ; 8c d9 ; 0xf3b0d mov ax, strict word 00004h ; b8 04 00 ; 0xf3b0f call 018cbh ; e8 b6 dd ; 0xf3b12 @@ -5371,7 +5371,7 @@ jmp near 03ce8h ; e9 19 01 ; 0xf3bcc cmp si, strict byte 0004ah ; 83 fe 4a ; 0xf3bcf jne short 03bf3h ; 75 1f ; 0xf3bd2 - mov bx, 00eeeh ; bb ee 0e ; 0xf3bd4 eltorito.c:205 + mov bx, 00eeah ; bb ea 0e ; 0xf3bd4 eltorito.c:205 mov cx, ds ; 8c d9 ; 0xf3bd7 mov ax, strict word 00004h ; b8 04 00 ; 0xf3bd9 call 018cbh ; e8 ec dc ; 0xf3bdc @@ -5471,7 +5471,7 @@ pop si ; 5e ; 0xf3ce5 pop bp ; 5d ; 0xf3ce6 retn ; c3 ; 0xf3ce7 - mov bx, 00eeeh ; bb ee 0e ; 0xf3ce8 eltorito.c:235 + mov bx, 00eeah ; bb ea 0e ; 0xf3ce8 eltorito.c:235 mov cx, ds ; 8c d9 ; 0xf3ceb mov ax, strict word 00004h ; b8 04 00 ; 0xf3ced call 018cbh ; e8 d8 db ; 0xf3cf0 @@ -5614,7 +5614,7 @@ cmp di, strict byte 00005h ; 83 ff 05 ; 0xf3e46 jnc short 03e5bh ; 73 10 ; 0xf3e49 mov al, byte [bp+di-00825h] ; 8a 83 db f7 ; 0xf3e4b - cmp al, byte [di+00ef6h] ; 3a 85 f6 0e ; 0xf3e4f + cmp al, byte [di+00ef2h] ; 3a 85 f2 0e ; 0xf3e4f je short 03e45h ; 74 f0 ; 0xf3e53 mov ax, strict word 00005h ; b8 05 00 ; 0xf3e55 jmp near 0410bh ; e9 b0 02 ; 0xf3e58 @@ -5624,7 +5624,7 @@ cmp di, strict byte 00017h ; 83 ff 17 ; 0xf3e60 jnc short 03e75h ; 73 10 ; 0xf3e63 mov al, byte [bp+di-0081fh] ; 8a 83 e1 f7 ; 0xf3e65 - cmp al, byte [di+00efch] ; 3a 85 fc 0e ; 0xf3e69 + cmp al, byte [di+00ef8h] ; 3a 85 f8 0e ; 0xf3e69 je short 03e5fh ; 74 f0 ; 0xf3e6d mov ax, strict word 00006h ; b8 06 00 ; 0xf3e6f jmp near 0410bh ; e9 96 02 ; 0xf3e72 @@ -5910,7 +5910,7 @@ xor dh, dh ; 30 f6 ; 0xf41c4 cmp ax, dx ; 39 d0 ; 0xf41c6 je short 041f3h ; 74 29 ; 0xf41c8 - mov bx, 00eeeh ; bb ee 0e ; 0xf41ca eltorito.c:511 + mov bx, 00eeah ; bb ea 0e ; 0xf41ca eltorito.c:511 mov cx, ds ; 8c d9 ; 0xf41cd mov ax, strict word 00004h ; b8 04 00 ; 0xf41cf call 018cbh ; e8 f6 d6 ; 0xf41d2 @@ -6140,7 +6140,7 @@ mov word [es:si+020h], strict word 00000h ; 26 c7 44 20 00 00 ; 0xf4432 eltorito.c:616 test al, al ; 84 c0 ; 0xf4438 eltorito.c:618 je short 04473h ; 74 37 ; 0xf443a - mov bx, 00eeeh ; bb ee 0e ; 0xf443c eltorito.c:619 + mov bx, 00eeah ; bb ea 0e ; 0xf443c eltorito.c:619 mov cx, ds ; 8c d9 ; 0xf443f mov ax, strict word 00004h ; b8 04 00 ; 0xf4441 call 018cbh ; e8 84 d4 ; 0xf4444 @@ -6378,7 +6378,7 @@ test al, al ; 84 c0 ; 0xf46cc eltorito.c:723 jne short 046d3h ; 75 03 ; 0xf46ce jmp near 04473h ; e9 a0 fd ; 0xf46d0 - mov bx, 00eeeh ; bb ee 0e ; 0xf46d3 eltorito.c:724 + mov bx, 00eeah ; bb ea 0e ; 0xf46d3 eltorito.c:724 mov cx, ds ; 8c d9 ; 0xf46d6 mov ax, strict word 00004h ; b8 04 00 ; 0xf46d8 call 018cbh ; e8 ed d1 ; 0xf46db @@ -6417,7 +6417,7 @@ mov byte [es:bx], al ; 26 88 07 ; 0xf472f or byte [bp+01ch], 001h ; 80 4e 1c 01 ; 0xf4732 jmp near 04487h ; e9 4e fd ; 0xf4736 - mov bx, 00eeeh ; bb ee 0e ; 0xf4739 eltorito.c:750 + mov bx, 00eeah ; bb ea 0e ; 0xf4739 eltorito.c:750 mov cx, ds ; 8c d9 ; 0xf473c mov ax, strict word 00004h ; b8 04 00 ; 0xf473e call 018cbh ; e8 87 d1 ; 0xf4741 @@ -6522,7 +6522,7 @@ mov word [bp+018h], ax ; 89 46 18 ; 0xf4885 mov word [bp+016h], strict word 00007h ; c7 46 16 07 00 ; 0xf4888 eltorito.c:848 jmp near 04b11h ; e9 81 02 ; 0xf488d eltorito.c:849 - mov bx, 00eeeh ; bb ee 0e ; 0xf4890 + mov bx, 00eeah ; bb ea 0e ; 0xf4890 mov cx, ds ; 8c d9 ; 0xf4893 mov ax, strict word 00004h ; b8 04 00 ; 0xf4895 call 018cbh ; e8 30 d0 ; 0xf4898 @@ -6631,7 +6631,7 @@ mov word [es:bx+002h], ax ; 26 89 47 02 ; 0xf49b6 test dl, dl ; 84 d2 ; 0xf49ba eltorito.c:893 je short 04a27h ; 74 69 ; 0xf49bc - mov bx, 00eeeh ; bb ee 0e ; 0xf49be eltorito.c:894 + mov bx, 00eeah ; bb ea 0e ; 0xf49be eltorito.c:894 mov cx, ds ; 8c d9 ; 0xf49c1 mov ax, strict word 00004h ; b8 04 00 ; 0xf49c3 call 018cbh ; e8 02 cf ; 0xf49c6 @@ -6796,12 +6796,12 @@ test bl, 080h ; f6 c3 80 ; 0xf4b47 je short 04b6dh ; 74 21 ; 0xf4b4a mov dx, strict word 00001h ; ba 01 00 ; 0xf4b4c - mov bx, 00eeeh ; bb ee 0e ; 0xf4b4f boot.c:123 + mov bx, 00eeah ; bb ea 0e ; 0xf4b4f boot.c:123 mov cx, ds ; 8c d9 ; 0xf4b52 mov ax, strict word 00004h ; b8 04 00 ; 0xf4b54 call 018cbh ; e8 71 cd ; 0xf4b57 imul dx, dx, strict byte 0000ah ; 6b d2 0a ; 0xf4b5a - add dx, 00f14h ; 81 c2 14 0f ; 0xf4b5d + add dx, 00f10h ; 81 c2 10 0f ; 0xf4b5d push dx ; 52 ; 0xf4b61 push 004a4h ; 68 a4 04 ; 0xf4b62 push strict byte 00004h ; 6a 04 ; 0xf4b65 @@ -6824,11 +6824,11 @@ mov si, cx ; 89 ce ; 0xf4b82 test al, al ; 84 c0 ; 0xf4b84 boot.c:142 je short 04ba3h ; 74 1b ; 0xf4b86 - mov bx, 00eeeh ; bb ee 0e ; 0xf4b88 boot.c:143 + mov bx, 00eeah ; bb ea 0e ; 0xf4b88 boot.c:143 mov cx, ds ; 8c d9 ; 0xf4b8b mov ax, strict word 00004h ; b8 04 00 ; 0xf4b8d call 018cbh ; e8 38 cd ; 0xf4b90 - push 00f28h ; 68 28 0f ; 0xf4b93 + push 00f24h ; 68 24 0f ; 0xf4b93 push 004b8h ; 68 b8 04 ; 0xf4b96 push strict byte 00004h ; 6a 04 ; 0xf4b99 call 0190eh ; e8 70 cd ; 0xf4b9b @@ -6836,27 +6836,27 @@ jmp short 04be7h ; eb 44 ; 0xf4ba1 boot.c:144 test ah, ah ; 84 e4 ; 0xf4ba3 je short 04bb7h ; 74 10 ; 0xf4ba5 - mov bx, 00eeeh ; bb ee 0e ; 0xf4ba7 boot.c:145 + mov bx, 00eeah ; bb ea 0e ; 0xf4ba7 boot.c:145 mov cx, ds ; 8c d9 ; 0xf4baa mov ax, strict word 00004h ; b8 04 00 ; 0xf4bac call 018cbh ; e8 19 cd ; 0xf4baf - push 00f32h ; 68 32 0f ; 0xf4bb2 + push 00f2eh ; 68 2e 0f ; 0xf4bb2 jmp short 04b96h ; eb df ; 0xf4bb5 test bl, 080h ; f6 c3 80 ; 0xf4bb7 boot.c:146 je short 04bcdh ; 74 11 ; 0xf4bba - mov bx, 00eeeh ; bb ee 0e ; 0xf4bbc boot.c:147 + mov bx, 00eeah ; bb ea 0e ; 0xf4bbc boot.c:147 mov cx, ds ; 8c d9 ; 0xf4bbf mov ax, strict word 00004h ; b8 04 00 ; 0xf4bc1 call 018cbh ; e8 04 cd ; 0xf4bc4 push si ; 56 ; 0xf4bc7 - push 00f1eh ; 68 1e 0f ; 0xf4bc8 + push 00f1ah ; 68 1a 0f ; 0xf4bc8 jmp short 04bdch ; eb 0f ; 0xf4bcb boot.c:148 - mov bx, 00eeeh ; bb ee 0e ; 0xf4bcd boot.c:149 + mov bx, 00eeah ; bb ea 0e ; 0xf4bcd boot.c:149 mov cx, ds ; 8c d9 ; 0xf4bd0 mov ax, strict word 00004h ; b8 04 00 ; 0xf4bd2 call 018cbh ; e8 f3 cc ; 0xf4bd5 push si ; 56 ; 0xf4bd8 - push 00f14h ; 68 14 0f ; 0xf4bd9 + push 00f10h ; 68 10 0f ; 0xf4bd9 push 004cdh ; 68 cd 04 ; 0xf4bdc push strict byte 00004h ; 6a 04 ; 0xf4bdf call 0190eh ; e8 2a cd ; 0xf4be1 @@ -6883,7 +6883,7 @@ push cx ; 51 ; 0xf4c0d push dx ; 52 ; 0xf4c0e mov dx, ax ; 89 c2 ; 0xf4c0f - mov bx, 00eeeh ; bb ee 0e ; 0xf4c11 boot.c:165 + mov bx, 00eeah ; bb ea 0e ; 0xf4c11 boot.c:165 mov cx, ds ; 8c d9 ; 0xf4c14 mov ax, strict word 00004h ; b8 04 00 ; 0xf4c16 call 018cbh ; e8 af cc ; 0xf4c19 @@ -6958,7 +6958,7 @@ mov byte [bp-006h], al ; 88 46 fa ; 0xf4cbd mov byte [bp-008h], al ; 88 46 f8 ; 0xf4cc0 mov byte [bp-00ah], al ; 88 46 f6 ; 0xf4cc3 boot.c:218 - mov bx, 00eeeh ; bb ee 0e ; 0xf4cc6 boot.c:219 + mov bx, 00eeah ; bb ea 0e ; 0xf4cc6 boot.c:219 mov cx, ds ; 8c d9 ; 0xf4cc9 mov ax, strict word 00004h ; b8 04 00 ; 0xf4ccb call 018cbh ; e8 fa cb ; 0xf4cce @@ -7517,7 +7517,7 @@ mov byte [bp-008h], al ; 88 46 f8 ; 0xf519a test al, al ; 84 c0 ; 0xf519d keyboard.c:384 jne short 051bah ; 75 19 ; 0xf519f - mov bx, 00eeeh ; bb ee 0e ; 0xf51a1 keyboard.c:385 + mov bx, 00eeah ; bb ea 0e ; 0xf51a1 keyboard.c:385 mov cx, ds ; 8c d9 ; 0xf51a4 mov ax, strict word 00004h ; b8 04 00 ; 0xf51a6 call 018cbh ; e8 1f c7 ; 0xf51a9 @@ -7781,7 +7781,7 @@ jmp short 0543dh ; eb ea ; 0xf5451 keyboard.c:564 cmp byte [bp-008h], 058h ; 80 7e f8 58 ; 0xf5453 keyboard.c:566 jbe short 05478h ; 76 1f ; 0xf5457 - mov bx, 00eeeh ; bb ee 0e ; 0xf5459 keyboard.c:567 + mov bx, 00eeah ; bb ea 0e ; 0xf5459 keyboard.c:567 mov cx, ds ; 8c d9 ; 0xf545c mov ax, strict word 00004h ; b8 04 00 ; 0xf545e call 018cbh ; e8 67 c4 ; 0xf5461 @@ -7798,16 +7798,16 @@ mov bl, byte [bp-008h] ; 8a 5e f8 ; 0xf547d keyboard.c:571 xor bh, bh ; 30 ff ; 0xf5480 imul bx, bx, strict byte 0000ah ; 6b db 0a ; 0xf5482 - mov dl, byte [bx+00f42h] ; 8a 97 42 0f ; 0xf5485 - mov ax, word [bx+00f42h] ; 8b 87 42 0f ; 0xf5489 keyboard.c:572 + mov dl, byte [bx+00f3eh] ; 8a 97 3e 0f ; 0xf5485 + mov ax, word [bx+00f3eh] ; 8b 87 3e 0f ; 0xf5489 keyboard.c:572 jmp near 05524h ; e9 94 00 ; 0xf548d keyboard.c:573 test dh, 004h ; f6 c6 04 ; 0xf5490 je short 054a8h ; 74 13 ; 0xf5493 mov bl, byte [bp-008h] ; 8a 5e f8 ; 0xf5495 keyboard.c:574 xor bh, bh ; 30 ff ; 0xf5498 imul bx, bx, strict byte 0000ah ; 6b db 0a ; 0xf549a - mov dl, byte [bx+00f40h] ; 8a 97 40 0f ; 0xf549d - mov ax, word [bx+00f40h] ; 8b 87 40 0f ; 0xf54a1 keyboard.c:575 + mov dl, byte [bx+00f3ch] ; 8a 97 3c 0f ; 0xf549d + mov ax, word [bx+00f3ch] ; 8b 87 3c 0f ; 0xf54a1 keyboard.c:575 jmp near 05524h ; e9 7c 00 ; 0xf54a5 keyboard.c:576 mov al, byte [bp-006h] ; 8a 46 fa ; 0xf54a8 and AL, strict byte 002h ; 24 02 ; 0xf54ab @@ -7828,41 +7828,41 @@ mov bl, byte [bp-008h] ; 8a 5e f8 ; 0xf54cc keyboard.c:584 xor bh, bh ; 30 ff ; 0xf54cf imul bx, bx, strict byte 0000ah ; 6b db 0a ; 0xf54d1 - mov cl, byte [bx+00f44h] ; 8a 8f 44 0f ; 0xf54d4 + mov cl, byte [bx+00f40h] ; 8a 8f 40 0f ; 0xf54d4 xor ch, ch ; 30 ed ; 0xf54d8 mov al, dh ; 88 f0 ; 0xf54da xor ah, ah ; 30 e4 ; 0xf54dc test ax, cx ; 85 c8 ; 0xf54de je short 054ech ; 74 0a ; 0xf54e0 - mov dl, byte [bx+00f3ch] ; 8a 97 3c 0f ; 0xf54e2 keyboard.c:585 - mov ax, word [bx+00f3ch] ; 8b 87 3c 0f ; 0xf54e6 keyboard.c:586 + mov dl, byte [bx+00f38h] ; 8a 97 38 0f ; 0xf54e2 keyboard.c:585 + mov ax, word [bx+00f38h] ; 8b 87 38 0f ; 0xf54e6 keyboard.c:586 jmp short 054f4h ; eb 08 ; 0xf54ea keyboard.c:587 - mov dl, byte [bx+00f3eh] ; 8a 97 3e 0f ; 0xf54ec keyboard.c:588 - mov ax, word [bx+00f3eh] ; 8b 87 3e 0f ; 0xf54f0 keyboard.c:589 + mov dl, byte [bx+00f3ah] ; 8a 97 3a 0f ; 0xf54ec keyboard.c:588 + mov ax, word [bx+00f3ah] ; 8b 87 3a 0f ; 0xf54f0 keyboard.c:589 shr ax, 008h ; c1 e8 08 ; 0xf54f4 mov byte [bp-008h], al ; 88 46 f8 ; 0xf54f7 jmp short 0552ah ; eb 2e ; 0xf54fa keyboard.c:591 mov bl, byte [bp-008h] ; 8a 5e f8 ; 0xf54fc keyboard.c:593 xor bh, bh ; 30 ff ; 0xf54ff imul bx, bx, strict byte 0000ah ; 6b db 0a ; 0xf5501 - mov al, byte [bx+00f44h] ; 8a 87 44 0f ; 0xf5504 + mov al, byte [bx+00f40h] ; 8a 87 40 0f ; 0xf5504 xor ah, ah ; 30 e4 ; 0xf5508 mov dl, dh ; 88 f2 ; 0xf550a xor dh, dh ; 30 f6 ; 0xf550c test dx, ax ; 85 c2 ; 0xf550e je short 0551ch ; 74 0a ; 0xf5510 - mov dl, byte [bx+00f3eh] ; 8a 97 3e 0f ; 0xf5512 keyboard.c:594 - mov ax, word [bx+00f3eh] ; 8b 87 3e 0f ; 0xf5516 keyboard.c:595 + mov dl, byte [bx+00f3ah] ; 8a 97 3a 0f ; 0xf5512 keyboard.c:594 + mov ax, word [bx+00f3ah] ; 8b 87 3a 0f ; 0xf5516 keyboard.c:595 jmp short 05524h ; eb 08 ; 0xf551a keyboard.c:596 - mov dl, byte [bx+00f3ch] ; 8a 97 3c 0f ; 0xf551c keyboard.c:597 - mov ax, word [bx+00f3ch] ; 8b 87 3c 0f ; 0xf5520 keyboard.c:598 + mov dl, byte [bx+00f38h] ; 8a 97 38 0f ; 0xf551c keyboard.c:597 + mov ax, word [bx+00f38h] ; 8b 87 38 0f ; 0xf5520 keyboard.c:598 shr ax, 008h ; c1 e8 08 ; 0xf5524 mov byte [bp-008h], al ; 88 46 f8 ; 0xf5527 cmp byte [bp-008h], 000h ; 80 7e f8 00 ; 0xf552a keyboard.c:601 jne short 0554ah ; 75 1a ; 0xf552e test dl, dl ; 84 d2 ; 0xf5530 jne short 0554ah ; 75 16 ; 0xf5532 - mov bx, 00eeeh ; bb ee 0e ; 0xf5534 keyboard.c:602 + mov bx, 00eeah ; bb ea 0e ; 0xf5534 keyboard.c:602 mov cx, ds ; 8c d9 ; 0xf5537 mov ax, strict word 00004h ; b8 04 00 ; 0xf5539 call 018cbh ; e8 8c c3 ; 0xf553c @@ -8041,7 +8041,7 @@ or dx, ax ; 09 c2 ; 0xf56dc mov word [bp+012h], dx ; 89 56 12 ; 0xf56de jmp near 05727h ; e9 43 00 ; 0xf56e1 keyboard.c:700 - mov bx, 00eeeh ; bb ee 0e ; 0xf56e4 + mov bx, 00eeah ; bb ea 0e ; 0xf56e4 mov cx, ds ; 8c d9 ; 0xf56e7 mov ax, strict word 00004h ; b8 04 00 ; 0xf56e9 call 018cbh ; e8 dc c1 ; 0xf56ec @@ -8052,7 +8052,7 @@ push strict byte 00004h ; 6a 04 ; 0xf56f9 call 0190eh ; e8 10 c2 ; 0xf56fb add sp, strict byte 00006h ; 83 c4 06 ; 0xf56fe - mov bx, 00eeeh ; bb ee 0e ; 0xf5701 + mov bx, 00eeah ; bb ea 0e ; 0xf5701 mov cx, ds ; 8c d9 ; 0xf5704 mov ax, strict word 00004h ; b8 04 00 ; 0xf5706 call 018cbh ; e8 bf c1 ; 0xf5709 @@ -8659,7 +8659,7 @@ jnbe short 05dbfh ; 77 06 ; 0xf5db7 cmp word [bp-00eh], strict byte 00000h ; 83 7e f2 00 ; 0xf5db9 jne short 05de5h ; 75 26 ; 0xf5dbd - mov bx, 00eeeh ; bb ee 0e ; 0xf5dbf disk.c:338 + mov bx, 00eeah ; bb ea 0e ; 0xf5dbf disk.c:338 mov cx, ds ; 8c d9 ; 0xf5dc2 mov ax, strict word 00004h ; b8 04 00 ; 0xf5dc4 call 018cbh ; e8 01 bb ; 0xf5dc7 @@ -8691,7 +8691,7 @@ mov dx, word [bp-006h] ; 8b 56 fa ; 0xf5e10 cmp dx, word [bp-00ah] ; 3b 56 f6 ; 0xf5e13 jbe short 05e48h ; 76 30 ; 0xf5e16 - mov bx, 00eeeh ; bb ee 0e ; 0xf5e18 disk.c:349 + mov bx, 00eeah ; bb ea 0e ; 0xf5e18 disk.c:349 mov cx, ds ; 8c d9 ; 0xf5e1b mov ax, strict word 00004h ; b8 04 00 ; 0xf5e1d call 018cbh ; e8 a8 ba ; 0xf5e20 @@ -8794,7 +8794,7 @@ mov word [bp+016h], bx ; 89 5e 16 ; 0xf5f3c test dl, dl ; 84 d2 ; 0xf5f3f disk.c:389 je short 05f89h ; 74 46 ; 0xf5f41 - mov bx, 00eeeh ; bb ee 0e ; 0xf5f43 disk.c:390 + mov bx, 00eeah ; bb ea 0e ; 0xf5f43 disk.c:390 mov cx, ds ; 8c d9 ; 0xf5f46 mov ax, strict word 00004h ; b8 04 00 ; 0xf5f48 call 018cbh ; e8 7d b9 ; 0xf5f4b @@ -8813,7 +8813,7 @@ xor ah, ah ; 30 e4 ; 0xf5f6b or ah, 00ch ; 80 cc 0c ; 0xf5f6d jmp near 060d2h ; e9 5f 01 ; 0xf5f70 disk.c:392 - mov bx, 00eeeh ; bb ee 0e ; 0xf5f73 disk.c:399 + mov bx, 00eeah ; bb ea 0e ; 0xf5f73 disk.c:399 mov cx, ds ; 8c d9 ; 0xf5f76 mov ax, strict word 00004h ; b8 04 00 ; 0xf5f78 call 018cbh ; e8 4d b9 ; 0xf5f7b @@ -8918,7 +8918,7 @@ or ah, 003h ; 80 cc 03 ; 0xf6083 mov word [bp+016h], ax ; 89 46 16 ; 0xf6086 jmp near 05f8dh ; e9 01 ff ; 0xf6089 disk.c:459 - mov bx, 00eeeh ; bb ee 0e ; 0xf608c disk.c:467 + mov bx, 00eeah ; bb ea 0e ; 0xf608c disk.c:467 mov cx, ds ; 8c d9 ; 0xf608f mov ax, strict word 00004h ; b8 04 00 ; 0xf6091 call 018cbh ; e8 34 b8 ; 0xf6094 @@ -8931,7 +8931,7 @@ call 0190eh ; e8 65 b8 ; 0xf60a6 add sp, strict byte 00008h ; 83 c4 08 ; 0xf60a9 jmp near 05f89h ; e9 da fe ; 0xf60ac disk.c:468 - mov bx, 00eeeh ; bb ee 0e ; 0xf60af disk.c:475 + mov bx, 00eeah ; bb ea 0e ; 0xf60af disk.c:475 mov cx, ds ; 8c d9 ; 0xf60b2 mov ax, strict word 00004h ; b8 04 00 ; 0xf60b4 call 018cbh ; e8 11 b8 ; 0xf60b7 @@ -9018,7 +9018,7 @@ mov word [bp+016h], ax ; 89 46 16 ; 0xf61a8 mov word [bp+014h], strict word 00007h ; c7 46 14 07 00 ; 0xf61ab disk.c:538 jmp near 06390h ; e9 dd 01 ; 0xf61b0 disk.c:539 - mov bx, 00eeeh ; bb ee 0e ; 0xf61b3 + mov bx, 00eeah ; bb ea 0e ; 0xf61b3 mov cx, ds ; 8c d9 ; 0xf61b6 mov ax, strict word 00004h ; b8 04 00 ; 0xf61b8 call 018cbh ; e8 0d b7 ; 0xf61bb @@ -9073,7 +9073,7 @@ jne short 06276h ; 75 29 ; 0xf624b cmp dx, word [es:bx+036h] ; 26 3b 57 36 ; 0xf624d jc short 06276h ; 72 23 ; 0xf6251 - mov bx, 00eeeh ; bb ee 0e ; 0xf6253 disk.c:564 + mov bx, 00eeah ; bb ea 0e ; 0xf6253 disk.c:564 mov cx, ds ; 8c d9 ; 0xf6256 mov ax, strict word 00004h ; b8 04 00 ; 0xf6258 call 018cbh ; e8 6d b6 ; 0xf625b @@ -9130,7 +9130,7 @@ mov word [es:bx+002h], ax ; 26 89 47 02 ; 0xf62ff test dl, dl ; 84 d2 ; 0xf6303 disk.c:589 je short 06289h ; 74 82 ; 0xf6305 - mov bx, 00eeeh ; bb ee 0e ; 0xf6307 disk.c:590 + mov bx, 00eeah ; bb ea 0e ; 0xf6307 disk.c:590 mov cx, ds ; 8c d9 ; 0xf630a mov ax, strict word 00004h ; b8 04 00 ; 0xf630c call 018cbh ; e8 b9 b5 ; 0xf630f @@ -9502,7 +9502,7 @@ mov byte [bp+013h], dh ; 88 76 13 ; 0xf6651 system.c:383 mov word [bp+00ch], ax ; 89 46 0c ; 0xf6654 system.c:384 jmp near 06682h ; e9 28 00 ; 0xf6657 system.c:385 - mov bx, 00eeeh ; bb ee 0e ; 0xf665a system.c:387 + mov bx, 00eeah ; bb ea 0e ; 0xf665a system.c:387 mov cx, ds ; 8c d9 ; 0xf665d mov ax, strict word 00004h ; b8 04 00 ; 0xf665f call 018cbh ; e8 66 b2 ; 0xf6662 @@ -9685,7 +9685,7 @@ push cx ; 51 ; 0xf6825 retf ; cb ; 0xf6826 jmp near 06682h ; e9 58 fe ; 0xf6827 system.c:525 - mov bx, 00eeeh ; bb ee 0e ; 0xf682a system.c:532 + mov bx, 00eeah ; bb ea 0e ; 0xf682a system.c:532 mov cx, ds ; 8c d9 ; 0xf682d mov ax, strict word 00004h ; b8 04 00 ; 0xf682f call 018cbh ; e8 96 b0 ; 0xf6832 @@ -9725,7 +9725,7 @@ jbe short 06873h ; 76 db ; 0xf6896 or byte [bp+018h], 001h ; 80 4e 18 01 ; 0xf6898 system.c:568 jmp near 06682h ; e9 e3 fd ; 0xf689c system.c:569 - mov bx, 00eeeh ; bb ee 0e ; 0xf689f system.c:573 + mov bx, 00eeah ; bb ea 0e ; 0xf689f system.c:573 mov cx, ds ; 8c d9 ; 0xf68a2 mov ax, strict word 00004h ; b8 04 00 ; 0xf68a4 call 018cbh ; e8 21 b0 ; 0xf68a7 @@ -10315,7 +10315,7 @@ test AL, strict byte 002h ; a8 02 ; 0xf6e96 je short 06ea8h ; 74 0e ; 0xf6e98 push 008feh ; 68 fe 08 ; 0xf6e9a ps2mouse.c:82 - push 012b6h ; 68 b6 12 ; 0xf6e9d + push 012b2h ; 68 b2 12 ; 0xf6e9d push strict byte 00007h ; 6a 07 ; 0xf6ea0 call 0190eh ; e8 69 aa ; 0xf6ea2 add sp, strict byte 00006h ; 83 c4 06 ; 0xf6ea5 @@ -10398,7 +10398,7 @@ test AL, strict byte 002h ; a8 02 ; 0xf6f27 je short 06f39h ; 74 0e ; 0xf6f29 push 00908h ; 68 08 09 ; 0xf6f2b ps2mouse.c:114 - push 012b6h ; 68 b6 12 ; 0xf6f2e + push 012b2h ; 68 b2 12 ; 0xf6f2e push strict byte 00007h ; 6a 07 ; 0xf6f31 call 0190eh ; e8 d8 a9 ; 0xf6f33 add sp, strict byte 00006h ; 83 c4 06 ; 0xf6f36 @@ -11895,7 +11895,7 @@ mov word [bp-012h], dx ; 89 56 ee ; 0xf7c9b cmp byte [bp+00ah], 002h ; 80 7e 0a 02 ; 0xf7c9e scsi.c:292 jne short 07cc3h ; 75 1f ; 0xf7ca2 - mov bx, 00eeeh ; bb ee 0e ; 0xf7ca4 scsi.c:293 + mov bx, 00eeah ; bb ea 0e ; 0xf7ca4 scsi.c:293 mov cx, ds ; 8c d9 ; 0xf7ca7 mov ax, strict word 00004h ; b8 04 00 ; 0xf7ca9 call 018cbh ; e8 1c 9c ; 0xf7cac @@ -12125,7 +12125,7 @@ jne short 07ed7h ; 75 06 ; 0xf7ecf cmp cx, 00200h ; 81 f9 00 02 ; 0xf7ed1 je short 07ef7h ; 74 20 ; 0xf7ed5 - mov bx, 00eeeh ; bb ee 0e ; 0xf7ed7 scsi.c:444 + mov bx, 00eeah ; bb ea 0e ; 0xf7ed7 scsi.c:444 mov cx, ds ; 8c d9 ; 0xf7eda mov ax, strict word 00004h ; b8 04 00 ; 0xf7edc call 018cbh ; e8 e9 99 ; 0xf7edf @@ -12310,7 +12310,7 @@ jmp short 080d9h ; eb 08 ; 0xf80cf scsi.c:522 mov word [es:bx+02ch], si ; 26 89 77 2c ; 0xf80d1 scsi.c:523 mov word [es:bx+032h], si ; 26 89 77 32 ; 0xf80d5 scsi.c:524 - mov bx, 00eeeh ; bb ee 0e ; 0xf80d9 scsi.c:528 + mov bx, 00eeah ; bb ea 0e ; 0xf80d9 scsi.c:528 mov cx, ds ; 8c d9 ; 0xf80dc mov ax, strict word 00004h ; b8 04 00 ; 0xf80de call 018cbh ; e8 e7 97 ; 0xf80e1 @@ -12363,7 +12363,7 @@ mov byte [es:bx], al ; 26 88 07 ; 0xf8161 scsi.c:43 inc byte [bp-00ch] ; fe 46 f4 ; 0xf8164 scsi.c:543 jmp near 08200h ; e9 96 00 ; 0xf8167 scsi.c:545 - mov bx, 00eeeh ; bb ee 0e ; 0xf816a scsi.c:557 + mov bx, 00eeah ; bb ea 0e ; 0xf816a scsi.c:557 mov cx, ds ; 8c d9 ; 0xf816d mov ax, strict word 00004h ; b8 04 00 ; 0xf816f call 018cbh ; e8 56 97 ; 0xf8172 @@ -13511,7 +13511,7 @@ mov word [bp-008h], ax ; 89 46 f8 ; 0xf8c56 cmp byte [bp+00ah], 002h ; 80 7e 0a 02 ; 0xf8c59 ahci.c:583 jne short 08c7eh ; 75 1f ; 0xf8c5d - mov bx, 00eeeh ; bb ee 0e ; 0xf8c5f ahci.c:584 + mov bx, 00eeah ; bb ea 0e ; 0xf8c5f ahci.c:584 mov cx, ds ; 8c d9 ; 0xf8c62 mov ax, strict word 00004h ; b8 04 00 ; 0xf8c64 call 018cbh ; e8 61 8c ; 0xf8c67 @@ -13968,7 +13968,7 @@ mov dx, ss ; 8c d2 ; 0xf913d lea ax, [bp-032h] ; 8d 46 ce ; 0xf913f call 058d1h ; e8 8c c7 ; 0xf9142 - mov bx, 00eeeh ; bb ee 0e ; 0xf9145 ahci.c:785 + mov bx, 00eeah ; bb ea 0e ; 0xf9145 ahci.c:785 mov cx, ds ; 8c d9 ; 0xf9148 mov ax, strict word 00004h ; b8 04 00 ; 0xf914a call 018cbh ; e8 7b 87 ; 0xf914d @@ -15339,7 +15339,7 @@ mov word [bp-00ah], ax ; 89 46 f6 ; 0xf9ecb cmp byte [bp+00ah], 002h ; 80 7e 0a 02 ; 0xf9ece virtio.c:696 jne short 09ef3h ; 75 1f ; 0xf9ed2 - mov bx, 00eeeh ; bb ee 0e ; 0xf9ed4 virtio.c:697 + mov bx, 00eeah ; bb ea 0e ; 0xf9ed4 virtio.c:697 mov cx, ds ; 8c d9 ; 0xf9ed7 mov ax, strict word 00004h ; b8 04 00 ; 0xf9ed9 call 018cbh ; e8 ec 79 ; 0xf9edc @@ -15515,7 +15515,7 @@ jne short 0a0b8h ; 75 06 ; 0xfa0b0 cmp cx, 00200h ; 81 f9 00 02 ; 0xfa0b2 je short 0a0d8h ; 74 20 ; 0xfa0b6 - mov bx, 00eeeh ; bb ee 0e ; 0xfa0b8 virtio.c:805 + mov bx, 00eeah ; bb ea 0e ; 0xfa0b8 virtio.c:805 mov cx, ds ; 8c d9 ; 0xfa0bb mov ax, strict word 00004h ; b8 04 00 ; 0xfa0bd call 018cbh ; e8 08 78 ; 0xfa0c0 @@ -15698,7 +15698,7 @@ jmp short 0a2b1h ; eb 08 ; 0xfa2a7 virtio.c:882 mov word [es:bx+02ch], si ; 26 89 77 2c ; 0xfa2a9 virtio.c:883 mov word [es:bx+032h], si ; 26 89 77 32 ; 0xfa2ad virtio.c:884 - mov bx, 00eeeh ; bb ee 0e ; 0xfa2b1 virtio.c:888 + mov bx, 00eeah ; bb ea 0e ; 0xfa2b1 virtio.c:888 mov cx, ds ; 8c d9 ; 0xfa2b4 mov ax, strict word 00004h ; b8 04 00 ; 0xfa2b6 call 018cbh ; e8 0f 76 ; 0xfa2b9 @@ -15751,7 +15751,7 @@ mov byte [es:bx], al ; 26 88 07 ; 0xfa339 virtio.c:43 inc byte [bp-00ah] ; fe 46 f6 ; 0xfa33c virtio.c:903 jmp near 0a3cfh ; e9 8d 00 ; 0xfa33f virtio.c:905 - mov bx, 00eeeh ; bb ee 0e ; 0xfa342 virtio.c:917 + mov bx, 00eeah ; bb ea 0e ; 0xfa342 virtio.c:917 mov cx, ds ; 8c d9 ; 0xfa345 mov ax, strict word 00004h ; b8 04 00 ; 0xfa347 call 018cbh ; e8 7e 75 ; 0xfa34a @@ -16378,7 +16378,7 @@ jmp short 0a9e0h ; eb 30 ; 0xfa9ae apm.c:217 or dh, 080h ; 80 ce 80 ; 0xfa9b0 apm.c:224 jmp short 0a9a1h ; eb ec ; 0xfa9b3 - mov bx, 00eeeh ; bb ee 0e ; 0xfa9b5 apm.c:228 + mov bx, 00eeah ; bb ea 0e ; 0xfa9b5 apm.c:228 mov cx, ds ; 8c d9 ; 0xfa9b8 mov ax, strict word 00004h ; b8 04 00 ; 0xfa9ba call 018cbh ; e8 0b 6f ; 0xfa9bd @@ -16685,7 +16685,7 @@ les bx, [bp-008h] ; c4 5e f8 ; 0xfacad mov word [es:bx], ax ; 26 89 07 ; 0xfacb0 jmp short 0ace2h ; eb 2d ; 0xfacb3 pcibios.c:407 - mov bx, 00eeeh ; bb ee 0e ; 0xfacb5 pcibios.c:409 + mov bx, 00eeah ; bb ea 0e ; 0xfacb5 pcibios.c:409 mov cx, ds ; 8c d9 ; 0xfacb8 mov ax, strict word 00004h ; b8 04 00 ; 0xfacba call 018cbh ; e8 0b 6c ; 0xfacbd @@ -19425,4 +19425,4 @@ cpu_reset: ; 0xffff0 LB 0x10 jmp far 0f000h:0e05bh ; ea 5b e0 00 f0 ; 0xffff0 orgs.asm:2063 ; disGetNextSymbol 0xffff5 LB 0xb -> off=0xb cb=0000000000000000 uValue=0000000000100000 '_dummy_addr_0x100000' - db 030h, 036h, 02fh, 032h, 033h, 02fh, 039h, 039h, 000h, 0fch, 040h + db 030h, 036h, 02fh, 032h, 033h, 02fh, 039h, 039h, 000h, 0fch, 0a1h diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative286.md5sum virtualbox-6.1.34-dfsg/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative286.md5sum --- virtualbox-6.1.32-dfsg/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative286.md5sum 2022-01-13 18:55:59.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative286.md5sum 2022-03-22 23:43:08.000000000 +0000 @@ -1 +1 @@ -bb25bab1fd51c650c98a59cb270f019a *VBoxPcBios286.rom +3715974b2fe1d3212dd34c357a44b8f3 *VBoxPcBios286.rom diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative386.asm virtualbox-6.1.34-dfsg/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative386.asm --- virtualbox-6.1.32-dfsg/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative386.asm 2022-01-13 18:55:59.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative386.asm 2022-03-22 23:43:08.000000000 +0000 @@ -1170,26 +1170,26 @@ db 'APM: Unsupported function AX=%04X BX=%04X called', 00ah, 000h, 000h db 'PCI: Unsupported function AX=%04X BX=%04X called', 00ah, 000h -section CONST2 progbits vstart=0xf12 align=1 ; size=0x3fe class=DATA group=DGROUP - ; disGetNextSymbol 0xf0f12 LB 0x3fe -> off=0x0 cb=0000000000000016 uValue=00000000000f0f12 'bios_cvs_version_string' -bios_cvs_version_string: ; 0xf0f12 LB 0x16 - db 'VirtualBox 6.1.31_SPB', 000h - ; disGetNextSymbol 0xf0f28 LB 0x3e8 -> off=0x0 cb=0000000000000008 uValue=00000000000f0f28 '_bios_prefix_string' -_bios_prefix_string: ; 0xf0f28 LB 0x8 +section CONST2 progbits vstart=0xf12 align=1 ; size=0x3fa class=DATA group=DGROUP + ; disGetNextSymbol 0xf0f12 LB 0x3fa -> off=0x0 cb=0000000000000012 uValue=00000000000f0f12 'bios_cvs_version_string' +bios_cvs_version_string: ; 0xf0f12 LB 0x12 + db 'VirtualBox 6.1.34', 000h + ; disGetNextSymbol 0xf0f24 LB 0x3e8 -> off=0x0 cb=0000000000000008 uValue=00000000000f0f24 '_bios_prefix_string' +_bios_prefix_string: ; 0xf0f24 LB 0x8 db 'BIOS: ', 000h, 000h - ; disGetNextSymbol 0xf0f30 LB 0x3e0 -> off=0x0 cb=0000000000000006 uValue=00000000000f0f30 'isotag' -isotag: ; 0xf0f30 LB 0x6 + ; disGetNextSymbol 0xf0f2c LB 0x3e0 -> off=0x0 cb=0000000000000006 uValue=00000000000f0f2c 'isotag' +isotag: ; 0xf0f2c LB 0x6 db 'CD001', 000h - ; disGetNextSymbol 0xf0f36 LB 0x3da -> off=0x0 cb=0000000000000018 uValue=00000000000f0f36 'eltorito' -eltorito: ; 0xf0f36 LB 0x18 + ; disGetNextSymbol 0xf0f32 LB 0x3da -> off=0x0 cb=0000000000000018 uValue=00000000000f0f32 'eltorito' +eltorito: ; 0xf0f32 LB 0x18 db 'EL TORITO SPECIFICATION', 000h - ; disGetNextSymbol 0xf0f4e LB 0x3c2 -> off=0x0 cb=0000000000000028 uValue=00000000000f0f4e 'drivetypes' -drivetypes: ; 0xf0f4e LB 0x28 + ; disGetNextSymbol 0xf0f4a LB 0x3c2 -> off=0x0 cb=0000000000000028 uValue=00000000000f0f4a 'drivetypes' +drivetypes: ; 0xf0f4a LB 0x28 db 046h, 06ch, 06fh, 070h, 070h, 079h, 000h, 000h, 000h, 000h, 048h, 061h, 072h, 064h, 020h, 044h db 069h, 073h, 06bh, 000h, 043h, 044h, 02dh, 052h, 04fh, 04dh, 000h, 000h, 000h, 000h, 04ch, 041h db 04eh, 000h, 000h, 000h, 000h, 000h, 000h, 000h - ; disGetNextSymbol 0xf0f76 LB 0x39a -> off=0x0 cb=000000000000037a uValue=00000000000f0f76 'scan_to_scanascii' -scan_to_scanascii: ; 0xf0f76 LB 0x37a + ; disGetNextSymbol 0xf0f72 LB 0x39a -> off=0x0 cb=000000000000037a uValue=00000000000f0f72 'scan_to_scanascii' +scan_to_scanascii: ; 0xf0f72 LB 0x37a db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 01bh, 001h, 01bh, 001h, 01bh, 001h db 000h, 001h, 000h, 000h, 031h, 002h, 021h, 002h, 000h, 000h, 000h, 078h, 000h, 000h, 032h, 003h db 040h, 003h, 000h, 003h, 000h, 079h, 000h, 000h, 033h, 004h, 023h, 004h, 000h, 000h, 000h, 07ah @@ -1246,12 +1246,12 @@ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 05ch, 056h, 07ch, 056h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 085h, 000h, 087h, 000h, 089h, 000h, 08bh, 000h, 000h db 000h, 086h, 000h, 088h, 000h, 08ah, 000h, 08ch, 000h, 000h - ; disGetNextSymbol 0xf12f0 LB 0x20 -> off=0x0 cb=0000000000000020 uValue=00000000000f12f0 'panic_msg_keyb_buffer_full' -panic_msg_keyb_buffer_full: ; 0xf12f0 LB 0x20 + ; disGetNextSymbol 0xf12ec LB 0x20 -> off=0x0 cb=0000000000000020 uValue=00000000000f12ec 'panic_msg_keyb_buffer_full' +panic_msg_keyb_buffer_full: ; 0xf12ec LB 0x20 db '%s: keyboard input buffer full', 00ah, 000h - ; Padding 0x2f0 bytes at 0xf1310 - times 752 db 0 + ; Padding 0x2f4 bytes at 0xf130c + times 756 db 0 section _TEXT progbits vstart=0x1600 align=1 ; size=0x9d4c class=CODE group=AUTO ; disGetNextSymbol 0xf1600 LB 0x9d4c -> off=0x0 cb=000000000000005f uValue=00000000000f0000 'rom_scan' @@ -1554,7 +1554,7 @@ log_bios_start: ; 0xf182f LB 0x20 push bp ; 55 ; 0xf182f bios.c:126 mov bp, sp ; 89 e5 ; 0xf1830 - mov bx, 00f28h ; bb 28 0f ; 0xf1832 bios.c:131 + mov bx, 00f24h ; bb 24 0f ; 0xf1832 bios.c:131 mov cx, ds ; 8c d9 ; 0xf1835 mov ax, strict word 00004h ; b8 04 00 ; 0xf1837 call 019e2h ; e8 a5 01 ; 0xf183a @@ -2686,7 +2686,7 @@ call 0b018h ; e8 7c 8d ; 0xf2299 cmp ax, strict word 0ffffh ; 3d ff ff ; 0xf229c ata.c:445 jne short 022bah ; 75 19 ; 0xf229f - mov bx, 00f28h ; bb 28 0f ; 0xf22a1 ata.c:446 + mov bx, 00f24h ; bb 24 0f ; 0xf22a1 ata.c:446 mov cx, ds ; 8c d9 ; 0xf22a4 mov ax, strict word 00004h ; b8 04 00 ; 0xf22a6 call 019e2h ; e8 36 f7 ; 0xf22a9 @@ -2878,7 +2878,7 @@ mov dx, ss ; 8c d2 ; 0xf24c7 lea ax, [bp-038h] ; 8d 46 c8 ; 0xf24c9 call 059e2h ; e8 13 35 ; 0xf24cc - mov bx, 00f28h ; bb 28 0f ; 0xf24cf ata.c:618 + mov bx, 00f24h ; bb 24 0f ; 0xf24cf ata.c:618 mov cx, ds ; 8c d9 ; 0xf24d2 mov ax, strict word 00004h ; b8 04 00 ; 0xf24d4 call 019e2h ; e8 08 f5 ; 0xf24d7 @@ -3644,7 +3644,7 @@ mov byte [bp-00ah], dh ; 88 76 f6 ; 0xf2ca2 cmp byte [bp+00ah], 002h ; 80 7e 0a 02 ; 0xf2ca5 ata.c:1032 jne short 02ccah ; 75 1f ; 0xf2ca9 - mov bx, 00f28h ; bb 28 0f ; 0xf2cab ata.c:1033 + mov bx, 00f24h ; bb 24 0f ; 0xf2cab ata.c:1033 mov cx, ds ; 8c d9 ; 0xf2cae mov ax, strict word 00004h ; b8 04 00 ; 0xf2cb0 call 019e2h ; e8 2c ed ; 0xf2cb3 @@ -4504,7 +4504,7 @@ je short 0341dh ; 74 05 ; 0xf3416 cmp bh, 048h ; 80 ff 48 ; 0xf3418 jbe short 03450h ; 76 33 ; 0xf341b - mov bx, 00f28h ; bb 28 0f ; 0xf341d floppy.c:532 + mov bx, 00f24h ; bb 24 0f ; 0xf341d floppy.c:532 mov cx, ds ; 8c d9 ; 0xf3420 mov ax, strict word 00004h ; b8 04 00 ; 0xf3422 call 019e2h ; e8 ba e5 ; 0xf3425 @@ -5346,7 +5346,7 @@ mov es, ax ; 8e c0 ; 0xf3c68 mov byte [es:bx], 000h ; 26 c6 07 00 ; 0xf3c6a jmp near 0361fh ; e9 ae f9 ; 0xf3c6e - mov bx, 00f28h ; bb 28 0f ; 0xf3c71 floppy.c:1322 + mov bx, 00f24h ; bb 24 0f ; 0xf3c71 floppy.c:1322 mov cx, ds ; 8c d9 ; 0xf3c74 mov ax, strict word 00004h ; b8 04 00 ; 0xf3c76 call 019e2h ; e8 66 dd ; 0xf3c79 @@ -5448,7 +5448,7 @@ jmp near 03e4dh ; e9 18 01 ; 0xf3d32 cmp si, strict byte 0004ah ; 83 fe 4a ; 0xf3d35 jne near 03e4dh ; 0f 85 11 01 ; 0xf3d38 - mov bx, 00f28h ; bb 28 0f ; 0xf3d3c eltorito.c:205 + mov bx, 00f24h ; bb 24 0f ; 0xf3d3c eltorito.c:205 mov cx, ds ; 8c d9 ; 0xf3d3f mov ax, strict word 00004h ; b8 04 00 ; 0xf3d41 call 019e2h ; e8 9b dc ; 0xf3d44 @@ -5547,7 +5547,7 @@ pop si ; 5e ; 0xf3e4a pop bp ; 5d ; 0xf3e4b retn ; c3 ; 0xf3e4c - mov bx, 00f28h ; bb 28 0f ; 0xf3e4d eltorito.c:235 + mov bx, 00f24h ; bb 24 0f ; 0xf3e4d eltorito.c:235 mov cx, ds ; 8c d9 ; 0xf3e50 mov ax, strict word 00004h ; b8 04 00 ; 0xf3e52 call 019e2h ; e8 8a db ; 0xf3e55 @@ -5684,7 +5684,7 @@ cmp di, strict byte 00005h ; 83 ff 05 ; 0xf3f9e jnc short 03fb3h ; 73 10 ; 0xf3fa1 mov al, byte [bp+di-00825h] ; 8a 83 db f7 ; 0xf3fa3 - cmp al, byte [di+00f30h] ; 3a 85 30 0f ; 0xf3fa7 + cmp al, byte [di+00f2ch] ; 3a 85 2c 0f ; 0xf3fa7 je short 03f9dh ; 74 f0 ; 0xf3fab mov ax, strict word 00005h ; b8 05 00 ; 0xf3fad jmp near 0425ah ; e9 a7 02 ; 0xf3fb0 @@ -5694,7 +5694,7 @@ cmp di, strict byte 00017h ; 83 ff 17 ; 0xf3fb8 jnc short 03fcdh ; 73 10 ; 0xf3fbb mov al, byte [bp+di-0081fh] ; 8a 83 e1 f7 ; 0xf3fbd - cmp al, byte [di+00f36h] ; 3a 85 36 0f ; 0xf3fc1 + cmp al, byte [di+00f32h] ; 3a 85 32 0f ; 0xf3fc1 je short 03fb7h ; 74 f0 ; 0xf3fc5 mov ax, strict word 00006h ; b8 06 00 ; 0xf3fc7 jmp near 0425ah ; e9 8d 02 ; 0xf3fca @@ -5971,7 +5971,7 @@ xor ah, ah ; 30 e4 ; 0xf4312 cmp dx, ax ; 39 c2 ; 0xf4314 je short 04341h ; 74 29 ; 0xf4316 - mov bx, 00f28h ; bb 28 0f ; 0xf4318 eltorito.c:511 + mov bx, 00f24h ; bb 24 0f ; 0xf4318 eltorito.c:511 mov cx, ds ; 8c d9 ; 0xf431b mov ax, strict word 00004h ; b8 04 00 ; 0xf431d call 019e2h ; e8 bf d6 ; 0xf4320 @@ -6199,7 +6199,7 @@ ; mov dword [es:si+01eh], strict dword 000000000h ; 66 26 c7 44 1e 00 00 00 00; 0xf458a test al, al ; 84 c0 ; 0xf4593 eltorito.c:616 je near 0438ch ; 0f 84 f3 fd ; 0xf4595 - mov bx, 00f28h ; bb 28 0f ; 0xf4599 eltorito.c:619 + mov bx, 00f24h ; bb 24 0f ; 0xf4599 eltorito.c:619 mov cx, ds ; 8c d9 ; 0xf459c mov ax, strict word 00004h ; b8 04 00 ; 0xf459e call 019e2h ; e8 3e d4 ; 0xf45a1 @@ -6421,7 +6421,7 @@ mov word [es:si+002h], bx ; 26 89 5c 02 ; 0xf4808 test al, al ; 84 c0 ; 0xf480c eltorito.c:723 je near 0438ch ; 0f 84 7a fb ; 0xf480e - mov bx, 00f28h ; bb 28 0f ; 0xf4812 eltorito.c:724 + mov bx, 00f24h ; bb 24 0f ; 0xf4812 eltorito.c:724 mov cx, ds ; 8c d9 ; 0xf4815 mov ax, strict word 00004h ; b8 04 00 ; 0xf4817 call 019e2h ; e8 c5 d1 ; 0xf481a @@ -6458,7 +6458,7 @@ mov byte [es:bx], al ; 26 88 07 ; 0xf486e or byte [bp+01ch], 001h ; 80 4e 1c 01 ; 0xf4871 jmp near 043a0h ; e9 28 fb ; 0xf4875 - mov bx, 00f28h ; bb 28 0f ; 0xf4878 eltorito.c:750 + mov bx, 00f24h ; bb 24 0f ; 0xf4878 eltorito.c:750 mov cx, ds ; 8c d9 ; 0xf487b mov ax, strict word 00004h ; b8 04 00 ; 0xf487d call 019e2h ; e8 5f d1 ; 0xf4880 @@ -6653,7 +6653,7 @@ mov word [es:bx+002h], ax ; 26 89 47 02 ; 0xf4ad1 test dl, dl ; 84 d2 ; 0xf4ad5 eltorito.c:893 je near 04b95h ; 0f 84 ba 00 ; 0xf4ad7 - mov bx, 00f28h ; bb 28 0f ; 0xf4adb eltorito.c:894 + mov bx, 00f24h ; bb 24 0f ; 0xf4adb eltorito.c:894 mov cx, ds ; 8c d9 ; 0xf4ade mov ax, strict word 00004h ; b8 04 00 ; 0xf4ae0 call 019e2h ; e8 fc ce ; 0xf4ae3 @@ -6783,7 +6783,7 @@ cmp ax, strict word 00004h ; 3d 04 00 ; 0xf4c2a jbe near 04b95h ; 0f 86 64 ff ; 0xf4c2d jmp short 04bebh ; eb b8 ; 0xf4c31 eltorito.c:991 - mov bx, 00f28h ; bb 28 0f ; 0xf4c33 eltorito.c:1004 + mov bx, 00f24h ; bb 24 0f ; 0xf4c33 eltorito.c:1004 mov cx, ds ; 8c d9 ; 0xf4c36 mov ax, strict word 00004h ; b8 04 00 ; 0xf4c38 call 019e2h ; e8 a4 cd ; 0xf4c3b @@ -6814,12 +6814,12 @@ test bl, 080h ; f6 c3 80 ; 0xf4c6f je short 04c95h ; 74 21 ; 0xf4c72 mov dx, strict word 00001h ; ba 01 00 ; 0xf4c74 - mov bx, 00f28h ; bb 28 0f ; 0xf4c77 boot.c:123 + mov bx, 00f24h ; bb 24 0f ; 0xf4c77 boot.c:123 mov cx, ds ; 8c d9 ; 0xf4c7a mov ax, strict word 00004h ; b8 04 00 ; 0xf4c7c call 019e2h ; e8 60 cd ; 0xf4c7f imul dx, dx, strict byte 0000ah ; 6b d2 0a ; 0xf4c82 - add dx, 00f4eh ; 81 c2 4e 0f ; 0xf4c85 + add dx, 00f4ah ; 81 c2 4a 0f ; 0xf4c85 push dx ; 52 ; 0xf4c89 push 004deh ; 68 de 04 ; 0xf4c8a push strict byte 00004h ; 6a 04 ; 0xf4c8d @@ -6840,11 +6840,11 @@ movzx si, ah ; 0f b6 f4 ; 0xf4ca6 test al, al ; 84 c0 ; 0xf4ca9 boot.c:142 je short 04cc8h ; 74 1b ; 0xf4cab - mov bx, 00f28h ; bb 28 0f ; 0xf4cad boot.c:143 + mov bx, 00f24h ; bb 24 0f ; 0xf4cad boot.c:143 mov cx, ds ; 8c d9 ; 0xf4cb0 mov ax, strict word 00004h ; b8 04 00 ; 0xf4cb2 call 019e2h ; e8 2a cd ; 0xf4cb5 - push 00f62h ; 68 62 0f ; 0xf4cb8 + push 00f5eh ; 68 5e 0f ; 0xf4cb8 push 004f2h ; 68 f2 04 ; 0xf4cbb push strict byte 00004h ; 6a 04 ; 0xf4cbe call 01a23h ; e8 60 cd ; 0xf4cc0 @@ -6852,27 +6852,27 @@ jmp short 04d0ch ; eb 44 ; 0xf4cc6 boot.c:144 test dl, dl ; 84 d2 ; 0xf4cc8 je short 04cdch ; 74 10 ; 0xf4cca - mov bx, 00f28h ; bb 28 0f ; 0xf4ccc boot.c:145 + mov bx, 00f24h ; bb 24 0f ; 0xf4ccc boot.c:145 mov cx, ds ; 8c d9 ; 0xf4ccf mov ax, strict word 00004h ; b8 04 00 ; 0xf4cd1 call 019e2h ; e8 0b cd ; 0xf4cd4 - push 00f6ch ; 68 6c 0f ; 0xf4cd7 + push 00f68h ; 68 68 0f ; 0xf4cd7 jmp short 04cbbh ; eb df ; 0xf4cda test bl, 080h ; f6 c3 80 ; 0xf4cdc boot.c:146 je short 04cf2h ; 74 11 ; 0xf4cdf - mov bx, 00f28h ; bb 28 0f ; 0xf4ce1 boot.c:147 + mov bx, 00f24h ; bb 24 0f ; 0xf4ce1 boot.c:147 mov cx, ds ; 8c d9 ; 0xf4ce4 mov ax, strict word 00004h ; b8 04 00 ; 0xf4ce6 call 019e2h ; e8 f6 cc ; 0xf4ce9 push si ; 56 ; 0xf4cec - push 00f58h ; 68 58 0f ; 0xf4ced + push 00f54h ; 68 54 0f ; 0xf4ced jmp short 04d01h ; eb 0f ; 0xf4cf0 boot.c:148 - mov bx, 00f28h ; bb 28 0f ; 0xf4cf2 boot.c:149 + mov bx, 00f24h ; bb 24 0f ; 0xf4cf2 boot.c:149 mov cx, ds ; 8c d9 ; 0xf4cf5 mov ax, strict word 00004h ; b8 04 00 ; 0xf4cf7 call 019e2h ; e8 e5 cc ; 0xf4cfa push si ; 56 ; 0xf4cfd - push 00f4eh ; 68 4e 0f ; 0xf4cfe + push 00f4ah ; 68 4a 0f ; 0xf4cfe push 00507h ; 68 07 05 ; 0xf4d01 push strict byte 00004h ; 6a 04 ; 0xf4d04 call 01a23h ; e8 1a cd ; 0xf4d06 @@ -6899,7 +6899,7 @@ push cx ; 51 ; 0xf4d32 push dx ; 52 ; 0xf4d33 mov dx, ax ; 89 c2 ; 0xf4d34 - mov bx, 00f28h ; bb 28 0f ; 0xf4d36 boot.c:165 + mov bx, 00f24h ; bb 24 0f ; 0xf4d36 boot.c:165 mov cx, ds ; 8c d9 ; 0xf4d39 mov ax, strict word 00004h ; b8 04 00 ; 0xf4d3b call 019e2h ; e8 a1 cc ; 0xf4d3e @@ -6972,7 +6972,7 @@ mov byte [bp-008h], al ; 88 46 f8 ; 0xf4de1 mov byte [bp-00ah], al ; 88 46 f6 ; 0xf4de4 mov byte [bp-00ch], al ; 88 46 f4 ; 0xf4de7 boot.c:218 - mov bx, 00f28h ; bb 28 0f ; 0xf4dea boot.c:219 + mov bx, 00f24h ; bb 24 0f ; 0xf4dea boot.c:219 mov cx, ds ; 8c d9 ; 0xf4ded mov ax, strict word 00004h ; b8 04 00 ; 0xf4def call 019e2h ; e8 ed cb ; 0xf4df2 @@ -7509,7 +7509,7 @@ mov byte [bp-006h], al ; 88 46 fa ; 0xf52a9 test al, al ; 84 c0 ; 0xf52ac keyboard.c:384 jne short 052c9h ; 75 19 ; 0xf52ae - mov bx, 00f28h ; bb 28 0f ; 0xf52b0 keyboard.c:385 + mov bx, 00f24h ; bb 24 0f ; 0xf52b0 keyboard.c:385 mov cx, ds ; 8c d9 ; 0xf52b3 mov ax, strict word 00004h ; b8 04 00 ; 0xf52b5 call 019e2h ; e8 27 c7 ; 0xf52b8 @@ -7774,7 +7774,7 @@ jmp near 05355h ; e9 df fd ; 0xf5573 keyboard.c:564 cmp byte [bp-006h], 058h ; 80 7e fa 58 ; 0xf5576 keyboard.c:566 jbe short 0559ah ; 76 1e ; 0xf557a - mov bx, 00f28h ; bb 28 0f ; 0xf557c keyboard.c:567 + mov bx, 00f24h ; bb 24 0f ; 0xf557c keyboard.c:567 mov cx, ds ; 8c d9 ; 0xf557f mov ax, strict word 00004h ; b8 04 00 ; 0xf5581 call 019e2h ; e8 5b c4 ; 0xf5584 @@ -7789,15 +7789,15 @@ je short 055b1h ; 74 12 ; 0xf559d movzx bx, byte [bp-006h] ; 0f b6 5e fa ; 0xf559f keyboard.c:571 imul bx, bx, strict byte 0000ah ; 6b db 0a ; 0xf55a3 - mov dl, byte [bx+00f7ch] ; 8a 97 7c 0f ; 0xf55a6 - mov ax, word [bx+00f7ch] ; 8b 87 7c 0f ; 0xf55aa keyboard.c:572 + mov dl, byte [bx+00f78h] ; 8a 97 78 0f ; 0xf55a6 + mov ax, word [bx+00f78h] ; 8b 87 78 0f ; 0xf55aa keyboard.c:572 jmp near 0563dh ; e9 8c 00 ; 0xf55ae keyboard.c:573 test dh, 004h ; f6 c6 04 ; 0xf55b1 je short 055c8h ; 74 12 ; 0xf55b4 movzx bx, byte [bp-006h] ; 0f b6 5e fa ; 0xf55b6 keyboard.c:574 imul bx, bx, strict byte 0000ah ; 6b db 0a ; 0xf55ba - mov dl, byte [bx+00f7ah] ; 8a 97 7a 0f ; 0xf55bd - mov ax, word [bx+00f7ah] ; 8b 87 7a 0f ; 0xf55c1 keyboard.c:575 + mov dl, byte [bx+00f76h] ; 8a 97 76 0f ; 0xf55bd + mov ax, word [bx+00f76h] ; 8b 87 76 0f ; 0xf55c1 keyboard.c:575 jmp near 0563dh ; e9 75 00 ; 0xf55c5 keyboard.c:576 mov al, byte [bp-008h] ; 8a 46 f8 ; 0xf55c8 and AL, strict byte 002h ; 24 02 ; 0xf55cb @@ -7816,36 +7816,36 @@ je short 05618h ; 74 2d ; 0xf55e9 movzx bx, byte [bp-006h] ; 0f b6 5e fa ; 0xf55eb keyboard.c:584 imul bx, bx, strict byte 0000ah ; 6b db 0a ; 0xf55ef - movzx ax, byte [bx+00f7eh] ; 0f b6 87 7e 0f ; 0xf55f2 + movzx ax, byte [bx+00f7ah] ; 0f b6 87 7a 0f ; 0xf55f2 movzx dx, dh ; 0f b6 d6 ; 0xf55f7 test dx, ax ; 85 c2 ; 0xf55fa je short 05608h ; 74 0a ; 0xf55fc - mov dl, byte [bx+00f76h] ; 8a 97 76 0f ; 0xf55fe keyboard.c:585 - mov ax, word [bx+00f76h] ; 8b 87 76 0f ; 0xf5602 keyboard.c:586 + mov dl, byte [bx+00f72h] ; 8a 97 72 0f ; 0xf55fe keyboard.c:585 + mov ax, word [bx+00f72h] ; 8b 87 72 0f ; 0xf5602 keyboard.c:586 jmp short 05610h ; eb 08 ; 0xf5606 keyboard.c:587 - mov dl, byte [bx+00f78h] ; 8a 97 78 0f ; 0xf5608 keyboard.c:588 - mov ax, word [bx+00f78h] ; 8b 87 78 0f ; 0xf560c keyboard.c:589 + mov dl, byte [bx+00f74h] ; 8a 97 74 0f ; 0xf5608 keyboard.c:588 + mov ax, word [bx+00f74h] ; 8b 87 74 0f ; 0xf560c keyboard.c:589 shr ax, 008h ; c1 e8 08 ; 0xf5610 mov byte [bp-006h], al ; 88 46 fa ; 0xf5613 jmp short 05643h ; eb 2b ; 0xf5616 keyboard.c:591 movzx bx, byte [bp-006h] ; 0f b6 5e fa ; 0xf5618 keyboard.c:593 imul bx, bx, strict byte 0000ah ; 6b db 0a ; 0xf561c - movzx si, byte [bx+00f7eh] ; 0f b6 b7 7e 0f ; 0xf561f + movzx si, byte [bx+00f7ah] ; 0f b6 b7 7a 0f ; 0xf561f movzx ax, dh ; 0f b6 c6 ; 0xf5624 test ax, si ; 85 f0 ; 0xf5627 je short 05635h ; 74 0a ; 0xf5629 - mov dl, byte [bx+00f78h] ; 8a 97 78 0f ; 0xf562b keyboard.c:594 - mov ax, word [bx+00f78h] ; 8b 87 78 0f ; 0xf562f keyboard.c:595 + mov dl, byte [bx+00f74h] ; 8a 97 74 0f ; 0xf562b keyboard.c:594 + mov ax, word [bx+00f74h] ; 8b 87 74 0f ; 0xf562f keyboard.c:595 jmp short 0563dh ; eb 08 ; 0xf5633 keyboard.c:596 - mov dl, byte [bx+00f76h] ; 8a 97 76 0f ; 0xf5635 keyboard.c:597 - mov ax, word [bx+00f76h] ; 8b 87 76 0f ; 0xf5639 keyboard.c:598 + mov dl, byte [bx+00f72h] ; 8a 97 72 0f ; 0xf5635 keyboard.c:597 + mov ax, word [bx+00f72h] ; 8b 87 72 0f ; 0xf5639 keyboard.c:598 shr ax, 008h ; c1 e8 08 ; 0xf563d mov byte [bp-006h], al ; 88 46 fa ; 0xf5640 cmp byte [bp-006h], 000h ; 80 7e fa 00 ; 0xf5643 keyboard.c:601 jne short 05663h ; 75 1a ; 0xf5647 test dl, dl ; 84 d2 ; 0xf5649 jne short 05663h ; 75 16 ; 0xf564b - mov bx, 00f28h ; bb 28 0f ; 0xf564d keyboard.c:602 + mov bx, 00f24h ; bb 24 0f ; 0xf564d keyboard.c:602 mov cx, ds ; 8c d9 ; 0xf5650 mov ax, strict word 00004h ; b8 04 00 ; 0xf5652 call 019e2h ; e8 8a c3 ; 0xf5655 @@ -8182,7 +8182,7 @@ xor ah, ah ; 30 e4 ; 0xf5990 or ah, 080h ; 80 cc 80 ; 0xf5992 jmp near 05872h ; e9 da fe ; 0xf5995 - mov bx, 00f28h ; bb 28 0f ; 0xf5998 keyboard.c:818 + mov bx, 00f24h ; bb 24 0f ; 0xf5998 keyboard.c:818 mov cx, ds ; 8c d9 ; 0xf599b mov ax, strict word 00004h ; b8 04 00 ; 0xf599d call 019e2h ; e8 3f c0 ; 0xf59a0 @@ -8193,7 +8193,7 @@ push strict byte 00004h ; 6a 04 ; 0xf59ad call 01a23h ; e8 71 c0 ; 0xf59af add sp, strict byte 00006h ; 83 c4 06 ; 0xf59b2 - mov bx, 00f28h ; bb 28 0f ; 0xf59b5 keyboard.c:819 + mov bx, 00f24h ; bb 24 0f ; 0xf59b5 keyboard.c:819 mov cx, ds ; 8c d9 ; 0xf59b8 mov ax, strict word 00004h ; b8 04 00 ; 0xf59ba call 019e2h ; e8 22 c0 ; 0xf59bd @@ -8632,7 +8632,7 @@ jnbe short 05ed4h ; 77 06 ; 0xf5ecc cmp word [bp-00ch], strict byte 00000h ; 83 7e f4 00 ; 0xf5ece jne short 05ef7h ; 75 23 ; 0xf5ed2 - mov bx, 00f28h ; bb 28 0f ; 0xf5ed4 disk.c:338 + mov bx, 00f24h ; bb 24 0f ; 0xf5ed4 disk.c:338 mov cx, ds ; 8c d9 ; 0xf5ed7 mov ax, strict word 00004h ; b8 04 00 ; 0xf5ed9 call 019e2h ; e8 03 bb ; 0xf5edc @@ -8661,7 +8661,7 @@ mov dx, word [bp-006h] ; 8b 56 fa ; 0xf5f1f cmp dx, word [bp-00ah] ; 3b 56 f6 ; 0xf5f22 jbe short 05f55h ; 76 2e ; 0xf5f25 - mov bx, 00f28h ; bb 28 0f ; 0xf5f27 disk.c:349 + mov bx, 00f24h ; bb 24 0f ; 0xf5f27 disk.c:349 mov cx, ds ; 8c d9 ; 0xf5f2a mov ax, strict word 00004h ; b8 04 00 ; 0xf5f2c call 019e2h ; e8 b0 ba ; 0xf5f2f @@ -8762,7 +8762,7 @@ mov word [bp+016h], bx ; 89 5e 16 ; 0xf6045 test dl, dl ; 84 d2 ; 0xf6048 disk.c:389 je near 05e59h ; 0f 84 0b fe ; 0xf604a - mov bx, 00f28h ; bb 28 0f ; 0xf604e disk.c:390 + mov bx, 00f24h ; bb 24 0f ; 0xf604e disk.c:390 mov cx, ds ; 8c d9 ; 0xf6051 mov ax, strict word 00004h ; b8 04 00 ; 0xf6053 call 019e2h ; e8 89 b9 ; 0xf6056 @@ -8780,7 +8780,7 @@ xor ah, ah ; 30 e4 ; 0xf6075 or ah, 00ch ; 80 cc 0c ; 0xf6077 jmp near 061c8h ; e9 4b 01 ; 0xf607a disk.c:392 - mov bx, 00f28h ; bb 28 0f ; 0xf607d disk.c:399 + mov bx, 00f24h ; bb 24 0f ; 0xf607d disk.c:399 mov cx, ds ; 8c d9 ; 0xf6080 mov ax, strict word 00004h ; b8 04 00 ; 0xf6082 call 019e2h ; e8 5a b9 ; 0xf6085 @@ -8875,7 +8875,7 @@ or ah, 003h ; 80 cc 03 ; 0xf6179 mov word [bp+016h], ax ; 89 46 16 ; 0xf617c jmp near 05e5dh ; e9 db fc ; 0xf617f disk.c:459 - mov bx, 00f28h ; bb 28 0f ; 0xf6182 disk.c:467 + mov bx, 00f24h ; bb 24 0f ; 0xf6182 disk.c:467 mov cx, ds ; 8c d9 ; 0xf6185 mov ax, strict word 00004h ; b8 04 00 ; 0xf6187 call 019e2h ; e8 55 b8 ; 0xf618a @@ -8888,7 +8888,7 @@ call 01a23h ; e8 84 b8 ; 0xf619c add sp, strict byte 00008h ; 83 c4 08 ; 0xf619f jmp near 05e59h ; e9 b4 fc ; 0xf61a2 disk.c:468 - mov bx, 00f28h ; bb 28 0f ; 0xf61a5 disk.c:475 + mov bx, 00f24h ; bb 24 0f ; 0xf61a5 disk.c:475 mov cx, ds ; 8c d9 ; 0xf61a8 mov ax, strict word 00004h ; b8 04 00 ; 0xf61aa call 019e2h ; e8 32 b8 ; 0xf61ad @@ -9022,7 +9022,7 @@ jne short 0635bh ; 75 29 ; 0xf6330 cmp dx, word [es:bx+036h] ; 26 3b 57 36 ; 0xf6332 jc short 0635bh ; 72 23 ; 0xf6336 - mov bx, 00f28h ; bb 28 0f ; 0xf6338 disk.c:564 + mov bx, 00f24h ; bb 24 0f ; 0xf6338 disk.c:564 mov cx, ds ; 8c d9 ; 0xf633b mov ax, strict word 00004h ; b8 04 00 ; 0xf633d call 019e2h ; e8 9f b6 ; 0xf6340 @@ -9077,7 +9077,7 @@ mov word [es:bx+002h], ax ; 26 89 47 02 ; 0xf63e1 test dl, dl ; 84 d2 ; 0xf63e5 disk.c:589 je near 06489h ; 0f 84 9e 00 ; 0xf63e7 - mov bx, 00f28h ; bb 28 0f ; 0xf63eb disk.c:590 + mov bx, 00f24h ; bb 24 0f ; 0xf63eb disk.c:590 mov cx, ds ; 8c d9 ; 0xf63ee mov ax, strict word 00004h ; b8 04 00 ; 0xf63f0 call 019e2h ; e8 ec b5 ; 0xf63f3 @@ -9127,7 +9127,7 @@ cmp cx, strict byte 00004h ; 83 f9 04 ; 0xf6467 jbe short 06489h ; 76 1d ; 0xf646a jmp short 06434h ; eb c6 ; 0xf646c disk.c:625 - mov bx, 00f28h ; bb 28 0f ; 0xf646e disk.c:631 + mov bx, 00f24h ; bb 24 0f ; 0xf646e disk.c:631 mov cx, ds ; 8c d9 ; 0xf6471 mov ax, strict word 00004h ; b8 04 00 ; 0xf6473 call 019e2h ; e8 69 b5 ; 0xf6476 @@ -9447,7 +9447,7 @@ mov byte [bp+013h], ah ; 88 66 13 ; 0xf673e system.c:383 mov word [bp+00ch], ax ; 89 46 0c ; 0xf6741 system.c:384 jmp near 067fch ; e9 b5 00 ; 0xf6744 system.c:385 - mov bx, 00f28h ; bb 28 0f ; 0xf6747 system.c:387 + mov bx, 00f24h ; bb 24 0f ; 0xf6747 system.c:387 mov cx, ds ; 8c d9 ; 0xf674a mov ax, strict word 00004h ; b8 04 00 ; 0xf674c call 019e2h ; e8 90 b2 ; 0xf674f @@ -9622,7 +9622,7 @@ push cx ; 51 ; 0xf68fb retf ; cb ; 0xf68fc jmp near 067fch ; e9 fc fe ; 0xf68fd system.c:525 - mov bx, 00f28h ; bb 28 0f ; 0xf6900 system.c:532 + mov bx, 00f24h ; bb 24 0f ; 0xf6900 system.c:532 mov cx, ds ; 8c d9 ; 0xf6903 mov ax, strict word 00004h ; b8 04 00 ; 0xf6905 call 019e2h ; e8 d7 b0 ; 0xf6908 @@ -9662,7 +9662,7 @@ jbe short 06949h ; 76 db ; 0xf696c or byte [bp+018h], 001h ; 80 4e 18 01 ; 0xf696e system.c:568 jmp near 067fch ; e9 87 fe ; 0xf6972 system.c:569 - mov bx, 00f28h ; bb 28 0f ; 0xf6975 system.c:573 + mov bx, 00f24h ; bb 24 0f ; 0xf6975 system.c:573 mov cx, ds ; 8c d9 ; 0xf6978 mov ax, strict word 00004h ; b8 04 00 ; 0xf697a call 019e2h ; e8 62 b0 ; 0xf697d @@ -9990,7 +9990,7 @@ mov word [bp+020h], ax ; 89 46 20 ; 0xf6d47 mov word [bp+014h], dx ; 89 56 14 ; 0xf6d4a system.c:794 jmp short 06d79h ; eb 2a ; 0xf6d4d system.c:799 - mov bx, 00f28h ; bb 28 0f ; 0xf6d4f system.c:804 + mov bx, 00f24h ; bb 24 0f ; 0xf6d4f system.c:804 mov cx, ds ; 8c d9 ; 0xf6d52 mov ax, strict word 00004h ; b8 04 00 ; 0xf6d54 call 019e2h ; e8 88 ac ; 0xf6d57 @@ -10562,7 +10562,7 @@ test AL, strict byte 002h ; a8 02 ; 0xf7329 je short 0733bh ; 74 0e ; 0xf732b push 00938h ; 68 38 09 ; 0xf732d ps2mouse.c:82 - push 012f0h ; 68 f0 12 ; 0xf7330 + push 012ech ; 68 ec 12 ; 0xf7330 push strict byte 00007h ; 6a 07 ; 0xf7333 call 01a23h ; e8 eb a6 ; 0xf7335 add sp, strict byte 00006h ; 83 c4 06 ; 0xf7338 @@ -10644,7 +10644,7 @@ test AL, strict byte 002h ; a8 02 ; 0xf73b9 je short 073cbh ; 74 0e ; 0xf73bb push 00942h ; 68 42 09 ; 0xf73bd ps2mouse.c:114 - push 012f0h ; 68 f0 12 ; 0xf73c0 + push 012ech ; 68 ec 12 ; 0xf73c0 push strict byte 00007h ; 6a 07 ; 0xf73c3 call 01a23h ; e8 5b a6 ; 0xf73c5 add sp, strict byte 00006h ; 83 c4 06 ; 0xf73c8 @@ -12091,7 +12091,7 @@ mov word [bp-00ah], dx ; 89 56 f6 ; 0xf8117 cmp byte [bp+00ah], 002h ; 80 7e 0a 02 ; 0xf811a scsi.c:292 jne short 0813fh ; 75 1f ; 0xf811e - mov bx, 00f28h ; bb 28 0f ; 0xf8120 scsi.c:293 + mov bx, 00f24h ; bb 24 0f ; 0xf8120 scsi.c:293 mov cx, ds ; 8c d9 ; 0xf8123 mov ax, strict word 00004h ; b8 04 00 ; 0xf8125 call 019e2h ; e8 b7 98 ; 0xf8128 @@ -12308,7 +12308,7 @@ jne short 0833dh ; 75 05 ; 0xf8336 cmp ax, 00200h ; 3d 00 02 ; 0xf8338 je short 0835dh ; 74 20 ; 0xf833b - mov bx, 00f28h ; bb 28 0f ; 0xf833d scsi.c:444 + mov bx, 00f24h ; bb 24 0f ; 0xf833d scsi.c:444 mov cx, ds ; 8c d9 ; 0xf8340 mov ax, strict word 00004h ; b8 04 00 ; 0xf8342 call 019e2h ; e8 9a 96 ; 0xf8345 @@ -12488,7 +12488,7 @@ jmp short 08539h ; eb 08 ; 0xf852f scsi.c:522 mov word [es:bx+02ch], si ; 26 89 77 2c ; 0xf8531 scsi.c:523 mov word [es:bx+032h], si ; 26 89 77 32 ; 0xf8535 scsi.c:524 - mov bx, 00f28h ; bb 28 0f ; 0xf8539 scsi.c:528 + mov bx, 00f24h ; bb 24 0f ; 0xf8539 scsi.c:528 mov cx, ds ; 8c d9 ; 0xf853c mov ax, strict word 00004h ; b8 04 00 ; 0xf853e call 019e2h ; e8 9e 94 ; 0xf8541 @@ -12537,7 +12537,7 @@ mov byte [es:bx], al ; 26 88 07 ; 0xf85bc scsi.c:43 inc byte [bp-00ch] ; fe 46 f4 ; 0xf85bf scsi.c:543 jmp near 08652h ; e9 8d 00 ; 0xf85c2 scsi.c:545 - mov bx, 00f28h ; bb 28 0f ; 0xf85c5 scsi.c:557 + mov bx, 00f24h ; bb 24 0f ; 0xf85c5 scsi.c:557 mov cx, ds ; 8c d9 ; 0xf85c8 mov ax, strict word 00004h ; b8 04 00 ; 0xf85ca call 019e2h ; e8 12 94 ; 0xf85cd @@ -13654,7 +13654,7 @@ mov word [bp-008h], ax ; 89 46 f8 ; 0xf908b cmp byte [bp+00ah], 002h ; 80 7e 0a 02 ; 0xf908e ahci.c:583 jne short 090b3h ; 75 1f ; 0xf9092 - mov bx, 00f28h ; bb 28 0f ; 0xf9094 ahci.c:584 + mov bx, 00f24h ; bb 24 0f ; 0xf9094 ahci.c:584 mov cx, ds ; 8c d9 ; 0xf9097 mov ax, strict word 00004h ; b8 04 00 ; 0xf9099 call 019e2h ; e8 43 89 ; 0xf909c @@ -14101,7 +14101,7 @@ mov dx, ss ; 8c d2 ; 0xf9567 lea ax, [bp-032h] ; 8d 46 ce ; 0xf9569 call 059e2h ; e8 73 c4 ; 0xf956c - mov bx, 00f28h ; bb 28 0f ; 0xf956f ahci.c:785 + mov bx, 00f24h ; bb 24 0f ; 0xf956f ahci.c:785 mov cx, ds ; 8c d9 ; 0xf9572 mov ax, strict word 00004h ; b8 04 00 ; 0xf9574 call 019e2h ; e8 68 84 ; 0xf9577 @@ -15385,7 +15385,7 @@ mov word [bp-00ah], ax ; 89 46 f6 ; 0xfa22c cmp byte [bp+00ah], 002h ; 80 7e 0a 02 ; 0xfa22f virtio.c:696 jne short 0a254h ; 75 1f ; 0xfa233 - mov bx, 00f28h ; bb 28 0f ; 0xfa235 virtio.c:697 + mov bx, 00f24h ; bb 24 0f ; 0xfa235 virtio.c:697 mov cx, ds ; 8c d9 ; 0xfa238 mov ax, strict word 00004h ; b8 04 00 ; 0xfa23a call 019e2h ; e8 a2 77 ; 0xfa23d @@ -15549,7 +15549,7 @@ jne short 0a404h ; 75 06 ; 0xfa3fc cmp bx, 00200h ; 81 fb 00 02 ; 0xfa3fe je short 0a424h ; 74 20 ; 0xfa402 - mov bx, 00f28h ; bb 28 0f ; 0xfa404 virtio.c:805 + mov bx, 00f24h ; bb 24 0f ; 0xfa404 virtio.c:805 mov cx, ds ; 8c d9 ; 0xfa407 mov ax, strict word 00004h ; b8 04 00 ; 0xfa409 call 019e2h ; e8 d3 75 ; 0xfa40c @@ -15728,7 +15728,7 @@ jmp short 0a5f9h ; eb 08 ; 0xfa5ef virtio.c:882 mov word [es:bx+02ch], si ; 26 89 77 2c ; 0xfa5f1 virtio.c:883 mov word [es:bx+032h], si ; 26 89 77 32 ; 0xfa5f5 virtio.c:884 - mov bx, 00f28h ; bb 28 0f ; 0xfa5f9 virtio.c:888 + mov bx, 00f24h ; bb 24 0f ; 0xfa5f9 virtio.c:888 mov cx, ds ; 8c d9 ; 0xfa5fc mov ax, strict word 00004h ; b8 04 00 ; 0xfa5fe call 019e2h ; e8 de 73 ; 0xfa601 @@ -15776,7 +15776,7 @@ mov byte [es:bx], al ; 26 88 07 ; 0xfa67a virtio.c:43 inc byte [bp-00ah] ; fe 46 f6 ; 0xfa67d virtio.c:903 jmp near 0a704h ; e9 81 00 ; 0xfa680 virtio.c:905 - mov bx, 00f28h ; bb 28 0f ; 0xfa683 virtio.c:917 + mov bx, 00f24h ; bb 24 0f ; 0xfa683 virtio.c:917 mov cx, ds ; 8c d9 ; 0xfa686 mov ax, strict word 00004h ; b8 04 00 ; 0xfa688 call 019e2h ; e8 54 73 ; 0xfa68b @@ -16359,7 +16359,7 @@ jmp short 0ace9h ; eb 30 ; 0xfacb7 apm.c:217 or ah, 080h ; 80 cc 80 ; 0xfacb9 apm.c:224 jmp short 0acaah ; eb ec ; 0xfacbc - mov bx, 00f28h ; bb 28 0f ; 0xfacbe apm.c:228 + mov bx, 00f24h ; bb 24 0f ; 0xfacbe apm.c:228 mov cx, ds ; 8c d9 ; 0xfacc1 mov ax, strict word 00004h ; b8 04 00 ; 0xfacc3 call 019e2h ; e8 19 6d ; 0xfacc6 @@ -16656,7 +16656,7 @@ les bx, [bp-008h] ; c4 5e f8 ; 0xfafb1 mov word [es:bx], ax ; 26 89 07 ; 0xfafb4 jmp short 0afe6h ; eb 2d ; 0xfafb7 pcibios.c:407 - mov bx, 00f28h ; bb 28 0f ; 0xfafb9 pcibios.c:409 + mov bx, 00f24h ; bb 24 0f ; 0xfafb9 pcibios.c:409 mov cx, ds ; 8c d9 ; 0xfafbc mov ax, strict word 00004h ; b8 04 00 ; 0xfafbe call 019e2h ; e8 1e 6a ; 0xfafc1 @@ -19200,4 +19200,4 @@ cpu_reset: ; 0xffff0 LB 0x10 jmp far 0f000h:0e05bh ; ea 5b e0 00 f0 ; 0xffff0 orgs.asm:2063 ; disGetNextSymbol 0xffff5 LB 0xb -> off=0xb cb=0000000000000000 uValue=0000000000100000 '_dummy_addr_0x100000' - db 030h, 036h, 02fh, 032h, 033h, 02fh, 039h, 039h, 000h, 0fch, 082h + db 030h, 036h, 02fh, 032h, 033h, 02fh, 039h, 039h, 000h, 0fch, 0ebh diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative386.md5sum virtualbox-6.1.34-dfsg/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative386.md5sum --- virtualbox-6.1.32-dfsg/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative386.md5sum 2022-01-13 18:55:59.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative386.md5sum 2022-03-22 15:48:48.000000000 +0000 @@ -1 +1 @@ -56ecba58311c3eab17da0a6a27583f7c *VBoxPcBios386.rom +8066c9277cd640b9a3b5cb394a5791a2 *VBoxPcBios386.rom diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative8086.asm virtualbox-6.1.34-dfsg/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative8086.asm --- virtualbox-6.1.32-dfsg/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative8086.asm 2022-01-13 18:55:59.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative8086.asm 2022-03-22 23:43:08.000000000 +0000 @@ -1205,26 +1205,26 @@ db 'APM: Unsupported function AX=%04X BX=%04X called', 00ah, 000h, 000h db 'PCI: Unsupported function AX=%04X BX=%04X called', 00ah, 000h -section CONST2 progbits vstart=0xed8 align=1 ; size=0x3fe class=DATA group=DGROUP - ; disGetNextSymbol 0xf0ed8 LB 0x3fe -> off=0x0 cb=0000000000000016 uValue=00000000000f0ed8 'bios_cvs_version_string' -bios_cvs_version_string: ; 0xf0ed8 LB 0x16 - db 'VirtualBox 6.1.31_SPB', 000h - ; disGetNextSymbol 0xf0eee LB 0x3e8 -> off=0x0 cb=0000000000000008 uValue=00000000000f0eee '_bios_prefix_string' -_bios_prefix_string: ; 0xf0eee LB 0x8 +section CONST2 progbits vstart=0xed8 align=1 ; size=0x3fa class=DATA group=DGROUP + ; disGetNextSymbol 0xf0ed8 LB 0x3fa -> off=0x0 cb=0000000000000012 uValue=00000000000f0ed8 'bios_cvs_version_string' +bios_cvs_version_string: ; 0xf0ed8 LB 0x12 + db 'VirtualBox 6.1.34', 000h + ; disGetNextSymbol 0xf0eea LB 0x3e8 -> off=0x0 cb=0000000000000008 uValue=00000000000f0eea '_bios_prefix_string' +_bios_prefix_string: ; 0xf0eea LB 0x8 db 'BIOS: ', 000h, 000h - ; disGetNextSymbol 0xf0ef6 LB 0x3e0 -> off=0x0 cb=0000000000000006 uValue=00000000000f0ef6 'isotag' -isotag: ; 0xf0ef6 LB 0x6 + ; disGetNextSymbol 0xf0ef2 LB 0x3e0 -> off=0x0 cb=0000000000000006 uValue=00000000000f0ef2 'isotag' +isotag: ; 0xf0ef2 LB 0x6 db 'CD001', 000h - ; disGetNextSymbol 0xf0efc LB 0x3da -> off=0x0 cb=0000000000000018 uValue=00000000000f0efc 'eltorito' -eltorito: ; 0xf0efc LB 0x18 + ; disGetNextSymbol 0xf0ef8 LB 0x3da -> off=0x0 cb=0000000000000018 uValue=00000000000f0ef8 'eltorito' +eltorito: ; 0xf0ef8 LB 0x18 db 'EL TORITO SPECIFICATION', 000h - ; disGetNextSymbol 0xf0f14 LB 0x3c2 -> off=0x0 cb=0000000000000028 uValue=00000000000f0f14 'drivetypes' -drivetypes: ; 0xf0f14 LB 0x28 + ; disGetNextSymbol 0xf0f10 LB 0x3c2 -> off=0x0 cb=0000000000000028 uValue=00000000000f0f10 'drivetypes' +drivetypes: ; 0xf0f10 LB 0x28 db 046h, 06ch, 06fh, 070h, 070h, 079h, 000h, 000h, 000h, 000h, 048h, 061h, 072h, 064h, 020h, 044h db 069h, 073h, 06bh, 000h, 043h, 044h, 02dh, 052h, 04fh, 04dh, 000h, 000h, 000h, 000h, 04ch, 041h db 04eh, 000h, 000h, 000h, 000h, 000h, 000h, 000h - ; disGetNextSymbol 0xf0f3c LB 0x39a -> off=0x0 cb=000000000000037a uValue=00000000000f0f3c 'scan_to_scanascii' -scan_to_scanascii: ; 0xf0f3c LB 0x37a + ; disGetNextSymbol 0xf0f38 LB 0x39a -> off=0x0 cb=000000000000037a uValue=00000000000f0f38 'scan_to_scanascii' +scan_to_scanascii: ; 0xf0f38 LB 0x37a db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 01bh, 001h, 01bh, 001h, 01bh, 001h db 000h, 001h, 000h, 000h, 031h, 002h, 021h, 002h, 000h, 000h, 000h, 078h, 000h, 000h, 032h, 003h db 040h, 003h, 000h, 003h, 000h, 079h, 000h, 000h, 033h, 004h, 023h, 004h, 000h, 000h, 000h, 07ah @@ -1281,12 +1281,12 @@ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 05ch, 056h, 07ch, 056h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 085h, 000h, 087h, 000h, 089h, 000h, 08bh, 000h, 000h db 000h, 086h, 000h, 088h, 000h, 08ah, 000h, 08ch, 000h, 000h - ; disGetNextSymbol 0xf12b6 LB 0x20 -> off=0x0 cb=0000000000000020 uValue=00000000000f12b6 'panic_msg_keyb_buffer_full' -panic_msg_keyb_buffer_full: ; 0xf12b6 LB 0x20 + ; disGetNextSymbol 0xf12b2 LB 0x20 -> off=0x0 cb=0000000000000020 uValue=00000000000f12b2 'panic_msg_keyb_buffer_full' +panic_msg_keyb_buffer_full: ; 0xf12b2 LB 0x20 db '%s: keyboard input buffer full', 00ah, 000h - ; Padding 0x32a bytes at 0xf12d6 - times 810 db 0 + ; Padding 0x32e bytes at 0xf12d2 + times 814 db 0 section _TEXT progbits vstart=0x1600 align=1 ; size=0x9db8 class=CODE group=AUTO ; disGetNextSymbol 0xf1600 LB 0x9db8 -> off=0x0 cb=000000000000005f uValue=00000000000f0000 'rom_scan' @@ -1460,7 +1460,7 @@ log_bios_start: ; 0xf1722 LB 0x24 push bp ; 55 ; 0xf1722 bios.c:126 mov bp, sp ; 89 e5 ; 0xf1723 - mov bx, 00eeeh ; bb ee 0e ; 0xf1725 bios.c:131 + mov bx, 00eeah ; bb ea 0e ; 0xf1725 bios.c:131 mov cx, ds ; 8c d9 ; 0xf1728 mov ax, strict word 00004h ; b8 04 00 ; 0xf172a call 018d9h ; e8 a9 01 ; 0xf172d @@ -2799,7 +2799,7 @@ mov dx, ss ; 8c d2 ; 0xf23c1 lea ax, [bp-03ah] ; 8d 46 c6 ; 0xf23c3 call 05a0fh ; e8 46 36 ; 0xf23c6 - mov bx, 00eeeh ; bb ee 0e ; 0xf23c9 ata.c:618 + mov bx, 00eeah ; bb ea 0e ; 0xf23c9 ata.c:618 mov cx, ds ; 8c d9 ; 0xf23cc mov ax, strict word 00004h ; b8 04 00 ; 0xf23ce call 018d9h ; e8 05 f5 ; 0xf23d1 @@ -3601,7 +3601,7 @@ and cl, 001h ; 80 e1 01 ; 0xf2ba3 cmp byte [bp+00ah], 002h ; 80 7e 0a 02 ; 0xf2ba6 ata.c:1032 jne short 02bcfh ; 75 23 ; 0xf2baa - mov bx, 00eeeh ; bb ee 0e ; 0xf2bac ata.c:1033 + mov bx, 00eeah ; bb ea 0e ; 0xf2bac ata.c:1033 mov cx, ds ; 8c d9 ; 0xf2baf mov ax, strict word 00004h ; b8 04 00 ; 0xf2bb1 call 018d9h ; e8 22 ed ; 0xf2bb4 @@ -4450,7 +4450,7 @@ je short 032e5h ; 74 05 ; 0xf32de cmp bh, 048h ; 80 ff 48 ; 0xf32e0 jbe short 0331ch ; 76 37 ; 0xf32e3 - mov bx, 00eeeh ; bb ee 0e ; 0xf32e5 floppy.c:532 + mov bx, 00eeah ; bb ea 0e ; 0xf32e5 floppy.c:532 mov cx, ds ; 8c d9 ; 0xf32e8 mov ax, strict word 00004h ; b8 04 00 ; 0xf32ea call 018d9h ; e8 e9 e5 ; 0xf32ed @@ -5386,7 +5386,7 @@ mov es, ax ; 8e c0 ; 0xf3bad mov byte [es:bx], 000h ; 26 c6 07 00 ; 0xf3baf jmp near 03513h ; e9 5d f9 ; 0xf3bb3 - mov bx, 00eeeh ; bb ee 0e ; 0xf3bb6 floppy.c:1322 + mov bx, 00eeah ; bb ea 0e ; 0xf3bb6 floppy.c:1322 mov cx, ds ; 8c d9 ; 0xf3bb9 mov ax, strict word 00004h ; b8 04 00 ; 0xf3bbb call 018d9h ; e8 18 dd ; 0xf3bbe @@ -5493,7 +5493,7 @@ jmp near 03d9ch ; e9 1d 01 ; 0xf3c7c cmp ax, strict word 0004ah ; 3d 4a 00 ; 0xf3c7f jne short 03ca7h ; 75 23 ; 0xf3c82 - mov bx, 00eeeh ; bb ee 0e ; 0xf3c84 eltorito.c:205 + mov bx, 00eeah ; bb ea 0e ; 0xf3c84 eltorito.c:205 mov cx, ds ; 8c d9 ; 0xf3c87 mov ax, strict word 00004h ; b8 04 00 ; 0xf3c89 call 018d9h ; e8 4a dc ; 0xf3c8c @@ -5596,7 +5596,7 @@ pop si ; 5e ; 0xf3d99 pop bp ; 5d ; 0xf3d9a retn ; c3 ; 0xf3d9b - mov bx, 00eeeh ; bb ee 0e ; 0xf3d9c eltorito.c:235 + mov bx, 00eeah ; bb ea 0e ; 0xf3d9c eltorito.c:235 mov cx, ds ; 8c d9 ; 0xf3d9f mov ax, strict word 00004h ; b8 04 00 ; 0xf3da1 call 018d9h ; e8 32 db ; 0xf3da4 @@ -5746,7 +5746,7 @@ cmp di, strict byte 00005h ; 83 ff 05 ; 0xf3f01 jnc short 03f16h ; 73 10 ; 0xf3f04 mov al, byte [bp+di-00825h] ; 8a 83 db f7 ; 0xf3f06 - cmp al, byte [di+00ef6h] ; 3a 85 f6 0e ; 0xf3f0a + cmp al, byte [di+00ef2h] ; 3a 85 f2 0e ; 0xf3f0a je short 03f00h ; 74 f0 ; 0xf3f0e mov ax, strict word 00005h ; b8 05 00 ; 0xf3f10 jmp near 041cch ; e9 b6 02 ; 0xf3f13 @@ -5756,7 +5756,7 @@ cmp di, strict byte 00017h ; 83 ff 17 ; 0xf3f1b jnc short 03f30h ; 73 10 ; 0xf3f1e mov al, byte [bp+di-0081fh] ; 8a 83 e1 f7 ; 0xf3f20 - cmp al, byte [di+00efch] ; 3a 85 fc 0e ; 0xf3f24 + cmp al, byte [di+00ef8h] ; 3a 85 f8 0e ; 0xf3f24 je short 03f1ah ; 74 f0 ; 0xf3f28 mov ax, strict word 00006h ; b8 06 00 ; 0xf3f2a jmp near 041cch ; e9 9c 02 ; 0xf3f2d @@ -6051,7 +6051,7 @@ xor dh, dh ; 30 f6 ; 0xf4285 cmp ax, dx ; 39 d0 ; 0xf4287 je short 042b5h ; 74 2a ; 0xf4289 - mov bx, 00eeeh ; bb ee 0e ; 0xf428b eltorito.c:511 + mov bx, 00eeah ; bb ea 0e ; 0xf428b eltorito.c:511 mov cx, ds ; 8c d9 ; 0xf428e mov ax, strict word 00004h ; b8 04 00 ; 0xf4290 call 018d9h ; e8 43 d6 ; 0xf4293 @@ -6282,7 +6282,7 @@ mov word [es:si+020h], strict word 00000h ; 26 c7 44 20 00 00 ; 0xf44ea eltorito.c:616 test al, al ; 84 c0 ; 0xf44f0 eltorito.c:618 je short 0452ch ; 74 38 ; 0xf44f2 - mov bx, 00eeeh ; bb ee 0e ; 0xf44f4 eltorito.c:619 + mov bx, 00eeah ; bb ea 0e ; 0xf44f4 eltorito.c:619 mov cx, ds ; 8c d9 ; 0xf44f7 mov ax, strict word 00004h ; b8 04 00 ; 0xf44f9 call 018d9h ; e8 da d3 ; 0xf44fc @@ -6533,7 +6533,7 @@ test al, al ; 84 c0 ; 0xf47a1 eltorito.c:723 jne short 047a8h ; 75 03 ; 0xf47a3 jmp near 0452ch ; e9 84 fd ; 0xf47a5 - mov bx, 00eeeh ; bb ee 0e ; 0xf47a8 eltorito.c:724 + mov bx, 00eeah ; bb ea 0e ; 0xf47a8 eltorito.c:724 mov cx, ds ; 8c d9 ; 0xf47ab mov ax, strict word 00004h ; b8 04 00 ; 0xf47ad call 018d9h ; e8 26 d1 ; 0xf47b0 @@ -6574,7 +6574,7 @@ mov byte [es:bx], al ; 26 88 07 ; 0xf4805 or byte [bp+01ch], 001h ; 80 4e 1c 01 ; 0xf4808 jmp near 04540h ; e9 31 fd ; 0xf480c - mov bx, 00eeeh ; bb ee 0e ; 0xf480f eltorito.c:750 + mov bx, 00eeah ; bb ea 0e ; 0xf480f eltorito.c:750 mov cx, ds ; 8c d9 ; 0xf4812 mov ax, strict word 00004h ; b8 04 00 ; 0xf4814 call 018d9h ; e8 bf d0 ; 0xf4817 @@ -6683,7 +6683,7 @@ mov word [bp+018h], bx ; 89 5e 18 ; 0xf495a mov word [bp+016h], strict word 00007h ; c7 46 16 07 00 ; 0xf495d eltorito.c:848 jmp near 04bfch ; e9 97 02 ; 0xf4962 eltorito.c:849 - mov bx, 00eeeh ; bb ee 0e ; 0xf4965 + mov bx, 00eeah ; bb ea 0e ; 0xf4965 mov cx, ds ; 8c d9 ; 0xf4968 mov ax, strict word 00004h ; b8 04 00 ; 0xf496a call 018d9h ; e8 69 cf ; 0xf496d @@ -6801,7 +6801,7 @@ mov word [es:bx+002h], ax ; 26 89 47 02 ; 0xf4a98 cmp byte [bp-00ch], 000h ; 80 7e f4 00 ; 0xf4a9c eltorito.c:893 je short 04adbh ; 74 39 ; 0xf4aa0 - mov bx, 00eeeh ; bb ee 0e ; 0xf4aa2 eltorito.c:894 + mov bx, 00eeah ; bb ea 0e ; 0xf4aa2 eltorito.c:894 mov cx, ds ; 8c d9 ; 0xf4aa5 mov ax, strict word 00004h ; b8 04 00 ; 0xf4aa7 call 018d9h ; e8 2c ce ; 0xf4aaa @@ -6969,14 +6969,14 @@ test bl, 080h ; f6 c3 80 ; 0xf4c32 je short 04c5eh ; 74 27 ; 0xf4c35 mov dx, strict word 00001h ; ba 01 00 ; 0xf4c37 - mov bx, 00eeeh ; bb ee 0e ; 0xf4c3a boot.c:123 + mov bx, 00eeah ; bb ea 0e ; 0xf4c3a boot.c:123 mov cx, ds ; 8c d9 ; 0xf4c3d mov ax, strict word 00004h ; b8 04 00 ; 0xf4c3f call 018d9h ; e8 94 cc ; 0xf4c42 mov ax, dx ; 89 d0 ; 0xf4c45 mov dx, strict word 0000ah ; ba 0a 00 ; 0xf4c47 imul dx ; f7 ea ; 0xf4c4a - add ax, 00f14h ; 05 14 0f ; 0xf4c4c + add ax, 00f10h ; 05 10 0f ; 0xf4c4c push ax ; 50 ; 0xf4c4f mov ax, 004a4h ; b8 a4 04 ; 0xf4c50 push ax ; 50 ; 0xf4c53 @@ -7000,11 +7000,11 @@ mov si, cx ; 89 ce ; 0xf4c71 test al, al ; 84 c0 ; 0xf4c73 boot.c:142 je short 04c96h ; 74 1f ; 0xf4c75 - mov bx, 00eeeh ; bb ee 0e ; 0xf4c77 boot.c:143 + mov bx, 00eeah ; bb ea 0e ; 0xf4c77 boot.c:143 mov cx, ds ; 8c d9 ; 0xf4c7a mov ax, strict word 00004h ; b8 04 00 ; 0xf4c7c call 018d9h ; e8 57 cc ; 0xf4c7f - mov cx, 00f28h ; b9 28 0f ; 0xf4c82 + mov cx, 00f24h ; b9 24 0f ; 0xf4c82 push cx ; 51 ; 0xf4c85 mov cx, 004b8h ; b9 b8 04 ; 0xf4c86 push cx ; 51 ; 0xf4c89 @@ -7015,27 +7015,27 @@ jmp short 04cdeh ; eb 48 ; 0xf4c94 boot.c:144 test dl, dl ; 84 d2 ; 0xf4c96 je short 04caah ; 74 10 ; 0xf4c98 - mov bx, 00eeeh ; bb ee 0e ; 0xf4c9a boot.c:145 + mov bx, 00eeah ; bb ea 0e ; 0xf4c9a boot.c:145 mov cx, ds ; 8c d9 ; 0xf4c9d mov ax, strict word 00004h ; b8 04 00 ; 0xf4c9f call 018d9h ; e8 34 cc ; 0xf4ca2 - mov cx, 00f32h ; b9 32 0f ; 0xf4ca5 + mov cx, 00f2eh ; b9 2e 0f ; 0xf4ca5 jmp short 04c85h ; eb db ; 0xf4ca8 test bl, 080h ; f6 c3 80 ; 0xf4caa boot.c:146 je short 04cc0h ; 74 11 ; 0xf4cad - mov bx, 00eeeh ; bb ee 0e ; 0xf4caf boot.c:147 + mov bx, 00eeah ; bb ea 0e ; 0xf4caf boot.c:147 mov cx, ds ; 8c d9 ; 0xf4cb2 mov ax, strict word 00004h ; b8 04 00 ; 0xf4cb4 call 018d9h ; e8 1f cc ; 0xf4cb7 push si ; 56 ; 0xf4cba - mov cx, 00f1eh ; b9 1e 0f ; 0xf4cbb + mov cx, 00f1ah ; b9 1a 0f ; 0xf4cbb jmp short 04ccfh ; eb 0f ; 0xf4cbe boot.c:148 - mov bx, 00eeeh ; bb ee 0e ; 0xf4cc0 boot.c:149 + mov bx, 00eeah ; bb ea 0e ; 0xf4cc0 boot.c:149 mov cx, ds ; 8c d9 ; 0xf4cc3 mov ax, strict word 00004h ; b8 04 00 ; 0xf4cc5 call 018d9h ; e8 0e cc ; 0xf4cc8 push si ; 56 ; 0xf4ccb - mov cx, 00f14h ; b9 14 0f ; 0xf4ccc + mov cx, 00f10h ; b9 10 0f ; 0xf4ccc push cx ; 51 ; 0xf4ccf mov cx, 004cdh ; b9 cd 04 ; 0xf4cd0 push cx ; 51 ; 0xf4cd3 @@ -7067,7 +7067,7 @@ push cx ; 51 ; 0xf4d07 push dx ; 52 ; 0xf4d08 mov dx, ax ; 89 c2 ; 0xf4d09 - mov bx, 00eeeh ; bb ee 0e ; 0xf4d0b boot.c:165 + mov bx, 00eeah ; bb ea 0e ; 0xf4d0b boot.c:165 mov cx, ds ; 8c d9 ; 0xf4d0e mov ax, strict word 00004h ; b8 04 00 ; 0xf4d10 call 018d9h ; e8 c3 cb ; 0xf4d13 @@ -7151,7 +7151,7 @@ mov byte [bp-006h], al ; 88 46 fa ; 0xf4dc3 mov byte [bp-008h], al ; 88 46 f8 ; 0xf4dc6 mov byte [bp-00ah], al ; 88 46 f6 ; 0xf4dc9 boot.c:218 - mov bx, 00eeeh ; bb ee 0e ; 0xf4dcc boot.c:219 + mov bx, 00eeah ; bb ea 0e ; 0xf4dcc boot.c:219 mov cx, ds ; 8c d9 ; 0xf4dcf mov ax, strict word 00004h ; b8 04 00 ; 0xf4dd1 call 018d9h ; e8 02 cb ; 0xf4dd4 @@ -7704,7 +7704,7 @@ mov byte [bp-006h], al ; 88 46 fa ; 0xf5298 test al, al ; 84 c0 ; 0xf529b keyboard.c:384 jne short 052bbh ; 75 1c ; 0xf529d - mov bx, 00eeeh ; bb ee 0e ; 0xf529f keyboard.c:385 + mov bx, 00eeah ; bb ea 0e ; 0xf529f keyboard.c:385 mov cx, ds ; 8c d9 ; 0xf52a2 mov ax, strict word 00004h ; b8 04 00 ; 0xf52a4 call 018d9h ; e8 2f c6 ; 0xf52a7 @@ -7977,7 +7977,7 @@ jmp short 05551h ; eb ea ; 0xf5565 keyboard.c:564 cmp byte [bp-006h], 058h ; 80 7e fa 58 ; 0xf5567 keyboard.c:566 jbe short 0558fh ; 76 22 ; 0xf556b - mov bx, 00eeeh ; bb ee 0e ; 0xf556d keyboard.c:567 + mov bx, 00eeah ; bb ea 0e ; 0xf556d keyboard.c:567 mov cx, ds ; 8c d9 ; 0xf5570 mov ax, strict word 00004h ; b8 04 00 ; 0xf5572 call 018d9h ; e8 61 c3 ; 0xf5575 @@ -7998,9 +7998,9 @@ mov dx, strict word 0000ah ; ba 0a 00 ; 0xf5599 imul dx ; f7 ea ; 0xf559c mov si, ax ; 89 c6 ; 0xf559e - mov al, byte [si+00f42h] ; 8a 84 42 0f ; 0xf55a0 + mov al, byte [si+00f3eh] ; 8a 84 3e 0f ; 0xf55a0 mov byte [bp-00ah], al ; 88 46 f6 ; 0xf55a4 - mov al, byte [si+00f43h] ; 8a 84 43 0f ; 0xf55a7 keyboard.c:572 + mov al, byte [si+00f3fh] ; 8a 84 3f 0f ; 0xf55a7 keyboard.c:572 jmp near 05662h ; e9 b4 00 ; 0xf55ab keyboard.c:573 test bl, 004h ; f6 c3 04 ; 0xf55ae je short 055cdh ; 74 1a ; 0xf55b1 @@ -8009,9 +8009,9 @@ mov dx, strict word 0000ah ; ba 0a 00 ; 0xf55b8 imul dx ; f7 ea ; 0xf55bb mov si, ax ; 89 c6 ; 0xf55bd - mov al, byte [si+00f40h] ; 8a 84 40 0f ; 0xf55bf + mov al, byte [si+00f3ch] ; 8a 84 3c 0f ; 0xf55bf mov byte [bp-00ah], al ; 88 46 f6 ; 0xf55c3 - mov al, byte [si+00f41h] ; 8a 84 41 0f ; 0xf55c6 keyboard.c:575 + mov al, byte [si+00f3dh] ; 8a 84 3d 0f ; 0xf55c6 keyboard.c:575 jmp near 05662h ; e9 95 00 ; 0xf55ca keyboard.c:576 mov al, byte [bp-008h] ; 8a 46 f8 ; 0xf55cd and AL, strict byte 002h ; 24 02 ; 0xf55d0 @@ -8027,7 +8027,7 @@ mov dx, strict word 0000ah ; ba 0a 00 ; 0xf55e7 imul dx ; f7 ea ; 0xf55ea mov bx, ax ; 89 c3 ; 0xf55ec - mov al, byte [bx+00f3dh] ; 8a 87 3d 0f ; 0xf55ee + mov al, byte [bx+00f39h] ; 8a 87 39 0f ; 0xf55ee jmp short 05662h ; eb 6e ; 0xf55f2 keyboard.c:580 test bl, 003h ; f6 c3 03 ; 0xf55f4 je short 05630h ; 74 37 ; 0xf55f7 @@ -8036,19 +8036,19 @@ mov dx, strict word 0000ah ; ba 0a 00 ; 0xf55fe imul dx ; f7 ea ; 0xf5601 mov si, ax ; 89 c6 ; 0xf5603 - mov al, byte [si+00f44h] ; 8a 84 44 0f ; 0xf5605 + mov al, byte [si+00f40h] ; 8a 84 40 0f ; 0xf5605 xor ah, ah ; 30 e4 ; 0xf5609 mov dl, bl ; 88 da ; 0xf560b xor dh, dh ; 30 f6 ; 0xf560d test dx, ax ; 85 c2 ; 0xf560f je short 05620h ; 74 0d ; 0xf5611 - mov al, byte [si+00f3ch] ; 8a 84 3c 0f ; 0xf5613 keyboard.c:585 + mov al, byte [si+00f38h] ; 8a 84 38 0f ; 0xf5613 keyboard.c:585 mov byte [bp-00ah], al ; 88 46 f6 ; 0xf5617 - mov al, byte [si+00f3dh] ; 8a 84 3d 0f ; 0xf561a keyboard.c:586 + mov al, byte [si+00f39h] ; 8a 84 39 0f ; 0xf561a keyboard.c:586 jmp short 0562bh ; eb 0b ; 0xf561e keyboard.c:587 - mov al, byte [si+00f3eh] ; 8a 84 3e 0f ; 0xf5620 keyboard.c:588 + mov al, byte [si+00f3ah] ; 8a 84 3a 0f ; 0xf5620 keyboard.c:588 mov byte [bp-00ah], al ; 88 46 f6 ; 0xf5624 - mov al, byte [si+00f3fh] ; 8a 84 3f 0f ; 0xf5627 keyboard.c:589 + mov al, byte [si+00f3bh] ; 8a 84 3b 0f ; 0xf5627 keyboard.c:589 mov byte [bp-006h], al ; 88 46 fa ; 0xf562b jmp short 05665h ; eb 35 ; 0xf562e keyboard.c:591 mov al, byte [bp-006h] ; 8a 46 fa ; 0xf5630 keyboard.c:593 @@ -8056,25 +8056,25 @@ mov dx, strict word 0000ah ; ba 0a 00 ; 0xf5635 imul dx ; f7 ea ; 0xf5638 mov si, ax ; 89 c6 ; 0xf563a - mov dl, byte [si+00f44h] ; 8a 94 44 0f ; 0xf563c + mov dl, byte [si+00f40h] ; 8a 94 40 0f ; 0xf563c xor dh, dh ; 30 f6 ; 0xf5640 mov al, bl ; 88 d8 ; 0xf5642 xor ah, ah ; 30 e4 ; 0xf5644 test ax, dx ; 85 d0 ; 0xf5646 je short 05657h ; 74 0d ; 0xf5648 - mov al, byte [si+00f3eh] ; 8a 84 3e 0f ; 0xf564a keyboard.c:594 + mov al, byte [si+00f3ah] ; 8a 84 3a 0f ; 0xf564a keyboard.c:594 mov byte [bp-00ah], al ; 88 46 f6 ; 0xf564e - mov al, byte [si+00f3fh] ; 8a 84 3f 0f ; 0xf5651 keyboard.c:595 + mov al, byte [si+00f3bh] ; 8a 84 3b 0f ; 0xf5651 keyboard.c:595 jmp short 05662h ; eb 0b ; 0xf5655 keyboard.c:596 - mov al, byte [si+00f3ch] ; 8a 84 3c 0f ; 0xf5657 keyboard.c:597 + mov al, byte [si+00f38h] ; 8a 84 38 0f ; 0xf5657 keyboard.c:597 mov byte [bp-00ah], al ; 88 46 f6 ; 0xf565b - mov al, byte [si+00f3dh] ; 8a 84 3d 0f ; 0xf565e keyboard.c:598 + mov al, byte [si+00f39h] ; 8a 84 39 0f ; 0xf565e keyboard.c:598 mov byte [bp-006h], al ; 88 46 fa ; 0xf5662 cmp byte [bp-006h], 000h ; 80 7e fa 00 ; 0xf5665 keyboard.c:601 jne short 0568ah ; 75 1f ; 0xf5669 cmp byte [bp-00ah], 000h ; 80 7e f6 00 ; 0xf566b jne short 0568ah ; 75 19 ; 0xf566f - mov bx, 00eeeh ; bb ee 0e ; 0xf5671 keyboard.c:602 + mov bx, 00eeah ; bb ea 0e ; 0xf5671 keyboard.c:602 mov cx, ds ; 8c d9 ; 0xf5674 mov ax, strict word 00004h ; b8 04 00 ; 0xf5676 call 018d9h ; e8 5d c2 ; 0xf5679 @@ -8255,7 +8255,7 @@ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xf5814 mov word [bp+012h], ax ; 89 46 12 ; 0xf5817 jmp near 05867h ; e9 4a 00 ; 0xf581a keyboard.c:700 - mov bx, 00eeeh ; bb ee 0e ; 0xf581d + mov bx, 00eeah ; bb ea 0e ; 0xf581d mov cx, ds ; 8c d9 ; 0xf5820 mov ax, strict word 00004h ; b8 04 00 ; 0xf5822 call 018d9h ; e8 b1 c0 ; 0xf5825 @@ -8269,7 +8269,7 @@ push ax ; 50 ; 0xf5837 call 0191ch ; e8 e1 c0 ; 0xf5838 add sp, strict byte 00006h ; 83 c4 06 ; 0xf583b - mov bx, 00eeeh ; bb ee 0e ; 0xf583e + mov bx, 00eeah ; bb ea 0e ; 0xf583e mov cx, ds ; 8c d9 ; 0xf5841 mov ax, strict word 00004h ; b8 04 00 ; 0xf5843 call 018d9h ; e8 90 c0 ; 0xf5846 @@ -8898,7 +8898,7 @@ jnbe short 05f16h ; 77 04 ; 0xf5f10 test ax, ax ; 85 c0 ; 0xf5f12 jne short 05f3fh ; 75 29 ; 0xf5f14 - mov bx, 00eeeh ; bb ee 0e ; 0xf5f16 disk.c:338 + mov bx, 00eeah ; bb ea 0e ; 0xf5f16 disk.c:338 mov cx, ds ; 8c d9 ; 0xf5f19 mov ax, strict word 00004h ; b8 04 00 ; 0xf5f1b call 018d9h ; e8 b8 b9 ; 0xf5f1e @@ -8932,7 +8932,7 @@ jbe short 05f6dh ; 76 04 ; 0xf5f67 cmp di, dx ; 39 d7 ; 0xf5f69 jbe short 05f9eh ; 76 31 ; 0xf5f6b - mov bx, 00eeeh ; bb ee 0e ; 0xf5f6d disk.c:349 + mov bx, 00eeah ; bb ea 0e ; 0xf5f6d disk.c:349 mov cx, ds ; 8c d9 ; 0xf5f70 mov ax, strict word 00004h ; b8 04 00 ; 0xf5f72 call 018d9h ; e8 61 b9 ; 0xf5f75 @@ -9040,7 +9040,7 @@ mov word [bp+016h], bx ; 89 5e 16 ; 0xf6096 test dl, dl ; 84 d2 ; 0xf6099 disk.c:389 je short 060e7h ; 74 4a ; 0xf609b - mov bx, 00eeeh ; bb ee 0e ; 0xf609d disk.c:390 + mov bx, 00eeah ; bb ea 0e ; 0xf609d disk.c:390 mov cx, ds ; 8c d9 ; 0xf60a0 mov ax, strict word 00004h ; b8 04 00 ; 0xf60a2 call 018d9h ; e8 31 b8 ; 0xf60a5 @@ -9061,7 +9061,7 @@ xor ah, ah ; 30 e4 ; 0xf60c6 or ah, 00ch ; 80 cc 0c ; 0xf60c8 jmp near 06234h ; e9 66 01 ; 0xf60cb disk.c:392 - mov bx, 00eeeh ; bb ee 0e ; 0xf60ce disk.c:399 + mov bx, 00eeah ; bb ea 0e ; 0xf60ce disk.c:399 mov cx, ds ; 8c d9 ; 0xf60d1 mov ax, strict word 00004h ; b8 04 00 ; 0xf60d3 call 018d9h ; e8 00 b8 ; 0xf60d6 @@ -9171,7 +9171,7 @@ or ah, 003h ; 80 cc 03 ; 0xf61e2 mov word [bp+016h], ax ; 89 46 16 ; 0xf61e5 jmp near 060ebh ; e9 00 ff ; 0xf61e8 disk.c:459 - mov bx, 00eeeh ; bb ee 0e ; 0xf61eb disk.c:467 + mov bx, 00eeah ; bb ea 0e ; 0xf61eb disk.c:467 mov cx, ds ; 8c d9 ; 0xf61ee mov ax, strict word 00004h ; b8 04 00 ; 0xf61f0 call 018d9h ; e8 e3 b6 ; 0xf61f3 @@ -9187,7 +9187,7 @@ call 0191ch ; e8 11 b7 ; 0xf6208 add sp, strict byte 00008h ; 83 c4 08 ; 0xf620b jmp near 060e7h ; e9 d6 fe ; 0xf620e disk.c:468 - mov bx, 00eeeh ; bb ee 0e ; 0xf6211 disk.c:475 + mov bx, 00eeah ; bb ea 0e ; 0xf6211 disk.c:475 mov cx, ds ; 8c d9 ; 0xf6214 mov ax, strict word 00004h ; b8 04 00 ; 0xf6216 call 018d9h ; e8 bd b6 ; 0xf6219 @@ -9278,7 +9278,7 @@ mov word [bp+016h], ax ; 89 46 16 ; 0xf6309 mov word [bp+014h], strict word 00007h ; c7 46 14 07 00 ; 0xf630c disk.c:538 jmp near 06502h ; e9 ee 01 ; 0xf6311 disk.c:539 - mov bx, 00eeeh ; bb ee 0e ; 0xf6314 + mov bx, 00eeah ; bb ea 0e ; 0xf6314 mov cx, ds ; 8c d9 ; 0xf6317 mov ax, strict word 00004h ; b8 04 00 ; 0xf6319 call 018d9h ; e8 ba b5 ; 0xf631c @@ -9339,7 +9339,7 @@ jne short 063e6h ; 75 2c ; 0xf63b8 cmp si, word [es:bx+036h] ; 26 3b 77 36 ; 0xf63ba jc short 063e6h ; 72 26 ; 0xf63be - mov bx, 00eeeh ; bb ee 0e ; 0xf63c0 disk.c:564 + mov bx, 00eeah ; bb ea 0e ; 0xf63c0 disk.c:564 mov cx, ds ; 8c d9 ; 0xf63c3 mov ax, strict word 00004h ; b8 04 00 ; 0xf63c5 call 018d9h ; e8 0e b5 ; 0xf63c8 @@ -9400,7 +9400,7 @@ mov word [es:bx+002h], ax ; 26 89 47 02 ; 0xf6473 test dl, dl ; 84 d2 ; 0xf6477 disk.c:589 je short 063fch ; 74 81 ; 0xf6479 - mov bx, 00eeeh ; bb ee 0e ; 0xf647b disk.c:590 + mov bx, 00eeah ; bb ea 0e ; 0xf647b disk.c:590 mov cx, ds ; 8c d9 ; 0xf647e mov ax, strict word 00004h ; b8 04 00 ; 0xf6480 call 018d9h ; e8 53 b4 ; 0xf6483 @@ -9775,7 +9775,7 @@ mov byte [bp+013h], ah ; 88 66 13 ; 0xf67c4 system.c:383 mov word [bp+00ch], ax ; 89 46 0c ; 0xf67c7 system.c:384 jmp near 06806h ; e9 39 00 ; 0xf67ca system.c:385 - mov bx, 00eeeh ; bb ee 0e ; 0xf67cd system.c:387 + mov bx, 00eeah ; bb ea 0e ; 0xf67cd system.c:387 mov cx, ds ; 8c d9 ; 0xf67d0 mov ax, strict word 00004h ; b8 04 00 ; 0xf67d2 call 018d9h ; e8 01 b1 ; 0xf67d5 @@ -9952,7 +9952,7 @@ push cx ; 51 ; 0xf6983 retf ; cb ; 0xf6984 jmp near 06806h ; e9 7e fe ; 0xf6985 system.c:525 - mov bx, 00eeeh ; bb ee 0e ; 0xf6988 system.c:532 + mov bx, 00eeah ; bb ea 0e ; 0xf6988 system.c:532 mov cx, ds ; 8c d9 ; 0xf698b mov ax, strict word 00004h ; b8 04 00 ; 0xf698d call 018d9h ; e8 46 af ; 0xf6990 @@ -9995,7 +9995,7 @@ jbe short 069d4h ; 76 d9 ; 0xf69f9 or byte [bp+018h], 001h ; 80 4e 18 01 ; 0xf69fb system.c:568 jmp near 06806h ; e9 04 fe ; 0xf69ff system.c:569 - mov bx, 00eeeh ; bb ee 0e ; 0xf6a02 system.c:573 + mov bx, 00eeah ; bb ea 0e ; 0xf6a02 system.c:573 mov cx, ds ; 8c d9 ; 0xf6a05 mov ax, strict word 00004h ; b8 04 00 ; 0xf6a07 call 018d9h ; e8 cc ae ; 0xf6a0a @@ -10449,7 +10449,7 @@ je short 06ea0h ; 74 12 ; 0xf6e8c mov ax, 008feh ; b8 fe 08 ; 0xf6e8e ps2mouse.c:82 push ax ; 50 ; 0xf6e91 - mov ax, 012b6h ; b8 b6 12 ; 0xf6e92 + mov ax, 012b2h ; b8 b2 12 ; 0xf6e92 push ax ; 50 ; 0xf6e95 mov ax, strict word 00007h ; b8 07 00 ; 0xf6e96 push ax ; 50 ; 0xf6e99 @@ -10535,7 +10535,7 @@ je short 06f35h ; 74 12 ; 0xf6f21 mov ax, 00908h ; b8 08 09 ; 0xf6f23 ps2mouse.c:114 push ax ; 50 ; 0xf6f26 - mov ax, 012b6h ; b8 b6 12 ; 0xf6f27 + mov ax, 012b2h ; b8 b2 12 ; 0xf6f27 push ax ; 50 ; 0xf6f2a mov ax, strict word 00007h ; b8 07 00 ; 0xf6f2b push ax ; 50 ; 0xf6f2e @@ -12088,7 +12088,7 @@ mov word [bp-010h], dx ; 89 56 f0 ; 0xf7cfd cmp byte [bp+00ah], 002h ; 80 7e 0a 02 ; 0xf7d00 scsi.c:292 jne short 07d29h ; 75 23 ; 0xf7d04 - mov bx, 00eeeh ; bb ee 0e ; 0xf7d06 scsi.c:293 + mov bx, 00eeah ; bb ea 0e ; 0xf7d06 scsi.c:293 mov cx, ds ; 8c d9 ; 0xf7d09 mov ax, strict word 00004h ; b8 04 00 ; 0xf7d0b call 018d9h ; e8 c8 9b ; 0xf7d0e @@ -12326,7 +12326,7 @@ jne short 07f3fh ; 75 06 ; 0xf7f37 cmp bx, 00200h ; 81 fb 00 02 ; 0xf7f39 je short 07f62h ; 74 23 ; 0xf7f3d - mov bx, 00eeeh ; bb ee 0e ; 0xf7f3f scsi.c:444 + mov bx, 00eeah ; bb ea 0e ; 0xf7f3f scsi.c:444 mov cx, ds ; 8c d9 ; 0xf7f42 mov ax, strict word 00004h ; b8 04 00 ; 0xf7f44 call 018d9h ; e8 8f 99 ; 0xf7f47 @@ -12513,7 +12513,7 @@ jmp short 08146h ; eb 08 ; 0xf813c scsi.c:522 mov word [es:bx+02ch], si ; 26 89 77 2c ; 0xf813e scsi.c:523 mov word [es:bx+032h], si ; 26 89 77 32 ; 0xf8142 scsi.c:524 - mov bx, 00eeeh ; bb ee 0e ; 0xf8146 scsi.c:528 + mov bx, 00eeah ; bb ea 0e ; 0xf8146 scsi.c:528 mov cx, ds ; 8c d9 ; 0xf8149 mov ax, strict word 00004h ; b8 04 00 ; 0xf814b call 018d9h ; e8 88 97 ; 0xf814e @@ -12569,7 +12569,7 @@ mov byte [es:bx], al ; 26 88 07 ; 0xf81d5 scsi.c:43 inc byte [bp-00ch] ; fe 46 f4 ; 0xf81d8 scsi.c:543 jmp near 0827ah ; e9 9c 00 ; 0xf81db scsi.c:545 - mov bx, 00eeeh ; bb ee 0e ; 0xf81de scsi.c:557 + mov bx, 00eeah ; bb ea 0e ; 0xf81de scsi.c:557 mov cx, ds ; 8c d9 ; 0xf81e1 mov ax, strict word 00004h ; b8 04 00 ; 0xf81e3 call 018d9h ; e8 f0 96 ; 0xf81e6 @@ -13744,7 +13744,7 @@ mov word [bp-008h], ax ; 89 46 f8 ; 0xf8ce4 cmp byte [bp+00ah], 002h ; 80 7e 0a 02 ; 0xf8ce7 ahci.c:583 jne short 08d10h ; 75 23 ; 0xf8ceb - mov bx, 00eeeh ; bb ee 0e ; 0xf8ced ahci.c:584 + mov bx, 00eeah ; bb ea 0e ; 0xf8ced ahci.c:584 mov cx, ds ; 8c d9 ; 0xf8cf0 mov ax, strict word 00004h ; b8 04 00 ; 0xf8cf2 call 018d9h ; e8 e1 8b ; 0xf8cf5 @@ -14217,7 +14217,7 @@ mov dx, ss ; 8c d2 ; 0xf91eb lea ax, [bp-034h] ; 8d 46 cc ; 0xf91ed call 05a0fh ; e8 1c c8 ; 0xf91f0 - mov bx, 00eeeh ; bb ee 0e ; 0xf91f3 ahci.c:785 + mov bx, 00eeah ; bb ea 0e ; 0xf91f3 ahci.c:785 mov cx, ds ; 8c d9 ; 0xf91f6 mov ax, strict word 00004h ; b8 04 00 ; 0xf91f8 call 018d9h ; e8 db 86 ; 0xf91fb @@ -15633,7 +15633,7 @@ mov word [bp-00ah], ax ; 89 46 f6 ; 0xf9fbe cmp byte [bp+00ah], 002h ; 80 7e 0a 02 ; 0xf9fc1 virtio.c:696 jne short 09feah ; 75 23 ; 0xf9fc5 - mov bx, 00eeeh ; bb ee 0e ; 0xf9fc7 virtio.c:697 + mov bx, 00eeah ; bb ea 0e ; 0xf9fc7 virtio.c:697 mov cx, ds ; 8c d9 ; 0xf9fca mov ax, strict word 00004h ; b8 04 00 ; 0xf9fcc call 018d9h ; e8 07 79 ; 0xf9fcf @@ -15818,7 +15818,7 @@ jne short 0a1b4h ; 75 06 ; 0xfa1ac cmp bx, 00200h ; 81 fb 00 02 ; 0xfa1ae je short 0a1d7h ; 74 23 ; 0xfa1b2 - mov bx, 00eeeh ; bb ee 0e ; 0xfa1b4 virtio.c:805 + mov bx, 00eeah ; bb ea 0e ; 0xfa1b4 virtio.c:805 mov cx, ds ; 8c d9 ; 0xfa1b7 mov ax, strict word 00004h ; b8 04 00 ; 0xfa1b9 call 018d9h ; e8 1a 77 ; 0xfa1bc @@ -16003,7 +16003,7 @@ jmp short 0a3b2h ; eb 08 ; 0xfa3a8 virtio.c:882 mov word [es:bx+02ch], si ; 26 89 77 2c ; 0xfa3aa virtio.c:883 mov word [es:bx+032h], si ; 26 89 77 32 ; 0xfa3ae virtio.c:884 - mov bx, 00eeeh ; bb ee 0e ; 0xfa3b2 virtio.c:888 + mov bx, 00eeah ; bb ea 0e ; 0xfa3b2 virtio.c:888 mov cx, ds ; 8c d9 ; 0xfa3b5 mov ax, strict word 00004h ; b8 04 00 ; 0xfa3b7 call 018d9h ; e8 1c 75 ; 0xfa3ba @@ -16059,7 +16059,7 @@ mov byte [es:bx], al ; 26 88 07 ; 0xfa441 virtio.c:43 inc byte [bp-00ah] ; fe 46 f6 ; 0xfa444 virtio.c:903 jmp near 0a4ddh ; e9 93 00 ; 0xfa447 virtio.c:905 - mov bx, 00eeeh ; bb ee 0e ; 0xfa44a virtio.c:917 + mov bx, 00eeah ; bb ea 0e ; 0xfa44a virtio.c:917 mov cx, ds ; 8c d9 ; 0xfa44d mov ax, strict word 00004h ; b8 04 00 ; 0xfa44f call 018d9h ; e8 84 74 ; 0xfa452 @@ -16701,7 +16701,7 @@ jmp short 0aafbh ; eb 33 ; 0xfaac6 apm.c:217 or dh, 080h ; 80 ce 80 ; 0xfaac8 apm.c:224 jmp short 0aab9h ; eb ec ; 0xfaacb - mov bx, 00eeeh ; bb ee 0e ; 0xfaacd apm.c:228 + mov bx, 00eeah ; bb ea 0e ; 0xfaacd apm.c:228 mov cx, ds ; 8c d9 ; 0xfaad0 mov ax, strict word 00004h ; b8 04 00 ; 0xfaad2 call 018d9h ; e8 01 6e ; 0xfaad5 @@ -17008,7 +17008,7 @@ les bx, [bp-008h] ; c4 5e f8 ; 0xfadc0 mov word [es:bx], ax ; 26 89 07 ; 0xfadc3 jmp short 0adf8h ; eb 30 ; 0xfadc6 pcibios.c:407 - mov bx, 00eeeh ; bb ee 0e ; 0xfadc8 pcibios.c:409 + mov bx, 00eeah ; bb ea 0e ; 0xfadc8 pcibios.c:409 mov cx, ds ; 8c d9 ; 0xfadcb mov ax, strict word 00004h ; b8 04 00 ; 0xfadcd call 018d9h ; e8 06 6b ; 0xfadd0 @@ -19899,4 +19899,4 @@ cpu_reset: ; 0xffff0 LB 0x10 jmp far 0f000h:0e05bh ; ea 5b e0 00 f0 ; 0xffff0 orgs.asm:2063 ; disGetNextSymbol 0xffff5 LB 0xb -> off=0xb cb=0000000000000000 uValue=0000000000100000 '_dummy_addr_0x100000' - db 030h, 036h, 02fh, 032h, 033h, 02fh, 039h, 039h, 000h, 0fbh, 0beh + db 030h, 036h, 02fh, 032h, 033h, 02fh, 039h, 039h, 000h, 0fbh, 023h diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative8086.md5sum virtualbox-6.1.34-dfsg/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative8086.md5sum --- virtualbox-6.1.32-dfsg/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative8086.md5sum 2022-01-13 18:55:59.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative8086.md5sum 2022-03-22 23:43:08.000000000 +0000 @@ -1 +1 @@ -a85867f508d1bdb5bf4920d0d345a1dd *VBoxPcBios8086.rom +552484d57cbc17c2bdffa18e1236d510 *VBoxPcBios8086.rom diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Devices/PC/DevPcBios.cpp virtualbox-6.1.34-dfsg/src/VBox/Devices/PC/DevPcBios.cpp --- virtualbox-6.1.32-dfsg/src/VBox/Devices/PC/DevPcBios.cpp 2022-01-13 18:56:00.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Devices/PC/DevPcBios.cpp 2022-03-22 23:43:09.000000000 +0000 @@ -544,7 +544,7 @@ p = &aMBR[0x1be + i * 16]; iEndHead = p[5]; iEndSector = p[6] & 63; - if ((p[12] | p[13] | p[14] | p[15]) && iEndSector & iEndHead) + if ((p[12] | p[13] | p[14] | p[15]) && iEndSector && iEndHead) { /* Assumption: partition terminates on a cylinder boundary. */ cLCHSHeads = iEndHead + 1; @@ -623,7 +623,7 @@ || LCHSGeometry.cCylinders == 0 || LCHSGeometry.cCylinders > 1024 || LCHSGeometry.cHeads == 0 - || LCHSGeometry.cHeads > 16 + || LCHSGeometry.cHeads > 255 || LCHSGeometry.cSectors == 0 || LCHSGeometry.cSectors > 63) { diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Devices/Storage/DevVirtioSCSI.cpp virtualbox-6.1.34-dfsg/src/VBox/Devices/Storage/DevVirtioSCSI.cpp --- virtualbox-6.1.32-dfsg/src/VBox/Devices/Storage/DevVirtioSCSI.cpp 2022-01-13 18:56:22.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Devices/Storage/DevVirtioSCSI.cpp 2022-03-22 23:43:35.000000000 +0000 @@ -1554,9 +1554,11 @@ if (pThread->enmState == PDMTHREADSTATE_INITIALIZING) return VINF_SUCCESS; + Log6Func(("[Re]starting %s worker\n", VIRTQNAME(uVirtqNbr))); while (pThread->enmState == PDMTHREADSTATE_RUNNING) { - if (!pWorkerR3->cRedoDescs && IS_VIRTQ_EMPTY(pDevIns, &pThis->Virtio, uVirtqNbr)) + if ( !pWorkerR3->cRedoDescs + && IS_VIRTQ_EMPTY(pDevIns, &pThis->Virtio, uVirtqNbr)) { /* Atomic interlocks avoid missing alarm while going to sleep & notifier waking the awoken */ ASMAtomicWriteBool(&pWorker->fSleeping, true); @@ -1568,15 +1570,26 @@ int rc = PDMDevHlpSUPSemEventWaitNoResume(pDevIns, pWorker->hEvtProcess, RT_INDEFINITE_WAIT); AssertLogRelMsgReturn(RT_SUCCESS(rc) || rc == VERR_INTERRUPTED, ("%Rrc\n", rc), rc); if (RT_UNLIKELY(pThread->enmState != PDMTHREADSTATE_RUNNING)) + { + Log6Func(("%s worker thread not running, exiting\n", VIRTQNAME(uVirtqNbr))); return VINF_SUCCESS; + } if (rc == VERR_INTERRUPTED) + { + Log6Func(("%s worker interrupted ... continuing\n", VIRTQNAME(uVirtqNbr))); continue; + } Log6Func(("%s worker woken\n", VIRTQNAME(uVirtqNbr))); ASMAtomicWriteBool(&pWorker->fNotified, false); } ASMAtomicWriteBool(&pWorker->fSleeping, false); } + if (!virtioCoreIsVirtqEnabled(&pThis->Virtio, uVirtqNbr)) + { + LogFunc(("%s queue not enabled, worker aborting...\n", VIRTQNAME(uVirtqNbr))); + break; + } if (!pThis->afVirtqAttached[uVirtqNbr]) { LogFunc(("%s queue not attached, worker aborting...\n", VIRTQNAME(uVirtqNbr))); @@ -2281,7 +2294,8 @@ */ for (uint16_t uVirtqNbr = 0; uVirtqNbr < VIRTIOSCSI_REQ_VIRTQ_CNT; uVirtqNbr++) { - if (ASMAtomicReadBool(&pThis->aWorkers[uVirtqNbr].fSleeping)) + if ( virtioCoreIsVirtqEnabled(&pThis->Virtio, uVirtqNbr) + && ASMAtomicReadBool(&pThis->aWorkers[uVirtqNbr].fSleeping)) { Log6Func(("waking %s worker.\n", VIRTQNAME(uVirtqNbr))); int rc = PDMDevHlpSUPSemEventSignal(pDevIns, pThis->aWorkers[uVirtqNbr].hEvtProcess); @@ -2464,6 +2478,11 @@ /* * Initialize queues. + * @todo This should ideally be moved to virtioScsiR3StatusChanged() or become a function + * invoked from there only if the driver has enabled the queue. In the current form + * workers are created for all queues whether the guest has enabled them or not, + * which wastes resources. Currently there are only a few request queues so it's + * probably not urgent. */ virtioScsiSetVirtqNames(pThis); diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Devices/VirtIO/VirtioCore.cpp virtualbox-6.1.34-dfsg/src/VBox/Devices/VirtIO/VirtioCore.cpp --- virtualbox-6.1.32-dfsg/src/VBox/Devices/VirtIO/VirtioCore.cpp 2022-01-13 18:56:24.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Devices/VirtIO/VirtioCore.cpp 2022-03-22 23:43:37.000000000 +0000 @@ -317,7 +317,7 @@ PVIRTQUEUE pVirtq = &pVirtio->aVirtqueues[uVirtq]; if (!IS_DRIVER_OK(pVirtio) || !pVirtq->uEnable) { - LogRelFunc(("Driver not ready or queue not enabled\n")); + LogRelFunc(("Driver not ready or queue %s not enabled\n", VIRTQNAME(pVirtio, uVirtq))); return 0; } diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Frontends/VBoxHeadless/VBoxHeadless.cpp virtualbox-6.1.34-dfsg/src/VBox/Frontends/VBoxHeadless/VBoxHeadless.cpp --- virtualbox-6.1.32-dfsg/src/VBox/Frontends/VBoxHeadless/VBoxHeadless.cpp 2022-01-13 18:56:57.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Frontends/VBoxHeadless/VBoxHeadless.cpp 2022-03-22 23:44:14.000000000 +0000 @@ -1365,7 +1365,8 @@ sigaction(SIGINT, &sa, NULL); sigaction(SIGTERM, &sa, NULL); sigaction(SIGUSR1, &sa, NULL); - sigaction(SIGUSR2, &sa, NULL); + /* Don't touch SIGUSR2 as IPRT could be using it for RTThreadPoke(). */ + #else /* RT_OS_WINDOWS */ /* * Register windows console signal handler to react to Ctrl-C, diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Frontends/VBoxManage/VBoxManageAppliance.cpp virtualbox-6.1.34-dfsg/src/VBox/Frontends/VBoxManage/VBoxManageAppliance.cpp --- virtualbox-6.1.32-dfsg/src/VBox/Frontends/VBoxManage/VBoxManageAppliance.cpp 2022-01-13 18:56:57.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Frontends/VBoxManage/VBoxManageAppliance.cpp 2022-03-22 23:44:14.000000000 +0000 @@ -39,6 +39,7 @@ #include #include #include +#include #include #include @@ -106,6 +107,55 @@ return rc; } +/** + * Helper routine to parse the ExtraData Utf8Str for a storage controller's + * value or channel value. + * + * @param aExtraData The ExtraData string which can have a format of + * either 'controller=13;channel=3' or '11'. + * @param pszKey The string being looked up, usually either 'controller' + * or 'channel' but can be NULL or empty. + * @param puVal The integer value of the 'controller=' or 'channel=' + * key (or the controller number when there is no key) in + * the ExtraData string. + * @returns COM status code. + */ +static int getStorageControllerDetailsFromStr(const com::Utf8Str &aExtraData, const char *pszKey, uint32_t *puVal) +{ + int vrc; + + if (pszKey && *pszKey) + { + size_t posKey = aExtraData.find(pszKey); + if (posKey == Utf8Str::npos) + return VERR_INVALID_PARAMETER; + vrc = RTStrToUInt32Ex(aExtraData.c_str() + posKey + strlen(pszKey), NULL, 0, puVal); + } + else + { + vrc = RTStrToUInt32Ex(aExtraData.c_str(), NULL, 0, puVal); + } + + if (vrc == VWRN_NUMBER_TOO_BIG || vrc == VWRN_NEGATIVE_UNSIGNED) + return VERR_INVALID_PARAMETER; + + return vrc; +} + +static bool isStorageControllerType(VirtualSystemDescriptionType_T avsdType) +{ + switch (avsdType) + { + case VirtualSystemDescriptionType_HardDiskControllerIDE: + case VirtualSystemDescriptionType_HardDiskControllerSATA: + case VirtualSystemDescriptionType_HardDiskControllerSCSI: + case VirtualSystemDescriptionType_HardDiskControllerSAS: + return true; + default: + return false; + } +} + static const RTGETOPTDEF g_aImportApplianceOptions[] = { { "--dry-run", 'n', RTGETOPT_REQ_NOTHING }, @@ -137,12 +187,8 @@ { "-scsitype", 'T', RTGETOPT_REQ_UINT32 }, // deprecated { "--type", 'T', RTGETOPT_REQ_UINT32 }, // deprecated { "-type", 'T', RTGETOPT_REQ_UINT32 }, // deprecated -#if 0 /* Changing the controller is fully valid, but the current design on how - the params are evaluated here doesn't allow two parameter for one - unit. The target disk path is more important. I leave it for future - improvments. */ { "--controller", 'C', RTGETOPT_REQ_STRING }, -#endif + { "--port", 'E', RTGETOPT_REQ_STRING }, { "--disk", 'D', RTGETOPT_REQ_STRING }, { "--options", 'O', RTGETOPT_REQ_STRING }, @@ -286,6 +332,14 @@ mapArgsMapsPerVsys[ulCurVsys][Utf8StrFmt("controller%u", ulCurUnit)] = ValueUnion.psz; break; + case 'E': // --port + if (actionType == LOCAL && ulCurVsys == (uint32_t)-1) + return errorSyntax(USAGE_IMPORTAPPLIANCE, "Option \"%s\" requires preceding --vsys option.", GetState.pDef->pszLong); + if (ulCurUnit == (uint32_t)-1) + return errorSyntax(USAGE_IMPORTAPPLIANCE, "Option \"%s\" requires preceding --unit option.", GetState.pDef->pszLong); + mapArgsMapsPerVsys[ulCurVsys][Utf8StrFmt("port%u", ulCurUnit)] = ValueUnion.psz; + break; + case 'D': // --disk if (actionType == LOCAL && ulCurVsys == (uint32_t)-1) return errorSyntax(USAGE_IMPORTAPPLIANCE, "Option \"%s\" requires preceding --vsys argument.", GetState.pDef->pszLong); @@ -762,64 +816,252 @@ else { Utf8StrFmt strTypeArg("disk%u", a); + bool fDiskChanged = false; + int vrc; RTCList optionsList = options.toList(); - bstrFinalValue = aVBoxValues[a]; - if (findArgValue(strOverride, pmapArgs, strTypeArg)) { - if (!optionsList.contains(ImportOptions_ImportToVDI)) + if (optionsList.contains(ImportOptions_ImportToVDI)) + return errorSyntax(USAGE_IMPORTAPPLIANCE, + "Option --ImportToVDI can not be used together with " + "a manually set target path."); + RTUUID uuid; + /* Check if this is a uuid. If so, don't touch. */ + vrc = RTUuidFromStr(&uuid, strOverride.c_str()); + if (vrc != VINF_SUCCESS) { - RTUUID uuid; - /* Check if this is a uuid. If so, don't touch. */ - int vrc = RTUuidFromStr(&uuid, strOverride.c_str()); - if (vrc != VINF_SUCCESS) + /* Make the path absolute. */ + if (!RTPathStartsWithRoot(strOverride.c_str())) { - /* Make the path absolute. */ - if (!RTPathStartsWithRoot(strOverride.c_str())) - { - char pszPwd[RTPATH_MAX]; - vrc = RTPathGetCurrent(pszPwd, RTPATH_MAX); - if (RT_SUCCESS(vrc)) - strOverride = Utf8Str(pszPwd).append(RTPATH_SLASH).append(strOverride); - } + char pszPwd[RTPATH_MAX]; + vrc = RTPathGetCurrent(pszPwd, RTPATH_MAX); + if (RT_SUCCESS(vrc)) + strOverride = Utf8Str(pszPwd).append(RTPATH_SLASH).append(strOverride); } - bstrFinalValue = strOverride; } - else - { - //print some error about incompatible command-line arguments + bstrFinalValue = strOverride; + fDiskChanged = true; + } + + strTypeArg.printf("controller%u", a); + bool fControllerChanged = false; + uint32_t uTargetController = (uint32_t)-1; + VirtualSystemDescriptionType_T vsdControllerType = VirtualSystemDescriptionType_Ignore; + Utf8Str strExtraConfigValue; + if (findArgValue(strOverride, pmapArgs, strTypeArg)) + { + vrc = getStorageControllerDetailsFromStr(strOverride, NULL, &uTargetController); + if (RT_FAILURE(vrc)) return errorSyntax(USAGE_IMPORTAPPLIANCE, - "Option --ImportToVDI shall not be used together with " - "manually set target path."); + "Invalid controller value: '%s'", + strOverride.c_str()); - } + vsdControllerType = retTypes[uTargetController]; + if (!isStorageControllerType(vsdControllerType)) + return errorSyntax(USAGE_IMPORTAPPLIANCE, + "Invalid storage controller specified: %u", + uTargetController); - RTPrintf("%2u: Hard disk image: source image=%ls, target path=%ls, %ls\n", - a, - aOvfValues[a], - bstrFinalValue.raw(), - aExtraConfigValues[a]); - } -#if 0 /* Changing the controller is fully valid, but the current design on how - the params are evaluated here doesn't allow two parameter for one - unit. The target disk path is more important I leave it for future - improvments. */ - Utf8StrFmt strTypeArg("controller%u", a); + fControllerChanged = true; + } + + strTypeArg.printf("port%u", a); + bool fControllerPortChanged = false; + uint32_t uTargetControllerPort = (uint32_t)-1;; if (findArgValue(strOverride, pmapArgs, strTypeArg)) { - // strOverride now has the controller index as a number, but we - // need a "controller=X" format string - strOverride = Utf8StrFmt("controller=%s", strOverride.c_str()); + vrc = getStorageControllerDetailsFromStr(strOverride, NULL, &uTargetControllerPort); + if (RT_FAILURE(vrc)) + return errorSyntax(USAGE_IMPORTAPPLIANCE, + "Invalid port value: '%s'", + strOverride.c_str()); + + fControllerPortChanged = true; + } + + /* + * aExtraConfigValues[a] has a format of 'controller=12;channel=0' and is set by + * Appliance::interpret() so any parsing errors here aren't due to user-supplied + * values so different error messages here. + */ + uint32_t uOrigController; + Utf8Str strOrigController(Bstr(aExtraConfigValues[a]).raw()); + vrc = getStorageControllerDetailsFromStr(strOrigController, "controller=", &uOrigController); + if (RT_FAILURE(vrc)) + return RTMsgErrorExitFailure("Failed to extract controller value from ExtraConfig: '%s'", + strOrigController.c_str()); + + uint32_t uOrigControllerPort; + vrc = getStorageControllerDetailsFromStr(strOrigController, "channel=", &uOrigControllerPort); + if (RT_FAILURE(vrc)) + return RTMsgErrorExitFailure("Failed to extract channel value from ExtraConfig: '%s'", + strOrigController.c_str()); + + /* + * The 'strExtraConfigValue' string is used to display the storage controller and + * port details for each virtual hard disk using the more accurate 'controller=' and + * 'port=' labels. The aExtraConfigValues[a] string has a format of + * 'controller=%u;channel=%u' from Appliance::interpret() which is required as per + * the API but for consistency and clarity with the CLI options --controller and + * --port we instead use strExtraConfigValue in the output below. + */ + strExtraConfigValue = Utf8StrFmt("controller=%u;port=%u", uOrigController, uOrigControllerPort); + + if (fControllerChanged || fControllerPortChanged) + { + /* + * Verify that the new combination of controller and controller port is valid. + * cf. StorageController::i_checkPortAndDeviceValid() + */ + if (uTargetControllerPort == (uint32_t)-1) + uTargetControllerPort = uOrigControllerPort; + if (uTargetController == (uint32_t)-1) + uTargetController = uOrigController; + + if ( uOrigController == uTargetController + && uOrigControllerPort == uTargetControllerPort) + return errorSyntax(USAGE_IMPORTAPPLIANCE, + "Device already attached to controller %u at this port (%u) location.", + uTargetController, + uTargetControllerPort); + + if (vsdControllerType == VirtualSystemDescriptionType_Ignore) + vsdControllerType = retTypes[uOrigController]; + if (!isStorageControllerType(vsdControllerType)) + return errorSyntax(USAGE_IMPORTAPPLIANCE, + "Invalid storage controller specified: %u", + uOrigController); + + ComPtr pVirtualBox = arg->virtualBox; + ComPtr systemProperties; + CHECK_ERROR(pVirtualBox, COMGETTER(SystemProperties)(systemProperties.asOutParam())); + ULONG maxPorts = 0; + StorageBus_T enmStorageBus = StorageBus_Null;; + switch (vsdControllerType) + { + case VirtualSystemDescriptionType_HardDiskControllerIDE: + enmStorageBus = StorageBus_IDE; + break; + case VirtualSystemDescriptionType_HardDiskControllerSATA: + enmStorageBus = StorageBus_SATA; + break; + case VirtualSystemDescriptionType_HardDiskControllerSCSI: + enmStorageBus = StorageBus_SCSI; + break; + case VirtualSystemDescriptionType_HardDiskControllerSAS: + enmStorageBus = StorageBus_SAS; + break; + default: // Not reached since vsdControllerType validated above but silence gcc. + break; + } + CHECK_ERROR_RET(systemProperties, GetMaxPortCountForStorageBus(enmStorageBus, &maxPorts), + RTEXITCODE_FAILURE); + if (uTargetControllerPort >= maxPorts) + return errorSyntax(USAGE_IMPORTAPPLIANCE, + "Illegal port value: %u. For %ls controllers the only valid values " + "are 0 to %lu (inclusive)", + uTargetControllerPort, + aVBoxValues[uTargetController], + maxPorts); + + /* + * The 'strOverride' string will be mapped to the strExtraConfigCurrent value in + * VirtualSystemDescription::setFinalValues() which is then used in the appliance + * import routines i_importVBoxMachine()/i_importMachineGeneric() later. This + * aExtraConfigValues[] array entry must have a format of + * 'controller=;channel=' as per the API documentation. + */ + strExtraConfigValue = Utf8StrFmt("controller=%u;port=%u", uTargetController, + uTargetControllerPort); + strOverride = Utf8StrFmt("controller=%u;channel=%u", uTargetController, + uTargetControllerPort); Bstr bstrExtraConfigValue = strOverride; bstrExtraConfigValue.detachTo(&aExtraConfigValues[a]); - RTPrintf("%2u: Hard disk image: source image=%ls, target path=%ls, %ls\n", - a, - aOvfValues[a], - aVBoxValues[a], - aExtraConfigValues[a]); } -#endif + + if (fDiskChanged && !fControllerChanged && !fControllerPortChanged) + { + RTPrintf("%2u: " + "Hard disk image specified with --disk: source image=%ls, target path=%ls, %s" + "\n (change controller with \"--vsys %u --unit %u --controller \";" + "\n change controller port with \"--vsys %u --unit %u --port \")\n", + a, + aOvfValues[a], + bstrFinalValue.raw(), + strExtraConfigValue.c_str(), + i, a, + i, a); + } + else if (fDiskChanged && fControllerChanged && !fControllerPortChanged) + { + RTPrintf("%2u: " + "Hard disk image specified with --disk and --controller: source image=%ls, target path=%ls, %s" + "\n (change controller port with \"--vsys %u --unit %u --port \")\n", + a, + aOvfValues[a], + bstrFinalValue.raw(), + strExtraConfigValue.c_str(), + i, a); + } + else if (fDiskChanged && !fControllerChanged && fControllerPortChanged) + { + RTPrintf("%2u: " + "Hard disk image specified with --disk and --port: source image=%ls, target path=%ls, %s" + "\n (change controller with \"--vsys %u --unit %u --controller \")\n", + a, + aOvfValues[a], + bstrFinalValue.raw(), + strExtraConfigValue.c_str(), + i, a); + } + else if (!fDiskChanged && fControllerChanged && fControllerPortChanged) + { + RTPrintf("%2u: " + "Hard disk image specified with --controller and --port: source image=%ls, target path=%ls, %s" + "\n (change target path with \"--vsys %u --unit %u --disk path\")\n", + a, + aOvfValues[a], + bstrFinalValue.raw(), + strExtraConfigValue.c_str(), + i, a); + } + else if (!fDiskChanged && !fControllerChanged && fControllerPortChanged) + { + RTPrintf("%2u: " + "Hard disk image specified with --port: source image=%ls, target path=%ls, %s" + "\n (change target path with \"--vsys %u --unit %u --disk path\";" + "\n change controller with \"--vsys %u --unit %u --controller \")\n", + a, + aOvfValues[a], + bstrFinalValue.raw(), + strExtraConfigValue.c_str(), + i, a, + i, a); + } + else if (!fDiskChanged && fControllerChanged && !fControllerPortChanged) + { + RTPrintf("%2u: " + "Hard disk image specified with --controller: source image=%ls, target path=%ls, %s" + "\n (change target path with \"--vsys %u --unit %u --disk path\";" + "\n change controller port with \"--vsys %u --unit %u --port \")\n", + a, + aOvfValues[a], + bstrFinalValue.raw(), + strExtraConfigValue.c_str(), + i, a, + i, a); + } + else if (fDiskChanged && fControllerChanged && fControllerPortChanged) + { + RTPrintf("%2u: " + "Hard disk image specified with --disk and --controller and --port: " + "source image=%ls, target path=%ls, %s\n", + a, + aOvfValues[a], + bstrFinalValue.raw(), + strExtraConfigValue.c_str()); + } else { strOverride = aVBoxValues[a]; @@ -830,7 +1072,7 @@ * Appliance::i_findMediumFormatFromDiskImage() * and creating one new function which returns * struct ovf::DiskImage for currently processed disk. - */ + */ /* * if user wants to convert all imported disks to VDI format @@ -899,14 +1141,16 @@ bstrFinalValue = strOverride; - RTPrintf("%2u: Hard disk image: source image=%ls, target path=%ls, %ls" + RTPrintf("%2u: Hard disk image: source image=%ls, target path=%ls, %s" "\n (change target path with \"--vsys %u --unit %u --disk path\";" + "\n change controller with \"--vsys %u --unit %u --controller \";" + "\n change controller port with \"--vsys %u --unit %u --port \";" "\n disable with \"--vsys %u --unit %u --ignore\")\n", - a, - aOvfValues[a], - bstrFinalValue.raw(), - aExtraConfigValues[a], - i, a, i, a); + a, aOvfValues[a], bstrFinalValue.raw(), strExtraConfigValue.c_str(), + i, a, + i, a, + i, a, + i, a); } } break; diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Frontends/VBoxManage/VBoxManageNATNetwork.cpp virtualbox-6.1.34-dfsg/src/VBox/Frontends/VBoxManage/VBoxManageNATNetwork.cpp --- virtualbox-6.1.32-dfsg/src/VBox/Frontends/VBoxManage/VBoxManageNATNetwork.cpp 2022-01-13 18:56:58.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Frontends/VBoxManage/VBoxManageNATNetwork.cpp 2022-03-22 23:44:14.000000000 +0000 @@ -90,22 +90,32 @@ do { Bstr strVal; + BOOL fVal; + CHECK_ERROR_BREAK(pNATNet, COMGETTER(NetworkName)(strVal.asOutParam())); - RTPrintf("Name: %ls\n", strVal.raw()); + RTPrintf("Name: %ls\n", strVal.raw()); + CHECK_ERROR_BREAK(pNATNet, COMGETTER(Network)(strVal.asOutParam())); - RTPrintf("Network: %ls\n", strVal.raw()); + RTPrintf("Network: %ls\n", strVal.raw()); + CHECK_ERROR_BREAK(pNATNet, COMGETTER(Gateway)(strVal.asOutParam())); - RTPrintf("Gateway: %ls\n", strVal.raw()); - BOOL fVal; + RTPrintf("Gateway: %ls\n", strVal.raw()); + + CHECK_ERROR_BREAK(pNATNet, COMGETTER(NeedDhcpServer)(&fVal)); + RTPrintf("DHCP Server: %s\n", fVal ? "Yes" : "No"); + CHECK_ERROR_BREAK(pNATNet, COMGETTER(IPv6Enabled)(&fVal)); - RTPrintf("IPv6: %s\n", fVal ? "Yes" : "No"); - if (fVal) - { - CHECK_ERROR_BREAK(pNATNet, COMGETTER(IPv6Prefix)(strVal.asOutParam())); - RTPrintf("IPv6 Prefix: %ls\n", strVal.raw()); - } + RTPrintf("IPv6: %s\n", fVal ? "Yes" : "No"); + + CHECK_ERROR_BREAK(pNATNet, COMGETTER(IPv6Prefix)(strVal.asOutParam())); + RTPrintf("IPv6 Prefix: %ls\n", strVal.raw()); + + CHECK_ERROR_BREAK(pNATNet, COMGETTER(AdvertiseDefaultIPv6RouteEnabled)(&fVal)); + RTPrintf("IPv6 Default: %s\n", fVal ? "Yes" : "No"); + + CHECK_ERROR_BREAK(pNATNet, COMGETTER(Enabled)(&fVal)); - RTPrintf("Enabled: %s\n", fVal ? "Yes" : "No"); + RTPrintf("Enabled: %s\n", fVal ? "Yes" : "No"); /** @todo Add more information here. */ RTPrintf("\n"); @@ -163,10 +173,12 @@ return errorSyntax(USAGE_NATNETWORK, "Not enough parameters"); const char *pNetName = NULL; - const char *pNetworkCidr = NULL; + const char *pPrefixIPv4 = NULL; + const char *pPrefixIPv6 = NULL; int enable = -1; int dhcp = -1; int ipv6 = -1; + int ipv6_default = -1; VPF2DELETE vPfName2Delete; VPF2ADD vPf2Add; @@ -176,18 +188,29 @@ LONG loopback6Offset = 0; /* ignore me */ + enum + { + kNATNetworkIota = 1000, + kNATNetwork_IPv6Default, + kNATNetwork_IPv6Prefix, + }; + static const RTGETOPTDEF g_aNATNetworkIPOptions[] = { - { "--netname", 't', RTGETOPT_REQ_STRING }, - { "--network", 'n', RTGETOPT_REQ_STRING }, - { "--dhcp", 'h', RTGETOPT_REQ_BOOL }, - { "--ipv6", '6', RTGETOPT_REQ_BOOL }, - { "--enable", 'e', RTGETOPT_REQ_NOTHING }, - { "--disable", 'd', RTGETOPT_REQ_NOTHING }, - { "--port-forward-4", 'p', RTGETOPT_REQ_STRING }, - { "--port-forward-6", 'P', RTGETOPT_REQ_STRING }, - { "--loopback-4", 'l', RTGETOPT_REQ_STRING }, - { "--loopback-6", 'L', RTGETOPT_REQ_STRING }, + { "--netname", 't', RTGETOPT_REQ_STRING }, + { "--network", 'n', RTGETOPT_REQ_STRING }, /* old name */ + { "--ipv4-prefix", 'n', RTGETOPT_REQ_STRING }, /* new name */ + { "--dhcp", 'h', RTGETOPT_REQ_BOOL }, + { "--ipv6", '6', RTGETOPT_REQ_BOOL }, /* old name */ + { "--ipv6-default", kNATNetwork_IPv6Default, RTGETOPT_REQ_BOOL }, + { "--ipv6-enable", '6', RTGETOPT_REQ_BOOL }, /* new name */ + { "--ipv6-prefix", kNATNetwork_IPv6Prefix, RTGETOPT_REQ_STRING }, + { "--enable", 'e', RTGETOPT_REQ_NOTHING }, + { "--disable", 'd', RTGETOPT_REQ_NOTHING }, + { "--port-forward-4", 'p', RTGETOPT_REQ_STRING }, + { "--port-forward-6", 'P', RTGETOPT_REQ_STRING }, + { "--loopback-4", 'l', RTGETOPT_REQ_STRING }, + { "--loopback-6", 'L', RTGETOPT_REQ_STRING }, }; int c; @@ -207,9 +230,9 @@ break; case 'n': // --network - if (pNetworkCidr) + if (pPrefixIPv4) return errorSyntax(USAGE_NATNETWORK, "You can only specify --network only once."); - pNetworkCidr = ValueUnion.psz; + pPrefixIPv4 = ValueUnion.psz; break; case 'e': // --enable @@ -236,6 +259,18 @@ ipv6 = ValueUnion.f; break; + case kNATNetwork_IPv6Prefix: + if (pPrefixIPv6) + return errorSyntax(USAGE_NATNETWORK, "You can specify --ipv6-prefix only once."); + pPrefixIPv6 = ValueUnion.psz; + break; + + case kNATNetwork_IPv6Default: // XXX: uwe + if (ipv6_default != -1) + return errorSyntax(USAGE_NATNETWORK, "You can specify --ipv6-default only once."); + ipv6_default = ValueUnion.f; + break; + case 'L': /* ipv6 loopback */ case 'l': /* ipv4 loopback */ if (RTStrCmp(ValueUnion.psz, "delete") == 0) @@ -319,7 +354,7 @@ switch (enmCode) { case OP_ADD: - if (!pNetworkCidr) + if (!pPrefixIPv4) return errorSyntax(USAGE_NATNETWORK, "You need to specify the --network option"); break; case OP_MODIFY: @@ -354,9 +389,9 @@ case OP_ADD: case OP_MODIFY: { - if (pNetworkCidr) + if (pPrefixIPv4) { - CHECK_ERROR(net, COMSETTER(Network)(Bstr(pNetworkCidr).raw())); + CHECK_ERROR(net, COMSETTER(Network)(Bstr(pPrefixIPv4).raw())); if (FAILED(rc)) return errorArgument("Failed to set configuration"); } @@ -367,9 +402,40 @@ return errorArgument("Failed to set configuration"); } - if (ipv6 >= 0) + /* + * If we are asked to disable IPv6, do it early so that + * the same command can also set IPv6 prefix to empty if + * it so wishes. + */ + if (ipv6 == 0) + { + CHECK_ERROR(net, COMSETTER(IPv6Enabled)(FALSE)); + if (FAILED(rc)) + return errorArgument("Failed to set configuration"); + } + + if (pPrefixIPv6) + { + CHECK_ERROR(net, COMSETTER(IPv6Prefix)(Bstr(pPrefixIPv6).raw())); + if (FAILED(rc)) + return errorArgument("Failed to set configuration"); + } + + /* + * If we are asked to enable IPv6, do it late, so that the + * same command can also set IPv6 prefix. + */ + if (ipv6 > 0) + { + CHECK_ERROR(net, COMSETTER(IPv6Enabled)(TRUE)); + if (FAILED(rc)) + return errorArgument("Failed to set configuration"); + } + + if (ipv6_default != -1) { - CHECK_ERROR(net, COMSETTER(IPv6Enabled) ((BOOL)ipv6)); + BOOL fIPv6Default = RT_BOOL(ipv6_default); + CHECK_ERROR(net, COMSETTER(AdvertiseDefaultIPv6RouteEnabled)(fIPv6Default)); if (FAILED(rc)) return errorArgument("Failed to set configuration"); } diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Frontends/VirtualBox/Makefile.kmk virtualbox-6.1.34-dfsg/src/VBox/Frontends/VirtualBox/Makefile.kmk --- virtualbox-6.1.32-dfsg/src/VBox/Frontends/VirtualBox/Makefile.kmk 2022-01-13 18:56:58.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Frontends/VirtualBox/Makefile.kmk 2022-03-22 23:44:15.000000000 +0000 @@ -1188,7 +1188,7 @@ src/VBoxGLSupportInfo.cpp endif -$(call VBOX_SET_VER_INFO_EXE,VirtualBox,VirtualBox Manager,$(VBOX_WINDOWS_ICON_FILE)) +$(call VBOX_SET_VER_INFO_EXE,VirtualBox,VirtualBox Manager,$(VBOX_WINDOWS_ICON_FILE),VirtualBoxGUI) # diff -Nru virtualbox-6.1.32-dfsg/src/VBox/GuestHost/SharedClipboard/clipboard-win.cpp virtualbox-6.1.34-dfsg/src/VBox/GuestHost/SharedClipboard/clipboard-win.cpp --- virtualbox-6.1.32-dfsg/src/VBox/GuestHost/SharedClipboard/clipboard-win.cpp 2022-01-13 18:57:35.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/GuestHost/SharedClipboard/clipboard-win.cpp 2022-03-22 23:44:50.000000000 +0000 @@ -512,7 +512,7 @@ { if ( offStart > 0 && offEnd > 0 - && offEnd > offStart + && offEnd >= offStart && offEnd <= cch) { uint32_t cchSubStr = offEnd - offStart; @@ -573,7 +573,10 @@ * StartFragment = 141(constant) may vary if the header html content will be extended * EndFragment = Header length + fragment length - 38(ending length) * - * @return IPRT status code. + * For more format details, check out: + * https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/platform-apis/aa767917(v=vs.85) + * + * @returns VBox status code. * @param pszSource Source buffer that contains utf-16 string in mime html format * @param cb Size of source buffer in bytes * @param ppszOutput Where to return the allocated output buffer to put converted UTF-8 @@ -585,73 +588,89 @@ */ int SharedClipboardWinConvertMIMEToCFHTML(const char *pszSource, size_t cb, char **ppszOutput, uint32_t *pcbOutput) { - /** - * CF_HTML format description (see also, https://docs.microsoft.com/en-us/previous-versions/ - * windows/internet-explorer/ie-developer/platform-apis/aa767917(v=vs.85)?redirectedfrom=MSDN): - * - * @StartHtml - pos before - * @EndHtml - whole size of text excluding ending zero char (pos after ) - * @StartFragment - pos after - * @EndFragment - pos before - * @note: all values includes CR\LF inserted into text - */ - -#define VBOX_CLIP_CF_HTML_HEADER \ - "Version:1.0\r\n" \ - "StartHTML:000000101\r\n" \ - "EndHTML:%0000009u\r\n" \ - "StartFragment:000000137\r\n" \ - "EndFragment:%0000009u\r\n" \ - "\r\n" \ - "\r\n" \ - "" - -#define VBOX_CLIP_CF_HTML_FOOTER \ - "\r\n" \ - "\r\n" \ - "\r\n" - Assert(ppszOutput); Assert(pcbOutput); Assert(pszSource); Assert(cb); - size_t cchFragment; - int rc; - - char *szFormat = VBOX_CLIP_CF_HTML_HEADER "%s" VBOX_CLIP_CF_HTML_FOOTER; - size_t offEndFragment = sizeof(VBOX_CLIP_CF_HTML_HEADER) - 2 /* '%' chars */ + cb; - size_t offEndHTML = offEndFragment + sizeof(VBOX_CLIP_CF_HTML_FOOTER); - char *pszResult = NULL; - size_t cbResult = sizeof(VBOX_CLIP_CF_HTML_HEADER) + cb + sizeof(VBOX_CLIP_CF_HTML_FOOTER); - - /* Make sure input string is '\0' terminated. */ - rc = RTStrNLenEx(pszSource, cb, &cchFragment); - if (RT_FAILURE(rc)) + /* + * Check that input UTF-8 and properly zero terminated. + * Note! The zero termination may come earlier than 'cb' - 1, that's fine. + */ + int rc = RTStrValidateEncodingEx(pszSource, cb, RTSTR_VALIDATE_ENCODING_ZERO_TERMINATED); + if (RT_SUCCESS(rc)) + { /* likely */ } + else { LogRelFlowFunc(("Error: invalid source fragment. rc = %Rrc\n", rc)); return rc; } + size_t const cchFragment = strlen(pszSource); /* Unfortunately the validator doesn't return the length. */ - pszResult = (char *)RTMemAllocZ(cbResult); - if (pszResult == NULL) - { - LogRel(("Shared Clipboard: cannot allocate memory for HTML clipboard conversion, rc = %Rrc\n", rc)); - return VERR_NO_MEMORY; - } - - /* format result CF_HTML string */ - size_t cchFormatted = RTStrPrintf2(pszResult, cbResult, szFormat, offEndHTML, offEndFragment, pszSource); - if (cchFormatted > 0) - { - *ppszOutput = pszResult; - *pcbOutput = (uint32_t)cchFormatted + 1; - return VINF_SUCCESS; - } - else - LogRel(("Shared Clipboard: cannot format CF_HTML content\n")); + /* + * @StartHtml - Absolute offset of + * @EndHtml - Size of the whole resulting text (excluding ending zero char) + * @StartFragment - Absolute position after + * @EndFragment - Absolute position of + * + * Note! The offset are zero padded to max width so we don't have any variations due to those. + * Note! All values includes CRLFs inserted into text. + * + * Calculations: + * Header length = Format sample length - 2 ('%s') + * EndHtml = Header length + fragment length + * StartHtml = 101(constant) + * StartFragment = 137(constant) + * EndFragment = Header length + fragment length - 38 (ending length) + */ + static const char s_szFormatSample[] = + /* 0: */ "Version:1.0\r\n" + /* 13: */ "StartHTML:000000101\r\n" + /* 34: */ "EndHTML:%0000009u\r\n" // END HTML = Header length + fragment length + /* 53: */ "StartFragment:000000137\r\n" + /* 78: */ "EndFragment:%0000009u\r\n" + /* 101: */ "\r\n" + /* 109: */ "\r\n" + /* 117: */ "" + /* 137: */ "%s" + /* 137+2: */ "\r\n" + /* 157+2: */ "\r\n" + /* 166+2: */ "\r\n" + /* 175+2: */ ; + AssertCompile(sizeof(s_szFormatSample) == 175 + 2 + 1); + + /* Calculate parameters of the CF_HTML header */ + size_t const cchHeader = sizeof(s_szFormatSample) - 2 /*%s*/ - 1 /*'\0'*/; + size_t const offEndHtml = cchHeader + cchFragment; + size_t const offEndFragment = cchHeader + cchFragment - 38; /* 175-137 = 38 */ + char *pszResult = (char *)RTMemAlloc(offEndHtml + 1); + AssertLogRelReturn(pszResult, VERR_NO_MEMORY); + + /* Format resulting CF_HTML string: */ + size_t cchFormatted = RTStrPrintf(pszResult, offEndHtml + 1, s_szFormatSample, offEndHtml, offEndFragment, pszSource); + Assert(offEndHtml == cchFormatted); + +#ifdef VBOX_STRICT + /* + * Check the calculations. + */ + + /* check 'StartFragment:' value */ + static const char s_szStartFragment[] = ""; + const char *pszRealStartFragment = RTStrStr(pszResult, s_szStartFragment); + Assert(&pszRealStartFragment[sizeof(s_szStartFragment) - 1] - pszResult == 137); + + /* check 'EndFragment:' value */ + static const char s_szEndFragment[] = ""; + const char *pszRealEndFragment = RTStrStr(pszResult, s_szEndFragment); + Assert((size_t)(pszRealEndFragment - pszResult) == offEndFragment); +#endif + + *ppszOutput = pszResult; + *pcbOutput = (uint32_t)cchFormatted + 1; + Assert(*pcbOutput == cchFormatted + 1); - return VERR_INVALID_PARAMETER; + return VINF_SUCCESS; } /** diff -Nru virtualbox-6.1.32-dfsg/src/VBox/HostDrivers/adpctl/VBoxNetAdpCtl.cpp virtualbox-6.1.34-dfsg/src/VBox/HostDrivers/adpctl/VBoxNetAdpCtl.cpp --- virtualbox-6.1.32-dfsg/src/VBox/HostDrivers/adpctl/VBoxNetAdpCtl.cpp 2022-01-13 18:57:40.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/HostDrivers/adpctl/VBoxNetAdpCtl.cpp 2022-03-22 23:44:56.000000000 +0000 @@ -276,12 +276,19 @@ #ifdef RT_OS_LINUX /* * Helper class to incapsulate IPv4 address conversion. + * + * Note that this class relies on NetworkAddress to have been used for + * checking validity of IP addresses prior calling any methods of this + * class. */ class AddressIPv4 { public: AddressIPv4(const char *pcszAddress, const char *pcszNetmask = 0) { + m_Prefix = 0; + memset(&m_Address, 0, sizeof(m_Address)); + if (pcszNetmask) m_Prefix = maskToPrefix(pcszNetmask); else @@ -293,49 +300,43 @@ */ m_Prefix = 24; } - inet_pton(AF_INET, pcszAddress, &(m_Address.sin_addr)); + int rc = RTNetStrToIPv4Addr(pcszAddress, &m_Address); + AssertRCReturnVoid(rc); snprintf(m_szAddressAndMask, sizeof(m_szAddressAndMask), "%s/%d", pcszAddress, m_Prefix); - m_Broadcast.sin_addr.s_addr = computeBroadcast(m_Address.sin_addr.s_addr, m_Prefix); - inet_ntop(AF_INET, &(m_Broadcast.sin_addr), m_szBroadcast, sizeof(m_szBroadcast)); + deriveBroadcast(&m_Address, m_Prefix); } const char *getBroadcast() const { return m_szBroadcast; }; const char *getAddressAndMask() const { return m_szAddressAndMask; }; private: - unsigned int maskToPrefix(const char *pcszNetmask); - unsigned long computeBroadcast(unsigned long ulAddress, unsigned int uPrefix); + int maskToPrefix(const char *pcszNetmask); + void deriveBroadcast(PCRTNETADDRIPV4 pcAddress, int uPrefix); - unsigned int m_Prefix; - struct sockaddr_in m_Address; - struct sockaddr_in m_Broadcast; + int m_Prefix; + RTNETADDRIPV4 m_Address; char m_szAddressAndMask[INET_ADDRSTRLEN + 3]; /* e.g. 192.168.56.101/24 */ char m_szBroadcast[INET_ADDRSTRLEN]; }; -unsigned int AddressIPv4::maskToPrefix(const char *pcszNetmask) +int AddressIPv4::maskToPrefix(const char *pcszNetmask) { - unsigned cBits = 0; - unsigned m[4]; + RTNETADDRIPV4 mask; + int prefix = 0; - if (sscanf(pcszNetmask, "%u.%u.%u.%u", &m[0], &m[1], &m[2], &m[3]) == 4) - { - for (int i = 0; i < 4 && m[i]; ++i) - { - int mask = m[i]; - while (mask & 0x80) - { - cBits++; - mask <<= 1; - } - } - } - return cBits; + int rc = RTNetStrToIPv4Addr(pcszNetmask, &mask); + AssertRCReturn(rc, 0); + rc = RTNetMaskToPrefixIPv4(&mask, &prefix); + AssertRCReturn(rc, 0); + + return prefix; } -unsigned long AddressIPv4::computeBroadcast(unsigned long ulAddress, unsigned int uPrefix) +void AddressIPv4::deriveBroadcast(PCRTNETADDRIPV4 pcAddress, int iPrefix) { - /* Note: the address is big-endian. */ - unsigned long ulNetworkMask = (1l << uPrefix) - 1; - return (ulAddress & ulNetworkMask) | ~ulNetworkMask; + RTNETADDRIPV4 mask, broadcast; + int rc = RTNetPrefixToMaskIPv4(iPrefix, &mask); + AssertRCReturnVoid(rc); + broadcast.au32[0] = (pcAddress->au32[0] & mask.au32[0]) | ~mask.au32[0]; + inet_ntop(AF_INET, broadcast.au32, m_szBroadcast, sizeof(m_szBroadcast)); } @@ -857,6 +858,9 @@ virtual bool matches(const char *pcszNetwork); virtual const char *defaultNetwork() { return "192.168.56.1/21"; }; /* Matches defaults in VBox/Main/include/netif.h, see @bugref{10077}. */ + protected: + bool isValidUnicastAddress(PCRTNETADDRIPV4 address); + private: RTNETADDRIPV4 m_address; int m_prefix; @@ -878,7 +882,24 @@ else rc = RTNetStrToIPv4Cidr(pcszIpAddress, &m_address, &m_prefix); #endif - m_fValid = RT_SUCCESS(rc); + m_fValid = RT_SUCCESS(rc) && isValidUnicastAddress(&m_address); +} + +bool NetworkAddressIPv4::isValidUnicastAddress(PCRTNETADDRIPV4 address) +{ + /* Multicast addresses are not allowed. */ + if ((address->au8[0] & 0xF0) == 0xE0) + return false; + + /* Broadcast address is not allowed. */ + if (address->au32[0] == 0xFFFFFFFF) /* Endianess does not matter in this particual case. */ + return false; + + /* Loopback addresses are not allowed. */ + if ((address->au8[0] & 0xFF) == 0x7F) + return false; + + return true; } bool NetworkAddressIPv4::matches(const char *pcszNetwork) diff -Nru virtualbox-6.1.32-dfsg/src/VBox/HostDrivers/Support/Makefile.kmk virtualbox-6.1.34-dfsg/src/VBox/HostDrivers/Support/Makefile.kmk --- virtualbox-6.1.32-dfsg/src/VBox/HostDrivers/Support/Makefile.kmk 2022-01-13 18:57:35.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/HostDrivers/Support/Makefile.kmk 2022-03-22 23:44:51.000000000 +0000 @@ -664,6 +664,7 @@ VBoxDrv_TEMPLATE = VBOXR0DRV VBoxDrv_NAME.freebsd = vboxdrv VBoxDrv_NAME.solaris = vboxdrv + VBoxDrv_NAME.win = VBoxSup ifdef VBOX_SIGNING_MODE VBoxDrv_INSTTYPE.win = none VBoxDrv_DEBUG_INSTTYPE.win = both @@ -851,30 +852,30 @@ ifeq ($(KBUILD_TARGET), win) - INSTALLS.win += VBoxDrv-inf - VBoxDrv-inf_TEMPLATE = VBoxR0DrvInfCat - VBoxDrv-inf_SOURCES = \ - $(PATH_TARGET)/VBoxDrvCat.dir/VBoxDrv.inf - VBoxDrv-inf_CLEAN = $(VBoxDrv-inf_SOURCES) - VBoxDrv-inf_BLDDIRS = $(PATH_TARGET)/VBoxDrvCat.dir + INSTALLS.win += VBoxSup-inf + VBoxSup-inf_TEMPLATE = VBoxR0DrvInfCat + VBoxSup-inf_SOURCES = \ + $(PATH_TARGET)/VBoxSupCat.dir/VBoxSup.inf + VBoxSup-inf_CLEAN = $(VBoxSup-inf_SOURCES) + VBoxSup-inf_BLDDIRS = $(PATH_TARGET)/VBoxSupCat.dir - $(PATH_TARGET)/VBoxDrvCat.dir/VBoxDrv.inf: $(PATH_SUB_CURRENT)/win/VBoxDrv.inf $(MAKEFILE_CURRENT) | $$(dir $$@) - $(call MSG_GENERATE,VBoxDrv-inf,$@,$<) + $(PATH_TARGET)/VBoxSupCat.dir/VBoxSup.inf: $(PATH_SUB_CURRENT)/win/VBoxSup.inf $(MAKEFILE_CURRENT) | $$(dir $$@) + $(call MSG_GENERATE,VBoxSup-inf,$@,$<) $(call VBOX_EDIT_INF_FN,$<,$@) ifdef VBOX_SIGNING_MODE - VBoxDrv-inf_SOURCES += \ - $(PATH_TARGET)/VBoxDrvCat.dir/VBoxDrv.sys \ - $(PATH_TARGET)/VBoxDrvCat.dir/VBoxDrv.cat \ - $(PATH_TARGET)/VBoxDrvCat.dir/VBoxDrv.cat=>VBoxDrv-PreW10.cat - - $(PATH_TARGET)/VBoxDrvCat.dir/VBoxDrv.sys: $$(VBoxDrv_1_TARGET) | $$(dir $$@) - $(INSTALL) -m 644 $< $(@D) - - $(PATH_TARGET)/VBoxDrvCat.dir/VBoxDrv.cat: \ - $(PATH_TARGET)/VBoxDrvCat.dir/VBoxDrv.inf \ - $(PATH_TARGET)/VBoxDrvCat.dir/VBoxDrv.sys - $(call MSG_TOOL,Inf2Cat,VBoxDrv-inf,$@,$<) + VBoxSup-inf_SOURCES += \ + $(PATH_TARGET)/VBoxSupCat.dir/VBoxSup.sys \ + $(PATH_TARGET)/VBoxSupCat.dir/VBoxSup.cat \ + $(PATH_TARGET)/VBoxSupCat.dir/VBoxSup.cat=>VBoxSup-PreW10.cat + + $(PATH_TARGET)/VBoxSupCat.dir/VBoxSup.sys: $$(VBoxDrv_1_TARGET) | $$(dir $$@) + $(INSTALL) -m 644 -- "$<" "$(@D)" + + $(PATH_TARGET)/VBoxSupCat.dir/VBoxSup.cat: \ + $(PATH_TARGET)/VBoxSupCat.dir/VBoxSup.inf \ + $(PATH_TARGET)/VBoxSupCat.dir/VBoxSup.sys + $(call MSG_TOOL,Inf2Cat,VBoxSup-inf,$@,$<) $(call VBOX_MAKE_CAT_FN, $(@D),$@) endif # signing endif # win diff -Nru virtualbox-6.1.32-dfsg/src/VBox/HostDrivers/Support/SUPLibLdr.cpp virtualbox-6.1.34-dfsg/src/VBox/HostDrivers/Support/SUPLibLdr.cpp --- virtualbox-6.1.32-dfsg/src/VBox/HostDrivers/Support/SUPLibLdr.cpp 2022-01-13 18:57:36.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/HostDrivers/Support/SUPLibLdr.cpp 2022-03-22 23:44:51.000000000 +0000 @@ -151,7 +151,8 @@ */ if ( pszModule && *pszModule - && strcmp(pszModule, "VBoxDrv.sys") + && strcmp(pszModule, "VBoxSup.sys") + && strcmp(pszModule, "VBoxDrv.sys") /* old name */ && strcmp(pszModule, "VMMR0.r0")) { #if defined(RT_OS_WINDOWS) && 0 /* Useful for VMMR0 hacking, not for production use. See also SUPDrv-win.cpp */ diff -Nru virtualbox-6.1.32-dfsg/src/VBox/HostDrivers/Support/SUPR0-def-pe.sed virtualbox-6.1.34-dfsg/src/VBox/HostDrivers/Support/SUPR0-def-pe.sed --- virtualbox-6.1.32-dfsg/src/VBox/HostDrivers/Support/SUPR0-def-pe.sed 2022-01-13 18:57:36.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/HostDrivers/Support/SUPR0-def-pe.sed 2022-03-22 23:44:51.000000000 +0000 @@ -67,7 +67,7 @@ i\; Autogenerated. DO NOT EDIT! i\; i -i\LIBRARY VBoxDrv.sys +i\LIBRARY VBoxSup.sys i i\EXPORTS d diff -Nru virtualbox-6.1.32-dfsg/src/VBox/HostDrivers/Support/SUPR3HardenedMain.cpp virtualbox-6.1.34-dfsg/src/VBox/HostDrivers/Support/SUPR3HardenedMain.cpp --- virtualbox-6.1.32-dfsg/src/VBox/HostDrivers/Support/SUPR3HardenedMain.cpp 2022-01-13 18:57:36.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/HostDrivers/Support/SUPR3HardenedMain.cpp 2022-03-22 23:44:51.000000000 +0000 @@ -1733,7 +1733,7 @@ /* We'll fork before we make the call because that way the session management in main will see us exiting immediately (if it's involved with us) and possibly get an error back to the API / user. */ -#if !defined(RT_OS_WINDOWS) && !defined(RT_OS_OS2) +#if !defined(RT_OS_WINDOWS) && !defined(RT_OS_OS2) && /* @bugref{10170}: */ !defined(RT_OS_DARWIN) int pid = fork(); if (pid <= 0) #endif diff -Nru virtualbox-6.1.32-dfsg/src/VBox/HostDrivers/Support/win/SUPLib-win.cpp virtualbox-6.1.34-dfsg/src/VBox/HostDrivers/Support/win/SUPLib-win.cpp --- virtualbox-6.1.32-dfsg/src/VBox/HostDrivers/Support/win/SUPLib-win.cpp 2022-01-13 18:57:37.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/HostDrivers/Support/win/SUPLib-win.cpp 2022-03-22 23:44:53.000000000 +0000 @@ -66,7 +66,7 @@ * Defined Constants And Macros * *********************************************************************************************************************************/ /** The support service name. */ -#define SERVICE_NAME "VBoxDrv" +#define SERVICE_NAME "VBoxSup" /********************************************************************************************************************************* @@ -314,10 +314,10 @@ if (hSMgrCreate != NULL) { char szDriver[RTPATH_MAX]; - rc = RTPathExecDir(szDriver, sizeof(szDriver) - sizeof("\\VBoxDrv.sys")); + rc = RTPathExecDir(szDriver, sizeof(szDriver) - sizeof("\\VBoxSup.sys")); if (RT_SUCCESS(rc)) { - strcat(szDriver, "\\VBoxDrv.sys"); + strcat(szDriver, "\\VBoxSup.sys"); SC_HANDLE hService = CreateService(hSMgrCreate, SERVICE_NAME, "VBox Support Driver", @@ -431,47 +431,64 @@ */ int suplibOsDeleteService(void) { - /* - * Assume it didn't exist, so we'll create the service. - */ - int rc; + int rcRet = VINF_SUCCESS; SC_HANDLE hSMgr = OpenSCManager(NULL, NULL, SERVICE_CHANGE_CONFIG); DWORD dwErr = GetLastError(); AssertMsg(hSMgr, ("OpenSCManager(,,delete) failed rc=%d\n", dwErr)); if (hSMgr) { - SC_HANDLE hService = OpenService(hSMgr, SERVICE_NAME, DELETE); + /* + * Old service name. + */ + SC_HANDLE hService = OpenService(hSMgr, "VBoxDrv", DELETE); if (hService) { - /* - * Delete the service. - */ - if (DeleteService(hService)) - rc = VINF_SUCCESS; - else + if (!DeleteService(hService)) { dwErr = GetLastError(); - AssertMsgFailed(("DeleteService failed dwErr=%Rwa\n", dwErr)); - rc = RTErrConvertFromWin32(dwErr); + AssertMsgFailed(("DeleteService failed for VBoxDrv dwErr=%Rwa\n", dwErr)); + rcRet = RTErrConvertFromWin32(dwErr); } CloseServiceHandle(hService); } else { dwErr = GetLastError(); - if (dwErr == ERROR_SERVICE_DOES_NOT_EXIST) - rc = VINF_SUCCESS; - else + if (dwErr != ERROR_SERVICE_DOES_NOT_EXIST) { - AssertMsgFailed(("OpenService failed dwErr=%Rwa\n", dwErr)); - rc = RTErrConvertFromWin32(dwErr); + AssertMsgFailed(("OpenService failed for VBoxDrv dwErr=%Rwa\n", dwErr)); + rcRet = RTErrConvertFromWin32(dwErr); + } + } + + /* + * The new service. + */ + hService = OpenService(hSMgr, SERVICE_NAME, DELETE); + if (hService) + { + if (!DeleteService(hService)) + { + dwErr = GetLastError(); + AssertMsgFailed(("DeleteService for " SERVICE_NAME " failed dwErr=%Rwa\n", dwErr)); + rcRet = RTErrConvertFromWin32(dwErr); + } + CloseServiceHandle(hService); + } + else + { + dwErr = GetLastError(); + if (dwErr != ERROR_SERVICE_DOES_NOT_EXIST) + { + AssertMsgFailed(("OpenService failed for " SERVICE_NAME " dwErr=%Rwa\n", dwErr)); + rcRet = RTErrConvertFromWin32(dwErr); } } CloseServiceHandle(hSMgr); } else - rc = RTErrConvertFromWin32(dwErr); - return rc; + rcRet = RTErrConvertFromWin32(dwErr); + return rcRet; } #if 0 @@ -495,10 +512,10 @@ if (hService) { char szDriver[RTPATH_MAX]; - int rc = RTPathExecDir(szDriver, sizeof(szDriver) - sizeof("\\VBoxDrv.sys")); + int rc = RTPathExecDir(szDriver, sizeof(szDriver) - sizeof("\\VBoxSup.sys")); if (RT_SUCCESS(rc)) { - strcat(szDriver, "\\VBoxDrv.sys"); + strcat(szDriver, "\\VBoxSup.sys"); SC_LOCK hLock = LockServiceDatabase(hSMgr); if (ChangeServiceConfig(hService, diff -Nru virtualbox-6.1.32-dfsg/src/VBox/HostDrivers/Support/win/VBoxDrv.inf virtualbox-6.1.34-dfsg/src/VBox/HostDrivers/Support/win/VBoxDrv.inf --- virtualbox-6.1.32-dfsg/src/VBox/HostDrivers/Support/win/VBoxDrv.inf 2022-01-13 18:57:37.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/HostDrivers/Support/win/VBoxDrv.inf 1970-01-01 00:00:00.000000000 +0000 @@ -1,88 +0,0 @@ -; $Id: VBoxDrv.inf $ -;; @file -; VirtualBox Support Driver - Windows Driver INF file. -; - -; -; Copyright (C) 2006-2020 Oracle Corporation -; -; This file is part of VirtualBox Open Source Edition (OSE), as -; available from http://www.virtualbox.org. This file is free software; -; you can redistribute it and/or modify it under the terms of the GNU -; General Public License (GPL) as published by the Free Software -; Foundation, in version 2 as it comes in the "COPYING" file of the -; VirtualBox OSE distribution. VirtualBox OSE is distributed in the -; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. -; -; The contents of this file may alternatively be used under the terms -; of the Common Development and Distribution License Version 1.0 -; (CDDL) only, as it comes in the "COPYING.CDDL" file of the -; VirtualBox OSE distribution, in which case the provisions of the -; CDDL are applicable instead of those of the GPL. -; -; You may elect to license modified versions of this file under the -; terms and conditions of either the GPL or the CDDL or both. -; - -[Version] -Signature="$Windows NT$" -Class=System -ClassGuid={4d36e97d-e325-11ce-bfc1-08002be10318} -Provider=%ORACLE% -;edit-DriverVer=08/26/2008,2.00.0000 -DriverPackageType=KernelService -;cat CatalogFile=VBoxDrv.cat - -[DestinationDirs] -DefaultDestDir = 12 - -[DefaultInstall@DOT-NT-ARCH@] -CopyFiles=VBoxDrv_CopyFiles - -[DefaultInstall@DOT-NT-ARCH@.Services] -AddService=VBoxDrv,0x00000002,VBoxDrv_Service - -[DefaultUninstall@DOT-NT-ARCH@] -DefFiles=VBoxDrv_CopyFiles - -[DefaultUninstall@DOT-NT-ARCH@.Services] -DelService=VBoxDrv,0x00000200 - -;; This doesn't actually work either (see VBoxUSBMon), though it triggers in the -;; installer rather at manual installation on my test system (could be polluted & confused). -;; This may apparently also causes unloading trouble due to 'root\VBoxDrv' or something related to that. -;; [Manufacturer] -;; %ORACLE%=Oracle@COMMA-NT-ARCH@ -;; -;; ; Models section (referenced by [Manufacturer]). -;; [Oracle@DOT-NT-ARCH@] -;; %VBoxDrv.DRVDESC%=VBoxDrvInstall,root\VBoxDrv -;; -;; [VBoxDrvInstall@DOT-NT-ARCH@] -;; CopyFiles=VBoxDrv_CopyFiles -;; -;; [VBoxDrvInstall@DOT-NT-ARCH@.Services] -;; AddService=VBoxDrv,0x00000002,VBoxDrv_Service - -[SourceDisksFiles] -VBoxDrv.sys=1 - -[SourceDisksNames] -1=%VBoxDrv.DSKDESC%, - -[VBoxDrv_CopyFiles] -VBoxDrv.sys - -[VBoxDrv_Service] -DisplayName = %VBoxDrv.SVCDESC% -ServiceType = 1 ; SERVICE_KERNEL_DRIVER -;StartType = 3 ; SERVICE_DEMAND_START -StartType = 1 ; autostart to fix Vista problem -ErrorControl = 1 ; SERVICE_ERROR_NORMAL -ServiceBinary = %12%\VBoxDrv.sys - -[Strings] -ORACLE = "Oracle Corporation" -VBoxDrv.SVCDESC = "VirtualBox Service" -VBoxDrv.DRVDESC = "VirtualBox Driver" -VBoxDrv.DSKDESC = "VirtualBox Driver Installation Disk" diff -Nru virtualbox-6.1.32-dfsg/src/VBox/HostDrivers/Support/win/VBoxDrv.rc virtualbox-6.1.34-dfsg/src/VBox/HostDrivers/Support/win/VBoxDrv.rc --- virtualbox-6.1.32-dfsg/src/VBox/HostDrivers/Support/win/VBoxDrv.rc 2022-01-13 18:57:37.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/HostDrivers/Support/win/VBoxDrv.rc 2022-03-22 23:44:53.000000000 +0000 @@ -43,8 +43,8 @@ BLOCK "040904b0" // Lang=US English, CharSet=Unicode BEGIN VALUE "FileDescription", "VirtualBox Support Driver\0" - VALUE "InternalName", "VBoxDrv\0" - VALUE "OriginalFilename", "VBoxDrv.sys\0" + VALUE "InternalName", "VBoxSup\0" + VALUE "OriginalFilename", "VBoxSup.sys\0" VALUE "CompanyName", VBOX_RC_COMPANY_NAME VALUE "FileVersion", VBOX_RC_FILE_VERSION_STR VALUE "LegalCopyright", VBOX_RC_LEGAL_COPYRIGHT diff -Nru virtualbox-6.1.32-dfsg/src/VBox/HostDrivers/Support/win/VBoxSup.inf virtualbox-6.1.34-dfsg/src/VBox/HostDrivers/Support/win/VBoxSup.inf --- virtualbox-6.1.32-dfsg/src/VBox/HostDrivers/Support/win/VBoxSup.inf 1970-01-01 00:00:00.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/HostDrivers/Support/win/VBoxSup.inf 2022-03-22 23:44:53.000000000 +0000 @@ -0,0 +1,88 @@ +; $Id: VBoxSup.inf $ +;; @file +; VirtualBox Support Driver - Windows Driver INF file. +; + +; +; Copyright (C) 2006-2022 Oracle Corporation +; +; This file is part of VirtualBox Open Source Edition (OSE), as +; available from http://www.virtualbox.org. This file is free software; +; you can redistribute it and/or modify it under the terms of the GNU +; General Public License (GPL) as published by the Free Software +; Foundation, in version 2 as it comes in the "COPYING" file of the +; VirtualBox OSE distribution. VirtualBox OSE is distributed in the +; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. +; +; The contents of this file may alternatively be used under the terms +; of the Common Development and Distribution License Version 1.0 +; (CDDL) only, as it comes in the "COPYING.CDDL" file of the +; VirtualBox OSE distribution, in which case the provisions of the +; CDDL are applicable instead of those of the GPL. +; +; You may elect to license modified versions of this file under the +; terms and conditions of either the GPL or the CDDL or both. +; + +[Version] +Signature="$Windows NT$" +Class=System +ClassGuid={4d36e97d-e325-11ce-bfc1-08002be10318} +Provider=%ORACLE% +;edit-DriverVer=08/26/2008,2.00.0000 +DriverPackageType=KernelService +;cat CatalogFile=VBoxSup.cat + +[DestinationDirs] +DefaultDestDir = 12 + +[DefaultInstall@DOT-NT-ARCH@] +CopyFiles=VBoxSup_CopyFiles + +[DefaultInstall@DOT-NT-ARCH@.Services] +AddService=VBoxSup,0x00000002,VBoxSup_Service + +[DefaultUninstall@DOT-NT-ARCH@] +DefFiles=VBoxSup_CopyFiles + +[DefaultUninstall@DOT-NT-ARCH@.Services] +DelService=VBoxSup,0x00000200 + +;; This doesn't actually work either (see VBoxUSBMon), though it triggers in the +;; installer rather at manual installation on my test system (could be polluted & confused). +;; This may apparently also causes unloading trouble due to 'root\VBoxSup' or something related to that. +;; [Manufacturer] +;; %ORACLE%=Oracle@COMMA-NT-ARCH@ +;; +;; ; Models section (referenced by [Manufacturer]). +;; [Oracle@DOT-NT-ARCH@] +;; %VBoxSup.DRVDESC%=VBoxSupInstall,root\VBoxSup +;; +;; [VBoxSupInstall@DOT-NT-ARCH@] +;; CopyFiles=VBoxSup_CopyFiles +;; +;; [VBoxSupInstall@DOT-NT-ARCH@.Services] +;; AddService=VBoxSup,0x00000002,VBoxSup_Service + +[SourceDisksFiles] +VBoxSup.sys=1 + +[SourceDisksNames] +1=%VBoxSup.DSKDESC%, + +[VBoxSup_CopyFiles] +VBoxSup.sys + +[VBoxSup_Service] +DisplayName = %VBoxSup.SVCDESC% +ServiceType = 1 ; SERVICE_KERNEL_DRIVER +;StartType = 3 ; SERVICE_DEMAND_START +StartType = 1 ; autostart to fix Vista problem +ErrorControl = 1 ; SERVICE_ERROR_NORMAL +ServiceBinary = %12%\VBoxSup.sys + +[Strings] +ORACLE = "Oracle Corporation" +VBoxSup.SVCDESC = "VirtualBox Service" +VBoxSup.DRVDESC = "VirtualBox Support Driver" +VBoxSup.DSKDESC = "VirtualBox Support Driver Installation Disk" diff -Nru virtualbox-6.1.32-dfsg/src/VBox/HostDrivers/VBoxNetAdp/linux/VBoxNetAdp-linux.c virtualbox-6.1.34-dfsg/src/VBox/HostDrivers/VBoxNetAdp/linux/VBoxNetAdp-linux.c --- virtualbox-6.1.32-dfsg/src/VBox/HostDrivers/VBoxNetAdp/linux/VBoxNetAdp-linux.c 2022-01-13 18:57:38.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/HostDrivers/VBoxNetAdp/linux/VBoxNetAdp-linux.c 2022-03-22 23:44:53.000000000 +0000 @@ -66,6 +66,13 @@ #define VBOXNETADP_FROM_IFACE(iface) ((PVBOXNETADP) ifnet_softc(iface)) +/** Set netdev MAC address. */ +#if RTLNX_VER_MIN(5,17,0) +# define VBOX_DEV_ADDR_SET(dev, addr, len) dev_addr_mod(dev, 0, addr, len) +#else /* < 5.17.0 */ +# define VBOX_DEV_ADDR_SET(dev, addr, len) memcpy(dev->dev_addr, addr, len) +#endif + /********************************************************************************************************************************* * Internal Functions * @@ -303,7 +310,7 @@ if (pNetDev->dev_addr) { - memcpy(pNetDev->dev_addr, pMACAddress, ETH_ALEN); + VBOX_DEV_ADDR_SET(pNetDev, pMACAddress, ETH_ALEN); Log2(("vboxNetAdpOsCreate: pNetDev->dev_addr = %.6Rhxd\n", pNetDev->dev_addr)); /* diff -Nru virtualbox-6.1.32-dfsg/src/VBox/HostDrivers/VBoxNetFlt/linux/VBoxNetFlt-linux.c virtualbox-6.1.34-dfsg/src/VBox/HostDrivers/VBoxNetFlt/linux/VBoxNetFlt-linux.c --- virtualbox-6.1.32-dfsg/src/VBox/HostDrivers/VBoxNetFlt/linux/VBoxNetFlt-linux.c 2022-01-13 18:57:38.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/HostDrivers/VBoxNetFlt/linux/VBoxNetFlt-linux.c 2022-03-22 23:44:54.000000000 +0000 @@ -733,7 +733,7 @@ { default: AssertMsgFailed(("%u (%s)\n", pSG->GsoCtx.u8Type, PDMNetGsoTypeName((PDMNETWORKGSOTYPE)pSG->GsoCtx.u8Type) )); - /* fall thru */ + RT_FALL_THRU(); case PDMNETWORKGSOTYPE_INVALID: fGsoType = 0; break; diff -Nru virtualbox-6.1.32-dfsg/src/VBox/HostDrivers/win/loadall.cmd virtualbox-6.1.34-dfsg/src/VBox/HostDrivers/win/loadall.cmd --- virtualbox-6.1.32-dfsg/src/VBox/HostDrivers/win/loadall.cmd 2022-01-13 18:57:40.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/HostDrivers/win/loadall.cmd 2022-03-22 23:44:56.000000000 +0000 @@ -50,7 +50,7 @@ rem rem Display device states. rem -for %%i in (VBoxNetAdp VBoxNetAdp6 VBoxNetFlt VBoxNetLwf VBoxUSBMon VBoxUSB VBoxDrv) do ( +for %%i in (VBoxNetAdp VBoxNetAdp6 VBoxNetFlt VBoxNetLwf VBoxUSBMon VBoxUSB VBoxSup) do ( set type= for /f "usebackq tokens=*" %%f in (`sc query %%i`) do (set xxx=%%f&&if "!xxx:~0,5!" =="STATE" set type=!xxx!) for /f "usebackq tokens=2 delims=:" %%f in ('!type!') do set type=%%f @@ -88,7 +88,7 @@ echo ** set MY_FAILED=no for %%i in (^ - VBoxDrv.sys VBoxDrv.inf VBoxDrv.cat VBoxDrv-PreW10.cat ^ + VBoxSup.sys VBoxSup.inf VBoxSup.cat VBoxSup-PreW10.cat ^ VBoxNetAdp.sys VBoxNetAdp.inf VBoxNetAdp.cat ^ VBoxNetAdp6.sys VBoxNetAdp6.inf VBoxNetAdp6.cat VBoxNetAdp6-PreW10.cat ^ VBoxNetFlt.sys VBoxNetFlt.inf VBoxNetFlt.cat VBoxNetFltNobj.dll ^ diff -Nru virtualbox-6.1.32-dfsg/src/VBox/HostDrivers/win/load.cmd virtualbox-6.1.34-dfsg/src/VBox/HostDrivers/win/load.cmd --- virtualbox-6.1.32-dfsg/src/VBox/HostDrivers/win/load.cmd 2022-01-13 18:57:40.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/HostDrivers/win/load.cmd 2022-03-22 23:44:56.000000000 +0000 @@ -50,7 +50,7 @@ rem rem Display device states. rem -for %%i in (VBoxNetAdp VBoxNetAdp6 VBoxNetFlt VBoxNetLwf VBoxUSBMon VBoxUSB VBoxDrv) do ( +for %%i in (VBoxNetAdp VBoxNetAdp6 VBoxNetFlt VBoxNetLwf VBoxUSBMon VBoxUSB VBoxSup) do ( set type= for /f "usebackq tokens=*" %%f in (`sc query %%i`) do (set xxx=%%f&&if "!xxx:~0,5!" =="STATE" set type=!xxx!) for /f "usebackq tokens=2 delims=:" %%f in ('!type!') do set type=%%f @@ -87,7 +87,7 @@ echo ** Copying drivers into %MY_ALTDIR%... echo ** set MY_FAILED=no -for %%i in (VBoxDrv.sys VBoxDrv.inf VBoxDrv.cat) do if exist "%MY_DIR%\%%i" (copy "%MY_DIR%\%%i" "%MY_ALTDIR%\%%i" || set MY_FAILED=yes) +for %%i in (VBoxSup.sys VBoxSup.inf VBoxSup.cat) do if exist "%MY_DIR%\%%i" (copy "%MY_DIR%\%%i" "%MY_ALTDIR%\%%i" || set MY_FAILED=yes) if "%MY_FAILED%" == "yes" goto end rem diff -Nru virtualbox-6.1.32-dfsg/src/VBox/HostServices/SharedClipboard/testcase/Makefile.kmk virtualbox-6.1.34-dfsg/src/VBox/HostServices/SharedClipboard/testcase/Makefile.kmk --- virtualbox-6.1.32-dfsg/src/VBox/HostServices/SharedClipboard/testcase/Makefile.kmk 2022-01-13 18:57:41.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/HostServices/SharedClipboard/testcase/Makefile.kmk 2022-03-22 23:44:57.000000000 +0000 @@ -29,6 +29,8 @@ $(PATH_ROOT)/src/VBox/GuestHost/SharedClipboard/clipboard-common.cpp \ $(PATH_ROOT)/src/VBox/HostServices/common/message.cpp \ tstClipboardServiceHost.cpp + tstClipboardServiceHost_SOURCES.win = \ + $(PATH_ROOT)/src/VBox/GuestHost/SharedClipboard/clipboard-win.cpp if defined(VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS) tstClipboardServiceHost_DEFS += VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS diff -Nru virtualbox-6.1.32-dfsg/src/VBox/HostServices/SharedClipboard/testcase/.scm-settings virtualbox-6.1.34-dfsg/src/VBox/HostServices/SharedClipboard/testcase/.scm-settings --- virtualbox-6.1.32-dfsg/src/VBox/HostServices/SharedClipboard/testcase/.scm-settings 1970-01-01 00:00:00.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/HostServices/SharedClipboard/testcase/.scm-settings 2022-03-22 23:44:57.000000000 +0000 @@ -0,0 +1,19 @@ +# $Id: .scm-settings $ +## @file +# Source code massager settings for the host HGCM services. +# + +# +# Copyright (C) 2019-2022 Oracle Corporation +# +# This file is part of VirtualBox Open Source Edition (OSE), as +# available from http://www.virtualbox.org. This file is free software; +# you can redistribute it and/or modify it under the terms of the GNU +# General Public License (GPL) as published by the Free Software +# Foundation, in version 2 as it comes in the "COPYING" file of the +# VirtualBox OSE distribution. VirtualBox OSE is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. +# + +--filter-out-files *.txt +/*.h: --guard-relative-to-dir . diff -Nru virtualbox-6.1.32-dfsg/src/VBox/HostServices/SharedClipboard/testcase/tstClipboardServiceHost.cpp virtualbox-6.1.34-dfsg/src/VBox/HostServices/SharedClipboard/testcase/tstClipboardServiceHost.cpp --- virtualbox-6.1.32-dfsg/src/VBox/HostServices/SharedClipboard/testcase/tstClipboardServiceHost.cpp 2022-01-13 18:57:41.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/HostServices/SharedClipboard/testcase/tstClipboardServiceHost.cpp 2022-03-22 23:44:57.000000000 +0000 @@ -18,6 +18,9 @@ #include "../VBoxSharedClipboardSvc-internal.h" #include +#ifdef RT_OS_WINDOWS +# include +#endif #include #include @@ -277,6 +280,85 @@ testSetHeadless(); } +#ifdef RT_OS_WINDOWS +# include "VBoxOrgCfHtml1.h" /* From chrome 97.0.4692.71 */ +# include "VBoxOrgMimeHtml1.h" + +static void testHtmlCf(void) +{ + RTTestISub("CF_HTML"); + + char *pszOutput = NULL; + uint32_t cbOutput = UINT32_MAX/2; + RTTestIDisableAssertions(); + RTTESTI_CHECK_RC(SharedClipboardWinConvertCFHTMLToMIME("", 0, &pszOutput, &cbOutput), VERR_INVALID_PARAMETER); + RTTestIRestoreAssertions(); + + pszOutput = NULL; + cbOutput = UINT32_MAX/2; + RTTESTI_CHECK_RC(SharedClipboardWinConvertCFHTMLToMIME((char *)&g_abVBoxOrgCfHtml1[0], g_cbVBoxOrgCfHtml1, + &pszOutput, &cbOutput), VINF_SUCCESS); + RTTESTI_CHECK(cbOutput == g_cbVBoxOrgMimeHtml1); + RTTESTI_CHECK(memcmp(pszOutput, g_abVBoxOrgMimeHtml1, cbOutput) == 0); + RTMemFree(pszOutput); + + + static RTSTRTUPLE const s_aRoundTrips[] = + { + { RT_STR_TUPLE("") }, + { RT_STR_TUPLE("1") }, + { RT_STR_TUPLE("12") }, + { RT_STR_TUPLE("123") }, + { RT_STR_TUPLE("1234") }, + { RT_STR_TUPLE("12345") }, + { RT_STR_TUPLE("123456") }, + { RT_STR_TUPLE("1234567") }, + { RT_STR_TUPLE("12345678") }, + { RT_STR_TUPLE("123456789") }, + { RT_STR_TUPLE("1234567890") }, + { RT_STR_TUPLE("

asdfkjhasdflhj

") }, + { RT_STR_TUPLE("

asdfkjhasdflhj

\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0") }, + { (const char *)g_abVBoxOrgMimeHtml1, sizeof(g_abVBoxOrgMimeHtml1) }, + }; + + for (size_t i = 0; i < RT_ELEMENTS(s_aRoundTrips); i++) + { + int rc; + char *pszCfHtml = NULL; + uint32_t cbCfHtml = UINT32_MAX/2; + rc = SharedClipboardWinConvertMIMEToCFHTML(s_aRoundTrips[i].psz, s_aRoundTrips[i].cch + 1, &pszCfHtml, &cbCfHtml); + if (rc == VINF_SUCCESS) + { + if (strlen(pszCfHtml) + 1 != cbCfHtml) + RTTestIFailed("#%u: SharedClipboardWinConvertMIMEToCFHTML(%s, %#zx,,) returned incorrect length: %#x, actual %#zx", + i, s_aRoundTrips[i].psz, s_aRoundTrips[i].cch, cbCfHtml, strlen(pszCfHtml) + 1); + + char *pszHtml = NULL; + uint32_t cbHtml = UINT32_MAX/4; + rc = SharedClipboardWinConvertCFHTMLToMIME(pszCfHtml, (uint32_t)strlen(pszCfHtml), &pszHtml, &cbHtml); + if (rc == VINF_SUCCESS) + { + if (strlen(pszHtml) + 1 != cbHtml) + RTTestIFailed("#%u: SharedClipboardWinConvertCFHTMLToMIME(%s, %#zx,,) returned incorrect length: %#x, actual %#zx", + i, pszHtml, strlen(pszHtml), cbHtml, strlen(pszHtml) + 1); + if (strcmp(pszHtml, s_aRoundTrips[i].psz) != 0) + RTTestIFailed("#%u: roundtrip for '%s' LB %#zx failed, ended up with '%s'", + i, s_aRoundTrips[i].psz, s_aRoundTrips[i].cch, pszHtml); + RTMemFree(pszHtml); + } + else + RTTestIFailed("#%u: SharedClipboardWinConvertCFHTMLToMIME(%s, %#zx,,) returned %Rrc, expected VINF_SUCCESS", + i, pszCfHtml, strlen(pszCfHtml), rc); + RTMemFree(pszCfHtml); + } + else + RTTestIFailed("#%u: SharedClipboardWinConvertMIMEToCFHTML(%s, %#zx,,) returned %Rrc, expected VINF_SUCCESS", + i, s_aRoundTrips[i].psz, s_aRoundTrips[i].cch, rc); + } +} + +#endif /* RT_OS_WINDOWS */ + int main(int argc, char *argv[]) { /* @@ -300,6 +382,9 @@ */ testHostCall(); testGetHostMsgOld(); +#ifdef RT_OS_WINDOWS + testHtmlCf(); +#endif /* * Summary diff -Nru virtualbox-6.1.32-dfsg/src/VBox/HostServices/SharedClipboard/testcase/VBoxOrgCfHtml1.h virtualbox-6.1.34-dfsg/src/VBox/HostServices/SharedClipboard/testcase/VBoxOrgCfHtml1.h --- virtualbox-6.1.32-dfsg/src/VBox/HostServices/SharedClipboard/testcase/VBoxOrgCfHtml1.h 1970-01-01 00:00:00.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/HostServices/SharedClipboard/testcase/VBoxOrgCfHtml1.h 2022-03-22 23:44:57.000000000 +0000 @@ -0,0 +1,155 @@ +/* $Id: VBoxOrgCfHtml1.h $ */ +/** @file + * Shared Clipboard host service test case C data file of VBoxOrgCfHtml1.txt. + */ + +/* + * Copyright (C) 2022 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + */ + +#ifndef VBOX_INCLUDED_SRC_VBoxOrgCfHtml1_h +#define VBOX_INCLUDED_SRC_VBoxOrgCfHtml1_h +#ifndef RT_WITHOUT_PRAGMA_ONCE +# pragma once +#endif + +#include + +const unsigned char g_abVBoxOrgCfHtml1[] = +{ + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x30, 0x2e, 0x39, 0x0d, 0x0a, 0x53, 0x74, 0x61, /* 0x00000000: Version:0.9..Sta */ + 0x72, 0x74, 0x48, 0x54, 0x4d, 0x4c, 0x3a, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x34, /* 0x00000010: rtHTML:000000014 */ + 0x34, 0x0d, 0x0a, 0x45, 0x6e, 0x64, 0x48, 0x54, 0x4d, 0x4c, 0x3a, 0x30, 0x30, 0x30, 0x30, 0x30, /* 0x00000020: 4..EndHTML:00000 */ + 0x30, 0x31, 0x39, 0x36, 0x31, 0x0d, 0x0a, 0x53, 0x74, 0x61, 0x72, 0x74, 0x46, 0x72, 0x61, 0x67, /* 0x00000030: 01961..StartFrag */ + 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x38, 0x30, 0x0d, /* 0x00000040: ment:0000000180. */ + 0x0a, 0x45, 0x6e, 0x64, 0x46, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x30, 0x30, 0x30, /* 0x00000050: .EndFragment:000 */ + 0x30, 0x30, 0x30, 0x31, 0x39, 0x32, 0x35, 0x0d, 0x0a, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x55, /* 0x00000060: 0001925..SourceU */ + 0x52, 0x4c, 0x3a, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x76, /* 0x00000070: RL:https:..www.v */ + 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x62, 0x6f, 0x78, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x0d, 0x0a, /* 0x00000080: irtualbox.org... */ + 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0d, 0x0a, 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0d, 0x0a, /* 0x00000090: .... */ + 0x3c, 0x21, 0x2d, 0x2d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x46, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, /* 0x000000a0: See "<.span>About Vir */ + 0x74, 0x75, 0x61, 0x6c, 0x42, 0x6f, 0x78, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, /* 0x00000520: tualBox<.a>" for an */ + 0x20, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x3c, 0x2f, /* 0x00000770: introduction.<. */ + 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x21, 0x2d, 0x2d, 0x45, 0x6e, 0x64, 0x46, 0x72, 0x61, 0x67, /* 0x00000780: span>..<.body> */ + 0x0d, 0x0a, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x00, /* 0x000007a0: ..<.html>. */ +}; + +const unsigned g_cbVBoxOrgCfHtml1 = sizeof(g_abVBoxOrgCfHtml1); + +#endif /* !VBOX_INCLUDED_SRC_VBoxOrgCfHtml1_h */ Binary files /tmp/tmphkvfjnif/xQ5SRq8juN/virtualbox-6.1.32-dfsg/src/VBox/HostServices/SharedClipboard/testcase/VBoxOrgCfHtml1.txt and /tmp/tmphkvfjnif/RKsOsTg_TL/virtualbox-6.1.34-dfsg/src/VBox/HostServices/SharedClipboard/testcase/VBoxOrgCfHtml1.txt differ diff -Nru virtualbox-6.1.32-dfsg/src/VBox/HostServices/SharedClipboard/testcase/VBoxOrgMimeHtml1.h virtualbox-6.1.34-dfsg/src/VBox/HostServices/SharedClipboard/testcase/VBoxOrgMimeHtml1.h --- virtualbox-6.1.32-dfsg/src/VBox/HostServices/SharedClipboard/testcase/VBoxOrgMimeHtml1.h 1970-01-01 00:00:00.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/HostServices/SharedClipboard/testcase/VBoxOrgMimeHtml1.h 2022-03-22 23:44:57.000000000 +0000 @@ -0,0 +1,142 @@ +/* $Id: VBoxOrgMimeHtml1.h $ */ +/** @file + * Shared Clipboard host service test case C data file of VBoxOrgMimeHtml1.txt. + */ + +/* + * Copyright (C) 2022 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + */ + +#ifndef VBOX_INCLUDED_SRC_VBoxOrgMimeHtml1_h +#define VBOX_INCLUDED_SRC_VBoxOrgMimeHtml1_h +#ifndef RT_WITHOUT_PRAGMA_ONCE +# pragma once +#endif + +#include + +const unsigned char g_abVBoxOrgMimeHtml1[] = +{ + 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x63, 0x6f, 0x6c, /* 0x00000000: See */ + 0x20, 0x22, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x61, 0x20, 0x63, 0x6c, 0x61, 0x73, /* 0x00000240: "<.span>About Virtual */ + 0x42, 0x6f, 0x78, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x73, 0x74, 0x79, /* 0x00000470: Box<.a>" for an int */ + 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, /* 0x000006c0: roduction.<.span */ + 0x3e, 0x00 /* 0x000006d0: > */ +}; + +const unsigned g_cbVBoxOrgMimeHtml1 = sizeof(g_abVBoxOrgMimeHtml1); + +#endif /* !VBOX_INCLUDED_SRC_VBoxOrgMimeHtml1_h */ diff -Nru virtualbox-6.1.32-dfsg/src/VBox/HostServices/SharedClipboard/testcase/VBoxOrgMimeHtml1.txt virtualbox-6.1.34-dfsg/src/VBox/HostServices/SharedClipboard/testcase/VBoxOrgMimeHtml1.txt --- virtualbox-6.1.32-dfsg/src/VBox/HostServices/SharedClipboard/testcase/VBoxOrgMimeHtml1.txt 1970-01-01 00:00:00.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/HostServices/SharedClipboard/testcase/VBoxOrgMimeHtml1.txt 2022-03-22 23:44:57.000000000 +0000 @@ -0,0 +1 @@ +See "About VirtualBox" for an introduction. \ No newline at end of file diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Installer/solaris/Makefile.kmk virtualbox-6.1.34-dfsg/src/VBox/Installer/solaris/Makefile.kmk --- virtualbox-6.1.32-dfsg/src/VBox/Installer/solaris/Makefile.kmk 2022-01-13 18:57:42.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Installer/solaris/Makefile.kmk 2022-03-22 23:44:59.000000000 +0000 @@ -289,17 +289,6 @@ SOLARIS_COMMON_STRIP_BINS.DST := $(VBOX_PATH_SI_SCRATCH_PKG)/opt/VirtualBox/ SOLARIS_COMMON_STRIP_BINS = -## @def SOLARIS_COMMON_64_STRIP_BINS -# List of INST_BIN shared libraries that should be copied into /opt/VirtualBox/64/ and stripped. -SOLARIS_FILE_LIST_VARS += SOLARIS_COMMON_64_STRIP_BINS -SOLARIS_COMMON_64_STRIP_BINS.SUBDIRS := yes -SOLARIS_COMMON_64_STRIP_BINS.STRIP := yes -SOLARIS_COMMON_64_STRIP_BINS.MODE := 0644 -SOLARIS_COMMON_64_STRIP_BINS.SRC := $(PATH_STAGE_BIN) -SOLARIS_COMMON_64_STRIP_BINS.DST := $(VBOX_PATH_SI_SCRATCH_PKG)/opt/VirtualBox/64 -SOLARIS_COMMON_64_STRIP_BINS = - - ## @def SOLARIS_STRIP_EXES # List of exectuables files that are copied from INST_BIN to /opt/VirtualBox/$(VBOX_SI_ARCH)/ and stripped of debug info. SOLARIS_FILE_LIST_VARS += SOLARIS_STRIP_EXES @@ -453,7 +442,7 @@ ifdef VBOX_WITH_32_ON_64_MAIN_API SOLARIS_COMMON_STRIP_BINS += $(SOLARIS_PYTHON_32_ON_64_BINS) endif - SOLARIS_COMMON_64_STRIP_BINS += $(filter-out $(SOLARIS_PYTHON_32_ON_64_BINS), $(notdir $(wildcard $(PATH_STAGE_BIN)/VBoxPython*.so))) + SOLARIS_COMMON_STRIP_BINS += $(filter-out $(SOLARIS_PYTHON_32_ON_64_BINS), $(notdir $(wildcard $(PATH_STAGE_BIN)/VBoxPython*.so))) else SOLARIS_COMMON_STRIP_BINS += $(notdir $(wildcard $(PATH_STAGE_BIN)/VBoxPython*.so))) endif diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Installer/solaris/vbox-ips.mog virtualbox-6.1.34-dfsg/src/VBox/Installer/solaris/vbox-ips.mog --- virtualbox-6.1.32-dfsg/src/VBox/Installer/solaris/vbox-ips.mog 2022-01-13 18:57:43.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Installer/solaris/vbox-ips.mog 2022-03-22 23:45:00.000000000 +0000 @@ -37,13 +37,16 @@ drop> # Drop all API helper libraries for python 2.x other than 2.7 - drop> - drop> - drop> + drop> + drop> + drop> # Ignore dependencies of vboxshell.py set pkg.depend.bypass-generate .*> +# Ignore dependencies on libpython2.7.so* since it's getting phased out + set pkg.depend.bypass-generate .*/libpython2\\.7\\.so.*> + # Tweak: do not try to get the dependencies for libGL.so which is needed by Qt set pkg.depend.runpath /usr/lib/mesa/amd64:$PKGDEPEND_RUNPATH> set pkg.depend.runpath /usr/lib/mesa/amd64:$PKGDEPEND_RUNPATH> diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.cpp virtualbox-6.1.34-dfsg/src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.cpp --- virtualbox-6.1.32-dfsg/src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.cpp 2022-01-13 18:57:43.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.cpp 2022-03-22 23:45:00.000000000 +0000 @@ -1638,3 +1638,90 @@ return ERROR_SUCCESS; } + +/** + * This is used to remove the old VBoxDrv service before installation. + * + * The current service name is VBoxSup but the INF file won't remove the old + * one, so we do it manually to try prevent trouble as the device nodes are the + * same and we would fail starting VBoxSup.sys if VBoxDrv.sys is still loading. + * + * Status code is ignored for now as a reboot should fix most potential trouble + * here (and I don't want to break stuff too badly). + * + * @sa @bugref{10162} + */ +UINT __stdcall UninstallVBoxDrv(MSIHANDLE hModule) +{ + /* + * Try open the service. + */ + SC_HANDLE hSMgr = OpenSCManager(NULL, NULL, SERVICE_CHANGE_CONFIG | SERVICE_STOP | SERVICE_QUERY_STATUS); + if (hSMgr) + { + SC_HANDLE hService = OpenServiceW(hSMgr, L"VBoxDrv", DELETE | SERVICE_STOP | SERVICE_QUERY_STATUS); + if (hService) + { + /* + * Try stop it before we delete it. + */ + SERVICE_STATUS Status = { 0, 0, 0, 0, 0, 0, 0 }; + QueryServiceStatus(hService, &Status); + if (Status.dwCurrentState == SERVICE_STOPPED) + logString(hModule, "VBoxDrv: The service old service was already stopped"); + else + { + logString(hModule, "VBoxDrv: Stopping the service (state %u)", Status.dwCurrentState); + if (ControlService(hService, SERVICE_CONTROL_STOP, &Status)) + { + /* waiting for it to stop: */ + int iWait = 100; + while (Status.dwCurrentState == SERVICE_STOP_PENDING && iWait-- > 0) + { + Sleep(100); + QueryServiceStatus(hService, &Status); + } + + if (Status.dwCurrentState == SERVICE_STOPPED) + logString(hModule, "VBoxDrv: Stopped service"); + else + logString(hModule, "VBoxDrv: Failed to stop the service, status: %u", Status.dwCurrentState); + } + else + { + DWORD const dwErr = GetLastError(); + if ( Status.dwCurrentState == SERVICE_STOP_PENDING + && dwErr == ERROR_SERVICE_CANNOT_ACCEPT_CTRL) + logString(hModule, "VBoxDrv: Failed to stop the service: stop pending, not accepting control messages"); + else + logString(hModule, "VBoxDrv: Failed to stop the service: dwErr=%u status=%u", dwErr, Status.dwCurrentState); + } + } + + /* + * Delete the service, or at least mark it for deletion. + */ + if (DeleteService(hService)) + logString(hModule, "VBoxDrv: Successfully delete service"); + else + logString(hModule, "VBoxDrv: Failed to delete the service: %u", GetLastError()); + + CloseServiceHandle(hService); + } + else + { + DWORD const dwErr = GetLastError(); + if (dwErr == ERROR_SERVICE_DOES_NOT_EXIST) + logString(hModule, "VBoxDrv: Nothing to do, the old service does not exist"); + else + logString(hModule, "VBoxDrv: Failed to open the service: %u", dwErr); + } + + CloseServiceHandle(hSMgr); + } + else + logString(hModule, "VBoxDrv: Failed to open service manager (%u).", GetLastError()); + + return ERROR_SUCCESS; +} + diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.def virtualbox-6.1.34-dfsg/src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.def --- virtualbox-6.1.32-dfsg/src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.def 2022-01-13 18:57:43.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.def 2022-03-22 23:45:00.000000000 +0000 @@ -28,6 +28,7 @@ InstallNetLwf UninstallNetLwf UninstallTAPInstances + UninstallVBoxDrv CreateHostOnlyInterface StopHostOnlyInterfaces UpdateHostOnlyInterfaces diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Installer/win/Scripts/Combined-3-RepackAdditions.cmd virtualbox-6.1.34-dfsg/src/VBox/Installer/win/Scripts/Combined-3-RepackAdditions.cmd --- virtualbox-6.1.32-dfsg/src/VBox/Installer/win/Scripts/Combined-3-RepackAdditions.cmd 2022-01-13 18:57:43.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Installer/win/Scripts/Combined-3-RepackAdditions.cmd 2022-03-22 23:45:00.000000000 +0000 @@ -198,14 +198,14 @@ echo * AMD64: Unpacking signed drivers... echo ************************************************************************** cd /d "%_MY_REPACK_DIR_AMD64%" || goto end_failed -call "%_MY_REPACK_DIR_AMD64%\UnpackBlessedDrivers.cmd" -b "%_MY_BINDIR_AMD64%" -i "%_MY_OPT_SIGNED_AMD64%" -n -v || goto end_failed +call "%_MY_REPACK_DIR_AMD64%\UnpackBlessedDrivers.cmd" -n -b "%_MY_BINDIR_AMD64%" -i "%_MY_OPT_SIGNED_AMD64%" --guest-additions || goto end_failed echo . echo ************************************************************************** echo * X86: Unpacking signed drivers... echo ************************************************************************** cd /d "%_MY_REPACK_DIR_X86%" || goto end_failed -call "%_MY_REPACK_DIR_X86%\UnpackBlessedDrivers.cmd" -b "%_MY_BINDIR_X86%" -i "%_MY_OPT_SIGNED_X86%" -n -v || goto end_failed +call "%_MY_REPACK_DIR_X86%\UnpackBlessedDrivers.cmd" -n -b "%_MY_BINDIR_X86%" -i "%_MY_OPT_SIGNED_X86%" --guest-additions || goto end_failed echo . @@ -234,7 +234,7 @@ -E "VBOX_NSIS_ICON_FILE=%_MY_OPT_SRC_DIR%\VirtualBoxGA-nsis.ico" ^ -E "VBOX_WITH_GUEST_INSTALL_HELPER=1" -E "VBOX_WITH_GUEST_INSTALLER_UNICODE=1" -E "VBOX_WITH_LICENSE_INSTALL_RTF=1" ^ -E "VBOX_WITH_WDDM=1" -E "VBOX_WITH_MESA3D=1" -E "VBOX_BRAND_WIN_ADD_INST_DLGBMP=%_MY_OPT_SRC_DIR%\welcome.bmp" ^ - -E "VBOX_BRAND_LICENSE_RTF=%_MY_OPT_SRC_DIR%\License-gpl-2.0.rtf" -E "KBUILD_TYPE=%_MY_OPT_BUILD_TYPE%" -E "KBUILD_TARGET_ARCH=amd64" ^ + -E "VBOX_BRAND_LICENSE_RTF=%_MY_OPT_SRC_DIR%\License-gpl-2.0.rtf" -E "KBUILD_TYPE=%_MY_OPT_BUILD_TYPE%" -E "BUILD_TARGET_ARCH=amd64" ^ -- %KBUILD_DEVTOOLS%/win.x86/nsis/v3.04-log/makensis.exe /NOCD /V2 ^ "/DVBOX_SIGN_ADDITIONS=1" ^ "/DEXTERNAL_UNINSTALLER=1" ^ @@ -265,7 +265,7 @@ -E "VBOX_NSIS_ICON_FILE=%_MY_OPT_SRC_DIR%\VirtualBoxGA-nsis.ico" ^ -E "VBOX_WITH_GUEST_INSTALL_HELPER=1" -E "VBOX_WITH_GUEST_INSTALLER_UNICODE=1" -E "VBOX_WITH_LICENSE_INSTALL_RTF=1" ^ -E "VBOX_WITH_WDDM=1" -E "VBOX_WITH_MESA3D=1" -E "VBOX_BRAND_WIN_ADD_INST_DLGBMP=%_MY_OPT_SRC_DIR%\welcome.bmp" ^ - -E "VBOX_BRAND_LICENSE_RTF=%_MY_OPT_SRC_DIR%\License-gpl-2.0.rtf" -E "KBUILD_TYPE=%_MY_OPT_BUILD_TYPE%" -E "KBUILD_TARGET_ARCH=x86" ^ + -E "VBOX_BRAND_LICENSE_RTF=%_MY_OPT_SRC_DIR%\License-gpl-2.0.rtf" -E "KBUILD_TYPE=%_MY_OPT_BUILD_TYPE%" -E "BUILD_TARGET_ARCH=x86" ^ -- %KBUILD_DEVTOOLS%/win.x86/nsis/v3.04-log/makensis.exe /NOCD /V2 ^ "/DVBOX_SIGN_ADDITIONS=1" ^ "/DEXTERNAL_UNINSTALLER=1" ^ diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Installer/win/Scripts/Combined-3-Repack.cmd virtualbox-6.1.34-dfsg/src/VBox/Installer/win/Scripts/Combined-3-Repack.cmd --- virtualbox-6.1.32-dfsg/src/VBox/Installer/win/Scripts/Combined-3-Repack.cmd 2022-01-13 18:57:43.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Installer/win/Scripts/Combined-3-Repack.cmd 2022-03-22 23:45:00.000000000 +0000 @@ -202,14 +202,14 @@ echo * AMD64: Unpacking signed drivers... echo ************************************************************************** cd /d "%_MY_REPACK_DIR_AMD64%" || goto end_failed -call "%_MY_REPACK_DIR_AMD64%\UnpackBlessedDrivers.cmd" -b "%_MY_BINDIR_AMD64%" -i "%_MY_OPT_SIGNED_AMD64%" || goto end_failed +call "%_MY_REPACK_DIR_AMD64%\UnpackBlessedDrivers.cmd" -n -b "%_MY_BINDIR_AMD64%" -i "%_MY_OPT_SIGNED_AMD64%" || goto end_failed echo . echo ************************************************************************** echo * X86: Unpacking signed drivers... echo ************************************************************************** cd /d "%_MY_REPACK_DIR_X86%" || goto end_failed -call "%_MY_REPACK_DIR_X86%\UnpackBlessedDrivers.cmd" -b "%_MY_BINDIR_X86%" -i "%_MY_OPT_SIGNED_X86%" || goto end_failed +call "%_MY_REPACK_DIR_X86%\UnpackBlessedDrivers.cmd" -n -b "%_MY_BINDIR_X86%" -i "%_MY_OPT_SIGNED_X86%" || goto end_failed echo . diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Installer/win/Scripts/PackDriversForSubmission.cmd virtualbox-6.1.34-dfsg/src/VBox/Installer/win/Scripts/PackDriversForSubmission.cmd --- virtualbox-6.1.32-dfsg/src/VBox/Installer/win/Scripts/PackDriversForSubmission.cmd 2022-01-13 18:57:43.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Installer/win/Scripts/PackDriversForSubmission.cmd 2022-03-22 23:45:00.000000000 +0000 @@ -230,10 +230,10 @@ echo .Set RptFileName=%_MY_OPT_OUTPUT%.rpt>> "%_MY_OPT_DDF_FILE%" if %_MY_OPT_WITH_MAIN% == 0 goto skip_main_package -echo .Set DestinationDir=VBoxDrv>> "%_MY_OPT_DDF_FILE%" -echo %_MY_OPT_BINDIR%\VBoxDrv.inf VBoxDrv.inf>> "%_MY_OPT_DDF_FILE%" -echo %_MY_OPT_BINDIR%\VBoxDrv.sys VBoxDrv.sys>> "%_MY_OPT_DDF_FILE%" -if "%_MY_OPT_WITH_PDB%" == "1" echo %_MY_OPT_PDBDIR%\VBoxDrv.pdb VBoxDrv.pdb>> "%_MY_OPT_DDF_FILE%" +echo .Set DestinationDir=VBoxSup>> "%_MY_OPT_DDF_FILE%" +echo %_MY_OPT_BINDIR%\VBoxSup.inf VBoxSup.inf>> "%_MY_OPT_DDF_FILE%" +echo %_MY_OPT_BINDIR%\VBoxSup.sys VBoxSup.sys>> "%_MY_OPT_DDF_FILE%" +if "%_MY_OPT_WITH_PDB%" == "1" echo %_MY_OPT_PDBDIR%\VBoxSup.pdb VBoxSup.pdb>> "%_MY_OPT_DDF_FILE%" echo .Set DestinationDir=VBoxNetAdp6>> "%_MY_OPT_DDF_FILE%" echo %_MY_OPT_BINDIR%\VBoxNetAdp6.inf VBoxNetAdp6.inf>> "%_MY_OPT_DDF_FILE%" diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Installer/win/Scripts/UnpackBlessedDrivers.cmd virtualbox-6.1.34-dfsg/src/VBox/Installer/win/Scripts/UnpackBlessedDrivers.cmd --- virtualbox-6.1.32-dfsg/src/VBox/Installer/win/Scripts/UnpackBlessedDrivers.cmd 2022-01-13 18:57:43.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Installer/win/Scripts/UnpackBlessedDrivers.cmd 2022-03-22 23:45:00.000000000 +0000 @@ -24,8 +24,8 @@ rem Globals and Check for environment variables we need. rem if ".%KBUILD_DEVTOOLS%" == "." (echo KBUILD_DEVTOOLS is not set & goto end_failed) -set _MY_DRIVER_BASE_NAMES=VBoxDrv VBoxNetAdp6 VBoxNetLwf VBoxUSB VBoxUSBMon -set _MY_DRIVER_BASE_NAMES=VBoxDrv VBoxNetAdp6 VBoxNetLwf VBoxUSB VBoxUSBMon +set _MY_DRIVER_BASE_NAMES=VBoxSup VBoxNetAdp6 VBoxNetLwf VBoxUSB VBoxUSBMon +set _MY_GUEST_ADDITIONS_DRIVER_BASE_NAMES=VBoxVideo VBoxWddm VBoxGuest VBoxMouse set _MY_UNZIP=%KBUILD_DEVTOOLS%\win.x86\bin\unzip.exe if not exist "%_MY_UNZIP%" (echo "%_MY_UNZIP%" does not exist & goto end_failed) @@ -56,6 +56,7 @@ if ".%1" == ".--no-sign-cat" goto opt_n if ".%1" == ".-v" goto opt_v if ".%1" == ".--no-sign-verify" goto opt_v +if ".%1" == ".--guest-additions" goto opt_ga echo syntax error: Unknown option: %1 echo Try --help to list valid options. @@ -96,6 +97,11 @@ shift goto argument_loop +:opt_ga +set _MY_DRIVER_BASE_NAMES=%_MY_GUEST_ADDITIONS_DRIVER_BASE_NAMES% +shift +goto argument_loop + :syntax_error_missing_value echo syntax error: missing or empty option value after %1 goto end_failed diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Installer/win/Stub/Makefile.kmk virtualbox-6.1.34-dfsg/src/VBox/Installer/win/Stub/Makefile.kmk --- virtualbox-6.1.32-dfsg/src/VBox/Installer/win/Stub/Makefile.kmk 2022-01-13 18:57:43.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Installer/win/Stub/Makefile.kmk 2022-03-22 23:45:01.000000000 +0000 @@ -64,14 +64,14 @@ VBoxStub.cpp_INCS += $(VBoxStub_0_OUTDIR) VBoxStub.cpp_DEFS += VBOX_WITH_CODE_SIGNING - $$(VBoxStub_0_OUTDIR)/VBoxStubPublicCert.h: | $$(dir $$@) $(VBOX_RTSIGNTOOL) $(PATH_STAGE_SYS)/VBoxDrv.sys + $$(VBoxStub_0_OUTDIR)/VBoxStubPublicCert.h: | $$(dir $$@) $(VBOX_RTSIGNTOOL) $(PATH_STAGE_SYS)/VBoxSup.sys $(RM) -f -- "$@" "$@.cer0" "$@.cer1" "$@.cer2" "$@.array" - $(VBOX_RTSIGNTOOL) extract-exe-signer-cert --signature-index 0 --exe "$(PATH_STAGE_SYS)/VBoxDrv.sys" --output "$@.cer0" --der + $(VBOX_RTSIGNTOOL) extract-exe-signer-cert --signature-index 0 --exe "$(PATH_STAGE_SYS)/VBoxSup.sys" --output "$@.cer0" --der $(VBOX_BIN2C) -ascii --append VBoxStubTrustedCert0 "$@.cer0" $@ $(APPEND) "$@.array" " { g_abVBoxStubTrustedCert0, sizeof(g_abVBoxStubTrustedCert0) }, " if defined(VBOX_CERTIFICATE_SHA2_SUBJECT_NAME) || $(intersects win all 1,$(VBOX_WITH_CORP_CODE_SIGNING)) - $(VBOX_RTSIGNTOOL) extract-exe-signer-cert --signature-index 1 --exe "$(PATH_STAGE_SYS)/VBoxDrv.sys" --output "$@.cer1" --der + $(VBOX_RTSIGNTOOL) extract-exe-signer-cert --signature-index 1 --exe "$(PATH_STAGE_SYS)/VBoxSup.sys" --output "$@.cer1" --der $(VBOX_BIN2C) -ascii --append VBoxStubTrustedCert1 "$@.cer1" $@ $(APPEND) "$@.array" " { g_abVBoxStubTrustedCert1, sizeof(g_abVBoxStubTrustedCert1) }, " endif diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Installer/win/Stub/VBoxStub.cpp virtualbox-6.1.34-dfsg/src/VBox/Installer/win/Stub/VBoxStub.cpp --- virtualbox-6.1.32-dfsg/src/VBox/Installer/win/Stub/VBoxStub.cpp 2022-01-13 18:57:43.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Installer/win/Stub/VBoxStub.cpp 2022-03-22 23:45:01.000000000 +0000 @@ -4,7 +4,7 @@ */ /* - * Copyright (C) 2010-2020 Oracle Corporation + * Copyright (C) 2010-2022 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; @@ -19,13 +19,7 @@ /********************************************************************************************************************************* * Header Files * *********************************************************************************************************************************/ -#if defined(_WIN32_WINNT) && _WIN32_WINNT < 0x0501 -# undef _WIN32_WINNT -# define _WIN32_WINNT 0x0501 /* AttachConsole() / FreeConsole(). */ -#endif - #include -#include #include #include #include @@ -65,11 +59,6 @@ # include "VBoxStubPublicCert.h" #endif -#ifndef TARGET_NT4 -/* Use an own console window if run in verbose mode. */ -# define VBOX_STUB_WITH_OWN_CONSOLE -#endif - /********************************************************************************************************************************* * Defined Constants And Macros * @@ -77,6 +66,9 @@ #define MY_UNICODE_SUB(str) L ##str #define MY_UNICODE(str) MY_UNICODE_SUB(str) +/* Use an own console window if run in verbose mode. */ +#define VBOX_STUB_WITH_OWN_CONSOLE + /********************************************************************************************************************************* * Structures and Typedefs * @@ -88,8 +80,20 @@ { /** List entry. */ RTLISTNODE ListEntry; + /** Stub package index (zero-based) this record belongs to. */ + unsigned idxPkg; /** True if file, false if directory. */ bool fFile; + /** Set if we should not delete the file/directory. + * This is used for user supplied extraction directories. */ + bool fDontDelete; + union + { + /** File handle (if \a fFile is \c true). */ + RTFILE hFile; + /** Directory handle (if \a fFile is \c false). */ + RTDIR hDir; + }; /** The path to the file or directory to clean up. */ char szPath[1]; } STUBCLEANUPREC; @@ -98,6 +102,12 @@ /********************************************************************************************************************************* +* Prototypes * +*********************************************************************************************************************************/ +static PSTUBCLEANUPREC AddCleanupRec(const char *pszPath, bool fIsFile); + + +/********************************************************************************************************************************* * Global Variables * *********************************************************************************************************************************/ /** Whether it's a silent or interactive GUI driven install. */ @@ -148,6 +158,19 @@ /** + * Same as ShowError, only it returns RTEXITCODE_SYNTAX. + */ +static RTEXITCODE ShowSyntaxError(const char *pszFmt, ...) +{ + va_list va; + va_start(va, pszFmt); + ShowError("%N", pszFmt, &va); + va_end(va); + return RTEXITCODE_SYNTAX; +} + + +/** * Shows a message box with a printf() style formatted string. * * @param uType Type of the message box (see MSDN). @@ -168,7 +191,7 @@ else { PRTUTF16 pwszMsg; - int rc = RTStrToUtf16(pszMsg, &pwszMsg); + rc = RTStrToUtf16(pszMsg, &pwszMsg); if (RT_SUCCESS(rc)) { MessageBoxW(GetDesktopWindow(), pwszMsg, MY_UNICODE(VBOX_STUB_TITLE), MB_ICONINFORMATION); @@ -184,17 +207,49 @@ } +/** Logs error details to stderr. */ +static void LogError(const char *pszFmt, ...) +{ + va_list va; + va_start(va, pszFmt); + RTStrmPrintf(g_pStdErr, "error: %N\n", pszFmt, &va); + va_end(va); +} + + +/** Logs error details to stderr, returning @a rc. */ +static int LogErrorRc(int rc, const char *pszFmt, ...) +{ + va_list va; + va_start(va, pszFmt); + RTStrmPrintf(g_pStdErr, "error: %N\n", pszFmt, &va); + va_end(va); + return rc; +} + + +/** Logs error details to stderr, RTEXITCODE_FAILURE. */ +static RTEXITCODE LogErrorExitFailure(const char *pszFmt, ...) +{ + va_list va; + va_start(va, pszFmt); + RTStrmPrintf(g_pStdErr, "error: %N\n", pszFmt, &va); + va_end(va); + return RTEXITCODE_FAILURE; +} + + /** * Finds the specified in the resource section of the executable. * * @returns IPRT status code. * - * @param pszDataName Name of resource to read. - * @param ppvResource Where to return the pointer to the data. - * @param pdwSize Where to return the size of the data (if found). - * Optional. + * @param pszDataName Name of resource to read. + * @param ppbResource Where to return the pointer to the data. + * @param pcbResource Where to return the size of the data (if found). + * Optional. */ -static int FindData(const char *pszDataName, PVOID *ppvResource, DWORD *pdwSize) +static int FindData(const char *pszDataName, uint8_t const **ppbResource, DWORD *pcbResource) { AssertReturn(pszDataName, VERR_INVALID_PARAMETER); HINSTANCE hInst = NULL; /* indicates the executable image */ @@ -213,16 +268,16 @@ /* Get resource size. */ DWORD cb = SizeofResource(hInst, hRsrc); AssertReturn(cb > 0, VERR_NO_DATA); - if (pdwSize) - *pdwSize = cb; + if (pcbResource) + *pcbResource = cb; /* Get pointer to resource. */ HGLOBAL hData = LoadResource(hInst, hRsrc); AssertReturn(hData, VERR_IO_GEN_FAILURE); /* Lock resource. */ - *ppvResource = LockResource(hData); - AssertReturn(*ppvResource, VERR_IO_GEN_FAILURE); + *ppbResource = (uint8_t const *)LockResource(hData); + AssertReturn(*ppbResource, VERR_IO_GEN_FAILURE); return VINF_SUCCESS; } @@ -234,13 +289,13 @@ * returned after ShowError has been invoked. * @param iPackage The package number. */ -static PVBOXSTUBPKG FindPackageHeader(unsigned iPackage) +static const VBOXSTUBPKG *FindPackageHeader(unsigned iPackage) { char szHeaderName[32]; RTStrPrintf(szHeaderName, sizeof(szHeaderName), "HDR_%02d", iPackage); - PVBOXSTUBPKG pPackage; - int rc = FindData(szHeaderName, (PVOID *)&pPackage, NULL); + VBOXSTUBPKG const *pPackage; + int rc = FindData(szHeaderName, (uint8_t const **)&pPackage, NULL); if (RT_FAILURE(rc)) { ShowError("Internal error: Could not find package header #%u: %Rrc", iPackage, rc); @@ -280,92 +335,108 @@ * * @param pszResourceName The resource name to extract. * @param pszTempFile The full file path + name to extract the resource to. - * + * @param hFile Handle to pszTempFile if RTFileCreateUnique was + * used to generate the name, otherwise NIL_RTFILE. + * @param idxPackage The package index for annotating the cleanup + * record with (HACK ALERT). */ -static int ExtractFile(const char *pszResourceName, - const char *pszTempFile) +static int ExtractFile(const char *pszResourceName, const char *pszTempFile, RTFILE hFile, unsigned idxPackage) { -#if 0 /* Another example of how unnecessarily complicated things get with - do-break-while-false and you end up with buggy code using uninitialized - variables. */ - int rc; - RTFILE fh; - BOOL bCreatedFile = FALSE; - - do - { - AssertMsgBreak(pszResourceName, ("Resource pointer invalid!\n")); /* rc is not initialized here, we'll return garbage. */ - AssertMsgBreak(pszTempFile, ("Temp file pointer invalid!")); /* Ditto. */ - - /* Read the data of the built-in resource. */ - PVOID pvData = NULL; - DWORD dwDataSize = 0; - rc = FindData(pszResourceName, &pvData, &dwDataSize); - AssertMsgRCBreak(rc, ("Could not read resource data!\n")); - - /* Create new (and replace an old) file. */ - rc = RTFileOpen(&fh, pszTempFile, - RTFILE_O_CREATE_REPLACE - | RTFILE_O_WRITE - | RTFILE_O_DENY_NOT_DELETE - | RTFILE_O_DENY_WRITE); - AssertMsgRCBreak(rc, ("Could not open file for writing!\n")); - bCreatedFile = TRUE; - - /* Write contents to new file. */ - size_t cbWritten = 0; - rc = RTFileWrite(fh, pvData, dwDataSize, &cbWritten); - AssertMsgRCBreak(rc, ("Could not open file for writing!\n")); - AssertMsgBreak(dwDataSize == cbWritten, ("File was not extracted completely! Disk full?\n")); - - } while (0); - - if (RTFileIsValid(fh)) /* fh is unused uninitalized (MSC agrees) */ - RTFileClose(fh); - - if (RT_FAILURE(rc)) - { - if (bCreatedFile) - RTFileDelete(pszTempFile); - } - -#else /* This is exactly the same as above, except no bug and better assertion - message. Note only the return-success statment is indented, indicating - that the whole do-break-while-false approach was totally unnecessary. */ - AssertPtrReturn(pszResourceName, VERR_INVALID_POINTER); AssertPtrReturn(pszTempFile, VERR_INVALID_POINTER); - /* Read the data of the built-in resource. */ - PVOID pvData = NULL; - DWORD dwDataSize = 0; - int rc = FindData(pszResourceName, &pvData, &dwDataSize); - AssertMsgRCReturn(rc, ("Could not read resource data: %Rrc\n", rc), rc); - - /* Create new (and replace an old) file. */ - RTFILE hFile; - rc = RTFileOpen(&hFile, pszTempFile, - RTFILE_O_CREATE_REPLACE - | RTFILE_O_WRITE - | RTFILE_O_DENY_NOT_DELETE - | RTFILE_O_DENY_WRITE); - AssertMsgRCReturn(rc, ("Could not open '%s' for writing: %Rrc\n", pszTempFile, rc), rc); - - /* Write contents to new file. */ - size_t cbWritten = 0; - rc = RTFileWrite(hFile, pvData, dwDataSize, &cbWritten); - AssertMsgStmt(cbWritten == dwDataSize || RT_FAILURE_NP(rc), ("%#zx vs %#x\n", cbWritten, dwDataSize), rc = VERR_WRITE_ERROR); - - int rc2 = RTFileClose(hFile); - AssertRC(rc2); - - if (RT_SUCCESS(rc)) - return VINF_SUCCESS; + /* Create new (and replace any old) file. */ + if (hFile == NIL_RTFILE) + { + int rc = RTFileOpen(&hFile, pszTempFile, + RTFILE_O_CREATE_REPLACE | RTFILE_O_WRITE | RTFILE_O_DENY_WRITE + | (0700 << RTFILE_O_CREATE_MODE_SHIFT)); + AssertRCReturn(rc, LogErrorRc(rc, "#%u: Failed to create/replace '%s' for writing: %Rrc", idxPackage, pszTempFile, rc)); + } + + /* Add a cleanup record, so that we can properly clean up (partially run) stuff. */ + int rc = VERR_NO_MEMORY; + PSTUBCLEANUPREC pCleanupRec = AddCleanupRec(pszTempFile, true /*fIsFile*/); + AssertReturn(pCleanupRec, VERR_NO_MEMORY); + + pCleanupRec->idxPkg = idxPackage; + pCleanupRec->hFile = hFile; + + /* Find the data of the built-in resource. */ + uint8_t const *pbData = NULL; + DWORD cbData = 0; + rc = FindData(pszResourceName, &pbData, &cbData); + AssertRCReturn(rc, LogErrorRc(rc, "#%u: Failed to locate resource '%s': %Rrc", idxPackage, pszResourceName, rc)); + + /* Write the contents to the file. */ + rc = RTFileWrite(hFile, pbData, cbData, NULL); + AssertRCReturn(rc, LogErrorRc(rc, "#%u: RTFileWrite('%s',, %#x,) failed: %Rrc", idxPackage, pszTempFile, cbData, rc)); - RTFileDelete(pszTempFile); + /* + * We now wish to keep the file open, however since we've got it open in write + * mode with deny-write sharing (effectively exclusive write mode) this will + * prevent the MSI API from opening it in deny-write mode for reading purposes. + * + * So we have to do the best we can to transition this to a read-only handle + * that denies write (and deletion/renaming). First we open it again in + * read-only mode only denying deletion, not writing. Then close the original + * handle. Finally open a read-only handle that denies both reading and + * deletion/renaming, and verify that the file content is still the same. + * + * Note! DuplicateHandle to read-only and closing the original does not work, + * as the kernel doesn't update the sharing access info for the handles. + */ + RTFSOBJINFO ObjInfo1; + rc = RTFileQueryInfo(hFile, &ObjInfo1, RTFSOBJATTRADD_UNIX); + AssertRCReturn(rc, LogErrorRc(rc, "#%u: RTFileQueryInfo failed on '%s': %Rrc", idxPackage, pszTempFile, rc)); + + RTFILE hFile2 = NIL_RTFILE; + rc = RTFileOpen(&hFile2, pszTempFile, + RTFILE_O_OPEN | RTFILE_O_READ | RTFILE_O_DENY_NONE | (0700 << RTFILE_O_CREATE_MODE_SHIFT)); + AssertRCReturn(rc, LogErrorRc(rc, "#%u: First re-opening of '%s' failed: %Rrc", idxPackage, pszTempFile, rc)); + + rc = RTFileClose(hFile); + AssertRCReturnStmt(rc, RTFileClose(hFile2), + LogErrorRc(rc, "#%u: RTFileClose('%s') failed: %Rrc", idxPackage, pszTempFile, rc)); + pCleanupRec->hFile = hFile2; + + rc = RTFileOpen(&hFile, pszTempFile, RTFILE_O_OPEN | RTFILE_O_READ | RTFILE_O_DENY_WRITE); + AssertRCReturn(rc, LogErrorRc(rc, "#%u: Second re-opening of '%s' failed: %Rrc", idxPackage, pszTempFile, rc)); + pCleanupRec->hFile = hFile; + + rc = RTFileClose(hFile2); + AssertRCStmt(rc, LogError("#%u: Failed to close 2nd handle to '%s': %Rrc", idxPackage, pszTempFile, rc)); + + /* check the size and inode number. */ + RTFSOBJINFO ObjInfo2; + rc = RTFileQueryInfo(hFile, &ObjInfo2, RTFSOBJATTRADD_UNIX); + AssertRCReturn(rc, LogErrorRc(rc, "#%u: RTFileQueryInfo failed on '%s': %Rrc", idxPackage, pszTempFile, rc)); + + AssertReturn(ObjInfo2.cbObject == cbData, + LogErrorRc(VERR_STATE_CHANGED, "#%u: File size of '%s' changed: %'RU64, expected %'RU32", + idxPackage, pszTempFile, ObjInfo2.cbObject, pbData)); + + AssertReturn(ObjInfo2.Attr.u.Unix.INodeId == ObjInfo1.Attr.u.Unix.INodeId, + LogErrorRc(VERR_STATE_CHANGED, "#%u: File ID of '%s' changed: %#RX64, expected %#RX64", + idxPackage, pszTempFile, ObjInfo2.Attr.u.Unix.INodeId, ObjInfo1.Attr.u.Unix.INodeId)); + + + /* Check the content. */ + uint32_t off = 0; + while (off < cbData) + { + uint8_t abBuf[_64K]; + size_t cbToRead = RT_MIN(cbData - off, sizeof(abBuf)); + rc = RTFileRead(hFile, abBuf, cbToRead, NULL); + AssertRCReturn(rc, LogErrorRc(rc, "#%u: RTFileRead failed on '%s' at offset %#RX32: %Rrc", + idxPackage, pszTempFile, off, rc)); + AssertReturn(memcmp(abBuf, &pbData[off], cbToRead) == 0, + LogErrorRc(VERR_STATE_CHANGED, "#%u: File '%s' has change (mismatch in %#zx byte block at %#RX32)", + idxPackage, pszTempFile, cbToRead, off)); + off += cbToRead; + } -#endif - return rc; + return VINF_SUCCESS; } @@ -376,11 +447,14 @@ * * @param pPackage Pointer to a VBOXSTUBPKG struct that contains the resource. * @param pszTempFile The full file path + name to extract the resource to. + * @param hFile Handle to pszTempFile if RTFileCreateUnique was + * used to generate the name, otherwise NIL_RTFILE. + * @param idxPackage The package index for annotating the cleanup + * record with (HACK ALERT). */ -static int Extract(const PVBOXSTUBPKG pPackage, - const char *pszTempFile) +static int Extract(VBOXSTUBPKG const *pPackage, const char *pszTempFile, RTFILE hFile, unsigned idxPackage) { - return ExtractFile(pPackage->szResourceName, pszTempFile); + return ExtractFile(pPackage->szResourceName, pszTempFile, hFile, idxPackage); } @@ -412,7 +486,7 @@ * * @param pPackage Pointer to a VBOXSTUBPKG struct that contains the resource. */ -static bool PackageIsNeeded(PVBOXSTUBPKG pPackage) +static bool PackageIsNeeded(VBOXSTUBPKG const *pPackage) { if (pPackage->byArch == VBOXSTUBPKGARCH_ALL) return true; @@ -424,24 +498,32 @@ /** * Adds a cleanup record. * - * @returns Fully complained boolean success indicator. + * The caller must set the hFile or hDir if so desired. + * + * @returns Pointer to the cleanup record on success, fully complained NULL on + * failure. * @param pszPath The path to the file or directory to clean up. - * @param fFile @c true if file, @c false if directory. + * @param fIsFile @c true if file, @c false if directory. */ -static bool AddCleanupRec(const char *pszPath, bool fFile) +static PSTUBCLEANUPREC AddCleanupRec(const char *pszPath, bool fIsFile) { size_t cchPath = strlen(pszPath); Assert(cchPath > 0); - PSTUBCLEANUPREC pRec = (PSTUBCLEANUPREC)RTMemAlloc(RT_UOFFSETOF_DYN(STUBCLEANUPREC, szPath[cchPath + 1])); - if (!pRec) + PSTUBCLEANUPREC pRec = (PSTUBCLEANUPREC)RTMemAllocZ(RT_UOFFSETOF_DYN(STUBCLEANUPREC, szPath[cchPath + 1])); + if (pRec) { - ShowError("Out of memory!"); - return false; - } - pRec->fFile = fFile; - memcpy(pRec->szPath, pszPath, cchPath + 1); + pRec->idxPkg = ~0U; + pRec->fFile = fIsFile; + if (fIsFile) + pRec->hFile = NIL_RTFILE; + else + pRec->hDir = NIL_RTDIR; + memcpy(pRec->szPath, pszPath, cchPath + 1); - RTListPrepend(&g_TmpFiles, &pRec->ListEntry); - return true; + RTListPrepend(&g_TmpFiles, &pRec->ListEntry); + } + else + ShowError("Out of memory!"); + return pRec; } @@ -456,19 +538,47 @@ { for (int i = 0; i < 5; i++) { - int rc; - bool fFinalTry = i == 4; + bool const fFinalTry = i == 4; PSTUBCLEANUPREC pCur, pNext; RTListForEachSafe(&g_TmpFiles, pCur, pNext, STUBCLEANUPREC, ListEntry) { + int rc = VINF_SUCCESS; if (pCur->fFile) - rc = RTFileDelete(pCur->szPath); - else { - rc = RTDirRemoveRecursive(pCur->szPath, RTDIRRMREC_F_CONTENT_AND_DIR); - if (rc == VERR_DIR_NOT_EMPTY && fFinalTry) - rc = VINF_SUCCESS; + if (pCur->hFile != NIL_RTFILE) + { + if (RTFileIsValid(pCur->hFile)) + { + int rcCloseFile = RTFileClose(pCur->hFile); + AssertRCStmt(rcCloseFile, LogError("Cleanup file '%s' for #%u: RTFileClose(%p) failed: %Rrc", + pCur->szPath, pCur->idxPkg, pCur->hFile, rcCloseFile)); + } + pCur->hFile = NIL_RTFILE; + } + if (!pCur->fDontDelete) + rc = RTFileDelete(pCur->szPath); + } + else /* Directory */ + { + if (pCur->hDir != NIL_RTDIR) + { + if (RTDirIsValid(pCur->hDir)) + { + int rcCloseDir = RTDirClose(pCur->hDir); + AssertRCStmt(rcCloseDir, LogError("Cleanup dir '%s' for #%u: RTDirClose(%p) failed: %Rrc", + pCur->szPath, pCur->idxPkg, pCur->hDir, rcCloseDir)); + } + pCur->hDir = NIL_RTDIR; + } + + /* Note: Not removing the directory recursively, as we should have separate cleanup records for that. */ + if (!pCur->fDontDelete) + { + rc = RTDirRemove(pCur->szPath); + if (rc == VERR_DIR_NOT_EMPTY && fFinalTry) + rc = VINF_SUCCESS; + } } if (rc == VERR_FILE_NOT_FOUND || rc == VERR_PATH_NOT_FOUND) rc = VINF_SUCCESS; @@ -490,7 +600,7 @@ { if (!pszPkgDir) return; - rc = RTDirRemove(pszPkgDir); + int rc = RTDirRemove(pszPkgDir); if (RT_SUCCESS(rc) || rc == VERR_FILE_NOT_FOUND || rc == VERR_PATH_NOT_FOUND || fFinalTry) return; } @@ -655,16 +765,15 @@ * * @returns Fully complained exit code. * @param iPackage The package number. - * @param pszPkgDir The package directory (aka extraction dir). * @param pszMsiArgs Any additional installer (MSI) argument * @param fLogging Whether to enable installer logging. */ -static RTEXITCODE ProcessPackage(unsigned iPackage, const char *pszPkgDir, const char *pszMsiArgs, bool fLogging) +static RTEXITCODE ProcessPackage(unsigned iPackage, const char *pszMsiArgs, bool fLogging) { /* * Get the package header and check if it's needed. */ - PVBOXSTUBPKG pPackage = FindPackageHeader(iPackage); + VBOXSTUBPKG const * const pPackage = FindPackageHeader(iPackage); if (pPackage == NULL) return RTEXITCODE_FAILURE; @@ -672,23 +781,34 @@ return RTEXITCODE_SUCCESS; /* + * Get the cleanup record for the package so we can get the extracted + * filename (pPackage is read-only and thus cannot assist here). + */ + PSTUBCLEANUPREC pRec = NULL; + PSTUBCLEANUPREC pCur; + RTListForEach(&g_TmpFiles, pCur, STUBCLEANUPREC, ListEntry) + { + if (pCur->idxPkg == iPackage) + { + pRec = pCur; + break; + } + } + AssertReturn(pRec != NULL, LogErrorExitFailure("Package #%u not found in cleanup records", iPackage)); + + /* * Deal with the file based on it's extension. */ - char szPkgFile[RTPATH_MAX]; - int rc = RTPathJoin(szPkgFile, sizeof(szPkgFile), pszPkgDir, pPackage->szFileName); - if (RT_FAILURE(rc)) - return ShowError("Internal error: RTPathJoin failed: %Rrc", rc); - RTPathChangeToDosSlashes(szPkgFile, true /* Force conversion. */); /* paranoia */ + RTPathChangeToDosSlashes(pRec->szPath, true /* Force conversion. */); /* paranoia */ RTEXITCODE rcExit; - const char *pszSuff = RTPathSuffix(szPkgFile); - if (RTStrICmp(pszSuff, ".msi") == 0) - rcExit = ProcessMsiPackage(szPkgFile, pszMsiArgs, fLogging); - else if (RTStrICmp(pszSuff, ".cab") == 0) + const char *pszSuff = RTPathSuffix(pRec->szPath); + if (RTStrICmpAscii(pszSuff, ".msi") == 0) + rcExit = ProcessMsiPackage(pRec->szPath, pszMsiArgs, fLogging); + else if (RTStrICmpAscii(pszSuff, ".cab") == 0) rcExit = RTEXITCODE_SUCCESS; /* Ignore .cab files, they're generally referenced by other files. */ else - rcExit = ShowError("Internal error: Do not know how to handle file '%s'.", pPackage->szFileName); - + rcExit = ShowError("Internal error: Do not know how to handle file '%s' (%s).", pPackage->szFileName, pRec->szPath); return rcExit; } @@ -779,57 +899,124 @@ char *pszDstSubDir = RTPathJoinA(pszDstDir, ".custom"); if (!pszDstSubDir) return ShowError("Out of memory!"); - bool fRc = AddCleanupRec(pszDstSubDir, false /*fFile*/); + + PSTUBCLEANUPREC pCleanupRec = AddCleanupRec(pszDstSubDir, false /*fIsFile*/); + AssertReturn(pCleanupRec, RTEXITCODE_FAILURE); + + /* + * Open the directory to make it difficult to replace or delete (see @bugref{10201}). + */ + /** @todo this is still race prone, given that SHFileOperationW is the one + * creating it and we're really a bit late opening it here. Anyway, + * it's harmless as this code isn't used at present. */ + RTDIR hDstSubDir; + rc = RTDirOpen(&hDstSubDir, pszDstSubDir); + if (RT_FAILURE(rc)) + return ShowError("Unable to open the destination .custom directory: %Rrc", rc); + pCleanupRec->hDir = hDstSubDir; + RTStrFree(pszDstSubDir); - if (!fRc) - return RTEXITCODE_FAILURE; } return RTEXITCODE_SUCCESS; } -static RTEXITCODE ExtractFiles(unsigned cPackages, const char *pszDstDir, bool fExtractOnly, bool *pfCreatedExtractDir) +/** + * Extracts the files for all needed packages to @a pszDstDir. + * + * @returns + * @param cPackages Number of packages to consinder. + * @param pszDstDir Where to extract the files. + * @param fExtractOnly Set if only extracting and not doing any installing. + * @param ppExtractDirRec Where we keep the cleanup record for @a pszDstDir. + * This may have been created by the caller already. + */ +static RTEXITCODE ExtractFiles(unsigned cPackages, const char *pszDstDir, bool fExtractOnly, PSTUBCLEANUPREC *ppExtractDirRec) { int rc; /* - * Make sure the directory exists. + * Make sure the directory exists (normally WinMain created it for us). */ - *pfCreatedExtractDir = false; + PSTUBCLEANUPREC pCleanupRec = *ppExtractDirRec; if (!RTDirExists(pszDstDir)) { + AssertReturn(!pCleanupRec, ShowError("RTDirExists failed on '%s' which we just created!", pszDstDir)); + rc = RTDirCreate(pszDstDir, 0700, 0); if (RT_FAILURE(rc)) return ShowError("Failed to create extraction path '%s': %Rrc", pszDstDir, rc); - *pfCreatedExtractDir = true; + + *ppExtractDirRec = pCleanupRec = AddCleanupRec(pszDstDir, false /*fFile*/); + AssertReturn(pCleanupRec, LogErrorExitFailure("Failed to add cleanup record for dir '%s'", pszDstDir)); } + /* + * If we need to create the cleanup record, the caller did not create the + * directory so we should not delete it when done. + */ + else if (!pCleanupRec) + { + *ppExtractDirRec = pCleanupRec = AddCleanupRec(pszDstDir, false /*fFile*/); + AssertReturn(pCleanupRec, LogErrorExitFailure("Failed to add cleanup record for existing dir '%s'", pszDstDir)); + pCleanupRec->fDontDelete = true; + } + + /* + * Open up the directory to make it difficult to delete / replace. + */ + rc = RTDirOpen(&pCleanupRec->hDir, pszDstDir); + if (RT_FAILURE(rc)) + return ShowError("Failed to open extraction path '%s': %Rrc", pszDstDir, rc); + + /* + * Change current directory to the extraction directory for the same reason + * as we open it above. + */ + RTPathSetCurrent(pszDstDir); /* * Extract files. */ for (unsigned k = 0; k < cPackages; k++) { - PVBOXSTUBPKG pPackage = FindPackageHeader(k); + VBOXSTUBPKG const * const pPackage = FindPackageHeader(k); if (!pPackage) return RTEXITCODE_FAILURE; /* Done complaining already. */ if (fExtractOnly || PackageIsNeeded(pPackage)) { - char szDstFile[RTPATH_MAX]; - rc = RTPathJoin(szDstFile, sizeof(szDstFile), pszDstDir, pPackage->szFileName); + /* If we only extract or if it's a common file, use the original file name, + otherwise generate a random name with the same file extension (@bugref{10201}). */ + RTFILE hFile = NIL_RTFILE; + char szDstFile[RTPATH_MAX]; + if (fExtractOnly || pPackage->byArch == VBOXSTUBPKGARCH_ALL) + rc = RTPathJoin(szDstFile, sizeof(szDstFile), pszDstDir, pPackage->szFileName); + else + { + rc = RTPathJoin(szDstFile, sizeof(szDstFile), pszDstDir, "XXXXXXXXXXXXXXXXXXXXXXXX"); + if (RT_SUCCESS(rc)) + { + const char *pszSuffix = RTPathSuffix(pPackage->szFileName); + if (pszSuffix) + rc = RTStrCat(szDstFile, sizeof(szDstFile), pszSuffix); + if (RT_SUCCESS(rc)) + { + rc = RTFileCreateUnique(&hFile, szDstFile, + RTFILE_O_CREATE | RTFILE_O_WRITE | RTFILE_O_DENY_WRITE + | (0700 << RTFILE_O_CREATE_MODE_SHIFT)); + if (RT_FAILURE(rc)) + return ShowError("Failed to create unique filename for '%s' in '%s': %Rrc", + pPackage->szFileName, pszDstDir, rc); + } + } + } if (RT_FAILURE(rc)) - return ShowError("Internal error: RTPathJoin failed: %Rrc", rc); + return ShowError("Internal error: Build extraction file name failed: %Rrc", rc); - rc = Extract(pPackage, szDstFile); + rc = Extract(pPackage, szDstFile, hFile, k); if (RT_FAILURE(rc)) - return ShowError("Error extracting package #%u: %Rrc", k, rc); - - if (!fExtractOnly && !AddCleanupRec(szDstFile, true /*fFile*/)) - { - RTFileDelete(szDstFile); - return RTEXITCODE_FAILURE; - } + return ShowError("Error extracting package #%u (%s): %Rrc", k, pPackage->szFileName, rc); } } @@ -854,22 +1041,6 @@ return RTMsgInitFailure(vrc); /* - * Check if we're already running and jump out if so. - * - * Note! Do not use a global namespace ("Global\\") for mutex name here, - * will blow up NT4 compatibility! - */ - HANDLE hMutexAppRunning = CreateMutex(NULL, FALSE, "VBoxStubInstaller"); - if ( hMutexAppRunning != NULL - && GetLastError() == ERROR_ALREADY_EXISTS) - { - /* Close the mutex for this application instance. */ - CloseHandle(hMutexAppRunning); - hMutexAppRunning = NULL; - return RTEXITCODE_FAILURE; - } - - /* * Parse arguments. */ @@ -907,6 +1078,7 @@ { "/path", 'p', RTGETOPT_REQ_STRING }, { "--msiparams", 'm', RTGETOPT_REQ_STRING }, { "-msiparams", 'm', RTGETOPT_REQ_STRING }, + { "--msi-prop", 'P', RTGETOPT_REQ_STRING }, { "--reinstall", 'f', RTGETOPT_REQ_NOTHING }, { "-reinstall", 'f', RTGETOPT_REQ_NOTHING }, { "/reinstall", 'f', RTGETOPT_REQ_NOTHING }, @@ -917,24 +1089,20 @@ { "--version", 'V', RTGETOPT_REQ_NOTHING }, { "-version", 'V', RTGETOPT_REQ_NOTHING }, { "/version", 'V', RTGETOPT_REQ_NOTHING }, - { "-v", 'V', RTGETOPT_REQ_NOTHING }, { "--help", 'h', RTGETOPT_REQ_NOTHING }, { "-help", 'h', RTGETOPT_REQ_NOTHING }, { "/help", 'h', RTGETOPT_REQ_NOTHING }, { "/?", 'h', RTGETOPT_REQ_NOTHING }, }; - RTEXITCODE rcExit = RTEXITCODE_SUCCESS; + RTGETOPTSTATE GetState; + vrc = RTGetOptInit(&GetState, argc, argv, s_aOptions, RT_ELEMENTS(s_aOptions), 1, 0); + AssertRCReturn(vrc, ShowError("RTGetOptInit failed: %Rrc", vrc)); - /* Parse the parameters. */ + /* Loop over the arguments. */ int ch; - bool fExitEarly = false; RTGETOPTUNION ValueUnion; - RTGETOPTSTATE GetState; - RTGetOptInit(&GetState, argc, argv, s_aOptions, RT_ELEMENTS(s_aOptions), 1, 0); - while ( (ch = RTGetOpt(&GetState, &ValueUnion)) - && rcExit == RTEXITCODE_SUCCESS - && !fExitEarly) + while ((ch = RTGetOpt(&GetState, &ValueUnion)) != 0) { switch (ch) { @@ -942,10 +1110,9 @@ if (szMSIArgs[0]) vrc = RTStrCat(szMSIArgs, sizeof(szMSIArgs), " "); if (RT_SUCCESS(vrc)) - vrc = RTStrCat(szMSIArgs, sizeof(szMSIArgs), - "REINSTALLMODE=vomus REINSTALL=ALL"); + vrc = RTStrCat(szMSIArgs, sizeof(szMSIArgs), "REINSTALLMODE=vomus REINSTALL=ALL"); if (RT_FAILURE(vrc)) - rcExit = ShowError("MSI parameters are too long."); + return ShowSyntaxError("Out of space for MSI parameters and properties"); break; case 'x': @@ -966,9 +1133,14 @@ break; case 'p': - vrc = RTStrCopy(szExtractPath, sizeof(szExtractPath), ValueUnion.psz); - if (RT_FAILURE(vrc)) - rcExit = ShowError("Extraction path is too long."); + if (*ValueUnion.psz == '\0') + szExtractPath[0] = '\0'; + else + { + vrc = RTPathAbs(ValueUnion.psz, szExtractPath, sizeof(szExtractPath)); + if (RT_FAILURE(vrc)) + return ShowSyntaxError("Extraction path is too long (%Rrc)", vrc); + } break; case 'm': @@ -977,124 +1149,186 @@ if (RT_SUCCESS(vrc)) vrc = RTStrCat(szMSIArgs, sizeof(szMSIArgs), ValueUnion.psz); if (RT_FAILURE(vrc)) - rcExit = ShowError("MSI parameters are too long."); + return ShowSyntaxError("Out of space for MSI parameters and properties"); break; + case 'P': + { + const char *pszProp = ValueUnion.psz; + if (strpbrk(pszProp, " \t\n\r") == NULL) + { + vrc = RTGetOptFetchValue(&GetState, &ValueUnion, RTGETOPT_REQ_STRING); + if (RT_SUCCESS(vrc)) + { + size_t cchMsiArgs = strlen(szMSIArgs); + if (RTStrPrintf2(&szMSIArgs[cchMsiArgs], sizeof(szMSIArgs) - cchMsiArgs, + strpbrk(ValueUnion.psz, " \t\n\r") == NULL ? "%s%s=%s" : "%s%s=\"%s\"", + cchMsiArgs ? " " : "", pszProp, ValueUnion.psz) <= 1) + return ShowSyntaxError("Out of space for MSI parameters and properties"); + } + else if (vrc == VERR_GETOPT_REQUIRED_ARGUMENT_MISSING) + return ShowSyntaxError("--msi-prop takes two arguments, the 2nd is missing"); + else + return ShowSyntaxError("Failed to get 2nd --msi-prop argument: %Rrc", vrc); + } + else + return ShowSyntaxError("The first argument to --msi-prop must not contain spaces: %s", pszProp); + break; + } + case 'r': fIgnoreReboot = true; break; case 'V': - ShowInfo("Version: %d.%d.%d.%d", - VBOX_VERSION_MAJOR, VBOX_VERSION_MINOR, VBOX_VERSION_BUILD, - VBOX_SVN_REV); - fExitEarly = true; - break; + ShowInfo("Version: %u.%u.%ur%u", VBOX_VERSION_MAJOR, VBOX_VERSION_MINOR, VBOX_VERSION_BUILD, VBOX_SVN_REV); + return RTEXITCODE_SUCCESS; case 'v': g_iVerbosity++; break; case 'h': - ShowInfo("-- %s v%d.%d.%d.%d --\n" + ShowInfo("-- %s v%u.%u.%ur%u --\n" "\n" "Command Line Parameters:\n\n" - "--extract - Extract file contents to temporary directory\n" - "--help - Print this help and exit\n" - "--logging - Enables installer logging\n" - "--msiparams - Specifies extra parameters for the MSI installers\n" - "--no-silent-cert - Do not install VirtualBox Certificate automatically when --silent option is specified\n" - "--path - Sets the path of the extraction directory\n" - "--reinstall - Forces VirtualBox to get re-installed\n" - "--ignore-reboot - Don't set exit code to 3010 if a reboot is required\n" - "--silent - Enables silent mode installation\n" - "--version - Print version number and exit\n" + "--extract\n" + " Extract file contents to temporary directory\n" + "--logging\n" + " Enables installer logging\n" + "--msiparams \n" + " Specifies extra parameters for the MSI installers\n" + " double quoted arguments must be doubled and put\n" + " in quotes: --msiparams \"PROP=\"\"a b c\"\"\"\n" + "--msi-prop \n" + " Adds = to the MSI parameters,\n" + " quoting the property value if necessary\n" + "--no-silent-cert\n" + " Do not install VirtualBox Certificate automatically\n" + " when --silent option is specified\n" + "--path\n" + " Sets the path of the extraction directory\n" + "--reinstall\n" + " Forces VirtualBox to get re-installed\n" + "--ignore-reboot\n" + " Do not set exit code to 3010 if a reboot is required\n" + "--silent\n" + " Enables silent mode installation\n" + "--version\n" + " Displays version number and exit\n" + "-?, -h, --help\n" + " Displays this help text and exit\n" "\n" "Examples:\n" - "%s --msiparams INSTALLDIR=C:\\VBox\n" - "%s --extract -path C:\\VBox", + " %s --msiparams \"INSTALLDIR=\"\"C:\\Program Files\\VirtualBox\"\"\"\n" + " %s --extract -path C:\\VBox", VBOX_STUB_TITLE, VBOX_VERSION_MAJOR, VBOX_VERSION_MINOR, VBOX_VERSION_BUILD, VBOX_SVN_REV, argv[0], argv[0]); - fExitEarly = true; - break; + return RTEXITCODE_SUCCESS; case VINF_GETOPT_NOT_OPTION: /* Are (optional) MSI parameters specified and this is the last * parameter? Append everything to the MSI parameter list then. */ + /** @todo r=bird: this makes zero sense */ if (szMSIArgs[0]) { vrc = RTStrCat(szMSIArgs, sizeof(szMSIArgs), " "); if (RT_SUCCESS(vrc)) vrc = RTStrCat(szMSIArgs, sizeof(szMSIArgs), ValueUnion.psz); if (RT_FAILURE(vrc)) - rcExit = ShowError("MSI parameters are too long."); + return ShowSyntaxError("Out of space for MSI parameters and properties"); continue; } /* Fall through is intentional. */ default: if (g_fSilent) - rcExit = RTGetOptPrintError(ch, &ValueUnion); + return RTGetOptPrintError(ch, &ValueUnion); if (ch == VERR_GETOPT_UNKNOWN_OPTION) - rcExit = ShowError("Unknown option \"%s\"\n" - "Please refer to the command line help by specifying \"/?\"\n" - "to get more information.", ValueUnion.psz); - else - rcExit = ShowError("Parameter parsing error: %Rrc\n" - "Please refer to the command line help by specifying \"/?\"\n" + return ShowSyntaxError("Unknown option \"%s\"\n" + "Please refer to the command line help by specifying \"-?\"\n" + "to get more information.", ValueUnion.psz); + return ShowSyntaxError("Parameter parsing error: %Rrc\n" + "Please refer to the command line help by specifying \"-?\"\n" "to get more information.", ch); - break; } } - /* Check if we can bail out early. */ - if (fExitEarly) - return rcExit; - - if (rcExit != RTEXITCODE_SUCCESS) - vrc = VERR_PARSE_ERROR; + /* + * Check if we're already running and jump out if so (this is mainly to + * protect the TEMP directory usage, right?). + */ + SetLastError(0); + HANDLE hMutexAppRunning = CreateMutex(NULL, FALSE, "VBoxStubInstaller"); + if ( hMutexAppRunning != NULL + && GetLastError() == ERROR_ALREADY_EXISTS) + { + CloseHandle(hMutexAppRunning); /* close it so we don't keep it open while showing the error message. */ + return ShowError("Another installer is already running"); + } /** @todo * * Split the remainder up in functions and simplify the code flow!! * * */ + RTEXITCODE rcExit = RTEXITCODE_SUCCESS; + RTListInit(&g_TmpFiles); -#if defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x0501 -# ifdef VBOX_STUB_WITH_OWN_CONSOLE /* Use an own console window if run in debug mode. */ - if ( RT_SUCCESS(vrc) - && g_iVerbosity) + /* + * Create a random extraction directory in the temporary directory if none + * was given by the user (see @bugref{10201}). + */ + PSTUBCLEANUPREC pExtractDirRec = NULL; /* This also indicates that */ + if (szExtractPath[0] == '\0') { - if (!AllocConsole()) + vrc = RTPathTemp(szExtractPath, sizeof(szExtractPath)); + if (RT_FAILURE(vrc)) { - DWORD dwErr = GetLastError(); - ShowError("Unable to allocate console, error = %ld\n", - dwErr); - - /* Close the mutex for this application instance. */ - CloseHandle(hMutexAppRunning); - hMutexAppRunning = NULL; - return RTEXITCODE_FAILURE; + CloseHandle(hMutexAppRunning); /* close it so we don't keep it open while showing the error message. */ + return ShowError("Failed to find temporary directory: %Rrc", vrc); } + if (!fExtractOnly) /* Only use a random sub-dir if we extract + run (and not just extract). */ + { + vrc = RTPathAppend(szExtractPath, sizeof(szExtractPath), "XXXXXXXXXXXXXXXXXXXXXXXX"); + if (RT_SUCCESS(vrc)) + /** @todo Need something that return a handle as well as a path. */ + vrc = RTDirCreateTemp(szExtractPath, 0700); + if (RT_FAILURE(vrc)) + { + CloseHandle(hMutexAppRunning); /* close it so we don't keep it open while showing the error message. */ + return ShowError("Failed to create extraction path: %Rrc", vrc); + } + pExtractDirRec = AddCleanupRec(szExtractPath, false /*fIsFile*/); + } + } + RTPathChangeToDosSlashes(szExtractPath, true /* Force conversion. */); /* MSI requirement. */ + + /* + * Create a console for output if we're in verbose mode. + */ +#ifdef VBOX_STUB_WITH_OWN_CONSOLE + if (g_iVerbosity) + { + if (!AllocConsole()) + return ShowError("Unable to allocate console: LastError=%u\n", GetLastError()); freopen("CONOUT$", "w", stdout); setvbuf(stdout, NULL, _IONBF, 0); freopen("CONOUT$", "w", stderr); } -# endif /* VBOX_STUB_WITH_OWN_CONSOLE */ -#endif +#endif /* VBOX_STUB_WITH_OWN_CONSOLE */ - if ( RT_SUCCESS(vrc) - && g_iVerbosity) + if (g_iVerbosity) { + RTPrintf("Extraction path : %s\n", szExtractPath); RTPrintf("Silent installation : %RTbool\n", g_fSilent); RTPrintf("Logging enabled : %RTbool\n", fEnableLogging); #ifdef VBOX_WITH_CODE_SIGNING RTPrintf("Certificate installation : %RTbool\n", fEnableSilentCert); #endif - RTPrintf("Additional MSI parameters: %s\n", - szMSIArgs[0] ? szMSIArgs : ""); + RTPrintf("Additional MSI parameters: %s\n", szMSIArgs[0] ? szMSIArgs : ""); } /* @@ -1103,53 +1337,24 @@ if ( !fExtractOnly && !g_fSilent && !IsWow64()) - { rcExit = ShowError("32-bit Windows hosts are not supported by this VirtualBox release."); - vrc = VERR_NOT_SUPPORTED; - } - - if (RT_SUCCESS(vrc)) + else { /* - * Determine the extration path if not given by the user, and gather some - * other bits we'll be needing later. + * Read our manifest. */ - if (szExtractPath[0] == '\0') - { - vrc = RTPathTemp(szExtractPath, sizeof(szExtractPath)); - if (RT_SUCCESS(vrc)) - vrc = RTPathAppend(szExtractPath, sizeof(szExtractPath), "VirtualBox"); - if (RT_FAILURE(vrc)) - ShowError("Failed to determine extraction path (%Rrc)", vrc); - - } - else - { - /** @todo should check if there is a .custom subdirectory there or not. */ - } - RTPathChangeToDosSlashes(szExtractPath, - true /* Force conversion. */); /* MSI requirement. */ - } - - /* Read our manifest. */ - if (RT_SUCCESS(vrc)) - { - PVBOXSTUBPKGHEADER pHeader; - vrc = FindData("MANIFEST", (PVOID *)&pHeader, NULL); + VBOXSTUBPKGHEADER const *pHeader = NULL; + vrc = FindData("MANIFEST", (uint8_t const **)&pHeader, NULL); if (RT_SUCCESS(vrc)) { /** @todo If we could, we should validate the header. Only the magic isn't * commonly defined, nor the version number... */ - RTListInit(&g_TmpFiles); - /* * Up to this point, we haven't done anything that requires any cleanup. - * From here on, we do everything in function so we can counter clean up. + * From here on, we do everything in functions so we can counter clean up. */ - bool fCreatedExtractDir; - rcExit = ExtractFiles(pHeader->byCntPkgs, szExtractPath, - fExtractOnly, &fCreatedExtractDir); + rcExit = ExtractFiles(pHeader->byCntPkgs, szExtractPath, fExtractOnly, &pExtractDirRec); if (rcExit == RTEXITCODE_SUCCESS) { if (fExtractOnly) @@ -1165,18 +1370,23 @@ while ( iPackage < pHeader->byCntPkgs && (rcExit == RTEXITCODE_SUCCESS || rcExit == (RTEXITCODE)ERROR_SUCCESS_REBOOT_REQUIRED)) { - RTEXITCODE rcExit2 = ProcessPackage(iPackage, szExtractPath, szMSIArgs, fEnableLogging); + RTEXITCODE rcExit2 = ProcessPackage(iPackage, szMSIArgs, fEnableLogging); if (rcExit2 != RTEXITCODE_SUCCESS) rcExit = rcExit2; iPackage++; } - - /* Don't fail if cleanup fail. At least for now. */ - CleanUp( !fEnableLogging - && fCreatedExtractDir ? szExtractPath : NULL); } } + /* + * Do cleanups unless we're only extracting (ignoring failures for now). + */ + if (!fExtractOnly) + { + RTPathSetCurrent(".."); + CleanUp(!fEnableLogging && pExtractDirRec && !pExtractDirRec->fDontDelete ? szExtractPath : NULL); + } + /* Free any left behind cleanup records (not strictly needed). */ PSTUBCLEANUPREC pCur, pNext; RTListForEachSafe(&g_TmpFiles, pCur, pNext, STUBCLEANUPREC, ListEntry) @@ -1197,14 +1407,10 @@ #endif /* - * Release instance mutex. + * Release instance mutex just to be on the safe side. */ if (hMutexAppRunning != NULL) - { CloseHandle(hMutexAppRunning); - hMutexAppRunning = NULL; - } return rcExit != (RTEXITCODE)ERROR_SUCCESS_REBOOT_REQUIRED || !fIgnoreReboot ? rcExit : RTEXITCODE_SUCCESS; } - diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Installer/win/Stub/VBoxStub.rc virtualbox-6.1.34-dfsg/src/VBox/Installer/win/Stub/VBoxStub.rc --- virtualbox-6.1.32-dfsg/src/VBox/Installer/win/Stub/VBoxStub.rc 2022-01-13 18:57:43.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Installer/win/Stub/VBoxStub.rc 2022-03-22 23:45:01.000000000 +0000 @@ -34,9 +34,9 @@ BEGIN BLOCK "040904b0" BEGIN - VALUE "FileDescription", "VirtualBox\0" - VALUE "InternalName", "VirtualBox\0" - VALUE "OriginalFilename", "VirtualBox.exe\0" + VALUE "FileDescription", "VirtualBox Installer\0" + VALUE "InternalName", "VirtualBox-" RT_XSTR(VBOX_VERSION_MAJOR) "." RT_XSTR(VBOX_VERSION_MINOR) "." RT_XSTR(VBOX_VERSION_BUILD) "-r" RT_XSTR(VBOX_SVN_REV) "-Win\0" + VALUE "OriginalFilename", "VirtualBox-" RT_XSTR(VBOX_VERSION_MAJOR) "." RT_XSTR(VBOX_VERSION_MINOR) "." RT_XSTR(VBOX_VERSION_BUILD) "-r" RT_XSTR(VBOX_SVN_REV) "-Win.exe\0" VALUE "CompanyName", VBOX_RC_COMPANY_NAME VALUE "FileVersion", VBOX_RC_FILE_VERSION_STR VALUE "LegalCopyright", VBOX_RC_LEGAL_COPYRIGHT diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Installer/win/VBoxMergeApp.wxi virtualbox-6.1.34-dfsg/src/VBox/Installer/win/VBoxMergeApp.wxi --- virtualbox-6.1.32-dfsg/src/VBox/Installer/win/VBoxMergeApp.wxi 2022-01-13 18:57:44.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Installer/win/VBoxMergeApp.wxi 2022-03-22 23:45:01.000000000 +0000 @@ -38,24 +38,24 @@ - + - + - + - + - + - + - - + + diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Installer/win/VirtualBox.wxs virtualbox-6.1.34-dfsg/src/VBox/Installer/win/VirtualBox.wxs --- virtualbox-6.1.32-dfsg/src/VBox/Installer/win/VirtualBox.wxs 2022-01-13 18:57:44.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Installer/win/VirtualBox.wxs 2022-03-22 23:45:01.000000000 +0000 @@ -201,6 +201,9 @@ + + @@ -490,10 +493,10 @@ - - + + - + @@ -623,6 +626,9 @@ 1 + + 1 + diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Main/include/ApplianceImpl.h virtualbox-6.1.34-dfsg/src/VBox/Main/include/ApplianceImpl.h --- virtualbox-6.1.32-dfsg/src/VBox/Main/include/ApplianceImpl.h 2022-01-13 18:57:46.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Main/include/ApplianceImpl.h 2022-03-22 23:45:03.000000000 +0000 @@ -206,6 +206,9 @@ ComPtr &pNewMachine, ImportStack &stack); void i_importMachines(ImportStack &stack); + HRESULT i_verifyStorageControllerPortValid(const StorageControllerType_T aStorageControllerType, + const uint32_t aControllerPort, + ULONG *ulMaxPorts); HRESULT i_preCheckImageAvailability(ImportStack &stack); bool i_importEnsureOvaLookAhead(ImportStack &stack); @@ -296,6 +299,7 @@ std::list i_findByType(VirtualSystemDescriptionType_T aType); const VirtualSystemDescriptionEntry* i_findControllerFromID(uint32_t id); + const VirtualSystemDescriptionEntry* i_findByIndex(const uint32_t aIndex); void i_importVBoxMachineXML(const xml::ElementNode &elmMachine); const settings::MachineConfigFile* i_getMachineConfig() const; diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Main/include/Global.h virtualbox-6.1.34-dfsg/src/VBox/Main/include/Global.h --- virtualbox-6.1.32-dfsg/src/VBox/Main/include/Global.h 2022-01-13 18:57:46.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Main/include/Global.h 2022-03-22 23:45:03.000000000 +0000 @@ -173,6 +173,14 @@ static const char *stringifyReason(Reason_T aReason); /** + * Stringify a storage controller type. + * + * @returns Pointer to a read only string. + * @param aType The storage controller type. + */ + static const char *stringifyStorageControllerType(StorageControllerType_T aType); + + /** * Try convert a COM status code to a VirtualBox status code (VBox/err.h). * * @returns VBox status code. diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Main/src-all/Global.cpp virtualbox-6.1.34-dfsg/src/VBox/Main/src-all/Global.cpp --- virtualbox-6.1.32-dfsg/src/VBox/Main/src-all/Global.cpp 2022-01-13 18:57:48.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Main/src-all/Global.cpp 2022-03-22 23:45:05.000000000 +0000 @@ -659,7 +659,6 @@ } } - /*static*/ const char * Global::stringifyReason(Reason_T aReason) { @@ -678,6 +677,33 @@ return s_szMsg; } } +} + +/*static*/ const char * +Global::stringifyStorageControllerType(StorageControllerType_T aType) +{ + switch (aType) + { + case StorageControllerType_Null: return "Null"; + case StorageControllerType_LsiLogic: return "LsiLogic"; + case StorageControllerType_BusLogic: return "BusLogic"; + case StorageControllerType_IntelAhci: return "AHCI"; + case StorageControllerType_PIIX3: return "PIIX3"; + case StorageControllerType_PIIX4 : return "PIIX4"; + case StorageControllerType_ICH6: return "ICH6"; + case StorageControllerType_I82078: return "I82078"; + case StorageControllerType_LsiLogicSas: return "LsiLogicSas"; + case StorageControllerType_USB: return "USB"; + case StorageControllerType_NVMe: return "NVMe"; + case StorageControllerType_VirtioSCSI: return "VirtioSCSI"; + default: + { + AssertMsgFailed(("%d (%#x)\n", aType, aType)); + static char s_szMsg[48]; + RTStrPrintf(s_szMsg, sizeof(s_szMsg), "Invalid storage controller type: 0x%08x\n", aType); + return s_szMsg; + } + } } /* vi: set tabstop=4 shiftwidth=4 expandtab: */ diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Main/src-server/ApplianceImpl.cpp virtualbox-6.1.34-dfsg/src/VBox/Main/src-server/ApplianceImpl.cpp --- virtualbox-6.1.32-dfsg/src/VBox/Main/src-server/ApplianceImpl.cpp 2022-01-13 18:57:50.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Main/src-server/ApplianceImpl.cpp 2022-03-22 23:45:07.000000000 +0000 @@ -1826,3 +1826,22 @@ return m->pConfig; } +/** + * Private method; walks through the array of VirtualSystemDescriptionEntry entries + * and returns the one matching the given index. + */ +const VirtualSystemDescriptionEntry* VirtualSystemDescription::i_findByIndex(const uint32_t aIndex) +{ + vector::const_iterator it; + for (it = m->maDescriptions.begin(); + it != m->maDescriptions.end(); + ++it) + { + const VirtualSystemDescriptionEntry &d = *it; + if (d.ulIndex == aIndex) + return &d; + } + + return NULL; +} + diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Main/src-server/ApplianceImplImport.cpp virtualbox-6.1.34-dfsg/src/VBox/Main/src-server/ApplianceImplImport.cpp --- virtualbox-6.1.32-dfsg/src/VBox/Main/src-server/ApplianceImplImport.cpp 2022-01-13 18:57:50.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Main/src-server/ApplianceImplImport.cpp 2022-03-22 23:45:07.000000000 +0000 @@ -3843,6 +3843,67 @@ } /** + * Helper routine to parse the ExtraData Utf8Str for a storage controller's + * value or channel value. + * + * @param aExtraData The ExtraData string with a format of + * 'controller=13;channel=3'. + * @param pszKey The string being looked up, either 'controller' or + * 'channel'. + * @param puVal The integer value of the 'controller=' or 'channel=' + * key in the ExtraData string. + * @returns COM status code. + * @throws Nothing. + */ +static int getStorageControllerDetailsFromStr(const com::Utf8Str &aExtraData, const char *pszKey, uint32_t *puVal) +{ + size_t posKey = aExtraData.find(pszKey); + if (posKey == Utf8Str::npos) + return VERR_INVALID_PARAMETER; + + int vrc = RTStrToUInt32Ex(aExtraData.c_str() + posKey + strlen(pszKey), NULL, 0, puVal); + if (vrc == VWRN_NUMBER_TOO_BIG || vrc == VWRN_NEGATIVE_UNSIGNED) + return VERR_INVALID_PARAMETER; + + return vrc; +} + +/** + * Verifies the validity of a storage controller's channel (aka controller port). + * + * @param aStorageControllerType The type of storage controller as idenfitied + * by the enum of type StorageControllerType_T. + * @param uControllerPort The controller port value. + * @param aMaxPortCount The maximum number of ports allowed for this + * storage controller type. + * @returns COM status code. + * @throws Nothing. + */ +HRESULT Appliance::i_verifyStorageControllerPortValid(const StorageControllerType_T aStorageControllerType, + const uint32_t uControllerPort, + ULONG *aMaxPortCount) +{ + SystemProperties *pSysProps; + pSysProps = mVirtualBox->i_getSystemProperties(); + if (pSysProps == NULL) + return VBOX_E_OBJECT_NOT_FOUND; + + StorageBus_T enmStorageBus = StorageBus_Null; + HRESULT vrc = pSysProps->GetStorageBusForStorageControllerType(aStorageControllerType, &enmStorageBus); + if (FAILED(vrc)) + return vrc; + + vrc = pSysProps->GetMaxPortCountForStorageBus(enmStorageBus, aMaxPortCount); + if (FAILED(vrc)) + return vrc; + + if (uControllerPort >= *aMaxPortCount) + return E_INVALIDARG; + + return S_OK; +} + +/** * Imports one OVF virtual system (described by the given ovf::VirtualSystem and VirtualSystemDescription) * into VirtualBox by creating an IMachine instance, which is returned. * @@ -4520,13 +4581,93 @@ if (FAILED(rc)) throw rc; - // find the hard disk controller to which we should attach - ovf::HardDiskController hdc = (*vsysThis.mapControllers.find(ovfVdisk.idController)).second; - // this is for rollback later MyHardDiskAttachment mhda; mhda.pMachine = pNewMachine; + // find the hard disk controller to which we should attach + ovf::HardDiskController hdc; + + /* + * Before importing the virtual hard disk found above (diCurrent/vsdeTargetHD) first + * check if the user requested to change either the controller it is to be attached + * to and/or the controller port (aka 'channel') on the controller. + */ + if ( !vsdeTargetHD->strExtraConfigCurrent.isEmpty() + && vsdeTargetHD->strExtraConfigSuggested != vsdeTargetHD->strExtraConfigCurrent) + { + int vrc; + uint32_t uTargetControllerIndex; + vrc = getStorageControllerDetailsFromStr(vsdeTargetHD->strExtraConfigCurrent, "controller=", + &uTargetControllerIndex); + if (RT_FAILURE(vrc)) + throw setError(E_FAIL, + tr("Target controller value invalid or missing: '%s'"), + vsdeTargetHD->strExtraConfigCurrent.c_str()); + + uint32_t uNewControllerPortValue; + vrc = getStorageControllerDetailsFromStr(vsdeTargetHD->strExtraConfigCurrent, "channel=", + &uNewControllerPortValue); + if (RT_FAILURE(vrc)) + throw setError(E_FAIL, + tr("Target controller port ('channel=') invalid or missing: '%s'"), + vsdeTargetHD->strExtraConfigCurrent.c_str()); + + const VirtualSystemDescriptionEntry *vsdeTargetController; + vsdeTargetController = vsdescThis->i_findByIndex(uTargetControllerIndex); + if (!vsdeTargetController) + throw setError(E_FAIL, + tr("Failed to find storage controller '%u' in the System Description list"), + uTargetControllerIndex); + + hdc = (*vsysThis.mapControllers.find(vsdeTargetController->strRef.toUInt32())).second; + + StorageControllerType_T hdStorageControllerType = StorageControllerType_Null; + switch (hdc.system) + { + case ovf::HardDiskController::IDE: + hdStorageControllerType = StorageControllerType_PIIX3; + break; + case ovf::HardDiskController::SATA: + hdStorageControllerType = StorageControllerType_IntelAhci; + break; + case ovf::HardDiskController::SCSI: + { + if (hdc.strControllerType.compare("lsilogicsas")==0) + hdStorageControllerType = StorageControllerType_LsiLogicSas; + else + hdStorageControllerType = StorageControllerType_LsiLogic; + break; + } + default: + throw setError(E_FAIL, + tr("Invalid hard disk contoller type: '%d'"), + hdc.system); + break; + } + + ULONG ulMaxPorts; + rc = i_verifyStorageControllerPortValid(hdStorageControllerType, + uNewControllerPortValue, + &ulMaxPorts); + if (FAILED(rc)) + { + if (rc == E_INVALIDARG) + { + const char *pcszSCType = Global::stringifyStorageControllerType(hdStorageControllerType); + throw setError(E_INVALIDARG, + tr("Illegal channel: '%u'. For %s controllers the valid values are " + "0 to %lu (inclusive).\n"), uNewControllerPortValue, pcszSCType, ulMaxPorts-1); + } + else + throw rc; + } + + unconst(ovfVdisk.ulAddressOnParent) = uNewControllerPortValue; + } + else + hdc = (*vsysThis.mapControllers.find(ovfVdisk.idController)).second; + i_convertDiskAttachmentValues(hdc, ovfVdisk.ulAddressOnParent, mhda.controllerName, @@ -4768,7 +4909,6 @@ * attachments pointing to the last hard disk image, which causes import * failures. A long fixed bug, however the OVF files are long lived. */ settings::StorageControllersList &llControllers = config.hardwareMachine.storage.llStorageControllers; - Guid hdUuid; uint32_t cDisks = 0; bool fInconsistent = false; bool fRepairDuplicate = false; @@ -4777,6 +4917,7 @@ it3 != llControllers.end(); ++it3) { + Guid hdUuid; settings::AttachedDevicesList &llAttachments = it3->llAttachedDevices; settings::AttachedDevicesList::iterator it4 = llAttachments.begin(); while (it4 != llAttachments.end()) @@ -4871,14 +5012,6 @@ continue; } - - - - - - - - /* * preliminary check availability of the image * This step is useful if image is placed in the OVA (TAR) package @@ -4950,11 +5083,6 @@ throw setError(E_FAIL, tr("Internal inconsistency looking up disk image '%s'"), diCurrent.strHref.c_str()); - - - - - } else { @@ -4980,6 +5108,223 @@ bool fFound = false; Utf8Str strUuid; + /* + * Before importing the virtual hard disk found above (diCurrent/vsdeTargetHD) first + * check if the user requested to change either the controller it is to be attached + * to and/or the controller port (aka 'channel') on the controller. + */ + if ( !vsdeTargetHD->strExtraConfigCurrent.isEmpty() + && vsdeTargetHD->strExtraConfigSuggested != vsdeTargetHD->strExtraConfigCurrent) + { + /* + * First, we examine the extra configuration values for this vdisk: + * vsdeTargetHD->strExtraConfigSuggested + * vsdeTargetHD->strExtraConfigCurrent + * in order to extract both the "before" and "after" storage controller and port + * details. The strExtraConfigSuggested string contains the current controller + * and port the vdisk is attached to and is populated by Appliance::interpret() + * when processing the OVF data; it is in the following format: + * 'controller=12;channel=0' (the 'channel=' label for the controller port is + * historical and is documented as such in the SDK so can't be changed). The + * strExtraConfigSuggested string contains the target controller and port specified + * by the user and it has the same format. The 'controller=' value is not a + * controller-ID but rather it is the index for the corresponding storage controller + * in the array of VirtualSystemDescriptionEntry entries. + */ + int vrc; + uint32_t uOrigControllerIndex; + vrc = getStorageControllerDetailsFromStr(vsdeTargetHD->strExtraConfigSuggested, "controller=", &uOrigControllerIndex); + if (RT_FAILURE(vrc)) + throw setError(E_FAIL, + tr("Original controller value invalid or missing: '%s'"), + vsdeTargetHD->strExtraConfigSuggested.c_str()); + + uint32_t uTargetControllerIndex; + vrc = getStorageControllerDetailsFromStr(vsdeTargetHD->strExtraConfigCurrent, "controller=", &uTargetControllerIndex); + if (RT_FAILURE(vrc)) + throw setError(E_FAIL, + tr("Target controller value invalid or missing: '%s'"), + vsdeTargetHD->strExtraConfigCurrent.c_str()); + + uint32_t uOrigControllerPortValue; + vrc = getStorageControllerDetailsFromStr(vsdeTargetHD->strExtraConfigSuggested, "channel=", + &uOrigControllerPortValue); + if (RT_FAILURE(vrc)) + throw setError(E_FAIL, + tr("Original controller port ('channel=') invalid or missing: '%s'"), + vsdeTargetHD->strExtraConfigSuggested.c_str()); + + uint32_t uNewControllerPortValue; + vrc = getStorageControllerDetailsFromStr(vsdeTargetHD->strExtraConfigCurrent, "channel=", &uNewControllerPortValue); + if (RT_FAILURE(vrc)) + throw setError(E_FAIL, + tr("Target controller port ('channel=') invalid or missing: '%s'"), + vsdeTargetHD->strExtraConfigCurrent.c_str()); + + /* + * Second, now that we have the storage controller indexes we locate the corresponding + * VirtualSystemDescriptionEntry (VSDE) for both storage controllers which contain + * identifying details which will be needed later when walking the list of storage + * controllers. + */ + const VirtualSystemDescriptionEntry *vsdeOrigController; + vsdeOrigController = vsdescThis->i_findByIndex(uOrigControllerIndex); + if (!vsdeOrigController) + throw setError(E_FAIL, + tr("Failed to find storage controller '%u' in the System Description list"), + uOrigControllerIndex); + + const VirtualSystemDescriptionEntry *vsdeTargetController; + vsdeTargetController = vsdescThis->i_findByIndex(uTargetControllerIndex); + if (!vsdeTargetController) + throw setError(E_FAIL, + tr("Failed to find storage controller '%u' in the System Description list"), + uTargetControllerIndex); + + /* + * Third, grab the UUID of the current vdisk so we can identify which device + * attached to the original storage controller needs to be updated (channel) and/or + * removed. + */ + ovf::DiskImagesMap::const_iterator itDiskImageMap = stack.mapDisks.find(vsdeTargetHD->strRef); + if (itDiskImageMap == stack.mapDisks.end()) + throw setError(E_FAIL, + tr("Failed to find virtual disk '%s' in DiskImagesMap"), + vsdeTargetHD->strVBoxCurrent.c_str()); + const ovf::DiskImage &targetDiskImage = itDiskImageMap->second; + Utf8Str strTargetDiskUuid = targetDiskImage.uuidVBox;; + + /* + * Fourth, walk the attached devices of the original storage controller to find the + * current vdisk and update the controller port (aka channel) value if necessary and + * also remove the vdisk from this controller if needed. + * + * A short note on the choice of which items to compare when determining the type of + * storage controller here and below in the vdisk addition scenario: + * + The VirtualSystemDescriptionEntry 'strOvf' field is populated from the OVF + * data which can contain a value like 'vmware.sata.ahci' if created by VMWare so + * it isn't a reliable choice. + * + The settings::StorageController 'strName' field can have varying content based + * on the version of the settings file, e.g. 'IDE Controller' vs. 'IDE' so it + * isn't a reliable choice. Further, this field can contain 'SATA' whereas + * 'AHCI' is used in 'strOvf' and 'strVBoxSuggested'. + * + The VirtualSystemDescriptionEntry 'strVBoxSuggested' field is populated by + * Appliance::interpret()->VirtualSystemDescription::i_addEntry() and is thus + * under VBox's control and has a fixed format and predictable content. + */ + bool fDiskRemoved = false; + settings::AttachedDevice originalAttachedDevice; + settings::StorageControllersList::iterator itSCL; + for (itSCL = config.hardwareMachine.storage.llStorageControllers.begin(); + itSCL != config.hardwareMachine.storage.llStorageControllers.end(); + ++itSCL) + { + settings::StorageController &SC = *itSCL; + const char *pcszSCType = Global::stringifyStorageControllerType(SC.controllerType); + + /* There can only be one storage controller of each type in the OVF data. */ + if (!vsdeOrigController->strVBoxSuggested.compare(pcszSCType, Utf8Str::CaseInsensitive)) + { + settings::AttachedDevicesList::iterator itAD; + for (itAD = SC.llAttachedDevices.begin(); + itAD != SC.llAttachedDevices.end(); + ++itAD) + { + settings::AttachedDevice &AD = *itAD; + + if (AD.uuid.toString() == strTargetDiskUuid) + { + ULONG ulMaxPorts; + rc = i_verifyStorageControllerPortValid(SC.controllerType, + uNewControllerPortValue, + &ulMaxPorts); + if (FAILED(rc)) + { + if (rc == E_INVALIDARG) + throw setError(E_INVALIDARG, + tr("Illegal channel: '%u'. For %s controllers the valid values are " + "0 to %lu (inclusive).\n"), uNewControllerPortValue, pcszSCType, ulMaxPorts-1); + else + throw rc; + } + + if (uOrigControllerPortValue != uNewControllerPortValue) + { + AD.lPort = (int32_t)uNewControllerPortValue; + } + if (uOrigControllerIndex != uTargetControllerIndex) + { + LogFunc(("Removing vdisk '%s' (uuid = %RTuuid) from the %s storage controller.\n", + vsdeTargetHD->strVBoxCurrent.c_str(), + itAD->uuid.raw(), + SC.strName.c_str())); + originalAttachedDevice = AD; + SC.llAttachedDevices.erase(itAD); + fDiskRemoved = true; + } + } + } + } + } + + /* + * Fifth, if we are moving the vdisk to a different controller and not just changing + * the channel then we walk the attached devices of the target controller and check + * for conflicts before adding the vdisk detached/removed above. + */ + bool fDiskAdded = false; + if (fDiskRemoved) + { + for (itSCL = config.hardwareMachine.storage.llStorageControllers.begin(); + itSCL != config.hardwareMachine.storage.llStorageControllers.end(); + ++itSCL) + { + settings::StorageController &SC = *itSCL; + const char *pcszSCType = Global::stringifyStorageControllerType(SC.controllerType); + + /* There can only be one storage controller of each type in the OVF data. */ + if (!vsdeTargetController->strVBoxSuggested.compare(pcszSCType, Utf8Str::CaseInsensitive)) + { + settings::AttachedDevicesList::iterator itAD; + for (itAD = SC.llAttachedDevices.begin(); + itAD != SC.llAttachedDevices.end(); + ++itAD) + { + settings::AttachedDevice &AD = *itAD; + if ( AD.lDevice == originalAttachedDevice.lDevice + && AD.lPort == originalAttachedDevice.lPort) + throw setError(E_FAIL, + tr("Device of type '%s' already attached to the %s controller at this " + "port/channel (%d)."), + Global::stringifyDeviceType(AD.deviceType), pcszSCType, AD.lPort); + } + + LogFunc(("Adding vdisk '%s' (uuid = %RTuuid) to the %s storage controller\n", + vsdeTargetHD->strVBoxCurrent.c_str(), + originalAttachedDevice.uuid.raw(), + SC.strName.c_str())); + SC.llAttachedDevices.push_back(originalAttachedDevice); + fDiskAdded = true; + } + } + + if (!fDiskAdded) + throw setError(E_FAIL, + tr("Failed to add disk '%s' (uuid=%RTuuid) to the %s storage controller."), + vsdeTargetHD->strVBoxCurrent.c_str(), + originalAttachedDevice.uuid.raw(), + vsdeTargetController->strVBoxSuggested.c_str()); + } + + /* + * Sixth, update the machine settings since we've changed the storage controller + * and/or controller port for this vdisk. + */ + AutoWriteLock vboxLock(mVirtualBox COMMA_LOCKVAL_SRC_POS); + mVirtualBox->i_saveSettings(); + vboxLock.release(); + } + // for each storage controller... for (settings::StorageControllersList::iterator sit = config.hardwareMachine.storage.llStorageControllers.begin(); sit != config.hardwareMachine.storage.llStorageControllers.end(); @@ -5164,7 +5509,7 @@ { VirtualSystemDescriptionEntry *vsdeSF1 = vsdeSettingsFile.front(); if (vsdeSF1->strVBoxCurrent != vsdeSF1->strVBoxSuggested) - stack.strSettingsFilename = vsdeSF1->strVBoxCurrent; + stack.strSettingsFilename = vsdeSF1->strVBoxCurrent; } if (stack.strSettingsFilename.isEmpty()) { diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Main/src-server/MachineImpl.cpp virtualbox-6.1.34-dfsg/src/VBox/Main/src-server/MachineImpl.cpp --- virtualbox-6.1.32-dfsg/src/VBox/Main/src-server/MachineImpl.cpp 2022-01-13 18:57:51.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Main/src-server/MachineImpl.cpp 2022-03-22 23:45:08.000000000 +0000 @@ -1557,6 +1557,9 @@ AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); + rc = i_checkStateDependency(MutableOrRunningStateDep); + if (FAILED(rc)) return rc; + alock.release(); rc = i_onCPUExecutionCapChange(aCPUExecutionCap); alock.acquire(); @@ -1769,6 +1772,9 @@ AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); + HRESULT rc = i_checkStateDependency(MutableOrRunningStateDep); + if (FAILED(rc)) return rc; + i_setModified(IsModified_MachineData); mHWData.backup(); mHWData->mMemoryBalloonSize = aMemoryBalloonSize; @@ -1793,6 +1799,9 @@ #ifdef VBOX_WITH_PAGE_SHARING AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); + HRESULT rc = i_checkStateDependency(MutableStateDep); + if (FAILED(rc)) return rc; + /** @todo must support changes for running vms and keep this in sync with IGuest. */ i_setModified(IsModified_MachineData); mHWData.backup(); @@ -2586,6 +2595,9 @@ AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); + rc = i_checkStateDependency(MutableOrRunningStateDep); + if (FAILED(rc)) return rc; + alock.release(); rc = i_onClipboardModeChange(aClipboardMode); alock.acquire(); @@ -2617,6 +2629,9 @@ AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); + rc = i_checkStateDependency(MutableOrRunningStateDep); + if (FAILED(rc)) return rc; + alock.release(); rc = i_onClipboardFileTransferModeChange(aEnabled); alock.acquire(); @@ -2648,6 +2663,9 @@ AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); + rc = i_checkStateDependency(MutableOrRunningStateDep); + if (FAILED(rc)) return rc; + alock.release(); rc = i_onDnDModeChange(aDnDMode); @@ -4463,6 +4481,9 @@ this->lockHandle(), &mParent->i_getMediaTreeLockHandle() COMMA_LOCKVAL_SRC_POS); + HRESULT hrc = i_checkStateDependency(MutableOrRunningStateDep); + if (FAILED(hrc)) return hrc; + ComObjPtr pAttach = i_findAttachment(*mMediumAttachments.data(), aName, aControllerPort, @@ -6349,6 +6370,9 @@ if (mHWData->mCPUAttached[aCpu]) return setError(VBOX_E_OBJECT_IN_USE, tr("CPU %lu is already attached"), aCpu); + rc = i_checkStateDependency(MutableOrRunningStateDep); + if (FAILED(rc)) return rc; + alock.release(); rc = i_onCPUChange(aCpu, false); alock.acquire(); @@ -6386,6 +6410,9 @@ if (aCpu == 0) return setError(E_INVALIDARG, tr("It is not possible to detach CPU 0")); + rc = i_checkStateDependency(MutableOrRunningStateDep); + if (FAILED(rc)) return rc; + alock.release(); rc = i_onCPUChange(aCpu, true); alock.acquire(); diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Main/src-server/NATNetworkImpl.cpp virtualbox-6.1.34-dfsg/src/VBox/Main/src-server/NATNetworkImpl.cpp --- virtualbox-6.1.32-dfsg/src/VBox/Main/src-server/NATNetworkImpl.cpp 2022-01-13 18:57:51.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Main/src-server/NATNetworkImpl.cpp 2022-03-22 23:45:08.000000000 +0000 @@ -23,6 +23,7 @@ #include #include +#include #include #include #include @@ -73,6 +74,8 @@ uint32_t offGateway; uint32_t offDhcp; + + void recalculatePortForwarding(const RTNETADDRIPV4 &AddrNew, const RTNETADDRIPV4 &MaskNew); }; @@ -177,7 +180,7 @@ m->s.fAdvertiseDefaultIPv6Route, m->s.fNeedDhcpServer); - /* Notify listerners listening on this network only */ + /* Notify listeners listening on this network only */ fireNATNetworkSettingEvent(m->pEventSource, Bstr(m->s.strNetworkName).raw(), m->s.fEnabled, @@ -205,7 +208,7 @@ HRESULT NATNetwork::setNetworkName(const com::Utf8Str &aNetworkName) { - if (m->s.strNetworkName.isEmpty()) + if (aNetworkName.isEmpty()) return setError(E_INVALIDARG, tr("Network name cannot be empty")); { @@ -260,32 +263,113 @@ HRESULT NATNetwork::setNetwork(const com::Utf8Str &aIPv4NetworkCidr) { - { + RTNETADDRIPV4 Net, Mask; + int iPrefix; + int rc; - AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); + rc = RTNetStrToIPv4Cidr(aIPv4NetworkCidr.c_str(), &Net, &iPrefix); + if (RT_FAILURE(rc)) + return setError(E_FAIL, "%s is not a valid IPv4 CIDR notation", + aIPv4NetworkCidr.c_str()); - if (aIPv4NetworkCidr == m->s.strIPv4NetworkCidr) - return S_OK; + /* + * /32 is a single address, not a network, /31 is the degenerate + * point-to-point case, so reject these. Larger values and + * negative values are already treated as errors by the + * conversion. + */ + if (iPrefix > 30) + return setError(E_FAIL, "%s network is too small", aIPv4NetworkCidr.c_str()); + + if (iPrefix == 0) + return setError(E_FAIL, tr("%s specifies zero prefix"), aIPv4NetworkCidr.c_str()); + + rc = RTNetPrefixToMaskIPv4(iPrefix, &Mask); + AssertRCReturn(rc, setError(E_FAIL, + "%s: internal error: failed to convert prefix %d to netmask: %Rrc", + aIPv4NetworkCidr.c_str(), iPrefix, rc)); + + if ((Net.u & ~Mask.u) != 0) + return setError(E_FAIL, + "%s: the specified address is longer than the specified prefix", + aIPv4NetworkCidr.c_str()); - /* silently ignore network cidr update for now. - * todo: keep internally guest address of port forward rule - * as offset from network id. - */ - if (!m->s.mapPortForwardRules4.empty()) + /** @todo r=uwe Check the address is unicast, not a loopback, etc. */ + + /* normalized CIDR notation */ + com::Utf8StrFmt strCidr("%RTnaipv4/%d", Net.u, iPrefix); + + { + AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); + + if (m->s.strIPv4NetworkCidr == strCidr) return S_OK; + m->recalculatePortForwarding(Net, Mask); - m->s.strIPv4NetworkCidr = aIPv4NetworkCidr; + m->s.strIPv4NetworkCidr = strCidr; i_recalculateIpv4AddressAssignments(); } AutoWriteLock vboxLock(m->pVirtualBox COMMA_LOCKVAL_SRC_POS); - HRESULT rc = m->pVirtualBox->i_saveSettings(); - ComAssertComRCRetRC(rc); + HRESULT hrc = m->pVirtualBox->i_saveSettings(); + ComAssertComRCRetRC(hrc); return S_OK; } +/** + * Do best effort attempt at converting existing port forwarding rules + * from the old prefix to the new one. This might not be possible if + * the new prefix is longer (i.e. the network is smaller) or if a rule + * lists destination not from the network (though that rule wouldn't + * be terribly useful, at least currently). + */ +void NATNetwork::Data::recalculatePortForwarding(const RTNETADDRIPV4 &NetNew, + const RTNETADDRIPV4 &MaskNew) +{ + RTNETADDRIPV4 NetOld, MaskOld; + int iPrefixOld; + int rc; + + if (s.mapPortForwardRules4.empty()) + return; /* nothing to do */ + + rc = RTNetStrToIPv4Cidr(s.strIPv4NetworkCidr.c_str(), &NetOld, &iPrefixOld); + if (RT_FAILURE(rc)) + return; + + rc = RTNetPrefixToMaskIPv4(iPrefixOld, &MaskOld); + if (RT_FAILURE(rc)) + return; + + for (settings::NATRulesMap::iterator it = s.mapPortForwardRules4.begin(); + it != s.mapPortForwardRules4.end(); + ++it) + { + settings::NATRule &rule = it->second; + + /* parse the old destination address */ + RTNETADDRIPV4 AddrOld; + rc = RTNetStrToIPv4Addr(rule.strGuestIP.c_str(), &AddrOld); + if (RT_FAILURE(rc)) + continue; + + /* is it in the old network? (likely) */ + if ((AddrOld.u & MaskOld.u) != NetOld.u) + continue; + + uint32_t u32Host = (AddrOld.u & ~MaskOld.u); + + /* does it fit into the new network? */ + if ((u32Host & MaskNew.u) != 0) + continue; + + rule.strGuestIP.printf("%RTnaipv4", NetNew.u | u32Host); + } +} + + HRESULT NATNetwork::getIPv6Enabled(BOOL *aIPv6Enabled) { *aIPv6Enabled = m->s.fIPv6Enabled; @@ -302,6 +386,13 @@ if (RT_BOOL(aIPv6Enabled) == m->s.fIPv6Enabled) return S_OK; + /* + * If we are enabling ipv6 and the prefix is not set, provide + * the default based on ipv4. + */ + if (aIPv6Enabled && m->s.strIPv6Prefix.isEmpty()) + i_recalculateIPv6Prefix(); + m->s.fIPv6Enabled = RT_BOOL(aIPv6Enabled); } @@ -323,24 +414,79 @@ HRESULT NATNetwork::setIPv6Prefix(const com::Utf8Str &aIPv6Prefix) { + HRESULT hrc; + int rc; + + /* Since we store it in text form, use canonical representation */ + com::Utf8Str strNormalizedIPv6Prefix; + + const char *pcsz = RTStrStripL(aIPv6Prefix.c_str()); + if (*pcsz != '\0') /* verify it first if not empty/blank */ + { + RTNETADDRIPV6 Net6; + int iPrefixLength; + rc = RTNetStrToIPv6Cidr(aIPv6Prefix.c_str(), &Net6, &iPrefixLength); + if (RT_FAILURE(rc)) + return setError(E_INVALIDARG, + "%s is not a valid IPv6 prefix", + aIPv6Prefix.c_str()); + + /* Accept both addr:: and addr::/64 */ + if (iPrefixLength == 128) /* no length was specified after the address? */ + iPrefixLength = 64; /* take it to mean /64 which we require anyway */ + else if (iPrefixLength != 64) + return setError(E_INVALIDARG, + "Invalid IPv6 prefix length %d, must be 64", + iPrefixLength); + + /* Verify the address is unicast. */ + if ( ((Net6.au8[0] & 0xe0) != 0x20) /* global 2000::/3 */ + && ((Net6.au8[0] & 0xfe) != 0xfc)) /* local fc00::/7 */ + return setError(E_INVALIDARG, + "IPv6 prefix %RTnaipv6 is not unicast", + &Net6); + + /* Verify the interfaces ID part is zero */ + if (Net6.au64[1] != 0) + return setError(E_INVALIDARG, + "Non-zero bits in the interface ID part" + " of the IPv6 prefix %RTnaipv6/64", + &Net6); + + rc = strNormalizedIPv6Prefix.printfNoThrow("%RTnaipv6/64", &Net6); + if (RT_FAILURE(rc)) + { + if (rc == VERR_NO_MEMORY) + return setError(E_OUTOFMEMORY); + else + return setError(E_FAIL, "Internal error"); + } + } + { AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); - if (aIPv6Prefix == m->s.strIPv6Prefix) + if (strNormalizedIPv6Prefix == m->s.strIPv6Prefix) return S_OK; - /* silently ignore network IPv6 prefix update. + /* only allow prefix to be empty if IPv6 is disabled */ + if (strNormalizedIPv6Prefix.isEmpty() && m->s.fIPv6Enabled) + return setError(E_FAIL, "Setting an empty IPv6 prefix when IPv6 is enabled"); + + /** + * @todo + * silently ignore network IPv6 prefix update. * todo: see similar todo in NATNetwork::COMSETTER(Network)(IN_BSTR) */ if (!m->s.mapPortForwardRules6.empty()) return S_OK; - m->s.strIPv6Prefix = aIPv6Prefix; + m->s.strIPv6Prefix = strNormalizedIPv6Prefix; } AutoWriteLock vboxLock(m->pVirtualBox COMMA_LOCKVAL_SRC_POS); - HRESULT rc = m->pVirtualBox->i_saveSettings(); - ComAssertComRCRetRC(rc); + hrc = m->pVirtualBox->i_saveSettings(); + ComAssertComRCRetRC(hrc); return S_OK; } @@ -588,7 +734,7 @@ Bstr(aHostIp).raw(), aHostPort, Bstr(aGuestIp).raw(), aGuestPort); - /* Notify listerners listening on this network only */ + /* Notify listeners listening on this network only */ fireNATNetworkPortForwardEvent(m->pEventSource, Bstr(m->s.strNetworkName).raw(), TRUE, aIsIpv6, Bstr(aPortForwardRuleName).raw(), aProto, Bstr(aHostIp).raw(), aHostPort, @@ -633,7 +779,7 @@ Bstr(strHostIP).raw(), u16HostPort, Bstr(strGuestIP).raw(), u16GuestPort); - /* Notify listerners listening on this network only */ + /* Notify listeners listening on this network only */ fireNATNetworkPortForwardEvent(m->pEventSource, Bstr(m->s.strNetworkName).raw(), FALSE, aIsIpv6, Bstr(aPortForwardRuleName).raw(), proto, Bstr(strHostIP).raw(), u16HostPort, @@ -773,6 +919,7 @@ if (!m->s.fEnabled) return S_OK; AssertReturn(!m->s.strNetworkName.isEmpty(), E_FAIL); + m->NATRunner.resetArguments(); m->NATRunner.addArgPair(NetworkServiceRunner::kpszKeyNetwork, Utf8Str(m->s.strNetworkName).c_str()); m->NATRunner.addArgPair(NetworkServiceRunner::kpszKeyTrunkType, Utf8Str(TRUNKTYPE_WHATEVER).c_str()); m->NATRunner.addArgPair(NetworkServiceRunner::kpszIpAddress, Utf8Str(m->IPv4Gateway).c_str()); diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Main/src-server/UnattendedScript.cpp virtualbox-6.1.34-dfsg/src/VBox/Main/src-server/UnattendedScript.cpp --- virtualbox-6.1.32-dfsg/src/VBox/Main/src-server/UnattendedScript.cpp 2022-01-13 18:57:52.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Main/src-server/UnattendedScript.cpp 2022-03-22 23:45:08.000000000 +0000 @@ -42,6 +42,56 @@ /********************************************************************************************************************************* +* Static Functions * +*********************************************************************************************************************************/ + +/** + * Searches comparison operators'<', '<=', '>', '>=', or '=' in string. + * + * @returns true if detected, false if not. + * @param pszComparisonOperator Comparison operators string array. Assumed to be of size 3, + * @param pachPlaceholder The string array in which we search the comparison operators, + * @param startPos The position with in the pachPlaceholder from where the seach starts. Required to be smaller then + * sizeof(pachPlaceholder) - 3 + */ + +static bool detectComparisonOperator(char *pszComparisonOperator, const char *pachPlaceholder, size_t &startPos) +{ + memset(pszComparisonOperator, '\0', 3); + /* Search for '>', '<', '>=', '<=', '='. */ + if (pachPlaceholder[startPos] == '<') + { + pszComparisonOperator[0] = '<'; + ++startPos; + if (pachPlaceholder[startPos] == '=') + { + pszComparisonOperator[1] = '='; + ++startPos; + } + return true; + } + if (pachPlaceholder[startPos] == '>') + { + pszComparisonOperator[0] = '>'; + ++startPos; + if (pachPlaceholder[startPos] == '=') + { + pszComparisonOperator[1] = '='; + ++startPos; + } + return true; + } + else if (pachPlaceholder[startPos] == '=') + { + pszComparisonOperator[0] = '='; + ++startPos; + return true; + } + return false; +} + + +/********************************************************************************************************************************* * UnattendedScriptTemplate Implementation * *********************************************************************************************************************************/ @@ -456,7 +506,7 @@ ( cchPlaceholder == sizeof("@@VBOX_COND_" a_szMatch "@@") - 1U \ && memcmp(pachPlaceholder, "@@VBOX_COND_" a_szMatch "@@", sizeof("@@VBOX_COND_" a_szMatch "@@") - 1U) == 0) #define IS_PLACEHOLDER_PARTIALLY_MATCH(a_szMatch) \ - (memcmp(pachPlaceholder, "@@VBOX_COND_" a_szMatch, sizeof("@@VBOX_COND_" a_szMatch) - 1U) == 0) + (memcmp(pachPlaceholder, "@@VBOX_COND_" a_szMatch, sizeof("@@VBOX_COND_" a_szMatch) - 1U) == 0) /* Install guest additions: */ if (IS_PLACEHOLDER_MATCH("IS_INSTALLING_ADDITIONS")) @@ -500,37 +550,66 @@ *pfOutputting = !mpUnattended->i_isRtcUsingUtc(); else if (IS_PLACEHOLDER_MATCH("HAS_PROXY")) *pfOutputting = mpUnattended->i_getProxy().isNotEmpty(); - else if (IS_PLACEHOLDER_PARTIALLY_MATCH("GUEST_VERSION")) + else if (IS_PLACEHOLDER_PARTIALLY_MATCH("GUEST_VERSION[")) { - //parse the placeholder and extract the OS version from there - RTCString strPlaceHolder(pachPlaceholder); - size_t startPos = sizeof("@@VBOX_COND_GUEST_VERSION") - 1;//-1 is for '\n' - size_t endPos = strPlaceHolder.find("@@", startPos + 2); - //next part should look like [>8.0.0] for example where: - // - "[,]" is just the brackets to wrap up the condition; - // - ">" is "greater". Also possible comparison is "<"; - // - 8.0.0 is required guest OS version. - //The end of placeholder is "@@" like for others. - - if ( strPlaceHolder[endPos] == '@' - && strPlaceHolder[endPos+1] == '@' ) - { - if ( strPlaceHolder[startPos++] == '[' && strPlaceHolder[--endPos] == ']' ) - { - char chComp = strPlaceHolder[startPos++]; - RTCString strRequiredOSVersion = strPlaceHolder.substr(startPos, endPos - startPos); - RTCString strDetectedOSVersion = mpUnattended->i_getDetectedOSVersion(); - int res = RTStrVersionCompare(strDetectedOSVersion.c_str(), strRequiredOSVersion.c_str()); - if ( res >= 0 && chComp == '>' ) - *pfOutputting = true; - else if ( res < 0 && chComp == '<' ) - *pfOutputting = true; - else - *pfOutputting = false; + /* Check the passed string against format @@VBOX_COND_GUEST_VERSION[>8.04.0]@@. Allowed comparison operators are: + * '<', '<=', '>', '>=', or '=' in string. No spaces are allowed in anywhere of the expr. */ + static const char s_szTail[] = "]@@"; + size_t endLength = sizeof(s_szTail) - 1; + if (memcmp(&pachPlaceholder[cchPlaceholder - endLength], RT_STR_TUPLE(s_szTail)) != 0) + { + *pfOutputting = false; + return mpSetError->setErrorBoth(E_FAIL, VERR_PARSE_ERROR, mpSetError->tr("Malformed @@VBOX_COND_GUEST_VERSION[expr]@@: Missing ']' (%.*s)"), + cchPlaceholder, pachPlaceholder); + } + size_t startPos = sizeof("@@VBOX_COND_GUEST_VERSION[") - 1; + size_t endPos = cchPlaceholder - endLength; + if (startPos >= endPos) + { + *pfOutputting = false; + return mpSetError->setErrorBoth(E_FAIL, VERR_PARSE_ERROR, mpSetError->tr("Malformed @@VBOX_COND_GUEST_VERSION[expr]@@: Missing expr (%.*s)"), + cchPlaceholder, pachPlaceholder); + } + /* Parse for the comparison operator. Assuming the expression starts with one of the allowed operators. */ + char pszComparisonOperator[3]; + if (!detectComparisonOperator(pszComparisonOperator, pachPlaceholder, startPos)) + { + *pfOutputting = false; + return mpSetError->setErrorBoth(E_FAIL, VERR_PARSE_ERROR, mpSetError->tr("Malformed @@VBOX_COND_GUEST_VERSION[expr]@@: Only space, '>', '>=', '<', <=', and '=' are allowed at the start. (%.*s)"), + cchPlaceholder, pachPlaceholder); + } + if (startPos >= endPos) + { + *pfOutputting = false; + return mpSetError->setErrorBoth(E_FAIL, VERR_PARSE_ERROR, mpSetError->tr("Malformed @@VBOX_COND_GUEST_VERSION[expr]@@: No version string found. (%.*s)"), + cchPlaceholder, pachPlaceholder); + } + /* Check if the version string includes any character other than '.' and digits. */ + for (size_t i = startPos; i < endPos; ++i) + { + if ( (pachPlaceholder[i] < '0' || pachPlaceholder[i] > '9') && pachPlaceholder[i] != '.') + { + *pfOutputting = false; + return mpSetError->setErrorBoth(E_FAIL, VERR_PARSE_ERROR, mpSetError->tr("Malformed @@VBOX_COND_GUEST_VERSION[expr]@@: Version string must be consist of only digits and '.', and no spaces. (%.*s)"), + cchPlaceholder, pachPlaceholder); } } + + RTCString strRequiredOSVersion(pachPlaceholder, startPos, endPos - startPos); + RTCString strDetectedOSVersion = mpUnattended->i_getDetectedOSVersion(); + int res = RTStrVersionCompare(strDetectedOSVersion.c_str(), strRequiredOSVersion.c_str()); + + if ( res == 0 + && ( pszComparisonOperator[0] == '=' + || memcmp(pszComparisonOperator, ">=", 2) == 0 + || memcmp(pszComparisonOperator, "<=", 2) == 0)) + *pfOutputting = true; + else if (res < 0 && pszComparisonOperator[0] == '<') + *pfOutputting = true; + else if (res > 0 && pszComparisonOperator[0] == '>') + *pfOutputting = true; else - *pfOutputting = false;//initially is set to "false" + *pfOutputting = false; } else return mpSetError->setErrorBoth(E_FAIL, VERR_NOT_FOUND, mpSetError->tr("Unknown conditional placeholder '%.*s'"), @@ -683,4 +762,3 @@ return strCalcValue; } #endif /* just for reference */ - diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Makefile.kmk virtualbox-6.1.34-dfsg/src/VBox/Makefile.kmk --- virtualbox-6.1.32-dfsg/src/VBox/Makefile.kmk 2022-01-13 18:57:54.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Makefile.kmk 2022-03-22 23:45:11.000000000 +0000 @@ -59,7 +59,6 @@ else ifdef VBOX_ONLY_VALIDATIONKIT include $(PATH_SUB_CURRENT)/Runtime/Makefile.kmk include $(PATH_SUB_CURRENT)/HostDrivers/Makefile.kmk - include $(PATH_SUB_CURRENT)/Additions/Makefile.kmk include $(PATH_SUB_CURRENT)/Disassembler/Makefile.kmk include $(PATH_SUB_CURRENT)/ValidationKit/Makefile.kmk diff -Nru virtualbox-6.1.32-dfsg/src/VBox/NetworkServices/NAT/proxy.h virtualbox-6.1.34-dfsg/src/VBox/NetworkServices/NAT/proxy.h --- virtualbox-6.1.32-dfsg/src/VBox/NetworkServices/NAT/proxy.h 2022-01-13 18:57:55.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/NetworkServices/NAT/proxy.h 2022-03-22 23:45:12.000000000 +0000 @@ -50,6 +50,7 @@ }; struct proxy_options { + ip6_addr_t ipv6_addr; int ipv6_enabled; int ipv6_defroute; SOCKET icmpsock4; diff -Nru virtualbox-6.1.32-dfsg/src/VBox/NetworkServices/NAT/VBoxNetLwipNAT.cpp virtualbox-6.1.34-dfsg/src/VBox/NetworkServices/NAT/VBoxNetLwipNAT.cpp --- virtualbox-6.1.32-dfsg/src/VBox/NetworkServices/NAT/VBoxNetLwipNAT.cpp 2022-01-13 18:57:55.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/NetworkServices/NAT/VBoxNetLwipNAT.cpp 2022-03-22 23:45:11.000000000 +0000 @@ -172,6 +172,15 @@ ComNatListenerPtr m_VBoxClientListener; static INTNETSEG aXmitSeg[64]; + static void reportError(const char *a_pcszFormat, ...) RT_IPRT_FORMAT_ATTR(1, 2); + + static HRESULT reportComError(ComPtr iface, + const com::Utf8Str &strContext, + HRESULT hrc); + static void reportErrorInfoList(const com::ErrorInfo &info, + const com::Utf8Str &strContext); + static void reportErrorInfo(const com::ErrorInfo &info); + HRESULT HandleEvent(VBoxEventType_T aEventType, IEvent *pEvent); const char **getHostNameservers(); @@ -564,20 +573,9 @@ netif_create_ip6_linklocal_address(pNetif, /* :from_mac_48bit */ 1); netif_ip6_addr_set_state(pNetif, 0, IP6_ADDR_PREFERRED); // skip DAD - /* - * RFC 4193 Locally Assigned Global ID (ULA) in slot 1 - * [fd17:625c:f037:XXXX::1] where XXXX, 16 bit Subnet ID, are two - * bytes from the middle of the IPv4 address, e.g. :dead: for - * 10.222.173.1 - */ - u8_t nethi = ip4_addr2(&pNetif->ip_addr); - u8_t netlo = ip4_addr3(&pNetif->ip_addr); - - ip6_addr_t *paddr = netif_ip6_addr(pNetif, 1); - IP6_ADDR(paddr, 0, 0xFD, 0x17, 0x62, 0x5C); - IP6_ADDR(paddr, 1, 0xF0, 0x37, nethi, netlo); - IP6_ADDR(paddr, 2, 0x00, 0x00, 0x00, 0x00); - IP6_ADDR(paddr, 3, 0x00, 0x00, 0x00, 0x01); + /* INATNetwork::IPv6Prefix in slot 1 */ + memcpy(netif_ip6_addr(pNetif, 1), + &pNat->m_ProxyOptions.ipv6_addr, sizeof(ip6_addr_t)); netif_ip6_addr_set_state(pNetif, 1, IP6_ADDR_PREFERRED); #if LWIP_IPV6_SEND_ROUTER_SOLICIT @@ -641,6 +639,7 @@ { LogFlowFuncEnter(); + RT_ZERO(m_ProxyOptions.ipv6_addr); m_ProxyOptions.ipv6_enabled = 0; m_ProxyOptions.ipv6_defroute = 0; m_ProxyOptions.icmpsock4 = icmpsock4; @@ -794,15 +793,24 @@ */ int VBoxNetLwipNAT::init() { + HRESULT hrc; + int rc; + LogFlowFuncEnter(); /* virtualbox initialized in super class */ - int rc = ::VBoxNetBaseService::init(); - AssertRCReturn(rc, rc); + rc = VBoxNetBaseService::init(); + if (RT_FAILURE(rc)) + return rc; - std::string networkName = getNetworkName(); - rc = findNatNetwork(virtualbox, networkName, m_net); - AssertRCReturn(rc, rc); + const std::string &networkName = getNetworkName(); + hrc = virtualbox->FindNATNetworkByName(com::Bstr(networkName.c_str()).raw(), + m_net.asOutParam()); + if (FAILED(hrc)) + { + reportComError(virtualbox, "FindNATNetworkByName", hrc); + return VERR_NOT_FOUND; + } { ComEventTypeArray eventTypes; @@ -815,7 +823,7 @@ // resolver changes are reported on vbox but are retrieved from // host so stash a pointer for future lookups - HRESULT hrc = virtualbox->COMGETTER(Host)(m_host.asOutParam()); + hrc = virtualbox->COMGETTER(Host)(m_host.asOutParam()); AssertComRCReturn(hrc, VERR_INTERNAL_ERROR); { @@ -837,6 +845,66 @@ hrc = m_net->COMGETTER(IPv6Enabled)(&fIPv6Enabled); AssertComRCReturn(hrc, VERR_NOT_FOUND); + /* + * Get IPv6 address via the API. Grafted from trunk. + * + * Trunk has this file rototilled a lot, tied in with other + * refactoring, which makes merging this is more or less + * impossible without backporting all the refactoring involved. + * So just rip this bit out. + */ + if (fIPv6Enabled) + { + com::Bstr bstrIPv6Prefix; + hrc = m_net->COMGETTER(IPv6Prefix)(bstrIPv6Prefix.asOutParam()); + if (FAILED(hrc)) + { + reportComError(m_net, "IPv6Prefix", hrc); + return VERR_GENERAL_FAILURE; + } + + RTNETADDRIPV6 Net6; + int iPrefixLength; + rc = RTNetStrToIPv6Cidr(com::Utf8Str(bstrIPv6Prefix).c_str(), + &Net6, &iPrefixLength); + if (RT_FAILURE(rc)) + { + reportError("Failed to parse IPv6 prefix %ls\n", bstrIPv6Prefix.raw()); + return rc; + } + + /* Allow both addr:: and addr::/64 */ + if (iPrefixLength == 128) /* no length was specified after the address? */ + iPrefixLength = 64; /* take it to mean /64 which we require anyway */ + else if (iPrefixLength != 64) + { + reportError("Invalid IPv6 prefix length %d," + " must be 64.\n", iPrefixLength); + return rc; + } + + /* Verify the address is unicast. */ + if ( ((Net6.au8[0] & 0xe0) != 0x20) /* global 2000::/3 */ + && ((Net6.au8[0] & 0xfe) != 0xfc)) /* local fc00::/7 */ + { + reportError("IPv6 prefix %RTnaipv6 is not unicast.\n", &Net6); + return VERR_INVALID_PARAMETER; + } + + /* Verify the interfaces ID part is zero */ + if (Net6.au64[1] != 0) + { + reportError("Non-zero bits in the interface ID part" + " of the IPv6 prefix %RTnaipv6/64.\n", &Net6); + return VERR_INVALID_PARAMETER; + } + + /* Use ...::1 as our address */ + RTNETADDRIPV6 Addr6 = Net6; + Addr6.au8[15] = 0x01; + memcpy(&m_ProxyOptions.ipv6_addr, &Addr6, sizeof(ip6_addr_t)); + } + BOOL fIPv6DefaultRoute = FALSE; if (fIPv6Enabled) { @@ -1117,6 +1185,117 @@ } +/* static */ +HRESULT VBoxNetLwipNAT::reportComError(ComPtr iface, + const com::Utf8Str &strContext, + HRESULT hrc) +{ + const com::ErrorInfo info(iface, COM_IIDOF(IUnknown)); + if (info.isFullAvailable() || info.isBasicAvailable()) + { + reportErrorInfoList(info, strContext); + } + else + { + if (strContext.isNotEmpty()) + reportError("%s: %Rhra", strContext.c_str(), hrc); + else + reportError("%Rhra", hrc); + } + + return hrc; +} + + +/* static */ +void VBoxNetLwipNAT::reportErrorInfoList(const com::ErrorInfo &info, + const com::Utf8Str &strContext) +{ + if (strContext.isNotEmpty()) + reportError("%s", strContext.c_str()); + + bool fFirst = true; + for (const com::ErrorInfo *pInfo = &info; + pInfo != NULL; + pInfo = pInfo->getNext()) + { + if (fFirst) + fFirst = false; + else + reportError("--------"); + + reportErrorInfo(*pInfo); + } +} + + +/* static */ +void VBoxNetLwipNAT::reportErrorInfo(const com::ErrorInfo &info) +{ +#if defined (RT_OS_WIN) + bool haveResultCode = info.isFullAvailable(); + bool haveComponent = true; + bool haveInterfaceID = true; +#else /* !RT_OS_WIN */ + bool haveResultCode = true; + bool haveComponent = info.isFullAvailable(); + bool haveInterfaceID = info.isFullAvailable(); +#endif + com::Utf8Str message; + if (info.getText().isNotEmpty()) + message = info.getText(); + + const char *pcszDetails = "Details: "; + const char *pcszComma = ", "; + const char *pcszSeparator = pcszDetails; + + if (haveResultCode) + { + message.appendPrintf("%s" "code %Rhrc (0x%RX32)", + pcszSeparator, info.getResultCode(), info.getResultCode()); + pcszSeparator = pcszComma; + } + + if (haveComponent) + { + message.appendPrintf("%s" "component %ls", + pcszSeparator, info.getComponent().raw()); + pcszSeparator = pcszComma; + } + + if (haveInterfaceID) + { + message.appendPrintf("%s" "interface %ls", + pcszSeparator, info.getInterfaceName().raw()); + pcszSeparator = pcszComma; + } + + if (info.getCalleeName().isNotEmpty()) + { + message.appendPrintf("%s" "callee %ls", + pcszSeparator, info.getCalleeName().raw()); + pcszSeparator = pcszComma; + } + + reportError("%s", message.c_str()); +} + + +/* static */ +void VBoxNetLwipNAT::reportError(const char *a_pcszFormat, ...) +{ + va_list ap; + + va_start(ap, a_pcszFormat); + com::Utf8Str message(a_pcszFormat, ap); + va_end(ap); + + RTMsgError("%s", message.c_str()); + LogRel(("%s", message.c_str())); +} + + + /** * Entry point. */ diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Runtime/common/net/netaddrstr2.cpp virtualbox-6.1.34-dfsg/src/VBox/Runtime/common/net/netaddrstr2.cpp --- virtualbox-6.1.32-dfsg/src/VBox/Runtime/common/net/netaddrstr2.cpp 2022-01-13 18:58:08.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Runtime/common/net/netaddrstr2.cpp 2022-03-22 23:45:25.000000000 +0000 @@ -198,7 +198,7 @@ RTDECL(int) RTNetStrToIPv4Cidr(const char *pcszAddr, PRTNETADDRIPV4 pAddr, int *piPrefix) { - RTNETADDRIPV4 Addr; + RTNETADDRIPV4 Addr, Mask; uint8_t u8Prefix; char *pszNext; int rc; @@ -212,7 +212,10 @@ if (RT_FAILURE(rc)) return rc; - /* if prefix is missing, treat is as exact (/32) address specification */ + /* + * If the prefix is missing, treat is as exact (/32) address + * specification. + */ if (*pszNext == '\0' || rc == VWRN_TRAILING_SPACES) { *pAddr = Addr; @@ -220,15 +223,74 @@ return VINF_SUCCESS; } - if (*pszNext != '/') + /* + * Be flexible about the way the prefix is specified after the + * slash: accept both the prefix length and the netmask, and for + * the latter accept both dotted-decimal and hex. The inputs we + * convert here are likely coming from a user and people have + * different preferences. Sometimes they just remember specific + * different networks in specific formats! + */ + if (*pszNext == '/') + ++pszNext; + else return VERR_INVALID_PARAMETER; - ++pszNext; - rc = RTStrToUInt8Ex(pszNext, &pszNext, 10, &u8Prefix); - if (RT_FAILURE(rc) || rc == VWRN_TRAILING_CHARS) - return VERR_INVALID_PARAMETER; + /* .../0x... is a hex mask */ + if (pszNext[0] == '0' && (pszNext[1] == 'x' || pszNext[1] == 'X')) + { + rc = RTStrToUInt32Ex(pszNext, &pszNext, 16, &Mask.u); + if (rc == VINF_SUCCESS || rc == VWRN_TRAILING_SPACES) + Mask.u = RT_H2N_U32(Mask.u); + else + return VERR_INVALID_PARAMETER; - if (u8Prefix == 0 || u8Prefix > 32) + int iPrefix; + rc = RTNetMaskToPrefixIPv4(&Mask, &iPrefix); + if (RT_SUCCESS(rc)) + u8Prefix = (uint8_t)iPrefix; + else + return VERR_INVALID_PARAMETER; + } + else + { + char *pszLookAhead; + uint32_t u32; + rc = RTStrToUInt32Ex(pszNext, &pszLookAhead, 10, &u32); + + /* single number after the slash is prefix length */ + if (rc == VINF_SUCCESS || rc == VWRN_TRAILING_SPACES) + { + if (u32 <= 32) + u8Prefix = (uint8_t)u32; + else + return VERR_INVALID_PARAMETER; + } + /* a number followed by more stuff, may be a dotted-decimal */ + else if (rc == VWRN_TRAILING_CHARS) + { + if (*pszLookAhead != '.') /* don't even bother checking */ + return VERR_INVALID_PARAMETER; + + rc = rtNetStrToIPv4AddrEx(pszNext, &Mask, &pszNext); + if (rc == VINF_SUCCESS || rc == VWRN_TRAILING_SPACES) + { + int iPrefix; + rc = RTNetMaskToPrefixIPv4(&Mask, &iPrefix); + if (RT_SUCCESS(rc)) + u8Prefix = (uint8_t)iPrefix; + else + return VERR_INVALID_PARAMETER; + } + else + return VERR_INVALID_PARAMETER; + } + /* failed to convert to number */ + else + return VERR_INVALID_PARAMETER; + } + + if (u8Prefix > 32) return VERR_INVALID_PARAMETER; *pAddr = Addr; @@ -616,3 +678,50 @@ return VINF_SUCCESS; } RT_EXPORT_SYMBOL(RTNetPrefixToMaskIPv6); + + +RTDECL(int) RTNetStrToIPv6Cidr(const char *pcszAddr, PRTNETADDRIPV6 pAddr, int *piPrefix) +{ + RTNETADDRIPV6 Addr; + uint8_t u8Prefix; + char *pszZone, *pszNext; + int rc; + + AssertPtrReturn(pcszAddr, VERR_INVALID_PARAMETER); + AssertPtrReturn(pAddr, VERR_INVALID_PARAMETER); + AssertPtrReturn(piPrefix, VERR_INVALID_PARAMETER); + + pcszAddr = RTStrStripL(pcszAddr); + rc = rtNetStrToIPv6AddrEx(pcszAddr, &Addr, &pszZone, &pszNext); + if (RT_FAILURE(rc)) + return rc; + + RT_NOREF(pszZone); + + /* + * If the prefix is missing, treat is as exact (/128) address + * specification. + */ + if (*pszNext == '\0' || rc == VWRN_TRAILING_SPACES) + { + *pAddr = Addr; + *piPrefix = 128; + return VINF_SUCCESS; + } + + if (*pszNext != '/') + return VERR_INVALID_PARAMETER; + + ++pszNext; + rc = RTStrToUInt8Ex(pszNext, &pszNext, 10, &u8Prefix); + if (rc != VINF_SUCCESS && rc != VWRN_TRAILING_SPACES) + return VERR_INVALID_PARAMETER; + + if (u8Prefix > 128) + return VERR_INVALID_PARAMETER; + + *pAddr = Addr; + *piPrefix = u8Prefix; + return VINF_SUCCESS; +} +RT_EXPORT_SYMBOL(RTNetStrToIPv6Cidr); diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Runtime/generic/createtemp-generic.cpp virtualbox-6.1.34-dfsg/src/VBox/Runtime/generic/createtemp-generic.cpp --- virtualbox-6.1.32-dfsg/src/VBox/Runtime/generic/createtemp-generic.cpp 2022-01-13 18:58:16.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Runtime/generic/createtemp-generic.cpp 2022-03-22 23:45:32.000000000 +0000 @@ -157,44 +157,58 @@ RT_EXPORT_SYMBOL(RTDirCreateTempSecure); -RTDECL(int) RTFileCreateTemp(char *pszTemplate, RTFMODE fMode) +RTDECL(int) RTFileCreateUnique(PRTFILE phFile, char *pszTemplate, uint64_t fOpen) { + /* + * Validate input. + */ + *phFile = NIL_RTFILE; + AssertReturn((fOpen & RTFILE_O_ACTION_MASK) == RTFILE_O_CREATE, VERR_INVALID_FLAGS); char *pszX = NULL; unsigned cXes = 0; int rc = rtCreateTempValidateTemplate(pszTemplate, &pszX, &cXes); - if (RT_FAILURE(rc)) + if (RT_SUCCESS(rc)) { - *pszTemplate = '\0'; - return rc; - } - - /* - * Try ten thousand times. - */ - int i = 10000; - while (i-- > 0) - { - uint64_t fOpen = RTFILE_O_WRITE | RTFILE_O_DENY_ALL | RTFILE_O_CREATE | RTFILE_O_NOT_CONTENT_INDEXED - | fMode << RTFILE_O_CREATE_MODE_SHIFT; - rtCreateTempFillTemplate(pszX, cXes); - RTFILE hFile = NIL_RTFILE; - rc = RTFileOpen(&hFile, pszTemplate, fOpen); - if (RT_SUCCESS(rc)) + /* + * Try ten thousand times. + */ + int i = 10000; + while (i-- > 0) { - RTFileClose(hFile); - return rc; + rtCreateTempFillTemplate(pszX, cXes); + RTFILE hFile = NIL_RTFILE; + rc = RTFileOpen(&hFile, pszTemplate, fOpen); + if (RT_SUCCESS(rc)) + { + *phFile = hFile; + return rc; + } + /** @todo Anything else to consider? */ + if (rc != VERR_ALREADY_EXISTS) + { + *pszTemplate = '\0'; + return rc; + } } - /** @todo Anything else to consider? */ - if (rc != VERR_ALREADY_EXISTS) - { - *pszTemplate = '\0'; - return rc; - } - } - /* we've given up. */ + /* we've given up. */ + rc = VERR_ALREADY_EXISTS; + } *pszTemplate = '\0'; - return VERR_ALREADY_EXISTS; + return rc; +} +RT_EXPORT_SYMBOL(RTFileCreateUnique); + + +RTDECL(int) RTFileCreateTemp(char *pszTemplate, RTFMODE fMode) +{ + RTFILE hFile = NIL_RTFILE; + int rc = RTFileCreateUnique(&hFile, pszTemplate, + RTFILE_O_WRITE | RTFILE_O_DENY_ALL | RTFILE_O_CREATE | RTFILE_O_NOT_CONTENT_INDEXED + | fMode << RTFILE_O_CREATE_MODE_SHIFT); + if (RT_SUCCESS(rc)) + RTFileClose(hFile); + return rc; } RT_EXPORT_SYMBOL(RTFileCreateTemp); diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c virtualbox-6.1.34-dfsg/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c --- virtualbox-6.1.32-dfsg/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c 2022-01-13 18:58:19.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c 2022-03-22 23:45:35.000000000 +0000 @@ -1964,7 +1964,7 @@ case RTR0MEMOBJTYPE_PAGE: default: AssertMsgFailed(("%d\n", pMemLnx->Core.enmType)); - /* fall thru */ + RT_FALL_THROUGH(); case RTR0MEMOBJTYPE_RES_VIRT: return NIL_RTHCPHYS; diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Runtime/r3/init.cpp virtualbox-6.1.34-dfsg/src/VBox/Runtime/r3/init.cpp --- virtualbox-6.1.32-dfsg/src/VBox/Runtime/r3/init.cpp 2022-01-13 18:58:22.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Runtime/r3/init.cpp 2022-03-22 23:45:38.000000000 +0000 @@ -294,9 +294,10 @@ && (papwszArgs = CommandLineToArgvW(GetCommandLineW(), &cArgsW)) != NULL ) { AssertMsg(cArgsW == cArgs, ("%d vs %d\n", cArgsW, cArgs)); - for (int i = 0; i < cArgs; i++) + for (int i = 0; i < RT_MIN(cArgs, cArgsW); i++) { - int rc = RTUtf16ToUtf8Tag(papwszArgs[i], &papszArgs[i], "will-leak:rtR3InitArgv"); + int rc = papwszArgs[i] != NULL ? RTUtf16ToUtf8Tag(papwszArgs[i], &papszArgs[i], "will-leak:rtR3InitArgv") : + VERR_GENERAL_FAILURE; if (RT_FAILURE(rc)) { while (i--) diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Runtime/r3/path.cpp virtualbox-6.1.34-dfsg/src/VBox/Runtime/r3/path.cpp --- virtualbox-6.1.32-dfsg/src/VBox/Runtime/r3/path.cpp 2022-01-13 18:58:23.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Runtime/r3/path.cpp 2022-03-22 23:45:40.000000000 +0000 @@ -149,7 +149,14 @@ { "IPRT_TMPDIR" #if defined(RT_OS_WINDOWS) - , "TMP", "TEMP", "USERPROFILE" + /* + * Make sure that %LOCALAPPDATA% is preferred over %TMP% / %TEMP%, as those can point + * to generic / old-school temp directories like "C:\WINDOWS\TEMP", which also is writable for unprivileged users + * under some circumstances. + * + * See @bugref{10201} + */ + , "LOCALAPPDATA", "TMP", "TEMP", "USERPROFILE" #elif defined(RT_OS_OS2) , "TMP", "TEMP", "TMPDIR" #else diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Runtime/r3/posix/process-creation-posix.cpp virtualbox-6.1.34-dfsg/src/VBox/Runtime/r3/posix/process-creation-posix.cpp --- virtualbox-6.1.32-dfsg/src/VBox/Runtime/r3/posix/process-creation-posix.cpp 2022-01-13 18:58:24.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Runtime/r3/posix/process-creation-posix.cpp 2022-03-22 23:45:40.000000000 +0000 @@ -1446,7 +1446,11 @@ RT_NOREF_PV(pszVar); } else +#ifdef RT_OS_DARWIN /* @bugref{10153}: Darwin defaults to UTF-8. */ + pszEncoding = "UTF-8"; +#else pszEncoding = "ASCII"; +#endif } /* diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Runtime/r3/posix/utf8-posix.cpp virtualbox-6.1.34-dfsg/src/VBox/Runtime/r3/posix/utf8-posix.cpp --- virtualbox-6.1.32-dfsg/src/VBox/Runtime/r3/posix/utf8-posix.cpp 2022-01-13 18:58:24.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Runtime/r3/posix/utf8-posix.cpp 2022-03-22 23:45:41.000000000 +0000 @@ -39,6 +39,9 @@ #include #include +#ifdef RT_OS_DARWIN +# include +#endif /* iconv prototype changed with 165+ (thanks to PSARC/2010/160 Bugster 7037400) */ #if defined(RT_OS_SOLARIS) @@ -106,6 +109,35 @@ */ DECLHIDDEN(const char *) rtStrGetLocaleCodeset(void) { +#ifdef RT_OS_DARWIN + /* + * @bugref{10153}: If no locale specified in the environment (typically the + * case when launched via Finder, LaunchPad or similar) default to UTF-8. + */ + static int8_t volatile s_fIsUtf8 = -1; + int8_t fIsUtf8 = s_fIsUtf8; + if (fIsUtf8) + { + if (fIsUtf8 == true) + return "UTF-8"; + + /* Initialize: */ + fIsUtf8 = true; + static const char * const s_papszVariables[] = { "LC_ALL", "LC_CTYPE", "LANG" }; + for (size_t i = 0; i < RT_ELEMENTS(s_papszVariables); i++) + { + const char *pszValue = getenv(s_papszVariables[i]); + if (pszValue && *pszValue) + { + fIsUtf8 = false; + break; + } + } + s_fIsUtf8 = fIsUtf8; + if (fIsUtf8 == true) + return "UTF-8"; + } +#endif return nl_langinfo(CODESET); } @@ -256,7 +288,7 @@ iconv_t hIconv = (iconv_t)*phIconv; if (hIconv == (iconv_t)-1) { -#if defined(RT_OS_SOLARIS) || defined(RT_OS_NETBSD) +#if defined(RT_OS_SOLARIS) || defined(RT_OS_NETBSD) || /* @bugref{10153}: Default to UTF-8: */ defined(RT_OS_DARWIN) /* Some systems don't grok empty codeset strings, so help them find the current codeset. */ if (!*pszInputCS) pszInputCS = rtStrGetLocaleCodeset(); @@ -387,7 +419,7 @@ /* * Create conversion object. */ -#if defined(RT_OS_SOLARIS) || defined(RT_OS_NETBSD) +#if defined(RT_OS_SOLARIS) || defined(RT_OS_NETBSD) || /* @bugref{10153}: Default to UTF-8: */ defined(RT_OS_DARWIN) /* Some systems don't grok empty codeset strings, so help them find the current codeset. */ if (!*pszInputCS) pszInputCS = rtStrGetLocaleCodeset(); diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Runtime/testcase/tstRTNetIPv4.cpp virtualbox-6.1.34-dfsg/src/VBox/Runtime/testcase/tstRTNetIPv4.cpp --- virtualbox-6.1.32-dfsg/src/VBox/Runtime/testcase/tstRTNetIPv4.cpp 2022-01-13 18:58:29.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Runtime/testcase/tstRTNetIPv4.cpp 2022-03-22 23:45:45.000000000 +0000 @@ -310,15 +310,44 @@ GOODCIDR("1.2.3.4/32", 0x01020304, 32); GOODCIDR("1.2.3.4/24", 0x01020304, 24); /* address is not truncated to prefix */ + GOODCIDR("1.2.3.0/0xffffff00", 0x01020300, 24); + GOODCIDR("1.2.3.4/0xffffff00", 0x01020304, 24); + GOODCIDR("1.2.3.4/0xffffffff", 0x01020304, 32); + + GOODCIDR("1.2.3.0/255.255.255.0", 0x01020300, 24); + GOODCIDR("1.2.3.4/255.255.255.0", 0x01020304, 24); + GOODCIDR("1.2.3.4/255.255.255.255", 0x01020304, 32); + + GOODCIDR("0.0.0.0/0", 0x00000000, 0); + GOODCIDR("0.0.0.0/0x0", 0x00000000, 0); + GOODCIDR("0.0.0.0/0.0.0.0", 0x00000000, 0); + + /* + * we allow zero prefix mostly for the sake of the above + * "everything"/default case, but allow it on everything - a + * conscientious caller should be doing more checks on the result + * anyway. + */ + GOODCIDR("1.2.3.4/0", 0x01020304, 0); /* prefix can be zero */ + GOODCIDR("\t " "1.2.3.4/24", 0x01020304, 24); /* leading spaces ok */ GOODCIDR( "1.2.3.4/24" " \t", 0x01020304, 24); /* trailing spaces ok */ GOODCIDR("\t " "1.2.3.4/24" " \t", 0x01020304, 24); /* both are ok */ - BADCIDR("1.2.3.4/0"); /* prefix can't be zero */ + /* trailing space with netmask notation */ + GOODCIDR("1.2.3.0/0xffffff00" " ", 0x01020300, 24); + GOODCIDR("1.2.3.0/255.255.255.0" " ", 0x01020300, 24); + + BADCIDR("1.2.3.4/24."); + BADCIDR("1.2.3.4/24 ."); + BADCIDR("1.2.3.4/240."); + BADCIDR("1.2.3.4/240."); + BADCIDR("1.2.3.4/33"); /* prefix is too big */ + BADCIDR("1.2.3.4/256"); /* prefix is too big */ + BADCIDR("1.2.3.4/257"); /* prefix is too big */ BADCIDR("1.2.3.4/-1"); /* prefix is negative */ BADCIDR("1.2.3.4/"); /* prefix is missing */ - BADCIDR("1.2.3.4/"); /* prefix is missing */ BADCIDR("1.2.3.4/a"); /* prefix is not a number */ BADCIDR("1.2.3.4/0xa"); /* prefix is not decimal */ // BADCIDR("1.2.3.0/024"); /* XXX: prefix is not decimal */ @@ -329,7 +358,8 @@ BADCIDR("1.2.3.0/24" "x"); /* trailing chars */ BADCIDR("1.2.3.0/24" " x"); /* trailing chars */ - + BADCIDR("1.2.3.0/0xffffff01"); /* non-contiguous mask */ + BADCIDR("1.2.3.0/255.255.255.1"); /* non-contiguous mask */ /* NB: RTNetIsIPv4AddrStr does NOT allow leading/trailing whitespace */ IS_ADDR("1.2.3.4"); diff -Nru virtualbox-6.1.32-dfsg/src/VBox/Runtime/testcase/tstRTNetIPv6.cpp virtualbox-6.1.34-dfsg/src/VBox/Runtime/testcase/tstRTNetIPv6.cpp --- virtualbox-6.1.32-dfsg/src/VBox/Runtime/testcase/tstRTNetIPv6.cpp 2022-01-13 18:58:29.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/Runtime/testcase/tstRTNetIPv6.cpp 2022-03-22 23:45:45.000000000 +0000 @@ -72,6 +72,41 @@ CHECKADDR(String, VERR_INVALID_PARAMETER, 0, 0, 0, 0) +#define CHECKCIDR(String, rcExpected, u32_0, u32_1, u32_2, u32_3, iExpectedPrefix) \ + do { \ + RTNETADDRIPV6 Addr; \ + uint32_t ExpectedAddr[4] = { \ + RT_H2N_U32_C(u32_0), RT_H2N_U32_C(u32_1), \ + RT_H2N_U32_C(u32_2), RT_H2N_U32_C(u32_3) \ + }; \ + int iPrefix; \ + \ + int rc2 = RTNetStrToIPv6Cidr(String, &Addr, &iPrefix); \ + if ((rcExpected) && !rc2) \ + { \ + RTTestIFailed("at line %d: '%s': expected %Rrc got %Rrc\n", \ + __LINE__, String, (rcExpected), rc2); \ + } \ + else if ( (rcExpected) != rc2 \ + || ( rc2 == VINF_SUCCESS \ + && ( memcmp(ExpectedAddr, &Addr, sizeof(Addr)) != 0 \ + || iExpectedPrefix != iPrefix))) \ + { \ + RTTestIFailed("at line %d: '%s': expected %Rrc got %Rrc," \ + " expected address %RTnaipv6/%d got %RTnaipv6/%d\n",\ + __LINE__, String, rcExpected, rc2, \ + ExpectedAddr, iExpectedPrefix, \ + &Addr, iPrefix); \ + } \ + } while (0) + +#define GOODCIDR(String, u32_0, u32_1, u32_2, u32_3, iExpectedPrefix) \ + CHECKCIDR(String, VINF_SUCCESS, u32_0, u32_1, u32_2, u32_3, iExpectedPrefix) + +#define BADCIDR(String) \ + CHECKCIDR(String, VERR_INVALID_PARAMETER, 0, 0, 0, 0, 0) + + #define CHECKANY(String, fExpected) \ do { \ bool fRc = RTNetStrIsIPv6AddrAny(String); \ @@ -203,6 +238,31 @@ GOODADDR(" ff01::1%net1.1\t", 0xff010000, 0, 0, 1); + /* just some light testing */ + GOODCIDR("1:2:3:4:5:6:7:8", 0x00010002, 0x00030004, 0x00050006, 0x00070008, 128); + GOODCIDR("1:2:3:4::/64", 0x00010002, 0x00030004, 0, 0, 64); + GOODCIDR(" 1:2:3:4::/64 ", 0x00010002, 0x00030004, 0, 0, 64); + + /* we currently ignore the zone */ + GOODCIDR("1:2:3:4::%if/64", 0x00010002, 0x00030004, 0, 0, 64); + + + GOODCIDR("::/0", 0, 0, 0, 0, 0); + + /* + * we allow zero prefix mostly for the sake of the above + * "everything"/default case, but allow it on everything - a + * conscientious caller should be doing more checks on the result + * anyway. + */ + GOODCIDR("1:2:3:4::/0", 0x00010002, 0x00030004, 0, 0, 0); + + + BADCIDR("1:2:3:4:: 64"); + BADCIDR("1:2:3:4::/64x"); + BADCIDR("1:2:3:4::/-1"); + BADCIDR("1:2:3:4::/129"); + BADCIDR("1:2:3:4::/256"); IS_ANY("::"); IS_ANY("::0.0.0.0"); diff -Nru virtualbox-6.1.32-dfsg/src/VBox/VMM/VMMAll/IEMAllAImpl.asm virtualbox-6.1.34-dfsg/src/VBox/VMM/VMMAll/IEMAllAImpl.asm --- virtualbox-6.1.32-dfsg/src/VBox/VMM/VMMAll/IEMAllAImpl.asm 2022-01-13 18:58:34.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/VMM/VMMAll/IEMAllAImpl.asm 2022-03-22 23:45:50.000000000 +0000 @@ -895,8 +895,8 @@ lock cmpxchg16b [rdi] - mov [rsi], eax - mov [rsi + 8], edx + mov [rsi], rax + mov [rsi + 8], rdx IEM_SAVE_FLAGS r10, (X86_EFL_ZF), 0 ; clobbers T0+T1 (eax, r11) pop rbx @@ -906,7 +906,7 @@ ENDPROC iemAImpl_cmpxchg16b BEGINPROC_FASTCALL iemAImpl_cmpxchg16b_locked, 16 - ; Lazy bird always lock prefixes cmpxchg8b. + ; Lazy bird always lock prefixes cmpxchg16b. jmp NAME_FASTCALL(iemAImpl_cmpxchg16b,16,$@) ENDPROC iemAImpl_cmpxchg16b_locked diff -Nru virtualbox-6.1.32-dfsg/src/VBox/VMM/VMMR3/PDMBlkCache.cpp virtualbox-6.1.34-dfsg/src/VBox/VMM/VMMR3/PDMBlkCache.cpp --- virtualbox-6.1.32-dfsg/src/VBox/VMM/VMMR3/PDMBlkCache.cpp 2022-01-13 18:58:38.000000000 +0000 +++ virtualbox-6.1.34-dfsg/src/VBox/VMM/VMMR3/PDMBlkCache.cpp 2022-03-22 23:45:54.000000000 +0000 @@ -461,6 +461,12 @@ RTMemFree(pCurr); } } + else + { + LogFlow(("Someone raced us, entry %#p (%u bytes) cannot be evicted any more (fFlags=%#x cRefs=%#x)\n", + pCurr, pCurr->cbData, pCurr->fFlags, pCurr->cRefs)); + RTSemRWReleaseWrite(pBlkCache->SemRWEntries); + } } else diff -Nru virtualbox-6.1.32-dfsg/Version.kmk virtualbox-6.1.34-dfsg/Version.kmk --- virtualbox-6.1.32-dfsg/Version.kmk 2022-01-13 18:47:32.000000000 +0000 +++ virtualbox-6.1.34-dfsg/Version.kmk 2022-03-22 23:34:38.000000000 +0000 @@ -24,7 +24,7 @@ # This is the current build number. It should be increased every time we publish a # new build. The define is available in every source file. Only even build numbers # will be published, odd numbers are set during development. -VBOX_VERSION_BUILD = 32 +VBOX_VERSION_BUILD = 34 # This can be overridden in LocalConfig.kmk or elsewhere. # For the convention, see checks near the end of Config.kmk. VBOX_BUILD_PUBLISHER = @@ -35,4 +35,4 @@ VBOX_RELEASE_EXACT_MATCH = # Fallback revision when there is no other source. See Config.kmk. -VBOX_SVN_REV_VERSION_FALLBACK := $(patsubst %:,, $Rev: 149290 $ ) +VBOX_SVN_REV_VERSION_FALLBACK := $(patsubst %:,, $Rev: 150636 $ )