Received: by 2002:a05:6a10:6d10:0:0:0:0 with SMTP id gq16csp1718715pxb; Thu, 14 Apr 2022 12:21:56 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwrkB7aLyGpaghEL4GJ4S/UIvsBk3p1MHR38J4WVx4zdjU8N74ipivvR1vD6bsLMZfeA8IQ X-Received: by 2002:a63:6a88:0:b0:398:7866:5ce4 with SMTP id f130-20020a636a88000000b0039878665ce4mr3472418pgc.240.1649964113668; Thu, 14 Apr 2022 12:21:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1649964113; cv=none; d=google.com; s=arc-20160816; b=CqL61GbBjG+zHeUaoJFvqk1N8x3v9luW6lMHaCHFtiIgVQ9l0iGeXT9cxyNiMYVrcS Krivx8HbPbKkqAlLQ6jU6XsI4G6KenlMsKXDsNP2L+KtNG42xprIVZ2Z0u1bKGeBCgO8 Kp+Js4Q4z6Kj58wkRgXXB7DmH6nzl48GXJPnCsjUrE04wrnZCh7HVRJDQlmh7xJ5zLCi cZdIjQRjbNegeIf+GX8DpyCx80CoEGD8R3IMs0BiWqb11GBu2DYiX6DIorUys2L2BzkR Th5WwV4cM5nJDZv+65ehB19GJnUI5RcmZ6CTNziJx4Tv2GUj4HcDmppGawb9I17SPSZ2 oU2A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:mime-version:message-id:date :dkim-signature; bh=lkcJCQOlm2DvsqWy2MKlxrSAJLim0ircZ4vwjXzXvbI=; b=RrAGmFXx1fSD0p+EemXEf6jZgzSFacTRmnbUmxG+cZ0j9Gyx9uwUCR7FEtKB8hUUGc OzEOgCF0lj/Eywzmn46lc5AZvr7WdsnqZMqaxmDEVnf8gzcwEvxId4QF2i0zYS290DmR PRpknTIw95n/DNvx+J6DTM9yrY0iJBI7bViivwFeFxkWEzc4J7OKXX2Ca9EwN5ABcHLV uVRYhobLRwWwd35vVPFas87MlCIDi4FkLy8dut7brvZEdikWjI7Wtf9cJGKhXFGaersb SGs6uy2W84MPD95GQ27FtgrMjltv0ylxIoUKTC+w/iMKMv7sAA+4LT0sDrEH9VVtohjL U9Xg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=hCNy1KMQ; spf=pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id j27-20020a634a5b000000b0039c154f8c19si8656890pgl.835.2022.04.14.12.21.25; Thu, 14 Apr 2022 12:21:53 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=hCNy1KMQ; spf=pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241145AbiDNQyw (ORCPT + 99 others); Thu, 14 Apr 2022 12:54:52 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43050 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241639AbiDNQyY (ORCPT ); Thu, 14 Apr 2022 12:54:24 -0400 Received: from mail-pl1-x64a.google.com (mail-pl1-x64a.google.com [IPv6:2607:f8b0:4864:20::64a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6F86713E433 for ; Thu, 14 Apr 2022 09:23:41 -0700 (PDT) Received: by mail-pl1-x64a.google.com with SMTP id i10-20020a170902e48a00b00153f493fa9aso2950267ple.17 for ; Thu, 14 Apr 2022 09:23:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:message-id:mime-version:subject:from:to:cc; bh=lkcJCQOlm2DvsqWy2MKlxrSAJLim0ircZ4vwjXzXvbI=; b=hCNy1KMQ7JjgZ4WuXbtrx/T51qoLvLajJzC1K/yHLNkvWw+lwem1UlEPaV8SYkj2Wl ue/t0zAxe1uZM6XPv3QKIZkxQ0XeyRpHYHntGv2shl/x1ICJg1sBwkUjsVYriWi/LJId GRzCydsD7povLWp7OEltVgQlkd1Q5zerPmfNsrVXZPPIzBKp4bdrJveOHaiVy4li0UCn 24OMzn3f8dIXFJ0v6SfCZTIBfjN2OxiC0vrue2s4FJDSisbZ5EjNSTgZVQPYuRK3FYoG 7C6296YKureshdeoM02PEvVM/mABL8bjzFcY1LHQB87vRlVNfeVsliuE2PyvacRWO1QU +B1g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:message-id:mime-version:subject:from:to:cc; bh=lkcJCQOlm2DvsqWy2MKlxrSAJLim0ircZ4vwjXzXvbI=; b=5jeRV3rcM5IcfJb5UVKNb5V/gZTl0TTNM3LAEBQkVRoh7or9ejuy5Lu7JxpRG9HuCV +UrRJmMeNKe5+fYvuw10Joml4vfT9VD2DJHxLlIYV5H5lVUjMV/nSU7EwSgk0AfIFSXu bStkiqwupOz8soTREkiE2zee/qVm1BeJ0I2u29GK5SGWnjaOTjxXha2o2BLnT9gXOzBL gVh18i2YRUKb+6UzlP5a7eB7ZEF6H3jr/UQvBuY5svc7neUwsBwaxAVgQMixo40xqSJu hU2OnBg+H8yZX8HjAp+euZq5Z7p2vLhqSGCJy+t4yfGJmJb/LM+etiue027H9fGCr2+r je2Q== X-Gm-Message-State: AOAM533rxB4TH2TqG1hi+lQQF/oN2SJGGPUgkh6ccvCHW9Btv1KauiCP 9+/nlTs/XXy5oBW39j3aiGz7ODU0v+s= X-Received: from jackyli.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3b51]) (user=jackyli job=sendgmr) by 2002:a17:90b:3613:b0:1cb:66f4:fcad with SMTP id ml19-20020a17090b361300b001cb66f4fcadmr5104050pjb.82.1649953420652; Thu, 14 Apr 2022 09:23:40 -0700 (PDT) Date: Thu, 14 Apr 2022 16:23:25 +0000 Message-Id: <20220414162325.1830014-1-jackyli@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.36.0.rc0.470.gd361397f0d-goog Subject: [PATCH v2] crypto: ccp - Fix the INIT_EX data file open failure From: Jacky Li To: Brijesh Singh , Tom Lendacky , John Allen Cc: Herbert Xu , "David S. Miller" , Marc Orr , Alper Gun , Peter Gonda , linux-crypto@vger.kernel.org, linux-kernel@vger.kernel.org, Jacky Li Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org There are 2 common cases when INIT_EX data file might not be opened successfully and fail the sev initialization: 1. In user namespaces, normal user tasks (e.g. VMM) can change their current->fs->root to point to arbitrary directories. While init_ex_path is provided as a module param related to root file system. Solution: use the root directory of init_task to avoid accessing the wrong file. 2. Normal user tasks (e.g. VMM) don't have the privilege to access the INIT_EX data file. Solution: open the file as root and restore permissions immediately. Fixes: 3d725965f836 ("crypto: ccp - Add SEV_INIT_EX support") Signed-off-by: Jacky Li Reviewed-by: Peter Gonda --- Changelog since v1: - Added Fixes tag and Reviewed-By tag. drivers/crypto/ccp/sev-dev.c | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/drivers/crypto/ccp/sev-dev.c b/drivers/crypto/ccp/sev-dev.c index 6ab93dfd478a..3aefb177715e 100644 --- a/drivers/crypto/ccp/sev-dev.c +++ b/drivers/crypto/ccp/sev-dev.c @@ -23,6 +23,7 @@ #include #include #include +#include #include @@ -170,6 +171,31 @@ static void *sev_fw_alloc(unsigned long len) return page_address(page); } +static struct file *open_file_as_root(const char *filename, int flags, umode_t mode) +{ + struct file *fp; + struct path root; + struct cred *cred; + const struct cred *old_cred; + + task_lock(&init_task); + get_fs_root(init_task.fs, &root); + task_unlock(&init_task); + + cred = prepare_creds(); + if (!cred) + return ERR_PTR(-ENOMEM); + cred->fsuid = GLOBAL_ROOT_UID; + old_cred = override_creds(cred); + + fp = file_open_root(&root, filename, flags, mode); + path_put(&root); + + revert_creds(old_cred); + + return fp; +} + static int sev_read_init_ex_file(void) { struct sev_device *sev = psp_master->sev_data; @@ -181,7 +207,7 @@ static int sev_read_init_ex_file(void) if (!sev_init_ex_buffer) return -EOPNOTSUPP; - fp = filp_open(init_ex_path, O_RDONLY, 0); + fp = open_file_as_root(init_ex_path, O_RDONLY, 0); if (IS_ERR(fp)) { int ret = PTR_ERR(fp); @@ -217,7 +243,7 @@ static void sev_write_init_ex_file(void) if (!sev_init_ex_buffer) return; - fp = filp_open(init_ex_path, O_CREAT | O_WRONLY, 0600); + fp = open_file_as_root(init_ex_path, O_CREAT | O_WRONLY, 0600); if (IS_ERR(fp)) { dev_err(sev->dev, "SEV: could not open file for write, error %ld\n", -- 2.36.0.rc0.470.gd361397f0d-goog