Hello Jason,
+-- On Fri, 11 Dec 2015, Jason Wang wrote --+
| I think it's possible for attacker. Better wait for Dmitry's answer for
| this.
Okay.
| > + /* Verify if device is active */
| > + if (s->device_active) {
| > + VMW_CFPRN("Vmxnet3 device is active");
| > + return;
| > + }
|
| What if guest want to activate a paused device?
There is a 'resume' operation defined below.
| > case VMXNET3_CMD_QUIESCE_DEV:
| > - VMW_CBPRN("Set: VMXNET3_CMD_QUIESCE_DEV - pause the device");
| > - vmxnet3_deactivate_device(s);
| > + if (s->device_active & VMXNET3_DEV_ACTIVE) {
| > + VMW_CBPRN("Set: VMXNET3_CMD_QUIESCE_DEV - pause the device");
| > + vmxnet3_pause_device(s);
| > + } else if (s->device_active & VMXNET3_DEV_PAUSE) {
| > + VMW_CBPRN("Set: VMXNET3_CMD_QUIESCE_DEV - resume the device");
| > + vmxnet3_resume_device(s);
| > + }
|
| Not sure this is the correct behavior. Is there a link to the spec?
I couldn't find a spec for vmxnet3; I referred the vmxnet3 kernel driver,
which seems to implement suspend & resume functions.
->
https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/net/vmxnet3/vmxnet3_drv.c
In general, Ethernet documents talk about 'pause' frame mechanism to stop NIC
from buffering more data, till it has space available to process more, when it
resumes its operation.
Thank you.
--
Prasad J Pandit / Red Hat Product Security Team
47AF CE69 3A90 54AA 9045 1053 DD13 3D32 FE5B 041F