Received: by 2002:a05:6a10:a852:0:0:0:0 with SMTP id d18csp374476pxy; Wed, 5 May 2021 04:31:01 -0700 (PDT) X-Google-Smtp-Source: ABdhPJywuBrX9l1J3HAu4eDJ9ae0EjQ8I0bT897abe5dl6hiPWlF1CiwrBheNjz9+f46J8l6vuRa X-Received: by 2002:a17:902:b602:b029:e6:cabb:10b9 with SMTP id b2-20020a170902b602b02900e6cabb10b9mr30437929pls.47.1620214261458; Wed, 05 May 2021 04:31:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620214261; cv=none; d=google.com; s=arc-20160816; b=a65YwxLMgfHICL5vnHC5Wv/iplY0gCTzseOd9sURNZ5RtGhErK3z1tFJ4nhhNjvLgO oOdnGCl1BJE+wlRKkW192EFcuBPgRsSN/YnHrkw+a6eVCarrXD9ai2YMgdbzG5DzNLY1 stMxzWSBt+AUSmX09Vme6Z9LbhddWbO7ERmbTEYQQ53TUKWcRX7OfC3oNyAIEiff7n/V mKAgc7RjBpiZadObgQBlko6jfVPDNRKOLT2sfYb4qzspU2juMwuS9izhubvY7OlzNMII PvxFmhFfjekDmSfaZJWNwBa6b8b+MMvcf478tqSCzO2+KODmEhhG476Zouztpi3jQv2O 1rkw== 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=q0clEqUL1U9Cc408fDgidAoiuRBenDTUiqtalWnDQto=; b=pNHkzYb1dCTMHyGf32xtB+hM/Qiu9tUkz0RmRECAcCcFJNuHwoIeFbXssq3OGIYPuZ 3HnvemIBK3HWRVpuWJ+4kyrjqdXP/e0j5zfOMiPtyZyDLeedbIJ9/L0pc/BbF7XTh65J pUoe9DStTsD7iV98koH0esRgwPx8ni5FAF2x6YmDyTvKyjjJtrXmuH5VF8fF9CltZy1e cIuLzW8p8gmgaoW823xuFy4htmxl0Ebwa3oSYtQDmmgOdgK4wne2fhvGcEcuuShKi1NF 5dHPhiBk73Zz8C8lpe2HKMc9FxJLUeQnOHbTkUvhhLCirie+CI6V4fXe8AcoqLotZWO5 a92w== 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=huawei.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id t3si6647338pjw.52.2021.05.05.04.30.48; Wed, 05 May 2021 04:31:01 -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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=huawei.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233081AbhEELbE (ORCPT + 99 others); Wed, 5 May 2021 07:31:04 -0400 Received: from frasgout.his.huawei.com ([185.176.79.56]:3003 "EHLO frasgout.his.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232905AbhEELbB (ORCPT ); Wed, 5 May 2021 07:31:01 -0400 Received: from fraeml714-chm.china.huawei.com (unknown [172.18.147.201]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4FZvS85d7qz6rlXW; Wed, 5 May 2021 19:22:00 +0800 (CST) Received: from roberto-ThinkStation-P620.huawei.com (10.204.62.217) by fraeml714-chm.china.huawei.com (10.206.15.33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.2; Wed, 5 May 2021 13:30:02 +0200 From: Roberto Sassu To: , CC: , , , Roberto Sassu , Subject: [PATCH v6 01/11] evm: Execute evm_inode_init_security() only when an HMAC key is loaded Date: Wed, 5 May 2021 13:29:25 +0200 Message-ID: <20210505112935.1410679-2-roberto.sassu@huawei.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210505112935.1410679-1-roberto.sassu@huawei.com> References: <20210505112935.1410679-1-roberto.sassu@huawei.com> MIME-Version: 1.0 Content-Transfer-Encoding: 7BIT Content-Type: text/plain; charset=US-ASCII X-Originating-IP: [10.204.62.217] X-ClientProxiedBy: lhreml752-chm.china.huawei.com (10.201.108.202) To fraeml714-chm.china.huawei.com (10.206.15.33) X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org evm_inode_init_security() requires an HMAC key to calculate the HMAC on initial xattrs provided by LSMs. However, it checks generically whether a key has been loaded, including also public keys, which is not correct as public keys are not suitable to calculate the HMAC. Originally, support for signature verification was introduced to verify a possibly immutable initial ram disk, when no new files are created, and to switch to HMAC for the root filesystem. By that time, an HMAC key should have been loaded and usable to calculate HMACs for new files. More recently support for requiring an HMAC key was removed from the kernel, so that signature verification can be used alone. Since this is a legitimate use case, evm_inode_init_security() should not return an error when no HMAC key has been loaded. This patch fixes this problem by replacing the evm_key_loaded() check with a check of the EVM_INIT_HMAC flag in evm_initialized. Cc: stable@vger.kernel.org # 4.5.x Fixes: 26ddabfe96b ("evm: enable EVM when X509 certificate is loaded") Signed-off-by: Roberto Sassu Reviewed-by: Mimi Zohar --- security/integrity/evm/evm_main.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/security/integrity/evm/evm_main.c b/security/integrity/evm/evm_main.c index 0de367aaa2d3..7ac5204c8d1f 100644 --- a/security/integrity/evm/evm_main.c +++ b/security/integrity/evm/evm_main.c @@ -521,7 +521,7 @@ void evm_inode_post_setattr(struct dentry *dentry, int ia_valid) } /* - * evm_inode_init_security - initializes security.evm + * evm_inode_init_security - initializes security.evm HMAC value */ int evm_inode_init_security(struct inode *inode, const struct xattr *lsm_xattr, @@ -530,7 +530,8 @@ int evm_inode_init_security(struct inode *inode, struct evm_xattr *xattr_data; int rc; - if (!evm_key_loaded() || !evm_protected_xattr(lsm_xattr->name)) + if (!(evm_initialized & EVM_INIT_HMAC) || + !evm_protected_xattr(lsm_xattr->name)) return 0; xattr_data = kzalloc(sizeof(*xattr_data), GFP_NOFS); -- 2.25.1