From patchwork Mon Jan 21 10:48:02 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christian Brauner X-Patchwork-Id: 10773569 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 3A4F391E for ; Mon, 21 Jan 2019 10:49:55 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 298E0298E3 for ; Mon, 21 Jan 2019 10:49:55 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 1C7FE298F2; Mon, 21 Jan 2019 10:49:55 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C118F298E3 for ; Mon, 21 Jan 2019 10:49:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727743AbfAUKty (ORCPT ); Mon, 21 Jan 2019 05:49:54 -0500 Received: from mail-ed1-f66.google.com ([209.85.208.66]:46298 "EHLO mail-ed1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727525AbfAUKtw (ORCPT ); Mon, 21 Jan 2019 05:49:52 -0500 Received: by mail-ed1-f66.google.com with SMTP id o10so16155712edt.13 for ; Mon, 21 Jan 2019 02:49:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=brauner.io; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=igmVOJcPYkd/rUwG1V9gt69OEbVreyOqKw/vYFJWhM8=; b=VgQV/Z5MK3uo5d/68ek1XDsEzmn3qIF7RW9Q7iOQLt/1n/DRvPPdF+QNZizGQzRpqx F/YGsu6zapunS/t5d2XWAv1MSkprXmf+VaZNhmkMSeABL7UZjPD1xsndi1STYi1IeoML dnMK/dDeirpMlI8BBS/akO5qdfi/dy/XJ81+NbmwZmbqM1QylYnvlPLaKl5clM7JNi/p U5x4Kj+Of/hR/ubTpyeOnWo6cB46/Mz6YaRbyi9fiG/ScQOhoiEjTk30nDXoTe4JBAOm gYWNWuwimPFu9spN6iosAnSWlYtlwWUYIE4PskF5rqDTaK7GPN2KDNDvMGUp/7N2plUY LneQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=igmVOJcPYkd/rUwG1V9gt69OEbVreyOqKw/vYFJWhM8=; b=k3imEooAQRVgOOXBQbcQ5lphItSj4ACLl2xVNYi1q8d2tIUgoSZTC+ToTSviAEWRaF GtRUem5yXAApGDGufpVrKDX+6PQo6Oe78Vy6w0zhyt7GYXNaGE18aVnWxNhCMtBqt3+k v09ZFY15KufoJQj9Tw1u4QAUvxSxvbMEGfjcchQNCYnUKcJURuqRqT8L5nBx3CeIBgPI xZxK4TgXYbdRhfdNu5qGjHjc57kVCVcbXN9iI76iDUe+xi8qP1vJDmAXMsv1JlYSXD3y S3QCYoJ9P0zep98SyzfQzatlQvrrx+wxF6HINJlaCwslht+0sRkYOba0OttLqUcfHwk9 uBsA== X-Gm-Message-State: AJcUukeONVJZt/H5iIIGhpiUxtH7Xlnf+kZI0gUAmLUQBuAOJ6YTgI6z SbP5Qvsl3pueTXOxJhCS2eQ/IQ== X-Google-Smtp-Source: ALg8bN4juuojcH2Ayv5NjUvkY1P4VFJovVDtV3V1AZ5MBBtuGfW8NKQQAqjJleDRaLPkJD647MPXUw== X-Received: by 2002:a50:cc04:: with SMTP id m4mr26895087edi.171.1548067791176; Mon, 21 Jan 2019 02:49:51 -0800 (PST) Received: from localhost.localdomain ([2a02:8109:b6bf:f9e4:9473:6b39:afaf:14d4]) by smtp.gmail.com with ESMTPSA id e35sm9006196eda.13.2019.01.21.02.49.50 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 21 Jan 2019 02:49:50 -0800 (PST) From: Christian Brauner To: gregkh@linuxfoundation.org, devel@driverdev.osuosl.org, linux-fsdevel@vger.kernel.org, viro@zeniv.linux.org.uk, dhowells@redhat.com Cc: tkjos@google.com, Christian Brauner Subject: [PATCH v1 1/7] binderfs: remove outdated comment Date: Mon, 21 Jan 2019 11:48:02 +0100 Message-Id: <20190121104808.24108-2-christian@brauner.io> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190121104808.24108-1-christian@brauner.io> References: <20190121104808.24108-1-christian@brauner.io> MIME-Version: 1.0 X-Patchwork-Bot: notify Sender: linux-fsdevel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The comment stems from an early version of that patchset and is just confusing now. Cc: Al Viro Signed-off-by: Christian Brauner --- /* Changelog */ v1: - patch unchanged --- drivers/android/binderfs.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/drivers/android/binderfs.c b/drivers/android/binderfs.c index e4ff4c3fa371..898d847f8505 100644 --- a/drivers/android/binderfs.c +++ b/drivers/android/binderfs.c @@ -373,10 +373,6 @@ static int binderfs_rename(struct inode *old_dir, struct dentry *old_dentry, static int binderfs_unlink(struct inode *dir, struct dentry *dentry) { - /* - * The control dentry is only ever touched during mount so checking it - * here should not require us to take lock. - */ if (BINDERFS_I(dir)->control_dentry == dentry) return -EPERM; From patchwork Mon Jan 21 10:48:03 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christian Brauner X-Patchwork-Id: 10773573 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 28F7C1823 for ; Mon, 21 Jan 2019 10:49:58 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1A204298E3 for ; Mon, 21 Jan 2019 10:49:58 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0E706298F2; Mon, 21 Jan 2019 10:49:58 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 05CD4298E3 for ; Mon, 21 Jan 2019 10:49:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727798AbfAUKty (ORCPT ); Mon, 21 Jan 2019 05:49:54 -0500 Received: from mail-ed1-f68.google.com ([209.85.208.68]:46301 "EHLO mail-ed1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727440AbfAUKty (ORCPT ); Mon, 21 Jan 2019 05:49:54 -0500 Received: by mail-ed1-f68.google.com with SMTP id o10so16155763edt.13 for ; Mon, 21 Jan 2019 02:49:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=brauner.io; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=bzZVN7sTHVfOHilIi7xL4TX5exwNMtKBHZCmZZlepxc=; b=AGTdGYyme/MfZsgRmUJN/z4UcTKKLT36hd2kFPNcB3Tcy2TABa9lj7+gh0ryKuZFk4 Jmvu3r24r02MOArnWKwVAONPhnvYonsXEu5BeJqVNZHGFZLgqqXAKbEuY0tIW+YP4xxO A5+6m9IFSr+hvNpWTLEp2tLyFIC79qRwi8kAO2PHRa491VHOQwykUi88rn/IEstEnPxN MO8DrvSxnqBElyA+s9PnxSQksAmkF6EbEhjXZ8t+ZQYlqZKFxwJKgK8q1wPucAJET0qK 70k0jlwtrd+KZPFaNnITnWgbisVmodVxR1CbQ+MoV9b2OE9im3uJXEgsMR8RjURz/9eY epjw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=bzZVN7sTHVfOHilIi7xL4TX5exwNMtKBHZCmZZlepxc=; b=Gh9oNQo/DxxIeUW7lPhhc1c9EygNaOyV4U1m9boFVvKkFbjBOoeF5cKbVyixA7/Qdz /d0kB0g/0jIkF9I27/xOLvuOKHG4LLvjefl+0kdYMqOka6MSCs00EoUmyWthkjgcdFSM /MXzoi2tT6N6D28UhkHWdVjpuI2B1fSFI8M7CPq4ikBAnFGFUKFinU41Nz2C3r5fD0Nu M5rpOG/4gA3l9wi8ggbcODXPiHrHuLMS1eI03bP2SOh65+CKRHO1JybVuY/z/LnoOMOu qOUlKlSU17NhLxFDhL9npDtM4Qh9aTyoxDiAy1zIhQmslcDvAPZ0zIJiPhJfD8TCFFuA rkSQ== X-Gm-Message-State: AJcUukclQLz5wrTB42jDiprlDticBqDhfaq1M1wP/0/ZjHSQ+MyD61vk NtuY+pHu0uLqhREtfmtEIIaWzg== X-Google-Smtp-Source: ALg8bN6vIpavcBKfWxrwXmo+cIy8zEGqfRJWg4J+ATvG4QkskBgnYOcwioj+pbqXRbr2BmxmPcIRvA== X-Received: by 2002:a50:9fe3:: with SMTP id c90mr3513594edf.163.1548067792456; Mon, 21 Jan 2019 02:49:52 -0800 (PST) Received: from localhost.localdomain ([2a02:8109:b6bf:f9e4:9473:6b39:afaf:14d4]) by smtp.gmail.com with ESMTPSA id e35sm9006196eda.13.2019.01.21.02.49.51 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 21 Jan 2019 02:49:51 -0800 (PST) From: Christian Brauner To: gregkh@linuxfoundation.org, devel@driverdev.osuosl.org, linux-fsdevel@vger.kernel.org, viro@zeniv.linux.org.uk, dhowells@redhat.com Cc: tkjos@google.com, Christian Brauner Subject: [PATCH v1 2/7] binderfs: prevent renaming the control dentry Date: Mon, 21 Jan 2019 11:48:03 +0100 Message-Id: <20190121104808.24108-3-christian@brauner.io> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190121104808.24108-1-christian@brauner.io> References: <20190121104808.24108-1-christian@brauner.io> MIME-Version: 1.0 X-Patchwork-Bot: notify Sender: linux-fsdevel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP - make binderfs control dentry immutable: We don't allow to unlink it since it is crucial for binderfs to be useable but if we allow to rename it we make the unlink trivial to bypass. So prevent renaming too and simply treat the control dentry as immutable. - add is_binderfs_control_device() helper: Take the opportunity and turn the check for the control dentry into a separate helper is_binderfs_control_device() since it's now used in two places. - simplify binderfs_rename(): Instead of hand-rolling our custom version of simple_rename() just dumb the whole function down to first check whether we're trying to rename the control dentry. If we do EPERM the caller and if not call simple_rename(). Suggested-by: Al Viro Signed-off-by: Christian Brauner --- /* Changelog */ v1: - simplify is_binderfs_control_device() to only take a dentry argument instead of taking an unnecessary detour through the inode. --- drivers/android/binderfs.c | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/drivers/android/binderfs.c b/drivers/android/binderfs.c index 898d847f8505..e73f9dbee099 100644 --- a/drivers/android/binderfs.c +++ b/drivers/android/binderfs.c @@ -346,34 +346,26 @@ static const struct super_operations binderfs_super_ops = { .statfs = simple_statfs, }; +static inline bool is_binderfs_control_device(const struct dentry *dentry) +{ + struct binderfs_info *info = dentry->d_sb->s_fs_info; + return info->control_dentry == dentry; +} + static int binderfs_rename(struct inode *old_dir, struct dentry *old_dentry, struct inode *new_dir, struct dentry *new_dentry, unsigned int flags) { - struct inode *inode = d_inode(old_dentry); - - /* binderfs doesn't support directories. */ - if (d_is_dir(old_dentry)) + if (is_binderfs_control_device(old_dentry) || + is_binderfs_control_device(new_dentry)) return -EPERM; - if (flags & ~RENAME_NOREPLACE) - return -EINVAL; - - if (!simple_empty(new_dentry)) - return -ENOTEMPTY; - - if (d_really_is_positive(new_dentry)) - simple_unlink(new_dir, new_dentry); - - old_dir->i_ctime = old_dir->i_mtime = new_dir->i_ctime = - new_dir->i_mtime = inode->i_ctime = current_time(old_dir); - - return 0; + return simple_rename(old_dir, old_dentry, new_dir, new_dentry, flags); } static int binderfs_unlink(struct inode *dir, struct dentry *dentry) { - if (BINDERFS_I(dir)->control_dentry == dentry) + if (is_binderfs_control_device(dentry)) return -EPERM; return simple_unlink(dir, dentry); From patchwork Mon Jan 21 10:48:04 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christian Brauner X-Patchwork-Id: 10773571 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 2F4D9139A for ; Mon, 21 Jan 2019 10:49:57 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1E8A3298EA for ; Mon, 21 Jan 2019 10:49:57 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 130F129901; Mon, 21 Jan 2019 10:49:57 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A2628298EA for ; Mon, 21 Jan 2019 10:49:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727827AbfAUKtz (ORCPT ); Mon, 21 Jan 2019 05:49:55 -0500 Received: from mail-ed1-f66.google.com ([209.85.208.66]:38385 "EHLO mail-ed1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727525AbfAUKtz (ORCPT ); Mon, 21 Jan 2019 05:49:55 -0500 Received: by mail-ed1-f66.google.com with SMTP id h50so16202750ede.5 for ; Mon, 21 Jan 2019 02:49:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=brauner.io; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=W043WQStXK5KbWXSBBamW/URLr8YdnqlQMRR5drKHIg=; b=NvYLqOsTBIwOdusKLPmEK8FU08Q/Vjn36u0u0ooAxZmgtKf4O58OvJeii03hTHQiyF 9OfFsdYtVaO5z4LsE5gk9wPUfuAlf29ccu6HHUoNV6RlSK8CAtPOUpn95AEkpY+sMo7w g2XsqTEVA6fFpW7A7LAOJAslO2fXTc6K5B5g9EKyLh2zo6RgxdKkxGafbtTa/pVWtYDZ sxT7H4D653UWub6CxPVHLWlRicRMkk822QiL6iqoDSpV0jBMXRbUh4I0B1W0Q2eJz7aj 7CW8yrXYIrB7yuqTnmXy71zLbCARMyL+qeAkLrZfI64s6TdsClgWyAi6UZlud2/iSGCZ X0Vg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=W043WQStXK5KbWXSBBamW/URLr8YdnqlQMRR5drKHIg=; b=Tsiq0j4AIZOK1ksLNZ5LU0OGu/E8C+agHayYXvWOb/PbxvUaDHEXrVBp8O4rc2pNNY v1DzQur0W+cT/fCPAVoIV9cb+8ATXjTfPS26GpZppTszQlSih4tQBavMIlzrYPowqMfe kA8nzi/lK1kXCAavNgT8wkVz2aIFbJx/f6o5g/WaeaKFPFze0bu0Vb5ag8O3NP242SsT fAlNIztolw6kzFVf+Sl1CRWVYw4XO3KzzRBP1dnsQ5UvHpXnTqXtiM5pU4T8h/n4VvB+ X6qZucHbCayAKGwF/HBZg1RIyijDkygI97UIBhDgic9wkg5kPHbJSD945f6bqsxfiSko bmHA== X-Gm-Message-State: AJcUukf4IDu+fC0J5n02XxUS0Xq5y9wf+67m7WTRFH5xkJyncBfi05R2 9iKzksyIlygVvaLq9C3Ri6bBkA== X-Google-Smtp-Source: ALg8bN67ro5xkxxwSpCmCuwbZZMGrAYvS3v5WauNJRIVsk+/m7NCiwfucAq5ANRE0rEzm212PScfuA== X-Received: by 2002:aa7:dace:: with SMTP id x14mr27379892eds.13.1548067793619; Mon, 21 Jan 2019 02:49:53 -0800 (PST) Received: from localhost.localdomain ([2a02:8109:b6bf:f9e4:9473:6b39:afaf:14d4]) by smtp.gmail.com with ESMTPSA id e35sm9006196eda.13.2019.01.21.02.49.52 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 21 Jan 2019 02:49:53 -0800 (PST) From: Christian Brauner To: gregkh@linuxfoundation.org, devel@driverdev.osuosl.org, linux-fsdevel@vger.kernel.org, viro@zeniv.linux.org.uk, dhowells@redhat.com Cc: tkjos@google.com, Christian Brauner Subject: [PATCH v1 3/7] binderfs: rework binderfs_fill_super() Date: Mon, 21 Jan 2019 11:48:04 +0100 Message-Id: <20190121104808.24108-4-christian@brauner.io> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190121104808.24108-1-christian@brauner.io> References: <20190121104808.24108-1-christian@brauner.io> MIME-Version: 1.0 X-Patchwork-Bot: notify Sender: linux-fsdevel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Al pointed out that on binderfs_fill_super() error deactivate_locked_super() will call binderfs_kill_super() so all of the freeing and putting we currently do in binderfs_fill_super() is unnecessary and buggy. Let's simply return errors and let binderfs_fill_super() take care of cleaning up on error. Suggested-by: Al Viro Signed-off-by: Christian Brauner --- /* Changelog */ v1: - correctly grab and stash a reference to task's ipc_ns to prevent leaks - replace d_alloc_name() + d_lookup() combination with lookup_one_len() - replace kmalloc() + strscpy() with kmemdup() --- drivers/android/binderfs.c | 41 ++++++++++---------------------------- 1 file changed, 11 insertions(+), 30 deletions(-) diff --git a/drivers/android/binderfs.c b/drivers/android/binderfs.c index e73f9dbee099..89a2ee1a02f6 100644 --- a/drivers/android/binderfs.c +++ b/drivers/android/binderfs.c @@ -461,12 +461,9 @@ static const struct inode_operations binderfs_dir_inode_operations = { static int binderfs_fill_super(struct super_block *sb, void *data, int silent) { + int ret; struct binderfs_info *info; - int ret = -ENOMEM; struct inode *inode = NULL; - struct ipc_namespace *ipc_ns = current->nsproxy->ipc_ns; - - get_ipc_ns(ipc_ns); sb->s_blocksize = PAGE_SIZE; sb->s_blocksize_bits = PAGE_SHIFT; @@ -488,15 +485,17 @@ static int binderfs_fill_super(struct super_block *sb, void *data, int silent) sb->s_op = &binderfs_super_ops; sb->s_time_gran = 1; - info = kzalloc(sizeof(struct binderfs_info), GFP_KERNEL); - if (!info) - goto err_without_dentry; + sb->s_fs_info = kzalloc(sizeof(struct binderfs_info), GFP_KERNEL); + if (!sb->s_fs_info) + return -ENOMEM; + info = sb->s_fs_info; + + info->ipc_ns = get_ipc_ns(current->nsproxy->ipc_ns); ret = binderfs_parse_mount_opts(data, &info->mount_opts); if (ret) - goto err_without_dentry; + return ret; - info->ipc_ns = ipc_ns; info->root_gid = make_kgid(sb->s_user_ns, 0); if (!gid_valid(info->root_gid)) info->root_gid = GLOBAL_ROOT_GID; @@ -504,12 +503,9 @@ static int binderfs_fill_super(struct super_block *sb, void *data, int silent) if (!uid_valid(info->root_uid)) info->root_uid = GLOBAL_ROOT_UID; - sb->s_fs_info = info; - - ret = -ENOMEM; inode = new_inode(sb); if (!inode) - goto err_without_dentry; + return -ENOMEM; inode->i_ino = FIRST_INODE; inode->i_fop = &simple_dir_operations; @@ -520,24 +516,9 @@ static int binderfs_fill_super(struct super_block *sb, void *data, int silent) sb->s_root = d_make_root(inode); if (!sb->s_root) - goto err_without_dentry; - - ret = binderfs_binder_ctl_create(sb); - if (ret) - goto err_with_dentry; - - return 0; - -err_with_dentry: - dput(sb->s_root); - sb->s_root = NULL; - -err_without_dentry: - put_ipc_ns(ipc_ns); - iput(inode); - kfree(info); + return -ENOMEM; - return ret; + return binderfs_binder_ctl_create(sb); } static struct dentry *binderfs_mount(struct file_system_type *fs_type, From patchwork Mon Jan 21 10:48:05 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christian Brauner X-Patchwork-Id: 10773575 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id B2D65139A for ; Mon, 21 Jan 2019 10:49:58 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A3FCD298E3 for ; Mon, 21 Jan 2019 10:49:58 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 96624298F2; Mon, 21 Jan 2019 10:49:58 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 274DF298FB for ; Mon, 21 Jan 2019 10:49:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727942AbfAUKt5 (ORCPT ); Mon, 21 Jan 2019 05:49:57 -0500 Received: from mail-ed1-f67.google.com ([209.85.208.67]:41535 "EHLO mail-ed1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727440AbfAUKt4 (ORCPT ); Mon, 21 Jan 2019 05:49:56 -0500 Received: by mail-ed1-f67.google.com with SMTP id a20so16185368edc.8 for ; Mon, 21 Jan 2019 02:49:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=brauner.io; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ZlQDJ+iQAaKeozTMh+I5M2wgg0C3o6EXZHTueSqnRUY=; b=TeQE2kMAd/g2UqaoQktowCagP20Tizh65wVmRfITJQlFoiUZd1i8u2F6GnnD8mwmHE 9erIT3ngTag+01tmOmIM/ZHk+XsDvgQUuiV6Z4E3uahlsN4WdSu/A5US7U0m+i8t5W32 TjqZkk7pTuXSnKWKKiTPDpKB2ED/NeqhgI7lczksaE92j6c1RMhurcYhTbZWr6QnJdtV +0qtHcVXpjP6YQrF6LbKqiwCdqZKnDeC9piPhPRL4rKlc5LeOmAGP9DnEChZq98esxCT yi9Y0/BhKfqKBFfar4yWjHiTUcnUN0UlesEfqDBU/xQU49COQyOoe15K/v4bv28CP0Eb 7O1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ZlQDJ+iQAaKeozTMh+I5M2wgg0C3o6EXZHTueSqnRUY=; b=Jp85x/HcSqZ8y/aSFMH4Mi350e89BrvfBZRIEALfrLL3fzpr/W6I3787eyJfEVhtSC /aG8gCA+euFRCDHQvWVnS7VKgkoUJmDzdtqn8JCzoTD7EB6JGU99isih9ggGu/gYJb+G 7/4urke3XR/Hi/JW1BFPQ+E0ebtYvlr4gBBusxMNhyn2DyW2vlZehE1KWcx/yX5cllrD x1pRC0j8DmiOic81MvISpKhgnrKH1VqsShmLEf/NsHlVpFO+cbZjVS0VJ7/9UUX5IYAc L65fdOxOLcdwnnwHtf4gnVzujblAnfvM5ZhFxm6PNZ/qm8uV2AICdihenKI6fpGQR638 Ib6Q== X-Gm-Message-State: AJcUukeO2u7iaX1tWVVQlHWPvENHE9CFBdxq2R5sXIbMpNzmYSI3DC7e l4eoh1zGxUbN50+ueMKteKeVsQ== X-Google-Smtp-Source: ALg8bN7uEqHEjCPwcGs4KrU32hCgdefNcloNh+8jIU7egcLhnPUoravF+S2c+viyGLPDpIRgqaRK3A== X-Received: by 2002:a50:b68a:: with SMTP id d10mr26712826ede.16.1548067794554; Mon, 21 Jan 2019 02:49:54 -0800 (PST) Received: from localhost.localdomain ([2a02:8109:b6bf:f9e4:9473:6b39:afaf:14d4]) by smtp.gmail.com with ESMTPSA id e35sm9006196eda.13.2019.01.21.02.49.53 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 21 Jan 2019 02:49:54 -0800 (PST) From: Christian Brauner To: gregkh@linuxfoundation.org, devel@driverdev.osuosl.org, linux-fsdevel@vger.kernel.org, viro@zeniv.linux.org.uk, dhowells@redhat.com Cc: tkjos@google.com, Christian Brauner Subject: [PATCH v1 4/7] binderfs: rework binderfs_binder_device_create() Date: Mon, 21 Jan 2019 11:48:05 +0100 Message-Id: <20190121104808.24108-5-christian@brauner.io> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190121104808.24108-1-christian@brauner.io> References: <20190121104808.24108-1-christian@brauner.io> MIME-Version: 1.0 X-Patchwork-Bot: notify Sender: linux-fsdevel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP - switch from d_alloc_name() + d_lookup() to lookup_one_len(): Instead of using d_alloc_name() and then doing a d_lookup() with the allocated dentry to find whether a device with the name we're trying to create already exists switch to using lookup_one_len(). The latter will either return the existing dentry or a new one. - switch from kmalloc() + strscpy() to kmemdup(): Use a more idiomatic way to copy the name for the new dentry that userspace gave us. Suggested-by: Al Viro Signed-off-by: Christian Brauner --- /* Changelog */ v1: - patch introduced --- drivers/android/binderfs.c | 39 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/drivers/android/binderfs.c b/drivers/android/binderfs.c index 89a2ee1a02f6..1e077498a507 100644 --- a/drivers/android/binderfs.c +++ b/drivers/android/binderfs.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -106,7 +107,7 @@ bool is_binderfs_device(const struct inode *inode) * @userp: buffer to copy information about new device for userspace to * @req: struct binderfs_device as copied from userspace * - * This function allocated a new binder_device and reserves a new minor + * This function allocates a new binder_device and reserves a new minor * number for it. * Minor numbers are limited and tracked globally in binderfs_minors. The * function will stash a struct binder_device for the specific binder @@ -122,10 +123,10 @@ static int binderfs_binder_device_create(struct inode *ref_inode, struct binderfs_device *req) { int minor, ret; - struct dentry *dentry, *dup, *root; + struct dentry *dentry, *root; struct binder_device *device; - size_t name_len = BINDERFS_MAX_NAME + 1; char *name = NULL; + size_t name_len; struct inode *inode = NULL; struct super_block *sb = ref_inode->i_sb; struct binderfs_info *info = sb->s_fs_info; @@ -168,12 +169,13 @@ static int binderfs_binder_device_create(struct inode *ref_inode, inode->i_uid = info->root_uid; inode->i_gid = info->root_gid; - name = kmalloc(name_len, GFP_KERNEL); + req->name[BINDERFS_MAX_NAME] = '\0'; /* NUL-terminate */ + name_len = strlen(req->name); + /* Make sure to include terminating NUL byte */ + name = kmemdup(req->name, name_len + 1, GFP_KERNEL); if (!name) goto err; - strscpy(name, req->name, name_len); - device->binderfs_inode = inode; device->context.binder_context_mgr_uid = INVALID_UID; device->context.name = name; @@ -192,24 +194,21 @@ static int binderfs_binder_device_create(struct inode *ref_inode, root = sb->s_root; inode_lock(d_inode(root)); - dentry = d_alloc_name(root, name); - if (!dentry) { + + /* look it up */ + dentry = lookup_one_len(name, root, name_len); + if (IS_ERR(dentry)) { inode_unlock(d_inode(root)); - ret = -ENOMEM; + ret = PTR_ERR(dentry); goto err; } - /* Verify that the name userspace gave us is not already in use. */ - dup = d_lookup(root, &dentry->d_name); - if (dup) { - if (d_really_is_positive(dup)) { - dput(dup); - dput(dentry); - inode_unlock(d_inode(root)); - ret = -EEXIST; - goto err; - } - dput(dup); + if (d_really_is_positive(dentry)) { + /* already exists */ + dput(dentry); + inode_unlock(d_inode(root)); + ret = -EEXIST; + goto err; } inode->i_private = device; From patchwork Mon Jan 21 10:48:06 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christian Brauner X-Patchwork-Id: 10773577 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id F3ECB1823 for ; Mon, 21 Jan 2019 10:49:58 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E30F3298E3 for ; Mon, 21 Jan 2019 10:49:58 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D7A78298F2; Mon, 21 Jan 2019 10:49:58 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 87387298EA for ; Mon, 21 Jan 2019 10:49:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727882AbfAUKt5 (ORCPT ); Mon, 21 Jan 2019 05:49:57 -0500 Received: from mail-ed1-f65.google.com ([209.85.208.65]:39069 "EHLO mail-ed1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727789AbfAUKt5 (ORCPT ); Mon, 21 Jan 2019 05:49:57 -0500 Received: by mail-ed1-f65.google.com with SMTP id b14so16189101edt.6 for ; Mon, 21 Jan 2019 02:49:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=brauner.io; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=k4v5vr414yWiO/IFY4mKJ6U48xTYHvOYPzgmQFy2VCg=; b=HD3jF/+z7BXOJRvSUMFiKp9cBCDYErUdjuGxpcl68TNYjOm05ywvQl4wZQyRpIo8Ao yCSNQzQ3+BiTArUnO/mWct08rUHaLvHOkF8YJEhE8LMtxAbXBwGDBWU5yF34SFToNil+ wB6maVIr4prAMDtbjAg2x/tx7BmidScQm2Cq3DCaBbfGFhbLVIdl91MiAyIe1RailyJP RGcGvBZIgHVy1hTJh37CupZ17xmPqtfg8WwE84qtE+wCWTC1b/i063grGBxkI0EpMpzY oxgjC/ASnUbVuJB/4FZxyC3RwKnc+db5tMezjdqElwj2kBXIR57Ar2tsv9+90edZ5PpJ yqmw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=k4v5vr414yWiO/IFY4mKJ6U48xTYHvOYPzgmQFy2VCg=; b=pzARVl7fR5HzR33sPs8kr6KUv+V3e1EDVO637nCmUWfa4tx0wzvb8JkigL9blGR9ZJ RTSNGIZaW6e5qYfcPsVrSd4jmX7qWP/c4aPZIKg4/libQWsrLBZYyCGCoFpcfr16GAYB bgYLTKo4437c/mjNHv2bvk54t7YRZ0PCNq2RMQ3oW3/n2tZ5esmMuCCCRjMPSLjwcebH Bte6W8pQz3yBjoT/GBsgZcXvwjpUl1pY9MV5QCC4Lv8FH6W2yUf0G91rw/qDhgCfaL/L EiljYPa0mQ9SXjKsphMDOyNh0+0n+S+kR4Zpjw5axltjvhgqxvi2hWDz2B5U6k/zu5HJ 1b9A== X-Gm-Message-State: AJcUukcNyud7AQKAWLaZDrvc6s4WLRZCzCSab/heRporm+CV8DRwY14F 6CnFCRpb9e8y+wTR+pRdQkKHEw== X-Google-Smtp-Source: ALg8bN6NKrcT1mzbi37ZanIdYOWAvk7zQXIt9AhJwnD1yA9ze8xSDY2qNzBlkoKRSkPfQzN+kG/MHw== X-Received: by 2002:aa7:d88c:: with SMTP id u12mr25208242edq.237.1548067795513; Mon, 21 Jan 2019 02:49:55 -0800 (PST) Received: from localhost.localdomain ([2a02:8109:b6bf:f9e4:9473:6b39:afaf:14d4]) by smtp.gmail.com with ESMTPSA id e35sm9006196eda.13.2019.01.21.02.49.54 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 21 Jan 2019 02:49:55 -0800 (PST) From: Christian Brauner To: gregkh@linuxfoundation.org, devel@driverdev.osuosl.org, linux-fsdevel@vger.kernel.org, viro@zeniv.linux.org.uk, dhowells@redhat.com Cc: tkjos@google.com, Christian Brauner Subject: [PATCH v1 5/7] binderfs: kill_litter_super() before cleanup Date: Mon, 21 Jan 2019 11:48:06 +0100 Message-Id: <20190121104808.24108-6-christian@brauner.io> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190121104808.24108-1-christian@brauner.io> References: <20190121104808.24108-1-christian@brauner.io> MIME-Version: 1.0 X-Patchwork-Bot: notify Sender: linux-fsdevel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Al pointed out that first calling kill_litter_super() before cleaning up info is more correct since destroying info doesn't depend on the state of the dentries and inodes. That the opposite remains true is not guaranteed. Suggested-by: Al Viro Signed-off-by: Christian Brauner --- /* Changelog */ v1: - patch unchanged --- drivers/android/binderfs.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/android/binderfs.c b/drivers/android/binderfs.c index 1e077498a507..ba88be172aee 100644 --- a/drivers/android/binderfs.c +++ b/drivers/android/binderfs.c @@ -531,11 +531,12 @@ static void binderfs_kill_super(struct super_block *sb) { struct binderfs_info *info = sb->s_fs_info; + kill_litter_super(sb); + if (info && info->ipc_ns) put_ipc_ns(info->ipc_ns); kfree(info); - kill_litter_super(sb); } static struct file_system_type binder_fs_type = { From patchwork Mon Jan 21 10:48:07 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christian Brauner X-Patchwork-Id: 10773579 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 1242791E for ; Mon, 21 Jan 2019 10:50:00 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 02773298E3 for ; Mon, 21 Jan 2019 10:50:00 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id EB29F298F2; Mon, 21 Jan 2019 10:49:59 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 922D5298E3 for ; Mon, 21 Jan 2019 10:49:59 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727965AbfAUKt6 (ORCPT ); Mon, 21 Jan 2019 05:49:58 -0500 Received: from mail-ed1-f67.google.com ([209.85.208.67]:33384 "EHLO mail-ed1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727892AbfAUKt6 (ORCPT ); Mon, 21 Jan 2019 05:49:58 -0500 Received: by mail-ed1-f67.google.com with SMTP id p6so16256355eds.0 for ; Mon, 21 Jan 2019 02:49:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=brauner.io; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Pm6mzHNIH585xFNCC7R6gDQA1R1jP0pwtqES4OvTMf4=; b=ftPKqlJlNnrbvt/8mK0CCxp+ziZTXtZTe9our7iNAXc8ryK33Y/QokveyfCPjpjses HvxhmIAD1wAKp2v65cJBziw8bAH/BdTbhgJCpFD4yMpsenxrJ5Kpu/n/f4a9Mp1A3NmG HKkwsdHg1aw5Oa8arTKqgZv/u9Ia12pJVTuHQeLKnATSJzEgFYIHlPu7ywpFIUx1jyKO eKIlbwE/N56MQrmBwqs76sVI3hvMj1+MdX87wl21ucAG9JTRLtOze2NJgv9uZx8H2zkL 6UndzYYdB279jSTn7XvsPxyicR/EuHIXqd9SAQxc0Ltr/yV3ki8UUDWu6df6jhsZfyCj JhMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Pm6mzHNIH585xFNCC7R6gDQA1R1jP0pwtqES4OvTMf4=; b=rJr6cF7K3T5kmxtK/DL6zzR2f8XWnwoFfEyOqpvpavrgNjlC+5Nqw5HYNyHC5SbzfA OzN9n21SF6+AqLcZy/HfM11MiZkPTP70uRAduzvj6xGJyr+wvYHKDuZdsmNW7DwdUWbQ kEZYCvfS/lhffz90R2xzEQ1qwK7ptjjivl4D1R6pm4B3o6hODRkXtjxjJClPuo5kRn/E /Xlab+rGQu+m0Gw1TV8XEBK+qGa1XINNH1x62Nz1XrnJl26Wh6LxikjJTyd3R717Pp3v CzvLjz0eAhTUYAhFaohMfL9Ar9+0NXLCVOYOYeVM/WVWsHEjDg2/Qi3w8iaoNjpCBNjU li3w== X-Gm-Message-State: AJcUukdl+rRAdIKI9G2GHd8p+m8jwdiHL4yJ5EVGSsXEKYK0D3TjMqF1 0b/alQT4HOzv+QBxq4SAADM68w== X-Google-Smtp-Source: ALg8bN4PIwLjNhUp+BBgjKDU7h0Y62CRA3BJxGXji+EQfx5dA5H5yA70VDJPydCQhineVDIJyDYU9w== X-Received: by 2002:a50:ef18:: with SMTP id m24mr26144221eds.136.1548067796429; Mon, 21 Jan 2019 02:49:56 -0800 (PST) Received: from localhost.localdomain ([2a02:8109:b6bf:f9e4:9473:6b39:afaf:14d4]) by smtp.gmail.com with ESMTPSA id e35sm9006196eda.13.2019.01.21.02.49.55 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 21 Jan 2019 02:49:55 -0800 (PST) From: Christian Brauner To: gregkh@linuxfoundation.org, devel@driverdev.osuosl.org, linux-fsdevel@vger.kernel.org, viro@zeniv.linux.org.uk, dhowells@redhat.com Cc: tkjos@google.com, Christian Brauner Subject: [PATCH v1 6/7] binderfs: drop lock in binderfs_binder_ctl_create Date: Mon, 21 Jan 2019 11:48:07 +0100 Message-Id: <20190121104808.24108-7-christian@brauner.io> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190121104808.24108-1-christian@brauner.io> References: <20190121104808.24108-1-christian@brauner.io> MIME-Version: 1.0 X-Patchwork-Bot: notify Sender: linux-fsdevel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The binderfs_binder_ctl_create() call is a no-op on subsequent calls and the first call is done before we unlock the suberblock. Hence, there is no need to take inode_lock() in there. Let's remove it. Suggested-by: Al Viro Signed-off-by: Christian Brauner --- Note, that fs/devptfs/inode.c:mknod_ptmx() is currently holding inode_lock() too under the exact same circumstances. Seems that we can drop it from there too. /* Changelog */ v1: - patch unchanged --- drivers/android/binderfs.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/drivers/android/binderfs.c b/drivers/android/binderfs.c index ba88be172aee..d537dcdb5d65 100644 --- a/drivers/android/binderfs.c +++ b/drivers/android/binderfs.c @@ -400,8 +400,6 @@ static int binderfs_binder_ctl_create(struct super_block *sb) if (!device) return -ENOMEM; - inode_lock(d_inode(root)); - /* If we have already created a binder-control node, return. */ if (info->control_dentry) { ret = 0; @@ -440,12 +438,10 @@ static int binderfs_binder_ctl_create(struct super_block *sb) inode->i_private = device; info->control_dentry = dentry; d_add(dentry, inode); - inode_unlock(d_inode(root)); return 0; out: - inode_unlock(d_inode(root)); kfree(device); iput(inode); From patchwork Mon Jan 21 10:48:08 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christian Brauner X-Patchwork-Id: 10773581 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 3D1211823 for ; Mon, 21 Jan 2019 10:50:02 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 28930298EA for ; Mon, 21 Jan 2019 10:50:02 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 18FA7298E3; Mon, 21 Jan 2019 10:50:02 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id EFE5C298E3 for ; Mon, 21 Jan 2019 10:50:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727862AbfAUKuA (ORCPT ); Mon, 21 Jan 2019 05:50:00 -0500 Received: from mail-ed1-f67.google.com ([209.85.208.67]:45808 "EHLO mail-ed1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727525AbfAUKt7 (ORCPT ); Mon, 21 Jan 2019 05:49:59 -0500 Received: by mail-ed1-f67.google.com with SMTP id d39so16149098edb.12 for ; Mon, 21 Jan 2019 02:49:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=brauner.io; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=E4YUTmkRcv67LIcVofWlmlgnzlcQkx9abpet3W5MwQU=; b=ECgF9a4hTJF0/Ocuy4eC6/pOfWj1yGKW7fFlLslQ6TUP33hJ9m80T5+0ksobF960RM DDHcX2uDxNjdzCTeS6njSMjcBFnmBBWsURYub8mcbMzuWcBtEv7CNVSpyiSTbjXWGw24 ikEbAxQq8fOk2/C/JtS9DbNoHl+SpAg7y9NUBmxjDHSupbNtYqI1D8mRxsM5I/aDdLJu r2tOm2f0H2OVuTK2nUATDOk2fLJgruCsOFRKNEYRlZSs1uAMuz8MTWyeQZnfWsKlj+kR K2jJ2FYeOaiCiDKBBdf07TGUt696ffSuXbLDycXlOw5/HKWJCQuiCjyCD+hn7wKk2kpl lATw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=E4YUTmkRcv67LIcVofWlmlgnzlcQkx9abpet3W5MwQU=; b=kwN5PFo+hDMG/vgCAahou0EQFiwhtKoowgnwfOTUGDwOM55tjLEiBw+lalTfk3AKlr zFBsgyW/anQzDANUUP6sGjXn0vyeeaPlblKYO9sUUyjszix1idl/Wg/Dr8SdvIsl7iIt U+iwbyVkyLWRHHRufCFe3TG4iwyuKMZsicBcVQ+s6PqKU2qhQWpOz+5bb+ckwc6a2usS p0tcBbDAx1dxXOfWNLVAnvudOm5Pn1Yv9HrfhcTfeUmZp2Brhkoc8Q5iKirosmf14NsS SJ2Fm146G/wnBRJkPyx1k2U+0o4C7ateD5u63UfhLdrrF/sjYYvqOLGeBQJAxPOjmAR8 yhlQ== X-Gm-Message-State: AJcUukfu9Gf2RRO/53hldY3Nsy1U5b+YD6pgUQyN9RvWyA0br90xiriM yC0fKItte6tIaDmqnIkCsSx4QQ== X-Google-Smtp-Source: ALg8bN5tBPnmcWDOIxEyQ2pN9/8VXWZcX6XA0+VoP5sPRqIsL2N0i8u5uyPouDz7xJb8g8HhnAb7Cw== X-Received: by 2002:a50:ad0b:: with SMTP id y11mr25526170edc.113.1548067797444; Mon, 21 Jan 2019 02:49:57 -0800 (PST) Received: from localhost.localdomain ([2a02:8109:b6bf:f9e4:9473:6b39:afaf:14d4]) by smtp.gmail.com with ESMTPSA id e35sm9006196eda.13.2019.01.21.02.49.56 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 21 Jan 2019 02:49:56 -0800 (PST) From: Christian Brauner To: gregkh@linuxfoundation.org, devel@driverdev.osuosl.org, linux-fsdevel@vger.kernel.org, viro@zeniv.linux.org.uk, dhowells@redhat.com Cc: tkjos@google.com, Christian Brauner Subject: [PATCH v1 7/7] binderfs: switch from d_add() to d_instantiate() Date: Mon, 21 Jan 2019 11:48:08 +0100 Message-Id: <20190121104808.24108-8-christian@brauner.io> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190121104808.24108-1-christian@brauner.io> References: <20190121104808.24108-1-christian@brauner.io> MIME-Version: 1.0 X-Patchwork-Bot: notify Sender: linux-fsdevel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP In a previous commit we switched from a d_alloc_name() + d_lookup() combination to setup a new dentry and find potential duplicates to the more idiomatic lookup_one_len(). As far as I understand, this also means we need to switch from d_add() to d_instantiate() since lookup_one_len() will create a new dentry when it doesn't find an existing one and add the new dentry to the hash queues. So we only need to call d_instantiate() to connect the dentry to the inode and turn it into a positive dentry. If we were to use d_add() we sure see stack traces like the following indicating that adding the same dentry twice over the same inode: [ 744.441889] CPU: 4 PID: 2849 Comm: landscape-sysin Not tainted 5.0.0-rc1-brauner-binderfs #243 [ 744.441889] Hardware name: Dell DCS XS24-SC2 /XS24-SC2 , BIOS S59_3C20 04/07/2011 [ 744.441889] RIP: 0010:__d_lookup_rcu+0x76/0x190 [ 744.441889] Code: 89 75 c0 49 c1 e9 20 49 89 fd 45 89 ce 41 83 e6 07 42 8d 04 f5 00 00 00 00 89 45 c8 eb 0c 48 8b 1b 48 85 db 0f 84 81 00 00 00 <44> 8b 63 fc 4c 3b 6b 10 75 ea 48 83 7b 08 00 74 e3 41 83 e4 fe 41 [ 744.441889] RSP: 0018:ffffb8c984e27ad0 EFLAGS: 00000282 ORIG_RAX: ffffffffffffff13 [ 744.441889] RAX: 0000000000000038 RBX: ffff9407ef770c08 RCX: ffffb8c980011000 [ 744.441889] RDX: ffffb8c984e27b54 RSI: ffffb8c984e27ce0 RDI: ffff9407e6689600 [ 744.441889] RBP: ffffb8c984e27b28 R08: ffffb8c984e27ba4 R09: 0000000000000007 [ 744.441889] R10: ffff9407e5c4f05c R11: 973f3eb9d84a94e5 R12: 0000000000000002 [ 744.441889] R13: ffff9407e6689600 R14: 0000000000000007 R15: 00000007bfef7a13 [ 744.441889] FS: 00007f0db13bb740(0000) GS:ffff9407f3b00000(0000) knlGS:0000000000000000 [ 744.441889] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 744.441889] CR2: 00007f0dacc51024 CR3: 000000032961a000 CR4: 00000000000006e0 [ 744.441889] Call Trace: [ 744.441889] lookup_fast+0x53/0x300 [ 744.441889] walk_component+0x49/0x350 [ 744.441889] ? inode_permission+0x63/0x1a0 [ 744.441889] link_path_walk.part.33+0x1bc/0x5a0 [ 744.441889] ? path_init+0x190/0x310 [ 744.441889] path_lookupat+0x95/0x210 [ 744.441889] filename_lookup+0xb6/0x190 [ 744.441889] ? __check_object_size+0xb8/0x1b0 [ 744.441889] ? strncpy_from_user+0x50/0x1a0 [ 744.441889] user_path_at_empty+0x36/0x40 [ 744.441889] ? user_path_at_empty+0x36/0x40 [ 744.441889] vfs_statx+0x76/0xe0 [ 744.441889] __do_sys_newstat+0x3d/0x70 [ 744.441889] __x64_sys_newstat+0x16/0x20 [ 744.441889] do_syscall_64+0x5a/0x120 [ 744.441889] entry_SYSCALL_64_after_hwframe+0x44/0xa9 [ 744.441889] RIP: 0033:0x7f0db0ec2775 [ 744.441889] Code: 00 00 00 75 05 48 83 c4 18 c3 e8 26 55 02 00 66 0f 1f 44 00 00 83 ff 01 48 89 f0 77 30 48 89 c7 48 89 d6 b8 04 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 03 f3 c3 90 48 8b 15 e1 b6 2d 00 f7 d8 64 89 [ 744.441889] RSP: 002b:00007ffc36bc9388 EFLAGS: 00000246 ORIG_RAX: 0000000000000004 [ 744.441889] RAX: ffffffffffffffda RBX: 00007ffc36bc9300 RCX: 00007f0db0ec2775 [ 744.441889] RDX: 00007ffc36bc9400 RSI: 00007ffc36bc9400 RDI: 00007f0dad26f050 [ 744.441889] RBP: 0000000000c0bc60 R08: 0000000000000000 R09: 0000000000000001 [ 744.441889] R10: 0000000000000000 R11: 0000000000000246 R12: 00007ffc36bc9400 [ 744.441889] R13: 0000000000000001 R14: 00000000ffffff9c R15: 0000000000c0bc60 Cc: Al Viro Signed-off-by: Christian Brauner --- /* Changelog */ v1: - patch introduced --- drivers/android/binderfs.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/android/binderfs.c b/drivers/android/binderfs.c index d537dcdb5d65..6a2185eb66c5 100644 --- a/drivers/android/binderfs.c +++ b/drivers/android/binderfs.c @@ -212,7 +212,7 @@ static int binderfs_binder_device_create(struct inode *ref_inode, } inode->i_private = device; - d_add(dentry, inode); + d_instantiate(dentry, inode); fsnotify_create(root->d_inode, dentry); inode_unlock(d_inode(root));