* [PATCH v1 1/2] Documentation/filesystems: add binderfs @ 2019-01-11 13:40 Christian Brauner 2019-01-11 13:41 ` [PATCH v1 2/2] samples: add binderfs sample program Christian Brauner 2019-01-15 0:24 ` [PATCH v1 1/2] Documentation/filesystems: add binderfs Jonathan Corbet 0 siblings, 2 replies; 7+ messages in thread From: Christian Brauner @ 2019-01-11 13:40 UTC (permalink / raw) To: corbet, linux-doc, linux-kernel; +Cc: Christian Brauner This documents the Android binderfs filesystem used to dynamically add and remove binder devices that are private to each instance. Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com> --- /* Changelog */ v1: - switch from *.txt to *.rst format --- Documentation/filesystems/binderfs.rst | 70 ++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 Documentation/filesystems/binderfs.rst diff --git a/Documentation/filesystems/binderfs.rst b/Documentation/filesystems/binderfs.rst new file mode 100644 index 000000000000..74a744b42db7 --- /dev/null +++ b/Documentation/filesystems/binderfs.rst @@ -0,0 +1,70 @@ +.. SPDX-License-Identifier: GPL-2.0 + +The Android binderfs Filesystem +=============================== + +Android binderfs is a filesystem for the Android binder IPC mechanism. It +allows to dynamically add and remove binder devices at runtime. Binder devices +located in a new binderfs instance are independent of binder devices located in +other binderfs instances. Mounting a new binderfs instance makes it possible +to get a set of private binder devices. + +Mounting binderfs +----------------- + +Android binderfs can be mounted with: + +:: + + mkdir /dev/binderfs + mount -t binder binder /dev/binderfs + +at which point a new instance of binderfs will show up at ``/dev/binderfs``. +In a fresh instance of binderfs no binder devices will be present. There will +only be a ``binder-control`` device which serves as the request handler for +binderfs. Mounting another binderfs instance at a different location will +create a new and separate instance from all other binderfs mounts. This is +identical to the behavior of e.g. ``devpts`` and ``tmpfs``. The Android +binderfs filesystem can be mounted in user namespaces. + +Options +------- +max + binderfs instances can be mounted with a limit on the number of binder + devices that can be allocated. The ``max=<count>`` mount option serves as + a per-instance limit. If ``max=<count>`` is set then only ``<count>`` number + of binder devices can be allocated in this binderfs instance. + +Allocating binder Devices +------------------------- + +.. _ioctl: http://man7.org/linux/man-pages/man2/ioctl.2.html + +To allocate a new binder device in a binderfs instance a request needs to be +sent through the ``binder-control`` device node. A request is sent in the form +of an `ioctl() <ioctl_>`_. + +What a program needs to do is to open the ``binder-control`` device node and +send a ``BINDER_CTL_ADD`` request to the kernel. Users of binderfs need to +tell the kernel which name the new binder device should get. By default a name +can only contain up to ``BINDERFS_MAX_NAME`` chars including the terminating +zero byte. + +Once the request is made via an `ioctl() <ioctl_>`_ passing a ``struct +binder_device`` with the name to the kernel it will allocate a new binder +device and return the major and minor number of the new device in the struct +(This is necessary because binderfs allocates a major device number +dynamically.). After the `ioctl() <ioctl_>`_ returns there will be a new +binder device located under /dev/binderfs with the chosen name. + +Deleting binder Devices +----------------------- + +.. _unlink: http://man7.org/linux/man-pages/man2/unlink.2.html +.. _rm: http://man7.org/linux/man-pages/man1/rm.1.html + +Binderfs binder devices can be deleted via `unlink() <unlink_>`_. This means +that the `rm() <rm_>`_ tool can be used to delete them. Note that the +``binder-control`` device cannot be deleted since this would make the binderfs +instance unuseable. The ``binder-control`` device will be deleted when the +binderfs instance is unmounted and all references to it have been dropped. -- 2.19.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v1 2/2] samples: add binderfs sample program 2019-01-11 13:40 [PATCH v1 1/2] Documentation/filesystems: add binderfs Christian Brauner @ 2019-01-11 13:41 ` Christian Brauner 2019-01-15 0:24 ` [PATCH v1 1/2] Documentation/filesystems: add binderfs Jonathan Corbet 1 sibling, 0 replies; 7+ messages in thread From: Christian Brauner @ 2019-01-11 13:41 UTC (permalink / raw) To: corbet, linux-doc, linux-kernel; +Cc: Christian Brauner This adds a simple sample program mounting binderfs and adding, then removing a binder device. Hopefully, it will be helpful to users who want to know how binderfs is supposed to be used. Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com> --- /* Changelog */ v1: - patch introduced v0: - patch not present --- samples/Kconfig | 7 +++ samples/Makefile | 2 +- samples/binderfs/Makefile | 1 + samples/binderfs/binderfs_example.c | 83 +++++++++++++++++++++++++++++ 4 files changed, 92 insertions(+), 1 deletion(-) create mode 100644 samples/binderfs/Makefile create mode 100644 samples/binderfs/binderfs_example.c diff --git a/samples/Kconfig b/samples/Kconfig index ad1ec7016d4c..d19754ccad08 100644 --- a/samples/Kconfig +++ b/samples/Kconfig @@ -147,6 +147,13 @@ config SAMPLE_VFIO_MDEV_MBOCHS Specifically it does *not* include any legacy vga stuff. Device looks a lot like "qemu -device secondary-vga". +config SAMPLE_ANDROID_BINDERFS + bool "Build Android binderfs example" + depends on CONFIG_ANDROID_BINDERFS + help + Builds a sample program to illustrate the use of the Android binderfs + filesystem. + config SAMPLE_STATX bool "Build example extended-stat using code" depends on BROKEN diff --git a/samples/Makefile b/samples/Makefile index bd601c038b86..b1142a958811 100644 --- a/samples/Makefile +++ b/samples/Makefile @@ -3,4 +3,4 @@ obj-$(CONFIG_SAMPLES) += kobject/ kprobes/ trace_events/ livepatch/ \ hw_breakpoint/ kfifo/ kdb/ hidraw/ rpmsg/ seccomp/ \ configfs/ connector/ v4l/ trace_printk/ \ - vfio-mdev/ statx/ qmi/ + vfio-mdev/ statx/ qmi/ binderfs/ diff --git a/samples/binderfs/Makefile b/samples/binderfs/Makefile new file mode 100644 index 000000000000..01ca9f2529a7 --- /dev/null +++ b/samples/binderfs/Makefile @@ -0,0 +1 @@ +obj-$(CONFIG_SAMPLE_ANDROID_BINDERFS) += binderfs_example.o diff --git a/samples/binderfs/binderfs_example.c b/samples/binderfs/binderfs_example.c new file mode 100644 index 000000000000..5bbd2ebc0aea --- /dev/null +++ b/samples/binderfs/binderfs_example.c @@ -0,0 +1,83 @@ +// SPDX-License-Identifier: GPL-2.0 + +#define _GNU_SOURCE +#include <errno.h> +#include <fcntl.h> +#include <sched.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <sys/ioctl.h> +#include <sys/mount.h> +#include <sys/stat.h> +#include <sys/types.h> +#include <unistd.h> +#include <linux/android/binder.h> +#include <linux/android/binderfs.h> + +int main(int argc, char *argv[]) +{ + int fd, ret, saved_errno; + size_t len; + struct binderfs_device device = { 0 }; + + ret = unshare(CLONE_NEWNS); + if (ret < 0) { + fprintf(stderr, "%s - Failed to unshare mount namespace\n", + strerror(errno)); + exit(EXIT_FAILURE); + } + + ret = mount(NULL, "/", NULL, MS_REC | MS_PRIVATE, 0); + if (ret < 0) { + fprintf(stderr, "%s - Failed to mount / as private\n", + strerror(errno)); + exit(EXIT_FAILURE); + } + + ret = mkdir("/dev/binderfs", 0755); + if (ret < 0 && errno != EEXIST) { + fprintf(stderr, "%s - Failed to create binderfs mountpoint\n", + strerror(errno)); + exit(EXIT_FAILURE); + } + + ret = mount(NULL, "/dev/binderfs", "binder", 0, 0); + if (ret < 0) { + fprintf(stderr, "%s - Failed to mount binderfs\n", + strerror(errno)); + exit(EXIT_FAILURE); + } + + memcpy(device.name, "my-binder", strlen("my-binder")); + + fd = open("/dev/binderfs/binder-control", O_RDONLY | O_CLOEXEC); + if (fd < 0) { + fprintf(stderr, "%s - Failed to open binder-control device\n", + strerror(errno)); + exit(EXIT_FAILURE); + } + + ret = ioctl(fd, BINDER_CTL_ADD, &device); + saved_errno = errno; + close(fd); + errno = saved_errno; + if (ret < 0) { + fprintf(stderr, "%s - Failed to allocate new binder device\n", + strerror(errno)); + exit(EXIT_FAILURE); + } + + printf("Allocated new binder device with major %d, minor %d, and name %s\n", + device.major, device.minor, device.name); + + ret = unlink("/dev/binderfs/my-binder"); + if (ret < 0) { + fprintf(stderr, "%s - Failed to delete binder device\n", + strerror(errno)); + exit(EXIT_FAILURE); + } + + /* Cleanup happens when the mount namespace dies. */ + exit(EXIT_SUCCESS); +} -- 2.19.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v1 1/2] Documentation/filesystems: add binderfs 2019-01-11 13:40 [PATCH v1 1/2] Documentation/filesystems: add binderfs Christian Brauner 2019-01-11 13:41 ` [PATCH v1 2/2] samples: add binderfs sample program Christian Brauner @ 2019-01-15 0:24 ` Jonathan Corbet 2019-01-15 8:59 ` Christian Brauner 2019-07-02 17:57 ` Matthew Wilcox 1 sibling, 2 replies; 7+ messages in thread From: Jonathan Corbet @ 2019-01-15 0:24 UTC (permalink / raw) To: Christian Brauner; +Cc: linux-doc, linux-kernel On Fri, 11 Jan 2019 14:40:59 +0100 Christian Brauner <christian@brauner.io> wrote: > This documents the Android binderfs filesystem used to dynamically add and > remove binder devices that are private to each instance. > > Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com> Two quick notes: > --- > /* Changelog */ > v1: > - switch from *.txt to *.rst format > --- > Documentation/filesystems/binderfs.rst | 70 ++++++++++++++++++++++++++ > 1 file changed, 70 insertions(+) > create mode 100644 Documentation/filesystems/binderfs.rst You didn't add it to index.rst, so it won't actually become part of the docs build. > diff --git a/Documentation/filesystems/binderfs.rst b/Documentation/filesystems/binderfs.rst > new file mode 100644 > index 000000000000..74a744b42db7 > --- /dev/null > +++ b/Documentation/filesystems/binderfs.rst > @@ -0,0 +1,70 @@ > +.. SPDX-License-Identifier: GPL-2.0 > + > +The Android binderfs Filesystem > +=============================== > + > +Android binderfs is a filesystem for the Android binder IPC mechanism. It > +allows to dynamically add and remove binder devices at runtime. Binder devices > +located in a new binderfs instance are independent of binder devices located in > +other binderfs instances. Mounting a new binderfs instance makes it possible > +to get a set of private binder devices. > + > +Mounting binderfs > +----------------- > + > +Android binderfs can be mounted with: > + > +:: This can be more readably formatted as: Android binderfs can be mounted with:: I've applied the patches, taking the liberty of fixing both of those things up. Thanks! jon ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v1 1/2] Documentation/filesystems: add binderfs 2019-01-15 0:24 ` [PATCH v1 1/2] Documentation/filesystems: add binderfs Jonathan Corbet @ 2019-01-15 8:59 ` Christian Brauner 2019-07-02 17:57 ` Matthew Wilcox 1 sibling, 0 replies; 7+ messages in thread From: Christian Brauner @ 2019-01-15 8:59 UTC (permalink / raw) To: Jonathan Corbet; +Cc: linux-doc, linux-kernel On Mon, Jan 14, 2019 at 05:24:01PM -0700, Jonathan Corbet wrote: > On Fri, 11 Jan 2019 14:40:59 +0100 > Christian Brauner <christian@brauner.io> wrote: > > > This documents the Android binderfs filesystem used to dynamically add and > > remove binder devices that are private to each instance. > > > > Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com> > > Two quick notes: > > > --- > > /* Changelog */ > > v1: > > - switch from *.txt to *.rst format > > --- > > Documentation/filesystems/binderfs.rst | 70 ++++++++++++++++++++++++++ > > 1 file changed, 70 insertions(+) > > create mode 100644 Documentation/filesystems/binderfs.rst > > You didn't add it to index.rst, so it won't actually become part of the > docs build. > > > diff --git a/Documentation/filesystems/binderfs.rst b/Documentation/filesystems/binderfs.rst > > new file mode 100644 > > index 000000000000..74a744b42db7 > > --- /dev/null > > +++ b/Documentation/filesystems/binderfs.rst > > @@ -0,0 +1,70 @@ > > +.. SPDX-License-Identifier: GPL-2.0 > > + > > +The Android binderfs Filesystem > > +=============================== > > + > > +Android binderfs is a filesystem for the Android binder IPC mechanism. It > > +allows to dynamically add and remove binder devices at runtime. Binder devices > > +located in a new binderfs instance are independent of binder devices located in > > +other binderfs instances. Mounting a new binderfs instance makes it possible > > +to get a set of private binder devices. > > + > > +Mounting binderfs > > +----------------- > > + > > +Android binderfs can be mounted with: > > + > > +:: > > This can be more readably formatted as: > > Android binderfs can be mounted with:: > > I've applied the patches, taking the liberty of fixing both of those > things up. Thanks! Thanks Jon! Highly appreciated! Christian ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v1 1/2] Documentation/filesystems: add binderfs 2019-01-15 0:24 ` [PATCH v1 1/2] Documentation/filesystems: add binderfs Jonathan Corbet 2019-01-15 8:59 ` Christian Brauner @ 2019-07-02 17:57 ` Matthew Wilcox 2019-07-02 19:51 ` Christian Brauner 2019-07-08 20:16 ` Jonathan Corbet 1 sibling, 2 replies; 7+ messages in thread From: Matthew Wilcox @ 2019-07-02 17:57 UTC (permalink / raw) To: Jonathan Corbet; +Cc: Christian Brauner, linux-doc, linux-kernel On Mon, Jan 14, 2019 at 05:24:01PM -0700, Jonathan Corbet wrote: > On Fri, 11 Jan 2019 14:40:59 +0100 > Christian Brauner <christian@brauner.io> wrote: > > This documents the Android binderfs filesystem used to dynamically add and > > remove binder devices that are private to each instance. > > You didn't add it to index.rst, so it won't actually become part of the > docs build. I think you added it in the wrong place. From 8167b80c950834da09a9204b6236f238197c197b Mon Sep 17 00:00:00 2001 From: "Matthew Wilcox (Oracle)" <willy@infradead.org> Date: Tue, 2 Jul 2019 13:54:38 -0400 Subject: [PATCH] docs: Move binderfs to admin-guide The documentation is more appropriate for the administrator than for the internal kernel API section it is currently in. Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> --- .../{filesystems => admin-guide}/binderfs.rst | 0 Documentation/admin-guide/index.rst | 1 + Documentation/filesystems/index.rst | 10 ---------- 3 files changed, 1 insertion(+), 10 deletions(-) rename Documentation/{filesystems => admin-guide}/binderfs.rst (100%) diff --git a/Documentation/filesystems/binderfs.rst b/Documentation/admin-guide/binderfs.rst similarity index 100% rename from Documentation/filesystems/binderfs.rst rename to Documentation/admin-guide/binderfs.rst diff --git a/Documentation/admin-guide/index.rst b/Documentation/admin-guide/index.rst index 8001917ee012..24fbe0568eff 100644 --- a/Documentation/admin-guide/index.rst +++ b/Documentation/admin-guide/index.rst @@ -70,6 +70,7 @@ configure specific aspects of kernel behavior to your liking. ras bcache ext4 + binderfs pm/index thunderbolt LSM/index diff --git a/Documentation/filesystems/index.rst b/Documentation/filesystems/index.rst index 1131c34d77f6..970c0a3ec377 100644 --- a/Documentation/filesystems/index.rst +++ b/Documentation/filesystems/index.rst @@ -31,13 +31,3 @@ filesystem implementations. journalling fscrypt - -Filesystem-specific documentation -================================= - -Documentation for individual filesystem types can be found here. - -.. toctree:: - :maxdepth: 2 - - binderfs.rst -- 2.20.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v1 1/2] Documentation/filesystems: add binderfs 2019-07-02 17:57 ` Matthew Wilcox @ 2019-07-02 19:51 ` Christian Brauner 2019-07-08 20:16 ` Jonathan Corbet 1 sibling, 0 replies; 7+ messages in thread From: Christian Brauner @ 2019-07-02 19:51 UTC (permalink / raw) To: Matthew Wilcox; +Cc: Jonathan Corbet, linux-doc, linux-kernel On Tue, Jul 02, 2019 at 10:57:29AM -0700, Matthew Wilcox wrote: > On Mon, Jan 14, 2019 at 05:24:01PM -0700, Jonathan Corbet wrote: > > On Fri, 11 Jan 2019 14:40:59 +0100 > > Christian Brauner <christian@brauner.io> wrote: > > > This documents the Android binderfs filesystem used to dynamically add and > > > remove binder devices that are private to each instance. > > > > You didn't add it to index.rst, so it won't actually become part of the > > docs build. > > I think you added it in the wrong place. > > From 8167b80c950834da09a9204b6236f238197c197b Mon Sep 17 00:00:00 2001 > From: "Matthew Wilcox (Oracle)" <willy@infradead.org> > Date: Tue, 2 Jul 2019 13:54:38 -0400 > Subject: [PATCH] docs: Move binderfs to admin-guide > > The documentation is more appropriate for the administrator than for > the internal kernel API section it is currently in. > > Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Don't feel very strong about where this ends up. :) Acked-by: Christian Brauner <christian@brauner.io> > --- > .../{filesystems => admin-guide}/binderfs.rst | 0 > Documentation/admin-guide/index.rst | 1 + > Documentation/filesystems/index.rst | 10 ---------- > 3 files changed, 1 insertion(+), 10 deletions(-) > rename Documentation/{filesystems => admin-guide}/binderfs.rst (100%) > > diff --git a/Documentation/filesystems/binderfs.rst b/Documentation/admin-guide/binderfs.rst > similarity index 100% > rename from Documentation/filesystems/binderfs.rst > rename to Documentation/admin-guide/binderfs.rst > diff --git a/Documentation/admin-guide/index.rst b/Documentation/admin-guide/index.rst > index 8001917ee012..24fbe0568eff 100644 > --- a/Documentation/admin-guide/index.rst > +++ b/Documentation/admin-guide/index.rst > @@ -70,6 +70,7 @@ configure specific aspects of kernel behavior to your liking. > ras > bcache > ext4 > + binderfs > pm/index > thunderbolt > LSM/index > diff --git a/Documentation/filesystems/index.rst b/Documentation/filesystems/index.rst > index 1131c34d77f6..970c0a3ec377 100644 > --- a/Documentation/filesystems/index.rst > +++ b/Documentation/filesystems/index.rst > @@ -31,13 +31,3 @@ filesystem implementations. > > journalling > fscrypt > - > -Filesystem-specific documentation > -================================= > - > -Documentation for individual filesystem types can be found here. > - > -.. toctree:: > - :maxdepth: 2 > - > - binderfs.rst > -- > 2.20.1 > ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v1 1/2] Documentation/filesystems: add binderfs 2019-07-02 17:57 ` Matthew Wilcox 2019-07-02 19:51 ` Christian Brauner @ 2019-07-08 20:16 ` Jonathan Corbet 1 sibling, 0 replies; 7+ messages in thread From: Jonathan Corbet @ 2019-07-08 20:16 UTC (permalink / raw) To: Matthew Wilcox; +Cc: Christian Brauner, linux-doc, linux-kernel On Tue, 2 Jul 2019 10:57:29 -0700 Matthew Wilcox <willy@infradead.org> wrote: > I think you added it in the wrong place. > > From 8167b80c950834da09a9204b6236f238197c197b Mon Sep 17 00:00:00 2001 > From: "Matthew Wilcox (Oracle)" <willy@infradead.org> > Date: Tue, 2 Jul 2019 13:54:38 -0400 > Subject: [PATCH] docs: Move binderfs to admin-guide > > The documentation is more appropriate for the administrator than for > the internal kernel API section it is currently in. > > Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Fine...applied... jon ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2019-07-08 20:16 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2019-01-11 13:40 [PATCH v1 1/2] Documentation/filesystems: add binderfs Christian Brauner 2019-01-11 13:41 ` [PATCH v1 2/2] samples: add binderfs sample program Christian Brauner 2019-01-15 0:24 ` [PATCH v1 1/2] Documentation/filesystems: add binderfs Jonathan Corbet 2019-01-15 8:59 ` Christian Brauner 2019-07-02 17:57 ` Matthew Wilcox 2019-07-02 19:51 ` Christian Brauner 2019-07-08 20:16 ` Jonathan Corbet
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.