Skip to content
This repository was archived by the owner on Sep 16, 2024. It is now read-only.
This repository was archived by the owner on Sep 16, 2024. It is now read-only.

Integer overflow in filesystem stat implementation #409

Closed
@amotl

Description

@amotl

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions