lkml.org 
[lkml]   [2019]   [Sep]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v4 1/3] tpm: Remove duplicate code from caps_show() in tpm-sysfs.c
    Date
    From: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>

    Replace existing TPM 1.x version structs with new structs that consolidate
    the common parts into a single struct so that code duplication is no longer
    needed in caps_show().

    Cc: Peter Huewe <peterhuewe@gmx.de>
    Cc: Jason Gunthorpe <jgg@ziepe.ca>
    Cc: Alexey Klimov <aklimov@redhat.com>
    Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
    Reviewed-by: Jerry Snitselaar <jsnitsel@redhat.com>
    Tested-by: Jerry Snitselaar <jsnitsel@redhat.com>
    ---
    drivers/char/tpm/tpm-sysfs.c | 45 ++++++++++++++++++------------------
    drivers/char/tpm/tpm.h | 23 ++++++++----------
    2 files changed, 33 insertions(+), 35 deletions(-)

    diff --git a/drivers/char/tpm/tpm-sysfs.c b/drivers/char/tpm/tpm-sysfs.c
    index d9caedda075b..eb05d5df4759 100644
    --- a/drivers/char/tpm/tpm-sysfs.c
    +++ b/drivers/char/tpm/tpm-sysfs.c
    @@ -217,6 +217,7 @@ static ssize_t caps_show(struct device *dev, struct device_attribute *attr,
    char *buf)
    {
    struct tpm_chip *chip = to_tpm_chip(dev);
    + struct tpm1_version *version;
    ssize_t rc = 0;
    char *str = buf;
    cap_t cap;
    @@ -232,31 +233,31 @@ static ssize_t caps_show(struct device *dev, struct device_attribute *attr,
    str += sprintf(str, "Manufacturer: 0x%x\n",
    be32_to_cpu(cap.manufacturer_id));

    - /* Try to get a TPM version 1.2 TPM_CAP_VERSION_INFO */
    - rc = tpm1_getcap(chip, TPM_CAP_VERSION_1_2, &cap,
    + /* TPM 1.2 */
    + if (!tpm1_getcap(chip, TPM_CAP_VERSION_1_2, &cap,
    "attempting to determine the 1.2 version",
    - sizeof(cap.tpm_version_1_2));
    - if (!rc) {
    - str += sprintf(str,
    - "TCG version: %d.%d\nFirmware version: %d.%d\n",
    - cap.tpm_version_1_2.Major,
    - cap.tpm_version_1_2.Minor,
    - cap.tpm_version_1_2.revMajor,
    - cap.tpm_version_1_2.revMinor);
    - } else {
    - /* Otherwise just use TPM_STRUCT_VER */
    - if (tpm1_getcap(chip, TPM_CAP_VERSION_1_1, &cap,
    - "attempting to determine the 1.1 version",
    - sizeof(cap.tpm_version)))
    - goto out_ops;
    - str += sprintf(str,
    - "TCG version: %d.%d\nFirmware version: %d.%d\n",
    - cap.tpm_version.Major,
    - cap.tpm_version.Minor,
    - cap.tpm_version.revMajor,
    - cap.tpm_version.revMinor);
    + sizeof(cap.version2))) {
    + version = &cap.version2.version;
    + goto out_print;
    }
    +
    + /* TPM 1.1 */
    + if (tpm1_getcap(chip, TPM_CAP_VERSION_1_1, &cap,
    + "attempting to determine the 1.1 version",
    + sizeof(cap.version1))) {
    + goto out_ops;
    + }
    +
    + version = &cap.version1;
    +
    +out_print:
    + str += sprintf(str,
    + "TCG version: %d.%d\nFirmware version: %d.%d\n",
    + version->major, version->minor,
    + version->rev_major, version->rev_minor);
    +
    rc = str - buf;
    +
    out_ops:
    tpm_put_ops(chip);
    return rc;
    diff --git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h
    index a7fea3e0ca86..a4f74dd02a35 100644
    --- a/drivers/char/tpm/tpm.h
    +++ b/drivers/char/tpm/tpm.h
    @@ -186,19 +186,16 @@ struct stclear_flags_t {
    u8 bGlobalLock;
    } __packed;

    -struct tpm_version_t {
    - u8 Major;
    - u8 Minor;
    - u8 revMajor;
    - u8 revMinor;
    +struct tpm1_version {
    + u8 major;
    + u8 minor;
    + u8 rev_major;
    + u8 rev_minor;
    } __packed;

    -struct tpm_version_1_2_t {
    - __be16 tag;
    - u8 Major;
    - u8 Minor;
    - u8 revMajor;
    - u8 revMinor;
    +struct tpm1_version2 {
    + __be16 tag;
    + struct tpm1_version version;
    } __packed;

    struct timeout_t {
    @@ -243,8 +240,8 @@ typedef union {
    struct stclear_flags_t stclear_flags;
    __u8 owned;
    __be32 num_pcrs;
    - struct tpm_version_t tpm_version;
    - struct tpm_version_1_2_t tpm_version_1_2;
    + struct tpm1_version version1;
    + struct tpm1_version2 version2;
    __be32 manufacturer_id;
    struct timeout_t timeout;
    struct duration_t duration;
    --
    2.21.0
    \
     
     \ /
      Last update: 2019-09-02 16:28    [W:4.379 / U:0.204 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site