You need to consider the whole paragprah, for context:
A data race has Undefined Behavior, and is therefore impossible to perform in Safe Rust.
The Nomicon is clear: data races are not possible in Safe Rust.
Then it goes on to explain which features of Rust prevent data races and identifies 2 features:
Data races are mostly prevented through Rust's ownership system: it's impossible to alias a mutable reference, so it's impossible to perform a data race.
Data races in Safe Rust are mostly prevented through Ownership/Borrowing: a data race occurs when 2 threads look at the same piece of data simultaneously, and at least one of them writes to it.
The Ownership/Borrowing system generally prevents that, but there's one exception: Interior mutability.
Interior mutability makes this more complicated, which is largely why we have the Send and Sync traits (see below).
To plug the last hole (interior mutability), the
Sync traits are used.