Files
ladybird/Kernel/Time/TimeManagement.cpp
Andreas Kling 11456ebc00 Kernel: Close race window in timestamp update mechanism
As pointed out by 8infy, this mechanism is racy:

    WRITER:

        1. ++update1;
        2. write_data();
        3. ++update2;

    READER:

        1. do { auto saved = update1;
        2. read_data();
        3. } while (saved != update2);

The following sequence can lead to a bogus/partial read:

    R1      R2  R3
        W1  W2      W3

We close this race by incrementing the second update counter first:

    WRITER:

        1. ++update2;
        2. write_data();
        3. ++update1;
2021-08-10 21:51:05 +02:00

15 KiB