Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp4467960pxf; Tue, 16 Mar 2021 14:26:53 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxEB+/I9TepQCVlFnN7cxg3Oscj56fin7ikew5ofv4NjUE7nLDyqLXJB8NGf4PzgsMAaPFy X-Received: by 2002:a17:906:1b42:: with SMTP id p2mr31928339ejg.236.1615930013035; Tue, 16 Mar 2021 14:26:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1615930013; cv=none; d=google.com; s=arc-20160816; b=pSOy0rz8EPj/TsEdLJZB3OXP7xS98RnFRlbmjd3d7KRaSi8kl1QvtLgrvwTtLwGLtg GVGNN/Sl2QRM6SHEYBkoDz3Npne8Oof+vtEfb5pMN0QbldiudAlYhVccwiBN+y2soxPh STx2ssq1d8HbViNGEOr0ZSx3Vs9Kuvdv8rpJU1HnsQOPd7sCOrOJUrILRGjs4WYx8bN8 uWtco8pGsfjPbBg6D4I+zmISwGQXGTybLgk0RbVyrcZT3dXMoq0BkWw/eFUWSfm7k9o3 fv4ySTWc3Zz9Y2Gb5T9fHYjFf/XE0Q5NYViZbIIDx+Gx+GPBWJkKyGLeUXYGXz5YSXHP 9V8g== 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:from; bh=SY5k3BLuBPbgi0t7P8hhmfgsx2FD8ykw2E5W454cnsQ=; b=faLp5YIkiCf6f7gX/r/EP2HEJOnYBLbLn9ZA+GtaL7XTamwzWj5Ul6mTlwLQRkUovN TuIPbFP1jyLK11Xxznbnx5XF3VOBYttAhDjQ8n2nb1EGi0VxHV+lIVw+MRSPGfvfND0s Pg+82+98YlPWjpVq5QITlNZ/AoTsu/M9OYdi0L7RqhZK4Z1eab727Z/OGAu9sTLYAqse x34ZcBaHKkJ47x+1Oz2Dq12PgoyTH8hLs3R21AovbYZe64iJHeqNqHimVOqLUlROjoNE R7Nb9j+0RJp0YqZ8Ku9mAASn43G/Ekuli2hQg9qytYiVuKP5yfI+fzpuVyxmNaWjGrRu XN5A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id s15si15056264edx.470.2021.03.16.14.26.29; Tue, 16 Mar 2021 14:26:53 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232022AbhCPUoJ (ORCPT + 99 others); Tue, 16 Mar 2021 16:44:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48428 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231679AbhCPUnN (ORCPT ); Tue, 16 Mar 2021 16:43:13 -0400 Received: from smtp-8fa8.mail.infomaniak.ch (smtp-8fa8.mail.infomaniak.ch [IPv6:2001:1600:4:17::8fa8]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C0D63C0613DF for ; Tue, 16 Mar 2021 13:43:06 -0700 (PDT) Received: from smtp-3-0000.mail.infomaniak.ch (unknown [10.4.36.107]) by smtp-3-3000.mail.infomaniak.ch (Postfix) with ESMTPS id 4F0QGd0jnNzMq18l; Tue, 16 Mar 2021 21:43:05 +0100 (CET) Received: from localhost (unknown [23.97.221.149]) by smtp-3-0000.mail.infomaniak.ch (Postfix) with ESMTPA id 4F0QGc52cSzlh8T5; Tue, 16 Mar 2021 21:43:04 +0100 (CET) From: =?UTF-8?q?Micka=C3=ABl=20Sala=C3=BCn?= To: James Morris , Jann Horn , "Serge E . Hallyn" Cc: =?UTF-8?q?Micka=C3=ABl=20Sala=C3=BCn?= , Al Viro , Andrew Morton , Andy Lutomirski , Anton Ivanov , Arnd Bergmann , Casey Schaufler , David Howells , Jeff Dike , Jonathan Corbet , Kees Cook , Michael Kerrisk , Richard Weinberger , Shuah Khan , Vincent Dagonneau , kernel-hardening@lists.openwall.com, linux-api@vger.kernel.org, linux-arch@vger.kernel.org, linux-doc@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-security-module@vger.kernel.org, x86@kernel.org, =?UTF-8?q?Micka=C3=ABl=20Sala=C3=BCn?= Subject: [PATCH v30 06/12] fs,security: Add sb_delete hook Date: Tue, 16 Mar 2021 21:42:46 +0100 Message-Id: <20210316204252.427806-7-mic@digikod.net> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210316204252.427806-1-mic@digikod.net> References: <20210316204252.427806-1-mic@digikod.net> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Mickaël Salaün The sb_delete security hook is called when shutting down a superblock, which may be useful to release kernel objects tied to the superblock's lifetime (e.g. inodes). This new hook is needed by Landlock to release (ephemerally) tagged struct inodes. This comes from the unprivileged nature of Landlock described in the next commit. Cc: Al Viro Cc: James Morris Cc: Kees Cook Signed-off-by: Mickaël Salaün Reviewed-by: Jann Horn Acked-by: Serge Hallyn Link: https://lore.kernel.org/r/20210316204252.427806-7-mic@digikod.net --- Changes since v28: * Extend hook description (suggested by Serge Hallyn). * Add Acked-by Serge Hallyn. Changes since v22: * Add Reviewed-by: Jann Horn Changes since v17: * Initial patch to replace the direct call to landlock_release_inodes() (requested by James Morris). https://lore.kernel.org/lkml/alpine.LRH.2.21.2005150536440.7929@namei.org/ --- fs/super.c | 1 + include/linux/lsm_hook_defs.h | 1 + include/linux/lsm_hooks.h | 3 +++ include/linux/security.h | 4 ++++ security/security.c | 5 +++++ 5 files changed, 14 insertions(+) diff --git a/fs/super.c b/fs/super.c index 8c1baca35c16..11b7e7213fd1 100644 --- a/fs/super.c +++ b/fs/super.c @@ -454,6 +454,7 @@ void generic_shutdown_super(struct super_block *sb) evict_inodes(sb); /* only nonzero refcount inodes can have marks */ fsnotify_sb_delete(sb); + security_sb_delete(sb); if (sb->s_dio_done_wq) { destroy_workqueue(sb->s_dio_done_wq); diff --git a/include/linux/lsm_hook_defs.h b/include/linux/lsm_hook_defs.h index 477a597db013..e8adadbf9581 100644 --- a/include/linux/lsm_hook_defs.h +++ b/include/linux/lsm_hook_defs.h @@ -59,6 +59,7 @@ LSM_HOOK(int, 0, fs_context_dup, struct fs_context *fc, LSM_HOOK(int, -ENOPARAM, fs_context_parse_param, struct fs_context *fc, struct fs_parameter *param) LSM_HOOK(int, 0, sb_alloc_security, struct super_block *sb) +LSM_HOOK(void, LSM_RET_VOID, sb_delete, struct super_block *sb) LSM_HOOK(void, LSM_RET_VOID, sb_free_security, struct super_block *sb) LSM_HOOK(void, LSM_RET_VOID, sb_free_mnt_opts, void *mnt_opts) LSM_HOOK(int, 0, sb_eat_lsm_opts, char *orig, void **mnt_opts) diff --git a/include/linux/lsm_hooks.h b/include/linux/lsm_hooks.h index 75715998a95f..cc2eaaaec0e4 100644 --- a/include/linux/lsm_hooks.h +++ b/include/linux/lsm_hooks.h @@ -108,6 +108,9 @@ * allocated. * @sb contains the super_block structure to be modified. * Return 0 if operation was successful. + * @sb_delete: + * Release objects tied to a superblock (e.g. inodes). + * @sb contains the super_block structure being released. * @sb_free_security: * Deallocate and clear the sb->s_security field. * @sb contains the super_block structure to be modified. diff --git a/include/linux/security.h b/include/linux/security.h index 8aeebd6646dc..90298baa4551 100644 --- a/include/linux/security.h +++ b/include/linux/security.h @@ -291,6 +291,7 @@ void security_bprm_committed_creds(struct linux_binprm *bprm); int security_fs_context_dup(struct fs_context *fc, struct fs_context *src_fc); int security_fs_context_parse_param(struct fs_context *fc, struct fs_parameter *param); int security_sb_alloc(struct super_block *sb); +void security_sb_delete(struct super_block *sb); void security_sb_free(struct super_block *sb); void security_free_mnt_opts(void **mnt_opts); int security_sb_eat_lsm_opts(char *options, void **mnt_opts); @@ -631,6 +632,9 @@ static inline int security_sb_alloc(struct super_block *sb) return 0; } +static inline void security_sb_delete(struct super_block *sb) +{ } + static inline void security_sb_free(struct super_block *sb) { } diff --git a/security/security.c b/security/security.c index e9c29480eb18..bb666f992497 100644 --- a/security/security.c +++ b/security/security.c @@ -900,6 +900,11 @@ int security_sb_alloc(struct super_block *sb) return rc; } +void security_sb_delete(struct super_block *sb) +{ + call_void_hook(sb_delete, sb); +} + void security_sb_free(struct super_block *sb) { call_void_hook(sb_free_security, sb); -- 2.30.2