Integer overflow in filesystem stat implementation #409
Description
Dear Pycom team,
while investigating an issue why rshell
would upload our files over and over again despite its rsync
implementation should compensate for that (dhylands/rshell#124), we just found an issue when looking at mtime
timestamps of the files created on the device.
We found that there might be an integer overflow within the virtual filesystem implementation keeping track of filesystem metadata.
This example says a thousand words:
>>> import time; f = open('/flash/test', 'w'); f.write('hello'); f.close(); time.time() - os.stat('/flash/test')[7]
2147483648
It looks like only newer firmware releases are affected. The bug apparently started appearing in 1.20.0.rc0
and is still visible in 1.20.2rc3-pybytes
. However, it is not present in 1.18.2.r7
and 1.18.3-pybytes
. It looks like it is independent of FatFS vs. LittleFS.
2147483648
is just 2^31
or INT_MAX + 1
or abs(INT_MIN)
. The correct outcome should be zero (0
), or sometimes 1
- dependent on how fast the oneliner is executing.
Thanks already for looking into this.
With kind regards,
Andreas.
cc @husigeza