From patchwork Fri Jun 12 20:24:59 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Richter X-Patchwork-Id: 1308505 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [203.11.71.2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49kC392tkvz9sQx for ; Sat, 13 Jun 2020 06:28:05 +1000 (AEST) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=linux.ibm.com Received: from bilbo.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 49kC390C4fzDqyg for ; Sat, 13 Jun 2020 06:28:05 +1000 (AEST) X-Original-To: skiboot@lists.ozlabs.org Delivered-To: skiboot@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=linux.ibm.com (client-ip=148.163.156.1; helo=mx0a-001b2d01.pphosted.com; envelope-from=erichte@linux.ibm.com; receiver=) Authentication-Results: lists.ozlabs.org; dmarc=none (p=none dis=none) header.from=linux.ibm.com Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 49kC0B317ZzDqxV for ; Sat, 13 Jun 2020 06:25:30 +1000 (AEST) Received: from pps.filterd (m0098393.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 05CJ3V6h067139 for ; Fri, 12 Jun 2020 16:25:28 -0400 Received: from ppma03fra.de.ibm.com (6b.4a.5195.ip4.static.sl-reverse.com [149.81.74.107]) by mx0a-001b2d01.pphosted.com with ESMTP id 31mes1bcqb-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Fri, 12 Jun 2020 16:25:28 -0400 Received: from pps.filterd (ppma03fra.de.ibm.com [127.0.0.1]) by ppma03fra.de.ibm.com (8.16.0.42/8.16.0.42) with SMTP id 05CKLJGp019015 for ; Fri, 12 Jun 2020 20:25:26 GMT Received: from b06cxnps4075.portsmouth.uk.ibm.com (d06relay12.portsmouth.uk.ibm.com [9.149.109.197]) by ppma03fra.de.ibm.com with ESMTP id 31jf1gt7ne-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Fri, 12 Jun 2020 20:25:25 +0000 Received: from d06av25.portsmouth.uk.ibm.com (d06av25.portsmouth.uk.ibm.com [9.149.105.61]) by b06cxnps4075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 05CKPNVL63897740 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 12 Jun 2020 20:25:23 GMT Received: from d06av25.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 22A3711C058; Fri, 12 Jun 2020 20:25:23 +0000 (GMT) Received: from d06av25.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 4691911C04C; Fri, 12 Jun 2020 20:25:22 +0000 (GMT) Received: from ceres.ibmuc.com (unknown [9.163.59.202]) by d06av25.portsmouth.uk.ibm.com (Postfix) with ESMTP; Fri, 12 Jun 2020 20:25:22 +0000 (GMT) From: Eric Richter To: skiboot@lists.ozlabs.org Date: Fri, 12 Jun 2020 15:24:59 -0500 Message-Id: <20200612202514.15032-6-erichte@linux.ibm.com> X-Mailer: git-send-email 2.21.1 In-Reply-To: <20200612202514.15032-1-erichte@linux.ibm.com> References: <20200612202514.15032-1-erichte@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.216, 18.0.687 definitions=2020-06-12_16:2020-06-12, 2020-06-12 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxlogscore=977 suspectscore=1 cotscore=-2147483648 spamscore=0 impostorscore=0 lowpriorityscore=0 phishscore=0 adultscore=0 priorityscore=1501 mlxscore=0 bulkscore=0 malwarescore=0 clxscore=1015 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006110174 Subject: [Skiboot] [PATCH v5 05/20] secvar: change backend hook interface to take in bank references X-BeenThere: skiboot@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Mailing list for skiboot development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: nayna@linux.ibm.com Errors-To: skiboot-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Skiboot" From: Nayna Jain Previously, backends were implicitly expected to operate on global references to the variable and update banks. This patch changes the interface for this driver to instead take the banks in as an argument. This removes the implict dependency on these references, makes the design consistent with the storage driver, and also will simplify unit testing of these functions. Signed-off-by: Nayna Jain Signed-off-by: Eric Richter --- V5: - adjusted comments so they don't blow way past the column limit include/secvar.h | 22 +++++++++++++++++----- libstb/secvar/secvar_main.c | 6 +++--- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/include/secvar.h b/include/secvar.h index 76525534..db103953 100644 --- a/include/secvar.h +++ b/include/secvar.h @@ -17,11 +17,23 @@ struct secvar_storage_driver { }; struct secvar_backend_driver { - int (*pre_process)(void); // Perform any pre-processing stuff (e.g. determine secure boot state) - int (*process)(void); // Process all updates - int (*post_process)(void); // Perform any post-processing stuff (e.g. derive/update variables) - int (*validate)(struct secvar *var); // Validate a single variable, return boolean - const char *compatible; // String to use for compatible in secvar node + /* Perform any pre-processing stuff (e.g. determine secure boot state) */ + int (*pre_process)(struct list_head *variable_bank, + struct list_head *update_bank); + + /* Process all updates */ + int (*process)(struct list_head *variable_bank, + struct list_head *update_bank); + + /* Perform any post-processing stuff (e.g. derive/update variables)*/ + int (*post_process)(struct list_head *variable_bank, + struct list_head *update_bank); + + /* Validate a single variable, return boolean */ + int (*validate)(struct secvar *var); + + /* String to use for compatible in secvar node */ + const char *compatible; }; diff --git a/libstb/secvar/secvar_main.c b/libstb/secvar/secvar_main.c index d8737621..759d8ef4 100644 --- a/libstb/secvar/secvar_main.c +++ b/libstb/secvar/secvar_main.c @@ -65,7 +65,7 @@ int secvar_main(struct secvar_storage_driver storage_driver, secvar_set_status("okay"); if (secvar_backend.pre_process) { - rc = secvar_backend.pre_process(); + rc = secvar_backend.pre_process(&variable_bank, &update_bank); if (rc) { prlog(PR_ERR, "Error in backend pre_process = %d\n", rc); /* Early failure state, lock the storage */ @@ -79,7 +79,7 @@ int secvar_main(struct secvar_storage_driver storage_driver, goto soft_fail; /* Process variable updates from the update bank. */ - rc = secvar_backend.process(); + rc = secvar_backend.process(&variable_bank, &update_bank); /* Create and set the update-status device tree property */ secvar_set_update_status(rc); @@ -109,7 +109,7 @@ int secvar_main(struct secvar_storage_driver storage_driver, secvar_storage.lockdown(); if (secvar_backend.post_process) { - rc = secvar_backend.post_process(); + rc = secvar_backend.post_process(&variable_bank, &update_bank); if (rc) { prlog(PR_ERR, "Error in backend post_process = %d\n", rc); goto soft_fail;