ksummit.lists.linux.dev archive mirror
 help / color / mirror / Atom feed
From: "H. Peter Anvin" <hpa@zytor.com>
To: Kees Cook <kees@kernel.org>,
	Miguel Ojeda <miguel.ojeda.sandonis@gmail.com>
Cc: Christoph Hellwig <hch@infradead.org>,
	rust-for-linux <rust-for-linux@vger.kernel.org>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Greg KH <gregkh@linuxfoundation.org>,
	David Airlie <airlied@gmail.com>,
	linux-kernel@vger.kernel.org, ksummit@lists.linux.dev
Subject: Re: Rust kernel policy
Date: Wed, 19 Feb 2025 11:33:56 -0800	[thread overview]
Message-ID: <785A9F60-F687-41DE-A116-34E37F5B407A@zytor.com> (raw)
In-Reply-To: <202502191026.8B6FD47A1@keescook>

On February 19, 2025 10:52:37 AM PST, Kees Cook <kees@kernel.org> wrote:
>On Tue, Feb 18, 2025 at 07:46:29PM +0100, Miguel Ojeda wrote:
>> On Tue, Feb 18, 2025 at 5:08 PM Christoph Hellwig <hch@infradead.org> wrote:
>> > I'd like to understand what the goal of this Rust "experiment" is:  If
>> > we want to fix existing issues with memory safety we need to do that for
>> > existing code and find ways to retrofit it.  A lot of work went into that
>> > recently and we need much more.  But that also shows how core maintainers
>> > are put off by trivial things like checking for integer overflows or
>> > compiler enforced synchronization (as in the clang thread sanitizer).
>> 
>> As I replied to you privately in the other thread, I agree we need to
>> keep improving all the C code we have, and I support all those kinds
>> of efforts (including the overflow checks).
>> 
>> But even if we do all that, the gap with Rust would still be big.
>> 
>> And, yes, if C (or at least GCC/Clang) gives us something close to
>> Rust, great (I have supported doing something like that within the C
>> committee for as long as I started Rust for Linux).
>> 
>> But even if that happened, we would still need to rework our existing
>> code, convince everyone that all this extra stuff is worth it, have
>> them learn it, and so on. Sounds familiar... And we wouldn't get the
>> other advantages of Rust.
>
>Speaking to the "what is the goal" question, I think Greg talks about it
>a bit[1], but I see the goal as eliminating memory safety issues in new
>drivers and subsystems. The pattern we've seen in Linux (via syzkaller,
>researchers, in-the-wild exploits, etc) with security flaws is that
>the majority appear in new code. Focusing on getting new code written
>in Rust puts a stop to these kinds of flaws, and it has an exponential
>impact, as Android and Usenix have found[2] (i.e. vulnerabilities decay
>exponentially).
>
>In other words, I don't see any reason to focus on replacing existing
>code -- doing so would actually carry a lot of risk. But writing *new*
>stuff in Rust is very effective. Old code is more stable and has fewer
>bugs already, and yet, we're still going to continue the work of hardening
>C, because we still need to shake those bugs out. But *new* code can be
>written in Rust, and not have any of these classes of bugs at all from
>day one.
>
>The other driving force is increased speed of development, as most of
>the common bug sources just vanish, so a developer has to spend much
>less time debugging (i.e. the "90/90 rules" fades). Asahi Lina discussed
>this a bit while writing the M1 GPU driver[3], "You end up reducing the
>amount of possible bugs to worry about to a tiny number"
>
>So I think the goal is simply "better code quality", which has two primary
>outputs: exponentially fewer security flaws and faster development speed.
>
>-Kees
>
>[1] https://lore.kernel.org/all/2025021954-flaccid-pucker-f7d9@gregkh
>[2] https://security.googleblog.com/2024/09/eliminating-memory-safety-vulnerabilities-Android.html
>[3] https://asahilinux.org/2022/11/tales-of-the-m1-gpu/
>

Let me clarify, because I did the bad thing of mixing not just two, but four separate topics:

a. The apparent vast gap in maturity required of Rust versus C. What is our maturity policy going to be? Otherwise we are putting a lot of burden on C maintainers which is effectively wasted of the kernel configuration pulls in even one line of Rust.

This is particularly toxic given the "no parallel code" claimed in this policy document (which really needs references if it is to be taken seriously; as written, it looks like a specific opinion.)

b. Can we use existing mature tools, such as C++, to *immediately* improve the quality (not just memory safety!) of our 37-year-old, 35-million line code base and allow for further centralized improvements without the major lag required for compiler extensions to be requested and implemented in gcc (and clang) *and* dealing with the maturity issue?

Anyone willing to take bets that the kernel will still have plenty of C code in 2050?

c. The desirability of being able to get new code written in a better way. This is most definitely something Rust can do, although the maturity issue and the syntactic gap (making it harder for reviewers used to C to review code without missing details) are genuine problems. One is technical-procedural, the other is more training-aestetics.

d. Any upcoming extensions to C or C++ that can provide increased memory safety for the existing code base, or vice that due to (a) or author/maintainer preference cannot be written in Rust.

-----

Now, moving on:

A "safe C" *would* require compiler changes, and I don't believe such a proposal has even been fielded. C++, as far as I am concerned, lets us (at least to some extent) decouple that and many other things we rely on with some *really* fuggly combinations of macros and compiler extensions.

Rust code, too, would benefit here,  because it would reduce the sematic gap *and* it would carry more information that would make the bindings both more natural and more likely to be possible to automate.

So I didn't intend to present this as much of an either/or as it came across (which was entirely my fault.) But I do think it is foolish to ignore the existing 35 million lines of code and expect them to go away. 

  parent reply	other threads:[~2025-02-19 19:34 UTC|newest]

Thread overview: 186+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CANiq72m-R0tOakf=j7BZ78jDHdy=9-fvZbAT8j91Je2Bxy0sFg@mail.gmail.com>
2025-02-18 16:08 ` Christoph Hellwig
2025-02-18 16:35   ` Jarkko Sakkinen
2025-02-18 16:39     ` Jarkko Sakkinen
2025-02-18 18:08       ` Jarkko Sakkinen
2025-02-18 21:22         ` Boqun Feng
2025-02-19  6:20           ` Jarkko Sakkinen
2025-02-19  6:35             ` Dave Airlie
2025-02-19 11:37               ` Jarkko Sakkinen
2025-02-19 13:25                 ` Geert Uytterhoeven
2025-02-19 13:40                   ` Jarkko Sakkinen
2025-02-19  7:05             ` Boqun Feng
2025-02-19 11:32               ` Jarkko Sakkinen
2025-02-18 17:36   ` Jiri Kosina
2025-02-20  6:33     ` Christoph Hellwig
2025-02-20 18:40       ` Alexei Starovoitov
2025-02-18 18:46   ` Miguel Ojeda
2025-02-18 21:49     ` H. Peter Anvin
2025-02-18 22:38       ` Dave Airlie
2025-02-18 22:54       ` Miguel Ojeda
2025-02-19  0:58         ` H. Peter Anvin
2025-02-19  3:04           ` Boqun Feng
2025-02-19  5:07             ` NeilBrown
2025-02-19  5:39             ` Greg KH
2025-02-19 15:05               ` Laurent Pinchart
2025-02-20 20:49                 ` Lyude Paul
2025-02-21 19:24                   ` Laurent Pinchart
2025-02-20  7:03               ` Martin Uecker
2025-02-20  7:10                 ` Greg KH
2025-02-20  8:57                   ` Martin Uecker
2025-02-20 13:46                     ` Dan Carpenter
2025-02-20 14:09                       ` Martin Uecker
2025-02-20 14:38                         ` H. Peter Anvin
2025-02-20 15:25                         ` Dan Carpenter
2025-02-20 15:49                         ` Willy Tarreau
2025-02-22 15:30                         ` Kent Overstreet
2025-02-20 14:53                     ` Greg KH
2025-02-20 15:40                       ` Martin Uecker
2025-02-21  0:46                         ` Miguel Ojeda
2025-02-21  9:48                         ` Dan Carpenter
2025-02-21 16:28                           ` Martin Uecker
2025-02-21 17:43                             ` Steven Rostedt
2025-02-21 18:07                               ` Linus Torvalds
2025-02-21 18:19                                 ` Steven Rostedt
2025-02-21 18:31                                 ` Martin Uecker
2025-02-21 19:30                                   ` Linus Torvalds
2025-02-21 19:59                                     ` Martin Uecker
2025-02-21 20:11                                       ` Linus Torvalds
2025-02-22  7:20                                         ` Martin Uecker
2025-02-21 22:24                                     ` Steven Rostedt
2025-02-21 23:04                                       ` Linus Torvalds
2025-02-22 17:53                                         ` Kent Overstreet
2025-02-22 18:44                                           ` Linus Torvalds
2025-02-23 16:42                                         ` David Laight
2025-02-21 23:37                                       ` Martin Uecker
2025-02-25 22:49                                         ` David Laight
2025-02-22 18:42                                       ` Linus Torvalds
2025-02-22  9:45                                   ` Dan Carpenter
2025-02-22 10:25                                     ` Martin Uecker
2025-02-22 11:07                                       ` Greg KH
2025-02-21 18:23                               ` Martin Uecker
2025-02-21 22:14                                 ` Steven Rostedt
2025-03-01 13:22                             ` Askar Safin
2025-03-01 13:55                               ` Martin Uecker
2025-03-02  6:50                               ` Kees Cook
2025-02-21 18:11                           ` Theodore Ts'o
2025-02-24  8:12                             ` Dan Carpenter
2025-02-20 22:08                     ` Paul E. McKenney
2025-02-22 23:42                     ` Piotr Masłowski
2025-02-23  8:10                       ` Martin Uecker
2025-02-23 23:31                       ` comex
2025-02-24  9:08                         ` Ventura Jack
2025-02-24 18:03                           ` Martin Uecker
2025-02-20 12:28               ` Jan Engelhardt
2025-02-20 12:37                 ` Greg KH
2025-02-20 13:23                   ` H. Peter Anvin
2025-02-20 13:51                     ` Willy Tarreau
2025-02-20 15:17                     ` C aggregate passing (Rust kernel policy) Jan Engelhardt
2025-02-20 16:46                       ` Linus Torvalds
2025-02-20 20:34                       ` H. Peter Anvin
2025-02-21  8:31                       ` HUANG Zhaobin
2025-02-21 18:34                       ` David Laight
2025-02-21 19:12                         ` Linus Torvalds
2025-02-21 20:07                           ` comex
2025-02-21 21:45                           ` David Laight
2025-02-22  6:32                             ` Willy Tarreau
2025-02-22  6:37                               ` Willy Tarreau
2025-02-22  8:41                                 ` David Laight
2025-02-22  9:11                                   ` Willy Tarreau
2025-02-21 20:06                         ` Jan Engelhardt
2025-02-21 20:23                           ` Laurent Pinchart
2025-02-21 20:24                             ` Laurent Pinchart
2025-02-21 22:02                             ` David Laight
2025-02-21 22:13                               ` Bart Van Assche
2025-02-22  5:56                                 ` comex
2025-02-21 20:26                           ` Linus Torvalds
2025-02-21 22:19                             ` henrychurchill
2025-02-21 22:52                             ` henrychurchill
2025-02-20 22:13               ` Rust kernel policy Paul E. McKenney
2025-02-21  5:19               ` Felipe Contreras
2025-02-21  5:36                 ` Boqun Feng
2025-02-21  5:59                   ` Felipe Contreras
2025-02-21  7:04                     ` Dave Airlie
2025-02-24 20:27                       ` Felipe Contreras
2025-02-24 20:37                     ` Boqun Feng
2025-02-26  2:42                       ` Felipe Contreras
2025-02-22 16:04               ` Kent Overstreet
2025-02-22 17:10                 ` Ventura Jack
2025-02-22 17:34                   ` Kent Overstreet
2025-02-23  2:08                 ` Bart Van Assche
2025-02-19  5:53             ` Alexey Dobriyan
2025-02-19  5:59           ` Dave Airlie
2025-02-22 18:46             ` Kent Overstreet
2025-02-19 12:37           ` Miguel Ojeda
2025-02-20 11:26       ` Askar Safin
2025-02-20 12:33       ` vpotach
2025-02-19 18:52     ` Kees Cook
2025-02-19 19:08       ` Steven Rostedt
2025-02-19 19:17         ` Kees Cook
2025-02-19 20:27           ` Jason Gunthorpe
2025-02-19 20:46             ` Steven Rostedt
2025-02-19 20:52               ` Bart Van Assche
2025-02-19 21:07                 ` Steven Rostedt
2025-02-20 16:05                   ` Jason Gunthorpe
2025-02-20  8:13                 ` Jarkko Sakkinen
2025-02-20  8:16                   ` Jarkko Sakkinen
2025-02-20 11:57                   ` Fiona Behrens
2025-02-20 14:07                     ` Jarkko Sakkinen
2025-02-21 10:19                       ` Jarkko Sakkinen
2025-02-22 12:10                         ` Miguel Ojeda
2025-03-04 11:17                       ` Fiona Behrens
2025-03-04 17:48                         ` Jarkko Sakkinen
2025-02-20  9:55                 ` Leon Romanovsky
2025-02-19 19:33       ` H. Peter Anvin [this message]
2025-02-20  6:32         ` Alexey Dobriyan
2025-02-20  6:53           ` Greg KH
2025-02-20  8:44             ` Alexey Dobriyan
2025-02-20 13:53             ` Willy Tarreau
2025-02-20 16:04             ` Jason Gunthorpe
2025-02-20 12:01           ` H. Peter Anvin
2025-02-20 12:13             ` H. Peter Anvin
2025-02-20 23:42         ` Miguel Ojeda
2025-02-22 15:21           ` Kent Overstreet
2025-02-20  6:42     ` Christoph Hellwig
2025-02-20 23:44       ` Miguel Ojeda
2025-02-21 15:24         ` Simona Vetter
2025-02-22 12:10           ` Miguel Ojeda
2025-02-26 13:17           ` Fiona Behrens
2025-02-21  0:39       ` Linus Torvalds
2025-02-21 12:16         ` Danilo Krummrich
2025-02-21 15:59           ` Steven Rostedt
2025-02-23 18:03           ` Laurent Pinchart
2025-02-23 18:31             ` Linus Torvalds
2025-02-26 16:05               ` Jason Gunthorpe
2025-02-26 19:32                 ` Linus Torvalds
2025-02-19  8:05   ` Dan Carpenter
2025-02-19 14:14     ` James Bottomley
2025-02-19 14:30       ` Geert Uytterhoeven
2025-02-19 14:46       ` Martin K. Petersen
2025-02-19 14:51         ` Bartosz Golaszewski
2025-02-19 15:15         ` James Bottomley
2025-02-19 15:33           ` Willy Tarreau
2025-02-19 15:45             ` Laurent Pinchart
2025-02-19 15:46             ` James Bottomley
2025-02-19 15:56               ` Willy Tarreau
2025-02-19 16:07                 ` Laurent Pinchart
2025-02-19 16:15                   ` Willy Tarreau
2025-02-19 16:32                     ` Laurent Pinchart
2025-02-19 16:34                       ` Willy Tarreau
2025-02-19 16:33                     ` Steven Rostedt
2025-02-19 16:47                       ` Andrew Lunn
2025-02-19 18:22                       ` Jarkko Sakkinen
2025-02-20  6:26                       ` Alexey Dobriyan
2025-02-20 15:37                         ` Steven Rostedt
2025-02-19 17:00           ` Martin K. Petersen
2025-02-19 15:13       ` Steven Rostedt
2025-02-19 14:05   ` James Bottomley
2025-02-19 15:08     ` Miguel Ojeda
2025-02-19 16:03       ` James Bottomley
2025-02-19 16:44         ` Miguel Ojeda
2025-02-19 17:06           ` Theodore Ts'o
2025-02-20 23:40             ` Miguel Ojeda
2025-02-22 15:03             ` Kent Overstreet
2025-02-20 16:03           ` James Bottomley
2025-02-20 23:47             ` Miguel Ojeda
2025-02-20  6:48         ` Christoph Hellwig
2025-02-20 12:56           ` James Bottomley

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=785A9F60-F687-41DE-A116-34E37F5B407A@zytor.com \
    --to=hpa@zytor.com \
    --cc=airlied@gmail.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=hch@infradead.org \
    --cc=kees@kernel.org \
    --cc=ksummit@lists.linux.dev \
    --cc=linux-kernel@vger.kernel.org \
    --cc=miguel.ojeda.sandonis@gmail.com \
    --cc=rust-for-linux@vger.kernel.org \
    --cc=torvalds@linux-foundation.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox