From: Boqun Feng <boqun.feng@gmail.com>
To: Alice Ryhl <aliceryhl@google.com>
Cc: Andrew Lunn <andrew@lunn.ch>,
FUJITA Tomonori <fujita.tomonori@gmail.com>,
netdev@vger.kernel.org, rust-for-linux@vger.kernel.org,
hkallweit1@gmail.com, tmgross@umich.edu, ojeda@kernel.org,
alex.gaynor@gmail.com, gary@garyguo.net,
bjorn3_gh@protonmail.com, benno.lossin@proton.me,
a.hindborg@samsung.com, anna-maria@linutronix.de,
frederic@kernel.org, tglx@linutronix.de, arnd@arndb.de,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH net-next v2 5/6] rust: Add read_poll_timeout function
Date: Mon, 7 Oct 2024 07:38:12 -0700 [thread overview]
Message-ID: <ZwPyVHH2UbVeJBs5@boqun-archlinux> (raw)
In-Reply-To: <ZwPuDE16YBS4PKkx@boqun-archlinux>
On Mon, Oct 07, 2024 at 07:19:56AM -0700, Boqun Feng wrote:
> On Mon, Oct 07, 2024 at 04:16:46PM +0200, Alice Ryhl wrote:
> > On Mon, Oct 7, 2024 at 4:14 PM Boqun Feng <boqun.feng@gmail.com> wrote:
> > >
> > > On Mon, Oct 07, 2024 at 04:08:48PM +0200, Alice Ryhl wrote:
> > > > On Mon, Oct 7, 2024 at 3:48 PM Andrew Lunn <andrew@lunn.ch> wrote:
> > > > >
> > > > > On Mon, Oct 07, 2024 at 05:28:28AM -0700, Boqun Feng wrote:
> > > > > > On Sun, Oct 06, 2024 at 04:45:21PM +0200, Andrew Lunn wrote:
> > > > > > However, this is actually a special case: currently we want to use klint
> > > > > > [1] to detect all context mis-matches at compile time. So the above rule
> > > > > > extends for kernel: any type-checked *and klint-checked* code that only
> > > > > > calls safe Rust functions cannot be unsafe. I.e. we add additional
> > > > > > compile time checking for unsafe code. So if might_sleep() has the
> > > > > > proper klint annotation, and we actually enable klint for kernel code,
> > > > > > then we can make it safe (along with preemption disable functions being
> > > > > > safe).
> > > > > >
> > > > > > > where you use a sleeping function in atomic context. Depending on why
> > > > > > > you are in atomic context, it might appear to work, until it does not
> > > > > > > actually work, and bad things happen. So it is not might_sleep() which
> > > > > > > is unsafe, it is the Rust code calling it.
> > > > > >
> > > > > > The whole point of unsafe functions is that calling it may result into
> > > > > > unsafe code, so that's why all extern "C" functions are unsafe, so are
> > > > > > might_sleep() (without klint in the picture).
> > > > >
> > > > > There is a psychological part to this. might_sleep() is a good debug
> > > > > tool, which costs very little in normal builds, but finds logic bugs
> > > > > when enabled in debug builds. What we don't want is Rust developers
> > > > > not scattering it though their code because it adds unsafe code, and
> > > > > the aim is not to have any unsafe code.
> > > >
> > > > We can add a safe wrapper for it:
> > > >
> > > > pub fn might_sleep() {
> > > > // SAFETY: Always safe to call.
> > > > unsafe { bindings::might_sleep() };
> > >
> > > It's not always safe to call, because might_sleep() has a
> > > might_resched() and in preempt=voluntary kernel, that's a
> > > cond_resched(), which may eventually call __schedule() and report a
> > > quiescent state of RCU. This could means an unexpected early grace
> > > period, and that means a potential use-afer-free.
> >
> > Atomicity violations are intended to be caught by klint. If you want
>
> Yes, I already mentioned this to Andrew previously.
>
> > to change that decision, you'll have to add unsafe to all functions
> > that sleep including Mutex::lock, CondVar::wait, and many others.
>
> No, I'm not trying to change that decision, just to make it clear that
> we can mark might_sleep() as safe because of the decision, not because
> it's really safe even without klint...
>
Anyway, I think Tomo needs to call __might_sleep() instead of
might_sleep(), and __might_sleep() seems a pure debug function (not
involved with schedule at all). So the wrapper of __might_sleep() can be
perfectly safe.
Regards,
Boqun
> Regards,
> Boqun
>
> >
> > Alice
next prev parent reply other threads:[~2024-10-07 14:39 UTC|newest]
Thread overview: 63+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-05 12:25 [PATCH net-next v2 0/6] rust: Add IO polling FUJITA Tomonori
2024-10-05 12:25 ` [PATCH net-next v2 1/6] rust: time: Implement PartialEq and PartialOrd for Ktime FUJITA Tomonori
2024-10-06 10:28 ` Fiona Behrens
2024-10-07 5:37 ` FUJITA Tomonori
2024-10-07 8:28 ` Fiona Behrens
2024-10-07 8:41 ` Alice Ryhl
2024-10-07 9:29 ` FUJITA Tomonori
2024-10-07 13:15 ` Andrew Lunn
2024-10-07 13:59 ` Alice Ryhl
2024-10-05 12:25 ` [PATCH net-next v2 2/6] rust: time: Introduce Delta type FUJITA Tomonori
2024-10-05 18:02 ` Andrew Lunn
2024-10-05 18:16 ` Miguel Ojeda
2024-10-07 6:01 ` FUJITA Tomonori
2024-10-07 13:33 ` Andrew Lunn
2024-10-09 14:00 ` FUJITA Tomonori
2024-10-12 18:56 ` Gary Guo
2024-10-13 0:48 ` FUJITA Tomonori
2024-10-15 12:12 ` FUJITA Tomonori
2024-10-05 21:09 ` Andrew Lunn
2024-10-05 12:25 ` [PATCH net-next v2 3/6] rust: time: Implement addition of Ktime and Delta FUJITA Tomonori
2024-10-05 18:07 ` Andrew Lunn
2024-10-06 10:45 ` Fiona Behrens
2024-10-07 6:06 ` FUJITA Tomonori
2024-10-05 18:36 ` Miguel Ojeda
2024-10-07 6:17 ` FUJITA Tomonori
2024-10-07 14:24 ` Alice Ryhl
2024-10-09 12:50 ` FUJITA Tomonori
2024-10-05 12:25 ` [PATCH net-next v2 4/6] rust: time: add wrapper for fsleep function FUJITA Tomonori
2024-10-07 12:24 ` Alice Ryhl
2024-10-09 13:28 ` FUJITA Tomonori
2024-10-05 12:25 ` [PATCH net-next v2 5/6] rust: Add read_poll_timeout function FUJITA Tomonori
2024-10-05 18:32 ` Andrew Lunn
2024-10-05 22:22 ` Boqun Feng
2024-10-06 14:45 ` Andrew Lunn
2024-10-07 6:24 ` FUJITA Tomonori
2024-10-07 12:28 ` Boqun Feng
2024-10-07 13:48 ` Andrew Lunn
2024-10-07 14:06 ` Boqun Feng
2024-10-07 14:08 ` Alice Ryhl
2024-10-07 14:13 ` Boqun Feng
2024-10-07 14:16 ` Alice Ryhl
2024-10-07 14:19 ` Boqun Feng
2024-10-07 14:38 ` Boqun Feng [this message]
2024-10-07 17:13 ` Andrew Lunn
2024-10-07 23:12 ` Boqun Feng
2024-10-08 12:12 ` Andrew Lunn
2024-10-08 12:48 ` Boqun Feng
2024-10-08 13:14 ` Miguel Ojeda
2024-10-08 17:16 ` Andrew Lunn
2024-10-08 21:53 ` Boqun Feng
2024-10-08 21:57 ` Boqun Feng
2024-10-08 22:26 ` Andrew Lunn
2024-10-08 22:42 ` Boqun Feng
2024-10-15 3:36 ` FUJITA Tomonori
2024-10-05 12:25 ` [PATCH net-next v2 6/6] net: phy: qt2025: wait until PHY becomes ready FUJITA Tomonori
2024-10-12 15:29 ` [PATCH net-next v2 0/6] rust: Add IO polling Boqun Feng
2024-10-13 1:15 ` FUJITA Tomonori
2024-10-13 2:50 ` FUJITA Tomonori
2024-10-13 3:16 ` Boqun Feng
2024-10-13 5:15 ` FUJITA Tomonori
2024-10-13 9:48 ` Miguel Ojeda
2024-10-14 21:18 ` Boqun Feng
2024-10-15 3:16 ` FUJITA Tomonori
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ZwPyVHH2UbVeJBs5@boqun-archlinux \
--to=boqun.feng@gmail.com \
--cc=a.hindborg@samsung.com \
--cc=alex.gaynor@gmail.com \
--cc=aliceryhl@google.com \
--cc=andrew@lunn.ch \
--cc=anna-maria@linutronix.de \
--cc=arnd@arndb.de \
--cc=benno.lossin@proton.me \
--cc=bjorn3_gh@protonmail.com \
--cc=frederic@kernel.org \
--cc=fujita.tomonori@gmail.com \
--cc=gary@garyguo.net \
--cc=hkallweit1@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=ojeda@kernel.org \
--cc=rust-for-linux@vger.kernel.org \
--cc=tglx@linutronix.de \
--cc=tmgross@umich.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.