lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Tue, 19 Jul 2016 16:32:47 +0300 From: Jarkko Sakkinen <jarkko.sakkinen@...ux.intel.com> To: Peter Huewe <peterhuewe@....de>, Jason Gunthorpe <jgunthorpe@...idianresearch.com> Cc: linux-security-module@...r.kernel.org, Stefan Berger <stefanb@...ux.vnet.ibm.com>, Jarkko Sakkinen <jarkko.sakkinen@...ux.intel.com>, Marcel Selhorst <tpmdd@...horst.net>, tpmdd-devel@...ts.sourceforge.net (moderated list:TPM DEVICE DRIVER), linux-kernel@...r.kernel.org (open list) Subject: [PATCH v3 3/5] tpm: return error code from tpm_gen_interrupt() Return error code from tpm_gen_interrupt() and fail tpm_tis family of drivers on a system error. It doesn't make sense to continue if we cannot even reach the TPM. Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@...ux.intel.com> --- drivers/char/tpm/tpm-interface.c | 6 +++--- drivers/char/tpm/tpm.h | 2 +- drivers/char/tpm/tpm_tis_core.c | 4 +++- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/drivers/char/tpm/tpm-interface.c b/drivers/char/tpm/tpm-interface.c index 88dafcd..35b2722 100644 --- a/drivers/char/tpm/tpm-interface.c +++ b/drivers/char/tpm/tpm-interface.c @@ -466,16 +466,16 @@ ssize_t tpm_getcap(struct tpm_chip *chip, __be32 subcap_id, cap_t *cap, * Returns 0 on success, < 0 in case of fatal error or a value > 0 representing * a TPM error code. */ -void tpm_gen_interrupt(struct tpm_chip *chip) +int tpm_gen_interrupt(struct tpm_chip *chip) { const char *desc = "attempting to generate an interrupt"; u32 cap2; cap_t cap; if (chip->flags & TPM_CHIP_FLAG_TPM2) - tpm2_get_tpm_pt(chip, 0x100, &cap2, desc); + return tpm2_get_tpm_pt(chip, 0x100, &cap2, desc); else - tpm_getcap(chip, TPM_CAP_PROP_TIS_TIMEOUT, &cap, desc); + return tpm_getcap(chip, TPM_CAP_PROP_TIS_TIMEOUT, &cap, desc); } EXPORT_SYMBOL_GPL(tpm_gen_interrupt); diff --git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h index ec1f877..0cbb598 100644 --- a/drivers/char/tpm/tpm.h +++ b/drivers/char/tpm/tpm.h @@ -483,7 +483,7 @@ ssize_t tpm_transmit(struct tpm_chip *chip, const char *buf, ssize_t tpm_transmit_cmd(struct tpm_chip *chip, void *cmd, int len, const char *desc); int tpm_get_timeouts(struct tpm_chip *chip); -void tpm_gen_interrupt(struct tpm_chip *chip); +int tpm_gen_interrupt(struct tpm_chip *chip); int tpm1_auto_startup(struct tpm_chip *chip); int tpm_do_selftest(struct tpm_chip *chip); unsigned long tpm_calc_ordinal_duration(struct tpm_chip *chip, u32 ordinal); diff --git a/drivers/char/tpm/tpm_tis_core.c b/drivers/char/tpm/tpm_tis_core.c index b67d225..45159e1 100644 --- a/drivers/char/tpm/tpm_tis_core.c +++ b/drivers/char/tpm/tpm_tis_core.c @@ -575,7 +575,9 @@ static int tpm_tis_probe_irq_single(struct tpm_chip *chip, u32 intmask, /* Generate an interrupt by having the core call through to * tpm_tis_send */ - tpm_gen_interrupt(chip); + rc = tpm_gen_interrupt(chip); + if (rc < 0) + return rc; /* tpm_tis_send will either confirm the interrupt is working or it * will call disable_irq which undoes all of the above. -- 2.7.4
Powered by blists - more mailing lists