| lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
|
Open Source and information security mailing list archives
| ||
|
Message-ID: <20251203143305.591cd0da.gary@garyguo.net> Date: Wed, 3 Dec 2025 14:33:05 +0000 From: Gary Guo <gary@...yguo.net> To: Alice Ryhl <aliceryhl@...gle.com> Cc: rust-for-linux@...r.kernel.org, linux-kernel@...r.kernel.org, Greg Kroah-Hartman <gregkh@...uxfoundation.org>, Dave Ertman <david.m.ertman@...el.com>, Ira Weiny <ira.weiny@...el.com>, Leon Romanovsky <leon@...nel.org>, Peter Zijlstra <peterz@...radead.org>, Boqun Feng <boqun.feng@...il.com>, Elle Rhumsaa <elle@...thered-steel.dev>, Carlos Llamas <cmllamas@...gle.com>, Yury Norov <yury.norov@...il.com>, Andreas Hindborg <a.hindborg@...nel.org>, linux-block@...r.kernel.org, FUJITA Tomonori <fujita.tomonori@...il.com>, Miguel Ojeda <ojeda@...nel.org>, Michael Turquette <mturquette@...libre.com>, Stephen Boyd <sboyd@...nel.org>, linux-clk@...r.kernel.org, Benno Lossin <lossin@...nel.org>, Danilo Krummrich <dakr@...nel.org>, Thomas Gleixner <tglx@...utronix.de>, "Rafael J. Wysocki" <rafael@...nel.org>, Viresh Kumar <viresh.kumar@...aro.org>, linux-pm@...r.kernel.org, Paul Moore <paul@...l-moore.com>, Serge Hallyn <sergeh@...nel.org>, linux-security-module@...r.kernel.org, Daniel Almeida <daniel.almeida@...labora.com>, Abdiel Janulgue <abdiel.janulgue@...il.com>, Robin Murphy <robin.murphy@....com>, Lyude Paul <lyude@...hat.com>, Alexander Viro <viro@...iv.linux.org.uk>, Christian Brauner <brauner@...nel.org>, Jan Kara <jack@...e.cz>, linux-fsdevel@...r.kernel.org, Josh Poimboeuf <jpoimboe@...nel.org>, Jason Baron <jbaron@...mai.com>, Steven Rostedt <rostedt@...dmis.org>, Ard Biesheuvel <ardb@...nel.org>, Brendan Higgins <brendan.higgins@...ux.dev>, David Gow <davidgow@...gle.com>, Rae Moar <rmoar@...gle.com>, linux-kselftest@...r.kernel.org, Andrew Morton <akpm@...ux-foundation.org>, "Liam R. Howlett" <Liam.Howlett@...cle.com>, Andrew Ballance <andrewjballance@...il.com>, maple-tree@...ts.infradead.org, linux-mm@...ck.org, Lorenzo Stoakes <lorenzo.stoakes@...cle.com>, Uladzislau Rezki <urezki@...il.com>, Vitaly Wool <vitaly.wool@...sulko.se>, Rob Herring <robh@...nel.org>, Saravana Kannan <saravanak@...gle.com>, devicetree@...r.kernel.org, Bjorn Helgaas <bhelgaas@...gle.com>, "Krzysztof WilczyĆski" <kwilczynski@...nel.org>, linux-pci@...r.kernel.org, Remo Senekowitsch <remo@...nzli.dev>, "Paul E. McKenney" <paulmck@...nel.org>, rcu@...r.kernel.org, Will Deacon <will@...nel.org>, Fiona Behrens <me@...enk.dev>, Liam Girdwood <lgirdwood@...il.com>, Mark Brown <broonie@...nel.org>, Alexandre Courbot <acourbot@...dia.com>, Vlastimil Babka <vbabka@...e.cz>, Christoph Lameter <cl@...two.org>, David Rientjes <rientjes@...gle.com>, Ingo Molnar <mingo@...hat.com>, Waiman Long <longman@...hat.com>, Mitchell Levy <levymitchell0@...il.com>, Frederic Weisbecker <frederic@...nel.org>, Anna-Maria Behnsen <anna-maria@...utronix.de>, John Stultz <jstultz@...gle.com>, linux-usb@...r.kernel.org, Tejun Heo <tj@...nel.org>, Lai Jiangshan <jiangshanlai@...il.com>, Matthew Wilcox <willy@...radead.org>, Tamir Duberstein <tamird@...il.com> Subject: Re: [PATCH 00/46] Allow inlining C helpers into Rust when using LTO On Tue, 02 Dec 2025 19:37:24 +0000 Alice Ryhl <aliceryhl@...gle.com> wrote: > This patch series adds __rust_helper to every single rust helper. The > patches do not depend on each other, so maintainers please go ahead and > pick up any patches relevant to your subsystem! Or provide your Acked-by > so that Miguel can pick them up. > > These changes were generated by adding __rust_helper and running > ClangFormat. Unrelated formatting changes were removed manually. > > Why is __rust_helper needed? > ============================ > > Currently, C helpers cannot be inlined into Rust even when using LTO > because LLVM detects slightly different options on the codegen units. > > * LLVM doesn't want to inline functions compiled with > `-fno-delete-null-pointer-checks` with code compiled without. The C > CGUs all have this enabled and Rust CGUs don't. Inlining is okay since > this is one of the hardening features that does not change the ABI, > and we shouldn't have null pointer dereferences in these helpers. > > * LLVM doesn't want to inline functions with different list of builtins. C > side has `-fno-builtin-wcslen`; `wcslen` is not a Rust builtin, so > they should be compatible, but LLVM does not perform inlining due to > attributes mismatch. > > * clang and Rust doesn't have the exact target string. Clang generates > `+cmov,+cx8,+fxsr` but Rust doesn't enable them (in fact, Rust will > complain if `-Ctarget-feature=+cmov,+cx8,+fxsr` is used). x86-64 > always enable these features, so they are in fact the same target > string, but LLVM doesn't understand this and so inlining is inhibited. > This can be bypassed with `--ignore-tti-inline-compatible`, but this > is a hidden option. > > (This analysis was written by Gary Guo.) > > How is this fixed? > ================== > > To fix this we need to add __always_inline to all helpers when compiling > with LTO. However, it should not be added when running bindgen as > bindgen will ignore functions marked inline. To achieve this, we are > using a #define called __rust_helper that is defined differently > depending on whether bindgen is running or not. > > Note that __rust_helper is currently always #defined to nothing. > Changing it to __always_inline will happen separately in another patch > series. > > Signed-off-by: Alice Ryhl <aliceryhl@...gle.com> > --- > Alice Ryhl (46): > rust: auxiliary: add __rust_helper to helpers > rust: barrier: add __rust_helper to helpers > rust: binder: add __rust_helper to helpers > rust: bitmap: add __rust_helper to helpers > rust: bitops: add __rust_helper to helpers > rust: blk: add __rust_helper to helpers > rust: bug: add __rust_helper to helpers > rust: clk: add __rust_helper to helpers > rust: completion: add __rust_helper to helpers > rust: cpu: add __rust_helper to helpers > rust: cpufreq: add __rust_helper to helpers > rust: cpumask: add __rust_helper to helpers > rust: cred: add __rust_helper to helpers > rust: device: add __rust_helper to helpers > rust: dma: add __rust_helper to helpers > rust: drm: add __rust_helper to helpers > rust: err: add __rust_helper to helpers > rust: fs: add __rust_helper to helpers > rust: io: add __rust_helper to helpers > rust: irq: add __rust_helper to helpers > rust: jump_label: add __rust_helper to helpers > rust: kunit: add __rust_helper to helpers > rust: maple_tree: add __rust_helper to helpers > rust: mm: add __rust_helper to helpers > rust: of: add __rust_helper to helpers > rust: pci: add __rust_helper to helpers > rust: pid_namespace: add __rust_helper to helpers > rust: platform: add __rust_helper to helpers > rust: poll: add __rust_helper to helpers > rust: processor: add __rust_helper to helpers > rust: property: add __rust_helper to helpers > rust: rbtree: add __rust_helper to helpers > rust: rcu: add __rust_helper to helpers > rust: refcount: add __rust_helper to helpers > rust: regulator: add __rust_helper to helpers > rust: scatterlist: add __rust_helper to helpers > rust: security: add __rust_helper to helpers > rust: slab: add __rust_helper to helpers > rust: sync: add __rust_helper to helpers > rust: task: add __rust_helper to helpers > rust: time: add __rust_helper to helpers > rust: uaccess: add __rust_helper to helpers > rust: usb: add __rust_helper to helpers > rust: wait: add __rust_helper to helpers > rust: workqueue: add __rust_helper to helpers > rust: xarray: add __rust_helper to helpers Thansk for sending this Alice! With this series in first, my series for inlining helpers should be much easier to apply. For the whole series: Reviewed-by: Gary Guo <gary@...yguo.net> Best, Gary > > rust/helpers/auxiliary.c | 6 +++-- > rust/helpers/barrier.c | 6 ++--- > rust/helpers/binder.c | 13 ++++----- > rust/helpers/bitmap.c | 6 +++-- > rust/helpers/bitops.c | 11 +++++--- > rust/helpers/blk.c | 4 +-- > rust/helpers/bug.c | 4 +-- > rust/helpers/build_bug.c | 2 +- > rust/helpers/clk.c | 24 +++++++++-------- > rust/helpers/completion.c | 2 +- > rust/helpers/cpu.c | 2 +- > rust/helpers/cpufreq.c | 3 ++- > rust/helpers/cpumask.c | 32 +++++++++++++--------- > rust/helpers/cred.c | 4 +-- > rust/helpers/device.c | 16 +++++------ > rust/helpers/dma.c | 15 ++++++----- > rust/helpers/drm.c | 7 ++--- > rust/helpers/err.c | 6 ++--- > rust/helpers/fs.c | 2 +- > rust/helpers/io.c | 64 +++++++++++++++++++++++--------------------- > rust/helpers/irq.c | 6 +++-- > rust/helpers/jump_label.c | 2 +- > rust/helpers/kunit.c | 2 +- > rust/helpers/maple_tree.c | 3 ++- > rust/helpers/mm.c | 20 +++++++------- > rust/helpers/mutex.c | 13 ++++----- > rust/helpers/of.c | 2 +- > rust/helpers/page.c | 9 ++++--- > rust/helpers/pci.c | 13 +++++---- > rust/helpers/pid_namespace.c | 8 +++--- > rust/helpers/platform.c | 2 +- > rust/helpers/poll.c | 5 ++-- > rust/helpers/processor.c | 2 +- > rust/helpers/property.c | 2 +- > rust/helpers/rbtree.c | 5 ++-- > rust/helpers/rcu.c | 4 +-- > rust/helpers/refcount.c | 10 +++---- > rust/helpers/regulator.c | 24 ++++++++++------- > rust/helpers/scatterlist.c | 12 +++++---- > rust/helpers/security.c | 26 ++++++++++-------- > rust/helpers/signal.c | 2 +- > rust/helpers/slab.c | 14 +++++----- > rust/helpers/spinlock.c | 13 ++++----- > rust/helpers/sync.c | 4 +-- > rust/helpers/task.c | 24 ++++++++--------- > rust/helpers/time.c | 12 ++++----- > rust/helpers/uaccess.c | 8 +++--- > rust/helpers/usb.c | 3 ++- > rust/helpers/vmalloc.c | 7 ++--- > rust/helpers/wait.c | 2 +- > rust/helpers/workqueue.c | 8 +++--- > rust/helpers/xarray.c | 10 +++---- > 52 files changed, 280 insertions(+), 226 deletions(-) > --- > base-commit: 54e3eae855629702c566bd2e130d9f40e7f35bde > change-id: 20251202-define-rust-helper-f7b531813007 > > Best regards,
Powered by blists - more mailing lists