Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp525255pxb; Thu, 21 Jan 2021 12:56:36 -0800 (PST) X-Google-Smtp-Source: ABdhPJwEieia3Ee7wTmi2PtuP+gDN1n+o79qIeldtYib0kc6GkXOvaI3tRp7DhCH6KW5EzMGNhpq X-Received: by 2002:a17:906:40d2:: with SMTP id a18mr865292ejk.315.1611262596132; Thu, 21 Jan 2021 12:56:36 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1611262596; cv=none; d=google.com; s=arc-20160816; b=xi43tFSCjo16VTgmKKNrc5p6+CydD/lWkwW/JAHyDBuQ5BNtaWiU8dD5i3suZkNJda UAe1a+XZ8Mtbtmi3i1oy+PAQ0ftvFU5gG7vQh+GE8nX+E69sMvd/fFgH6UwNZ18I4uKU OnQl2BtuQzy50H29rKK+qluiX94ohkLWidEEk/G6OCpqr76YsUbNEkxMiD/12PHoBCIV q9LOOYuYuRM0rd4Vb+FIGafyOFQYh3N91M28vCCIjoIJf4EDsrWo3GWf2wLwp5nim9FS hwvce1s4859iXT8q1H1y77yF+LQ+NJ9VRUu1D0IkBo2tBCgjgLerR492SdA7boiugDDK MksQ== 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=33oPFlMGWooA4SC3lFOO/rLQdKaRiImqQ7Mv+O3dDXU=; b=xnh+PTaOaqmNxrtxHJMYiE5jW9ARcjGdvUKgMK9hV2nSGgpe5tz4RPCgVIaaYmPqm0 F8fftLE2R+kM+yMqjOxipcUUIqg+PGbeuE5n8Vs26tX11yymHJMw8XVIIlGkGlr3t3PL VquIznVR5HHgsakOX9CMUyRNgnQ18zRiCWy8AG2XX1lTC56a7W9Wc9PknbOQ9Uqfxdiw hUm+zOiXQx7U6iaycnwLzDo9y+jLrBqDfhh4N4np3ujNyWcbGeLehN2c8Vkc+bWr5OYB B7VZVR6mQj8rcqI/h6LeBV0R1bqWnQWt3BEUF16zF1ITP+sJQ1W+7F2LaU0W3ElnderJ xYIA== 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 h21si2242068eje.365.2021.01.21.12.56.10; Thu, 21 Jan 2021 12:56:36 -0800 (PST) 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 S1727014AbhAUUzJ (ORCPT + 99 others); Thu, 21 Jan 2021 15:55:09 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50988 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726456AbhAUUyt (ORCPT ); Thu, 21 Jan 2021 15:54:49 -0500 Received: from smtp-bc0f.mail.infomaniak.ch (smtp-bc0f.mail.infomaniak.ch [IPv6:2001:1600:3:17::bc0f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B5781C061355; Thu, 21 Jan 2021 12:51:33 -0800 (PST) Received: from smtp-2-0001.mail.infomaniak.ch (unknown [10.5.36.108]) by smtp-2-3000.mail.infomaniak.ch (Postfix) with ESMTPS id 4DMF1J3k3WzMqq18; Thu, 21 Jan 2021 21:51:32 +0100 (CET) Received: from localhost (unknown [23.97.221.149]) by smtp-2-0001.mail.infomaniak.ch (Postfix) with ESMTPA id 4DMF1J0nfgzlh8TC; Thu, 21 Jan 2021 21:51:32 +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 , Andy Lutomirski , Anton Ivanov , Arnd Bergmann , Casey Schaufler , 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 v27 06/12] fs,security: Add sb_delete hook Date: Thu, 21 Jan 2021 21:51:13 +0100 Message-Id: <20210121205119.793296-7-mic@digikod.net> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210121205119.793296-1-mic@digikod.net> References: <20210121205119.793296-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 Cc: Serge E. Hallyn Signed-off-by: Mickaël Salaün Reviewed-by: Jann Horn --- 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 | 2 ++ include/linux/security.h | 4 ++++ security/security.c | 5 +++++ 5 files changed, 13 insertions(+) diff --git a/fs/super.c b/fs/super.c index 2c6cdea2ab2d..c3c5178cde65 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 7aaa753b8608..32472b3849bc 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 970106d98306..e339b201f79b 100644 --- a/include/linux/lsm_hooks.h +++ b/include/linux/lsm_hooks.h @@ -108,6 +108,8 @@ * 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_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 c35ea0ffccd9..c41a94e29b62 100644 --- a/include/linux/security.h +++ b/include/linux/security.h @@ -288,6 +288,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); @@ -620,6 +621,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 9f979d4afe6c..1b4a73b2549a 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.0