Re: C aggregate passing (Rust kernel policy)

From: Steven Rostedt
Date: Wed Feb 26 2025 - 17:35:06 EST


On Wed, 26 Feb 2025 14:22:26 -0800
Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> wrote:

> > But if I used:
> >
> > if (global > 1000)
> > goto out;
> > x = global;
>
> which can have the TUCTOU issue because 'global' is read twice.

Correct, but if the variable had some other protection, like a lock held
when this function was called, it is fine to do and the compiler may
optimize it or not and still have the same result.

I guess you can sum this up to:

The compiler should never assume it's safe to read a global more than the
code specifies, but if the code reads a global more than once, it's fine
to cache the multiple reads.

Same for writes, but I find WRITE_ONCE() used less often than READ_ONCE().
And when I do use it, it is more to prevent write tearing as you mentioned.

-- Steve