On Wed, Sep 10, 2025 at 3:55 PM Alexandre Courbot <acour...@nvidia.com> wrote: > > The only two options are either allowing user-space to crash the kernel > through a module with a missing bound check, or letting it tamper with
So we are definitely not aiming to allow that on purpose, i.e. I know you said "missing", but just to clarify: they would of course be considered a bug, just like hitting similar facilities in C code. (In general, if we get into the situation where we can actually crash the kernel from userspace, that is a CVE with the current rules (modulo exceptional cases, e.g. the recent discussion about debugging tools, for instance), regardless of whether it was due to a Rust panic or not.) The Rust panic is, as you say, the last line of defense, attempting to limit the damage. I think that is worth it for at least some users that want it (like cloud providers) and some parts of the kernel. Sometimes it can be worse, though, i.e. perhaps the OOB or the overflow was not actually a "big issue" "in practice" for a particular case. I think it will likely depend on the kind of code we are talking about -- not all panics are the same, and not all code is the same. For random modules, for instance, yes, we should definitely prevent developers from writing panics as much as possible (or not at all); the same way we try to prevent them from writing unsafe code -- after all, panicking operations and unsafe code are both an statement that we are sure "something cannot happen". So the more we prevent APIs that do not need to rely on panicking (nor unsafe code) on drivers etc., the better. I also think forcing to have no panics at all (i.e. globally) would force us to handle way more truly impossible cases than C does (unsafely so), which isn't great and has downsides too (increased complexity, for one, which can also lead to more bugs). And we don't want to go memory unsafe for all those either (I mean, it could be an option, but I wouldn't recommend it, and it would still be a bug if hit). So for certain cases panicking may be a reasonable option in practice -- that is where I wanted us to get more experience to know how we fare vs. C here and thus the data request. It will also depend on what upstream Rust can give us (more on that below). For instance, having an enforced way with carve-outs that need to be annotated would at least make it stand out to reviewers and make developers think thrice. > Thanks, these are great directions to explore. I see that some thinking > has already been done on this, do we have a bug or tracking issue so I > can catch up with the discussions that have already taken place? In general, I do my best to track this kind of thing in the issues linked from issue #2 ("Rust features" in this case: https://github.com/Rust-for-Linux/linux/issues/354), and you can see some pointers for the overflow part. For no panics there is also an entry for a long time, but I don't think there has been any "deep" discussion on it -- I mean between Rust and the kernel (there are of course discussions in upstream Rust, and there also have been in our side in the mailing list). I just added a couple recent pointers, I can look for more. In that meeting I mentioned with them, I raised this a month or two ago, and I did so today too, and mentioned that you wanted to discuss it in LPC. If you (or e.g. someone from NVIDIA) have time to work on this, including in upstream Rust (e.g. writing an RFC, implementing an experiment...), then please let me know. They are open to the possibility of having a Rust project goal for the next round on no panics (2026H1), so it is a good chance to move things forward. We had today a discussion on potential forms it could take (an attribute on a function, guaranteed or not, escape hatches or not, lints, an enforced comment, Klint, the report-and-continue feature...) and related ongoing efforts (having a `nopanic` effect, `target_feature(enable =`...). I hope that helps, and thanks! Cheers, Miguel