diff options
Diffstat (limited to 'src/VBox/Devices/VirtIO')
-rw-r--r-- | src/VBox/Devices/VirtIO/VirtioCore.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/VBox/Devices/VirtIO/VirtioCore.cpp b/src/VBox/Devices/VirtIO/VirtioCore.cpp index f0ed6e42..a0deddd6 100644 --- a/src/VBox/Devices/VirtIO/VirtioCore.cpp +++ b/src/VBox/Devices/VirtIO/VirtioCore.cpp @@ -1193,7 +1193,10 @@ int virtioCoreR3VirtqUsedBufPut(PPDMDEVINS pDevIns, PVIRTIOCORE pVirtio, uint16_ size_t cbCopy = 0, cbTotal = 0, cbRemain = 0; - if (pSgVirtReturn) + /** @todo r=aeichner Check whether VirtIO should return an error if the device wants to return data but + * the guest didn't set up an IN buffer. */ + if ( pSgVirtReturn + && pSgPhysReturn) { size_t cbTarget = virtioCoreGCPhysChainCalcBufSize(pSgPhysReturn); cbRemain = cbTotal = RTSgBufCalcTotalLength(pSgVirtReturn); @@ -1227,7 +1230,9 @@ int virtioCoreR3VirtqUsedBufPut(PPDMDEVINS pDevIns, PVIRTIOCORE pVirtio, uint16_ virtioWriteUsedElem(pDevIns, pVirtio, pVirtq, pVirtq->uUsedIdxShadow++, pVirtqBuf->uHeadIdx, (uint32_t)cbTotal); #ifdef LOG_ENABLED - if (LogIs6Enabled() && pSgVirtReturn) + if ( LogIs6Enabled() + && pSgVirtReturn + && pSgPhysReturn) { LogFunc((" ... %d segs, %zu bytes, copied to %u byte buf@offset=%u. Residual: %zu bytes\n", |