From patchwork Tue Aug 30 04:50:18 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nayna X-Patchwork-Id: 9304839 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 1F524607F0 for ; Tue, 30 Aug 2016 04:51:19 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 09F0228AB5 for ; Tue, 30 Aug 2016 04:51:19 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id F2E8228AC1; Tue, 30 Aug 2016 04:51:18 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from lists.sourceforge.net (lists.sourceforge.net [216.34.181.88]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id D4FF728AB5 for ; Tue, 30 Aug 2016 04:51:17 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=sfs-ml-4.v29.ch3.sourceforge.com) by sfs-ml-4.v29.ch3.sourceforge.com with esmtp (Exim 4.76) (envelope-from ) id 1beb12-00083b-NR; Tue, 30 Aug 2016 04:51:16 +0000 Received: from sog-mx-3.v43.ch3.sourceforge.com ([172.29.43.193] helo=mx.sourceforge.net) by sfs-ml-4.v29.ch3.sourceforge.com with esmtp (Exim 4.76) (envelope-from ) id 1beb11-00083Q-Aa for tpmdd-devel@lists.sourceforge.net; Tue, 30 Aug 2016 04:51:15 +0000 X-ACL-Warn: Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5] helo=mx0a-001b2d01.pphosted.com) by sog-mx-3.v43.ch3.sourceforge.com with esmtps (TLSv1:AES256-SHA:256) (Exim 4.76) id 1beb10-0006S6-4H for tpmdd-devel@lists.sourceforge.net; Tue, 30 Aug 2016 04:51:15 +0000 Received: from pps.filterd (m0098419.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.0.11/8.16.0.11) with SMTP id u7U4hxO2090404 for ; Tue, 30 Aug 2016 00:51:08 -0400 Received: from e28smtp09.in.ibm.com (e28smtp09.in.ibm.com [125.16.236.9]) by mx0b-001b2d01.pphosted.com with ESMTP id 2553640jwy-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Tue, 30 Aug 2016 00:51:08 -0400 Received: from localhost by e28smtp09.in.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 30 Aug 2016 10:21:05 +0530 Received: from d28dlp01.in.ibm.com (9.184.220.126) by e28smtp09.in.ibm.com (192.168.1.139) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Tue, 30 Aug 2016 10:21:02 +0530 X-IBM-Helo: d28dlp01.in.ibm.com X-IBM-MailFrom: nayna@linux.vnet.ibm.com X-IBM-RcptTo: tpmdd-devel@lists.sourceforge.net Received: from d28relay08.in.ibm.com (d28relay08.in.ibm.com [9.184.220.159]) by d28dlp01.in.ibm.com (Postfix) with ESMTP id 182DFE0040 for ; Tue, 30 Aug 2016 10:20:04 +0530 (IST) Received: from d28av03.in.ibm.com (d28av03.in.ibm.com [9.184.220.65]) by d28relay08.in.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id u7U4p1qf20906104 for ; Tue, 30 Aug 2016 10:21:01 +0530 Received: from d28av03.in.ibm.com (localhost [127.0.0.1]) by d28av03.in.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id u7U4p1KP022223 for ; Tue, 30 Aug 2016 10:21:01 +0530 Received: from c365f16u1b3.pok.stglabs.ibm.com (c365f16u1b3.pok.stglabs.ibm.com [9.47.77.42]) by d28av03.in.ibm.com (8.14.4/8.14.4/NCO v10.0 AVin) with ESMTP id u7U4oRiA020851; Tue, 30 Aug 2016 10:21:00 +0530 From: Nayna Jain To: tpmdd-devel@lists.sourceforge.net Date: Tue, 30 Aug 2016 00:50:18 -0400 X-Mailer: git-send-email 2.5.0 In-Reply-To: <1472532619-22170-1-git-send-email-nayna@linux.vnet.ibm.com> References: <1472532619-22170-1-git-send-email-nayna@linux.vnet.ibm.com> X-TM-AS-MML: disable X-Content-Scanned: Fidelis XPS MAILER x-cbid: 16083004-0060-0000-0000-000001183C4D X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 16083004-0061-0000-0000-00000F35A6A4 Message-Id: <1472532619-22170-7-git-send-email-nayna@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2016-08-30_02:, , signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=1 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1604210000 definitions=main-1608300044 X-Headers-End: 1beb10-0006S6-4H Subject: [tpmdd-devel] [PATCH v3 6/7] tpm: Moves the eventlog init functions to tpm_eventlog_init.c X-BeenThere: tpmdd-devel@lists.sourceforge.net X-Mailman-Version: 2.1.9 Precedence: list List-Id: Tpm Device Driver maintainance List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: tpmdd-devel-bounces@lists.sourceforge.net X-Virus-Scanned: ClamAV using ClamSMTP Eventlog initialization functions are common for TPM1.2 and TPM2.0 Currently, they are defined in tpm_eventlog.c which does parsing of TPM1.2 specific eventlog. Since initialization functions are common for TPM2.0 also, have moved the init functions to tpm_eventlog_init.c. Signed-off-by: Nayna Jain --- drivers/char/tpm/Makefile | 2 +- drivers/char/tpm/tpm_eventlog.c | 116 +--------------------------- drivers/char/tpm/tpm_eventlog.h | 3 + drivers/char/tpm/tpm_eventlog_init.c | 143 +++++++++++++++++++++++++++++++++++ 4 files changed, 149 insertions(+), 115 deletions(-) create mode 100644 drivers/char/tpm/tpm_eventlog_init.c diff --git a/drivers/char/tpm/Makefile b/drivers/char/tpm/Makefile index e8c7b4d..200b957 100644 --- a/drivers/char/tpm/Makefile +++ b/drivers/char/tpm/Makefile @@ -3,7 +3,7 @@ # obj-$(CONFIG_TCG_TPM) += tpm.o tpm-y := tpm-interface.o tpm-dev.o tpm-sysfs.o tpm-chip.o tpm2-cmd.o \ - tpm_eventlog.o + tpm_eventlog.o tpm_eventlog_init.o tpm-$(CONFIG_ACPI) += tpm_ppi.o tpm_acpi.o tpm-$(CONFIG_OF) += tpm_of.o diff --git a/drivers/char/tpm/tpm_eventlog.c b/drivers/char/tpm/tpm_eventlog.c index f84ce71..3f1aba5 100644 --- a/drivers/char/tpm/tpm_eventlog.c +++ b/drivers/char/tpm/tpm_eventlog.c @@ -258,12 +258,6 @@ static int tpm_binary_bios_measurements_show(struct seq_file *m, void *v) } -static int tpm_bios_measurements_release(struct inode *inode, - struct file *file) -{ - return seq_release(inode, file); -} - static int tpm_ascii_bios_measurements_show(struct seq_file *m, void *v) { int len = 0; @@ -297,122 +291,16 @@ static int tpm_ascii_bios_measurements_show(struct seq_file *m, void *v) return 0; } -static const struct seq_operations tpm_ascii_b_measurments_seqops = { +const struct seq_operations tpm_ascii_b_measurments_seqops = { .start = tpm_bios_measurements_start, .next = tpm_bios_measurements_next, .stop = tpm_bios_measurements_stop, .show = tpm_ascii_bios_measurements_show, }; -static const struct seq_operations tpm_binary_b_measurments_seqops = { +const struct seq_operations tpm_binary_b_measurments_seqops = { .start = tpm_bios_measurements_start, .next = tpm_bios_measurements_next, .stop = tpm_bios_measurements_stop, .show = tpm_binary_bios_measurements_show, }; - -static int tpm_bios_measurements_open(struct inode *inode, - struct file *file) -{ - int err; - struct seq_file *seq; - struct tpm_chip *chip; - const struct seq_operations *seqops = - (const struct seq_operations *)inode->i_private; - - chip = (struct tpm_chip - *)file->f_path.dentry->d_parent->d_inode->i_private; - - /* now register seq file */ - err = seq_open(file, seqops); - if (!err) { - seq = file->private_data; - seq->private = &chip->log; - } - - return err; -} - -static const struct file_operations tpm_bios_measurements_ops = { - .open = tpm_bios_measurements_open, - .read = seq_read, - .llseek = seq_lseek, - .release = tpm_bios_measurements_release, -}; - -static int is_bad(void *p) -{ - if (!p) - return 1; - if (IS_ERR(p) && (PTR_ERR(p) != -ENODEV)) - return 1; - return 0; -} - -int read_log(struct tpm_chip *chip) -{ - int rc; - - if (chip->log.bios_event_log != NULL) { - dev_dbg(&chip->dev, "%s:ERROR - Eventlog already initialized\n", - __func__); - return -EFAULT; - } - - rc = read_log_acpi(chip); - if (rc == 0) - return rc; - rc = read_log_of(chip); - return rc; -} - -void tpm_bios_log_setup(struct tpm_chip *chip) -{ - const char *name = dev_name(&chip->dev); - int rc = 0; - - rc = read_log(chip); - if (rc < 0) - return; - - chip->bios_dir_count = 0; - chip->bios_dir[chip->bios_dir_count] = securityfs_create_dir(name, - NULL); - if (is_bad(chip->bios_dir[chip->bios_dir_count])) - goto err; - chip->bios_dir[chip->bios_dir_count]->d_inode->i_private = chip; - chip->bios_dir_count++; - - chip->bios_dir[chip->bios_dir_count] = - securityfs_create_file("binary_bios_measurements", - S_IRUSR | S_IRGRP, chip->bios_dir[0], - (void *)&tpm_binary_b_measurments_seqops, - &tpm_bios_measurements_ops); - if (is_bad(chip->bios_dir[chip->bios_dir_count])) - goto err; - chip->bios_dir_count++; - - chip->bios_dir[chip->bios_dir_count] = - securityfs_create_file("ascii_bios_measurements", - S_IRUSR | S_IRGRP, chip->bios_dir[0], - (void *)&tpm_ascii_b_measurments_seqops, - &tpm_bios_measurements_ops); - if (is_bad(chip->bios_dir[chip->bios_dir_count])) - goto err; - chip->bios_dir_count++; - - return; - -err: - tpm_bios_log_teardown(chip); -} - -void tpm_bios_log_teardown(struct tpm_chip *chip) -{ - int i; - - for (i = chip->bios_dir_count; i > 0; --i) - securityfs_remove(chip->bios_dir[i-1]); - - kfree(chip->log.bios_event_log); -} diff --git a/drivers/char/tpm/tpm_eventlog.h b/drivers/char/tpm/tpm_eventlog.h index 0e599ab..6a36a9d 100644 --- a/drivers/char/tpm/tpm_eventlog.h +++ b/drivers/char/tpm/tpm_eventlog.h @@ -12,6 +12,9 @@ #define do_endian_conversion(x) x #endif +extern const struct seq_operations tpm_ascii_b_measurments_seqops; +extern const struct seq_operations tpm_binary_b_measurments_seqops; + enum bios_platform_class { BIOS_CLIENT = 0x00, BIOS_SERVER = 0x01, diff --git a/drivers/char/tpm/tpm_eventlog_init.c b/drivers/char/tpm/tpm_eventlog_init.c new file mode 100644 index 0000000..038771a --- /dev/null +++ b/drivers/char/tpm/tpm_eventlog_init.c @@ -0,0 +1,143 @@ +/* + * Copyright (C) 2005, 2012 IBM Corporation + * + * Authors: + * Kent Yoder + * Seiji Munetoh + * Stefan Berger + * Reiner Sailer + * Kylene Hall + * Nayna Jain + * + * Maintained by: + * + * Defines TPM1.2 and TPM2.0 common initialization functions + * to access firmware eventlog. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version + * 2 of the License, or (at your option) any later version. + * + */ + +#include +#include +#include +#include +#include + +#include "tpm.h" +#include "tpm_eventlog.h" + +static int tpm_bios_measurements_release(struct inode *inode, + struct file *file) +{ + return seq_release(inode, file); +} + +static int tpm_bios_measurements_open(struct inode *inode, + struct file *file) +{ + int err; + struct seq_file *seq; + struct tpm_chip *chip; + const struct seq_operations *seqops = + (const struct seq_operations *)inode->i_private; + + chip = (struct tpm_chip + *)file->f_path.dentry->d_parent->d_inode->i_private; + + /* now register seq file */ + err = seq_open(file, seqops); + if (!err) { + seq = file->private_data; + seq->private = &chip->log; + } + + return err; +} + +static const struct file_operations tpm_bios_measurements_ops = { + .open = tpm_bios_measurements_open, + .read = seq_read, + .llseek = seq_lseek, + .release = tpm_bios_measurements_release, +}; + +static int is_bad(void *p) +{ + if (!p) + return 1; + if (IS_ERR(p) && (PTR_ERR(p) != -ENODEV)) + return 1; + return 0; +} + +int read_log(struct tpm_chip *chip) +{ + int rc; + + if (chip->log.bios_event_log != NULL) { + dev_dbg(&chip->dev, "%s:ERROR - Eventlog already initialized\n", + __func__); + return -EFAULT; + } + + rc = read_log_acpi(chip); + if (rc == 0) + return rc; + rc = read_log_of(chip); + return rc; +} + +void tpm_bios_log_setup(struct tpm_chip *chip) +{ + const char *name = dev_name(&chip->dev); + int rc = 0; + + rc = read_log(chip); + if (rc < 0) + return; + + chip->bios_dir_count = 0; + chip->bios_dir[chip->bios_dir_count] = securityfs_create_dir(name, + NULL); + if (is_bad(chip->bios_dir[chip->bios_dir_count])) + goto err; + chip->bios_dir[chip->bios_dir_count]->d_inode->i_private = chip; + chip->bios_dir_count++; + + chip->bios_dir[chip->bios_dir_count] = + securityfs_create_file("binary_bios_measurements", + S_IRUSR | S_IRGRP, chip->bios_dir[0], + (void *)&tpm_binary_b_measurments_seqops, + &tpm_bios_measurements_ops); + if (is_bad(chip->bios_dir[chip->bios_dir_count])) + goto err; + chip->bios_dir_count++; + + chip->bios_dir[chip->bios_dir_count] = + securityfs_create_file("ascii_bios_measurements", + S_IRUSR | S_IRGRP, chip->bios_dir[0], + (void *)&tpm_ascii_b_measurments_seqops, + &tpm_bios_measurements_ops); + if (is_bad(chip->bios_dir[chip->bios_dir_count])) + goto err; + chip->bios_dir_count++; + + return; + +err: + tpm_bios_log_teardown(chip); +} + +void tpm_bios_log_teardown(struct tpm_chip *chip) +{ + int i; + + for (i = chip->bios_dir_count; i > 0; --i) + securityfs_remove(chip->bios_dir[i-1]); + + kfree(chip->log.bios_event_log); +}