Received: by 2002:a05:7412:8521:b0:e2:908c:2ebd with SMTP id t33csp368740rdf; Fri, 3 Nov 2023 03:19:58 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFcrn/oQTpkx6A63gEkd26AABEp0J/Ub2V8GM8emPvHD9eMBLPtxGuQGSlUluJnEn36jk0o X-Received: by 2002:a17:903:110e:b0:1c4:72c9:64fc with SMTP id n14-20020a170903110e00b001c472c964fcmr22687463plh.22.1699006798256; Fri, 03 Nov 2023 03:19:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1699006798; cv=none; d=google.com; s=arc-20160816; b=NFOKqPXuGZLFaxi6Z+kT8AGezTzzvzywB4mxYwtKgyg5qtfT7vocUs3h7YjE75gfcN CO2RUbn1rkp0gTDRu0NIu+Y9Cz336jFErNnLEzvSS0Nzq4fD7VmzsD2N3Um2DTABH1fr JJt0l0YVUJbKQWy/uJzzGQmfsbm7GynsoIsGWdPxOm9lCTGWK4E3L9WN7Onard/s9JsS hWz6eWNaxXu1Vdp4l78YOOyK/r6KYQZfsF6PSD4/q/aZCQuZva4Wq20Msgsq+D+o6/ff 6ouhK7shHpwioQkZWX6ibBSi4gzfe9gfs7WO+dLN1+2Sj4nvGJJ1nYUn2MZr1D2/MPKJ CuPg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:dkim-signature :from; bh=uFm9yTM2gNBR2nhs8DI+yEFaDN8T7d1KpWt/J5S5IsY=; fh=lvtj4fKjxKA9ICRAZvwoCt96fsPVtN+faDDJACNELm4=; b=00XkWrtFx/84W1AuDXyY58MPPEJOMcmtR1bV7n0gPCc9r1OBavONqbVDCkgOBal49k GODaUDWuT2l9hP4H/UHja3YM3kwjI28rBP+RPWz2W4wVDa0FqQG6bS6R7iUxX8IYye5j 67ZrkYIwKkklhyu/EWsR9K3jyrSmBuh9505buprxfkGSavsI6HNR6AQx6lrXd9KPl+rk OmEkfYraaiHnNk8jw824uPfrjGAp5kxdeN6TPnyqK6IdWvBfxatAPpx02vLpgoKu3Gff 7tceowYMHJBcS2lKpOD5I7W6ghETXM9lNldsL6YmcNnGGtjk/alnZqaJJnpJ7YUlP88p P7pQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kloenk.de header.s=mail header.b=cGvzu0hp; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=kloenk.de Return-Path: Received: from snail.vger.email (snail.vger.email. [23.128.96.37]) by mx.google.com with ESMTPS id d3-20020a170902f14300b001cc330e48e5si1272098plb.103.2023.11.03.03.19.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Nov 2023 03:19:58 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) client-ip=23.128.96.37; Authentication-Results: mx.google.com; dkim=pass header.i=@kloenk.de header.s=mail header.b=cGvzu0hp; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=kloenk.de Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id 47C73837B2F6; Fri, 3 Nov 2023 03:19:57 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1347822AbjKCKT4 (ORCPT + 99 others); Fri, 3 Nov 2023 06:19:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42790 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1347710AbjKCKTy (ORCPT ); Fri, 3 Nov 2023 06:19:54 -0400 X-Greylist: delayed 499 seconds by postgrey-1.37 at lindbergh.monkeyblade.net; Fri, 03 Nov 2023 03:19:47 PDT Received: from gimli.kloenk.de (gimli.kloenk.de [49.12.72.200]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3EBCA13E; Fri, 3 Nov 2023 03:19:47 -0700 (PDT) From: Finn Behrens DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kloenk.de; s=mail; t=1699006284; bh=uFm9yTM2gNBR2nhs8DI+yEFaDN8T7d1KpWt/J5S5IsY=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=cGvzu0hphgDT6RAtZ8NA5i5tRw4xxFLqZ/TuW8L0zuhy0d+9jKPmzBYlenR6eHCwl Sv1bcfTkrVfZpXcFJyUlI6o7aQdJxhEC15cakjhCCfA/VXuuzFyK5RIEhpb+FkmxzE XiYUTLxZMb084mZkRPDAvn3ypBQefW2u90F/ZkfM= To: Alice Ryhl Cc: Greg Kroah-Hartman , =?utf-8?b?QXJ2ZSBIasO4bm5ldsOlZw==?= , Todd Kjos , Martijn Coenen , Joel Fernandes , Christian Brauner , Carlos Llamas , Suren Baghdasaryan , Miguel Ojeda , Alex Gaynor , Wedson Almeida Filho , linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Matt Gilbride , Jeffrey Vander Stoep , Matthew Maurer Subject: Re: [PATCH RFC 02/20] rust_binder: add binderfs support to Rust binder Date: Fri, 03 Nov 2023 11:11:22 +0100 Message-ID: In-Reply-To: <20231101-rust-binder-v1-2-08ba9197f637@google.com> References: <20231101-rust-binder-v1-0-08ba9197f637@google.com> <20231101-rust-binder-v1-2-08ba9197f637@google.com> MIME-Version: 1.0 Content-Type: text/plain Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, SPF_HELO_PASS,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Fri, 03 Nov 2023 03:19:57 -0700 (PDT) On 1 Nov 2023, at 19:01, Alice Ryhl wrote: > Add support for accessing the Rust binder driver via binderfs. The > actual binderfs implementation is done entirely in C, and the > `rust_binderfs.c` file is a modified version of `binderfs.c` that is > adjusted to call into the Rust binder driver rather than the C driver. > > We have left the binderfs filesystem component in C. Rewriting it in > Rust would be a large amount of work and requires a lot of bindings to > the file system interfaces. Binderfs has not historically had the same > challenges with security and complexity, so rewriting Binderfs seems to= > have lower value than the rest of Binder. > > We also add code on the Rust side for binderfs to call into. Most of > this is left as stub implementation, with the exception of closing the > file descriptor and the BINDER_VERSION ioctl. > > Co-developed-by: Wedson Almeida Filho > Signed-off-by: Wedson Almeida Filho > Signed-off-by: Alice Ryhl > --- > drivers/android/Kconfig | 24 ++ > drivers/android/Makefile | 1 + > drivers/android/context.rs | 144 +++++++ > drivers/android/defs.rs | 39 ++ > drivers/android/process.rs | 251 ++++++++++++ > drivers/android/rust_binder.rs | 196 ++++++++- > drivers/android/rust_binderfs.c | 866 ++++++++++++++++++++++++++++++++= ++++++++ > include/linux/rust_binder.h | 16 + > include/uapi/linux/magic.h | 1 + > rust/bindings/bindings_helper.h | 2 + > rust/kernel/lib.rs | 7 + > scripts/Makefile.build | 2 +- > 12 files changed, 1547 insertions(+), 2 deletions(-) > > diff --git a/drivers/android/Kconfig b/drivers/android/Kconfig > index fcfd25c9a016..82ed6ddabe1a 100644 > --- a/drivers/android/Kconfig > +++ b/drivers/android/Kconfig > diff --git a/drivers/android/Makefile b/drivers/android/Makefile > index 6348f75832ca..5c819011aa77 100644 > --- a/drivers/android/Makefile > +++ b/drivers/android/Makefile > diff --git a/drivers/android/context.rs b/drivers/android/context.rs > new file mode 100644 > index 000000000000..630cb575d3ac > --- /dev/null > +++ b/drivers/android/context.rs > diff --git a/drivers/android/defs.rs b/drivers/android/defs.rs > new file mode 100644 > index 000000000000..8fdcb856ccad > --- /dev/null > +++ b/drivers/android/defs.rs > @@ -0,0 +1,39 @@ > +// SPDX-License-Identifier: GPL-2.0 > + > +use core::ops::{Deref, DerefMut}; > +use kernel::{ > + bindings, > + io_buffer::{ReadableFromBytes, WritableToBytes}, > +}; > + > +macro_rules! decl_wrapper { > + ($newname:ident, $wrapped:ty) =3D> { > + #[derive(Copy, Clone, Default)] > + #[repr(transparent)] > + pub(crate) struct $newname($wrapped); > + // SAFETY: This macro is only used with types where this is ok= =2E Would it make sense so also annotade this safety requirement on the macro= itself? It is only file private, but could help not overlook it, when using for s= omething new in the same file. > + unsafe impl ReadableFromBytes for $newname {} > + unsafe impl WritableToBytes for $newname {} > + impl Deref for $newname { > + type Target =3D $wrapped; > + fn deref(&self) -> &Self::Target { > + &self.0 > + } > + } > + impl DerefMut for $newname { > + fn deref_mut(&mut self) -> &mut Self::Target { > + &mut self.0 > + } > + } > + }; > +} > + > +decl_wrapper!(BinderVersion, bindings::binder_version); > + > +impl BinderVersion { > + pub(crate) fn current() -> Self { > + Self(bindings::binder_version { > + protocol_version: bindings::BINDER_CURRENT_PROTOCOL_VERSIO= N as _, > + }) > + } > +} > diff --git a/drivers/android/process.rs b/drivers/android/process.rs > new file mode 100644 > index 000000000000..2f16e4cedbf1 > --- /dev/null > +++ b/drivers/android/process.rs > diff --git a/drivers/android/rust_binder.rs b/drivers/android/rust_bind= er.rs > index 4b3d6676a9cf..6de2f40846fb 100644 > --- a/drivers/android/rust_binder.rs > +++ b/drivers/android/rust_binder.rs > diff --git a/drivers/android/rust_binderfs.c b/drivers/android/rust_bin= derfs.c > new file mode 100644 > index 000000000000..2c011e26752c > --- /dev/null > +++ b/drivers/android/rust_binderfs.c > diff --git a/include/uapi/linux/magic.h b/include/uapi/linux/magic.h > index 6325d1d0e90f..e5a20c1498af 100644 > --- a/include/uapi/linux/magic.h > +++ b/include/uapi/linux/magic.h > diff --git a/rust/bindings/bindings_helper.h b/rust/bindings/bindings_h= elper.h > index 00a66666f00a..ffeea312f2fd 100644 > --- a/rust/bindings/bindings_helper.h > +++ b/rust/bindings/bindings_helper.h > diff --git a/rust/kernel/lib.rs b/rust/kernel/lib.rs > index 435d4c2ac5fc..f4d58da9202e 100644 > --- a/rust/kernel/lib.rs > +++ b/rust/kernel/lib.rs > diff --git a/scripts/Makefile.build b/scripts/Makefile.build > index da37bfa97211..f78d2e75a795 100644 > --- a/scripts/Makefile.build > +++ b/scripts/Makefile.build > -- = > 2.42.0.820.g83a721a137-goog