On Wed Apr 1, 2026 at 12:45 PM BST, Miguel Ojeda wrote: > From: Alice Ryhl <[email protected]> > > By default bindgen will convert 'enum lru_status' into a typedef for an > integer. For the most part, an integer of the same size as the enum > results in the correct ABI, but in the specific case of CFI, that is not > the case. The CFI encoding is supposed to be the same as a struct called > 'lru_status' rather than the name of the underlying native integer type. > > To fix this, tell bindgen to generate a newtype and set the CFI type > explicitly. Note that we need to set the CFI attribute explicitly as > bindgen is using repr(transparent), which is otherwise identical to the > inner type for ABI purposes. > > This allows us to remove the page range helper C function in Binder > without risking a CFI failure when list_lru_walk calls the provided > function pointer. > > The --with-attribute-custom-enum argument requires bindgen v0.71 or > greater. > > [ In particular, the feature was added in 0.71.0 [1][2]. > > In addition, `feature(cfi_encoding)` has been available since > Rust 1.71.0 [3]. > > Link: https://github.com/rust-lang/rust-bindgen/issues/2520 [1] > Link: https://github.com/rust-lang/rust-bindgen/pull/2866 [2] > Link: https://github.com/rust-lang/rust/pull/105452 [3] > > - Miguel ] > > My testing procedure was to add this to the android17-6.18 branch and > verify that rust_shrink_free_page is successfully called without crash, > and verify that it does in fact crash when the cfi_encoding is set to > other values. Note that I couldn't test this on android16-6.12 as that > branch uses a bindgen version that is too old. > > Signed-off-by: Alice Ryhl <[email protected]> > Link: > https://patch.msgid.link/[email protected] > [ Rebased on top of the minimum Rust version bump series which provide > the required `bindgen` version. - Miguel ] > Signed-off-by: Miguel Ojeda <[email protected]>
Reviewed-by: Gary Guo <[email protected]> > --- > drivers/android/binder/Makefile | 3 +-- > drivers/android/binder/page_range.rs | 6 +++--- > drivers/android/binder/page_range_helper.c | 24 ---------------------- > drivers/android/binder/page_range_helper.h | 15 -------------- > rust/bindgen_parameters | 4 ++++ > rust/bindings/bindings_helper.h | 1 - > rust/bindings/lib.rs | 1 + > rust/uapi/lib.rs | 1 + > 8 files changed, 10 insertions(+), 45 deletions(-) > delete mode 100644 drivers/android/binder/page_range_helper.c > delete mode 100644 drivers/android/binder/page_range_helper.h
