Message ID | 20211028094724.59043-3-lmb@cloudflare.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 3871cb8cf741dcd8ebaec4f960be9479da2f176b |
Delegated to: | BPF |
Headers | show |
Series | Support RENAME_EXCHANGE on bpffs | expand |
On Thu, 28 Oct 2021 at 11:48, Lorenz Bauer <lmb@cloudflare.com> wrote: > > Allow atomic exchange via RENAME_EXCHANGE when using simple_rename. > This affects binderfs, ramfs, hubetlbfs and bpffs. Ramfs and hugetlbfs are generic enough; those seem safe. Binderfs: I have no idea what this does; binderfs_rename() should probably error out on RENAME_EXCHANGE for now, or an explicit ack from the maintainers. Bpffs is your baby... Thanks, Miklos
On 11/2/21 10:25 AM, Miklos Szeredi wrote: > On Thu, 28 Oct 2021 at 11:48, Lorenz Bauer <lmb@cloudflare.com> wrote: >> >> Allow atomic exchange via RENAME_EXCHANGE when using simple_rename. >> This affects binderfs, ramfs, hubetlbfs and bpffs. > > Ramfs and hugetlbfs are generic enough; those seem safe. > > Binderfs: I have no idea what this does; binderfs_rename() should > probably error out on RENAME_EXCHANGE for now, or an explicit ack from > the maintainers. Thanks for the review, Miklos! Adding Christian to Cc wrt binderfs ... full context for all patches: https://lore.kernel.org/bpf/20211028094724.59043-1-lmb@cloudflare.com/ > Bpffs is your baby... > > Thanks, > Miklos >
On Tue, Nov 02, 2021 at 11:11:02AM +0100, Daniel Borkmann wrote: > On 11/2/21 10:25 AM, Miklos Szeredi wrote: > > On Thu, 28 Oct 2021 at 11:48, Lorenz Bauer <lmb@cloudflare.com> wrote: > > > > > > Allow atomic exchange via RENAME_EXCHANGE when using simple_rename. > > > This affects binderfs, ramfs, hubetlbfs and bpffs. > > > > Ramfs and hugetlbfs are generic enough; those seem safe. > > > > Binderfs: I have no idea what this does; binderfs_rename() should Fwiw, allows dynamic creation and removal of Android binder ipc devices. Each mount is a separate instance and it's mountable inside unprivileged containers. Since Android 12 default how binder devices are managed. Also makes it possibe to run Android in unprivileged containers. > > probably error out on RENAME_EXCHANGE for now, or an explicit ack from > > the maintainers. > > Thanks for the review, Miklos! Adding Christian to Cc wrt binderfs ... full context > for all patches: https://lore.kernel.org/bpf/20211028094724.59043-1-lmb@cloudflare.com/ Yep, I saw that. Seems good. > probably error out on RENAME_EXCHANGE for now, or an explicit ack from > the maintainers. I don't think there is any issue in allowing binderfs to support this. Binderfs files are always device nodes. Allowing them to be atomically renamed shouldn't be a problem. So: Acked-by: Christian Brauner <christian.brauner@ubuntu.com> Christian
diff --git a/fs/libfs.c b/fs/libfs.c index 1cf144dc9ed2..ba7438ab9371 100644 --- a/fs/libfs.c +++ b/fs/libfs.c @@ -479,9 +479,12 @@ int simple_rename(struct user_namespace *mnt_userns, struct inode *old_dir, struct inode *inode = d_inode(old_dentry); int they_are_dirs = d_is_dir(old_dentry); - if (flags & ~RENAME_NOREPLACE) + if (flags & ~(RENAME_NOREPLACE | RENAME_EXCHANGE)) return -EINVAL; + if (flags & RENAME_EXCHANGE) + return simple_rename_exchange(old_dir, old_dentry, new_dir, new_dentry); + if (!simple_empty(new_dentry)) return -ENOTEMPTY;
Allow atomic exchange via RENAME_EXCHANGE when using simple_rename. This affects binderfs, ramfs, hubetlbfs and bpffs. Signed-off-by: Lorenz Bauer <lmb@cloudflare.com> --- fs/libfs.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)