++         if (currentStat->value < previousStat->value &&
++             previousStat->value <= MAX_UINT32) {
++            valueDelta = (uint32)(currentStat->value) -
++                         (uint32)(previousStat->value);

I'm not sure I follow how this is correct. The casting seems dubious,
but acceptable since previousStat->value fits in 32 bits (we just
checked it's less than MAX_UINT32) and currentStat->value has also been
verified to be less than that.

But if this has happened because currentStat->value wrapped around 32
bits, then surely the correct valueDelta is currentStat->value +
(MAX_UINT32 - previousStat->value)? If previousStat->value was
MAX_UINT32 for example, and currentStat->value is now 0, then the
valueDelta should be 1. But (0 - MAX_UINT32) will surely get promoted
and then end up being assigned to a double as a negative number.

What am I missing?

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1793219

Title:
  open-vm-tools guest stats overflow

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/open-vm-tools/+bug/1793219/+subscriptions

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to