vbox: workaround for bug in Windows guest addition

In file

src/VBox/Additions/WINNT/SharedFolders/driver/file.c

the function

static int vbsfTransferCommon(VBSFTRANSFERCTX *pCtx)

in the

VbglR0CanUsePhysPageList()

branch does not correctly evaluate the read or written bytes from
the VMM. It ever assumes that whole pages are read/written.

Workaround the bug in the Windows guest additions of Vbox until fixed
upstream by filling up the read/write buffer completely within the VMM code
of Vbox.

Fixes #1176
This commit is contained in:
Alexander Boettcher 2014-06-03 15:53:23 +02:00 committed by Norman Feske
parent 5922617eab
commit 3a8bf754e1
2 changed files with 88 additions and 1 deletions

View File

@ -1 +1 @@
d2830608e86c55d6124ac016dae652fa6a69ea3e
13aca05c49d35f7ce7a2cfd25d2751d9d6de9019

View File

@ -0,0 +1,87 @@
+++ src/app/virtualbox/src/VBox/HostServices/SharedFolders/service.cpp
@@ -546,6 +546,14 @@
}
else
{
+
+
+ /* WORKAROUND start */
+ uint32_t read = 0;
+
+ while (paParms[3].u.uint32 && read < paParms[3].u.uint32) {
+
+
/* Execute the function. */
if (pStatusLed)
{
@@ -559,13 +567,25 @@
if (RT_SUCCESS(rc))
{
+ read += count;
+ offset += count;
+ pBuffer += count;
+ count = paParms[3].u.uint32 - read;
+
/* Update parameters.*/
- paParms[3].u.uint32 = count;
+ //paParms[3].u.uint32 = count;
}
else
{
paParms[3].u.uint32 = 0; /* nothing read */
}
+
+
+
+ } /* WORKAROUND - End */
+
+
+
}
}
break;
@@ -613,6 +633,16 @@
}
else
{
+
+
+
+ /* WORKAROUND start */
+ uint32_t write = 0;
+
+ while (paParms[3].u.uint32 && write < paParms[3].u.uint32) {
+
+
+
/* Execute the function. */
if (pStatusLed)
{
@@ -626,13 +656,25 @@
if (RT_SUCCESS(rc))
{
+ write += count;
+ offset += count;
+ pBuffer += count;
+ count = paParms[3].u.uint32 - write;
+
/* Update parameters.*/
- paParms[3].u.uint32 = count;
+ //paParms[3].u.uint32 = count;
}
else
{
paParms[3].u.uint32 = 0; /* nothing read */
}
+
+
+
+ } /* WORKAROUND - End */
+
+
+
}
}
break;