All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v4] tpm_crb: request and relinquish locality 0
@ 2017-03-24 10:10 ` Jarkko Sakkinen
  0 siblings, 0 replies; 28+ messages in thread
From: Jarkko Sakkinen @ 2017-03-24 10:10 UTC (permalink / raw)
  To: tpmdd-devel
  Cc: linux-security-module, Jerry Snitselaar, gang.wei,
	Jarkko Sakkinen, Jarkko Sakkinen, Peter Huewe, Marcel Selhorst,
	Jason Gunthorpe, open list

This commit adds support for requesting and relinquishing locality 0 in
tpm_crb for the course of command transmission.

In order to achieve this, two new callbacks are added to struct
tpm_class_ops:

- request_locality
- relinquish_locality

With CRB interface you first set either requestAccess or relinquish bit
from TPM_LOC_CTRL_x register and then wait for locAssigned and
tpmRegValidSts bits to be set in the TPM_LOC_STATE_x register.

The reason why were are doing this is to make sure that the driver
will work properly with Intel TXT that uses locality 2. There's no
explicit guarantee that it would relinquish this locality. In more
general sense this commit enables tpm_crb to be a well behaving
citizen in a multi locality environment.

Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
---
v2:
- TPM driver level calllbacks
v3:
- Call ops->relinquish_locality only if ops->request_locality has been
  successful.
- Do not reserve locality in nested tpm_transmit calls.
- Check for tpmRegValidSts to make sure that the value in TPM_LOC_STATE_x is
  stable.
v4:
- Removed tpm_tis_core changes. It needs to be done separately. It will be
  postponed to 4.13.
- Store locality to struct tpm_chip while active.
 drivers/char/tpm/tpm-chip.c      |  1 +
 drivers/char/tpm/tpm-interface.c | 13 +++++++++++++
 drivers/char/tpm/tpm.h           |  3 +++
 drivers/char/tpm/tpm_crb.c       | 41 ++++++++++++++++++++++++++++++++++++++++
 include/linux/tpm.h              |  3 ++-
 5 files changed, 60 insertions(+), 1 deletion(-)

diff --git a/drivers/char/tpm/tpm-chip.c b/drivers/char/tpm/tpm-chip.c
index aade699..a321bd5 100644
--- a/drivers/char/tpm/tpm-chip.c
+++ b/drivers/char/tpm/tpm-chip.c
@@ -231,6 +231,7 @@ struct tpm_chip *tpm_chip_alloc(struct device *pdev,
 		goto out;
 	}
 
+	chip->locality = -1;
 	return chip;
 
 out:
diff --git a/drivers/char/tpm/tpm-interface.c b/drivers/char/tpm/tpm-interface.c
index 95c6f98..1815666 100644
--- a/drivers/char/tpm/tpm-interface.c
+++ b/drivers/char/tpm/tpm-interface.c
@@ -384,6 +384,7 @@ ssize_t tpm_transmit(struct tpm_chip *chip, struct tpm_space *space,
 	ssize_t len = 0;
 	u32 count, ordinal;
 	unsigned long stop;
+	bool need_locality = chip->locality == -1;
 
 	if (!tpm_validate_command(chip, buf, bufsiz))
 		return -EINVAL;
@@ -407,6 +408,13 @@ ssize_t tpm_transmit(struct tpm_chip *chip, struct tpm_space *space,
 	if (chip->dev.parent)
 		pm_runtime_get_sync(chip->dev.parent);
 
+	if (need_locality && chip->ops->request_locality)  {
+		rc = chip->ops->request_locality(chip, 0);
+		if (rc < 0)
+			goto out_no_locality;
+		chip->locality = rc;
+	}
+
 	rc = tpm2_prepare_space(chip, space, ordinal, buf);
 	if (rc)
 		goto out;
@@ -466,6 +474,11 @@ ssize_t tpm_transmit(struct tpm_chip *chip, struct tpm_space *space,
 	rc = tpm2_commit_space(chip, space, ordinal, buf, &len);
 
 out:
+	if (need_locality && chip->ops->relinquish_locality) {
+		chip->ops->relinquish_locality(chip, 0);
+		chip->locality = -1;
+	}
+out_no_locality:
 	if (chip->dev.parent)
 		pm_runtime_put_sync(chip->dev.parent);
 
diff --git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h
index 5eacb3f..4b4c8de 100644
--- a/drivers/char/tpm/tpm.h
+++ b/drivers/char/tpm/tpm.h
@@ -228,6 +228,9 @@ struct tpm_chip {
 	struct tpm_space work_space;
 	u32 nr_commands;
 	u32 *cc_attrs_tbl;
+
+	/* active locality */
+	int locality;
 };
 
 #define to_tpm_chip(d) container_of(d, struct tpm_chip, dev)
diff --git a/drivers/char/tpm/tpm_crb.c b/drivers/char/tpm/tpm_crb.c
index 9f31609..d91e47d 100644
--- a/drivers/char/tpm/tpm_crb.c
+++ b/drivers/char/tpm/tpm_crb.c
@@ -34,6 +34,16 @@ enum crb_defaults {
 	CRB_ACPI_START_INDEX = 1,
 };
 
+enum crb_loc_ctrl {
+	CRB_LOC_CTRL_REQUEST_ACCESS	= BIT(0),
+	CRB_LOC_CTRL_RELINQUISH		= BIT(1),
+};
+
+enum crb_loc_state {
+	CRB_LOC_STATE_LOC_ASSIGNED	= BIT(1),
+	CRB_LOC_STATE_TPM_REG_VALID_STS	= BIT(7),
+};
+
 enum crb_ctrl_req {
 	CRB_CTRL_REQ_CMD_READY	= BIT(0),
 	CRB_CTRL_REQ_GO_IDLE	= BIT(1),
@@ -172,6 +182,35 @@ static int __maybe_unused crb_cmd_ready(struct device *dev,
 	return 0;
 }
 
+static int crb_request_locality(struct tpm_chip *chip, int loc)
+{
+	struct crb_priv *priv = dev_get_drvdata(&chip->dev);
+	u32 value = CRB_LOC_STATE_LOC_ASSIGNED |
+		CRB_LOC_STATE_TPM_REG_VALID_STS;
+
+	if (!priv->regs_h)
+		return 0;
+
+	iowrite32(CRB_LOC_CTRL_REQUEST_ACCESS, &priv->regs_h->loc_ctrl);
+	if (!crb_wait_for_reg_32(&priv->regs_h->loc_state, value, value,
+				 TPM2_TIMEOUT_C)) {
+		dev_warn(&chip->dev, "TPM_LOC_STATE_x.requestAccess timed out\n");
+		return -ETIME;
+	}
+
+	return 0;
+}
+
+static void crb_relinquish_locality(struct tpm_chip *chip, int loc)
+{
+	struct crb_priv *priv = dev_get_drvdata(&chip->dev);
+
+	if (!priv->regs_h)
+		return;
+
+	iowrite32(CRB_LOC_CTRL_RELINQUISH, &priv->regs_h->loc_ctrl);
+}
+
 static u8 crb_status(struct tpm_chip *chip)
 {
 	struct crb_priv *priv = dev_get_drvdata(&chip->dev);
@@ -278,6 +317,8 @@ static const struct tpm_class_ops tpm_crb = {
 	.send = crb_send,
 	.cancel = crb_cancel,
 	.req_canceled = crb_req_canceled,
+	.request_locality = crb_request_locality,
+	.relinquish_locality = crb_relinquish_locality,
 	.req_complete_mask = CRB_DRV_STS_COMPLETE,
 	.req_complete_val = CRB_DRV_STS_COMPLETE,
 };
diff --git a/include/linux/tpm.h b/include/linux/tpm.h
index da158f0..5a090f5 100644
--- a/include/linux/tpm.h
+++ b/include/linux/tpm.h
@@ -48,7 +48,8 @@ struct tpm_class_ops {
 	u8 (*status) (struct tpm_chip *chip);
 	bool (*update_timeouts)(struct tpm_chip *chip,
 				unsigned long *timeout_cap);
-
+	int (*request_locality)(struct tpm_chip *chip, int loc);
+	void (*relinquish_locality)(struct tpm_chip *chip, int loc);
 };
 
 #if defined(CONFIG_TCG_TPM) || defined(CONFIG_TCG_TPM_MODULE)
-- 
2.9.3

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [PATCH v4] tpm_crb: request and relinquish locality 0
@ 2017-03-24 10:10 ` Jarkko Sakkinen
  0 siblings, 0 replies; 28+ messages in thread
From: Jarkko Sakkinen @ 2017-03-24 10:10 UTC (permalink / raw)
  To: linux-security-module

This commit adds support for requesting and relinquishing locality 0 in
tpm_crb for the course of command transmission.

In order to achieve this, two new callbacks are added to struct
tpm_class_ops:

- request_locality
- relinquish_locality

With CRB interface you first set either requestAccess or relinquish bit
from TPM_LOC_CTRL_x register and then wait for locAssigned and
tpmRegValidSts bits to be set in the TPM_LOC_STATE_x register.

The reason why were are doing this is to make sure that the driver
will work properly with Intel TXT that uses locality 2. There's no
explicit guarantee that it would relinquish this locality. In more
general sense this commit enables tpm_crb to be a well behaving
citizen in a multi locality environment.

Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
---
v2:
- TPM driver level calllbacks
v3:
- Call ops->relinquish_locality only if ops->request_locality has been
  successful.
- Do not reserve locality in nested tpm_transmit calls.
- Check for tpmRegValidSts to make sure that the value in TPM_LOC_STATE_x is
  stable.
v4:
- Removed tpm_tis_core changes. It needs to be done separately. It will be
  postponed to 4.13.
- Store locality to struct tpm_chip while active.
 drivers/char/tpm/tpm-chip.c      |  1 +
 drivers/char/tpm/tpm-interface.c | 13 +++++++++++++
 drivers/char/tpm/tpm.h           |  3 +++
 drivers/char/tpm/tpm_crb.c       | 41 ++++++++++++++++++++++++++++++++++++++++
 include/linux/tpm.h              |  3 ++-
 5 files changed, 60 insertions(+), 1 deletion(-)

diff --git a/drivers/char/tpm/tpm-chip.c b/drivers/char/tpm/tpm-chip.c
index aade699..a321bd5 100644
--- a/drivers/char/tpm/tpm-chip.c
+++ b/drivers/char/tpm/tpm-chip.c
@@ -231,6 +231,7 @@ struct tpm_chip *tpm_chip_alloc(struct device *pdev,
 		goto out;
 	}
 
+	chip->locality = -1;
 	return chip;
 
 out:
diff --git a/drivers/char/tpm/tpm-interface.c b/drivers/char/tpm/tpm-interface.c
index 95c6f98..1815666 100644
--- a/drivers/char/tpm/tpm-interface.c
+++ b/drivers/char/tpm/tpm-interface.c
@@ -384,6 +384,7 @@ ssize_t tpm_transmit(struct tpm_chip *chip, struct tpm_space *space,
 	ssize_t len = 0;
 	u32 count, ordinal;
 	unsigned long stop;
+	bool need_locality = chip->locality == -1;
 
 	if (!tpm_validate_command(chip, buf, bufsiz))
 		return -EINVAL;
@@ -407,6 +408,13 @@ ssize_t tpm_transmit(struct tpm_chip *chip, struct tpm_space *space,
 	if (chip->dev.parent)
 		pm_runtime_get_sync(chip->dev.parent);
 
+	if (need_locality && chip->ops->request_locality)  {
+		rc = chip->ops->request_locality(chip, 0);
+		if (rc < 0)
+			goto out_no_locality;
+		chip->locality = rc;
+	}
+
 	rc = tpm2_prepare_space(chip, space, ordinal, buf);
 	if (rc)
 		goto out;
@@ -466,6 +474,11 @@ ssize_t tpm_transmit(struct tpm_chip *chip, struct tpm_space *space,
 	rc = tpm2_commit_space(chip, space, ordinal, buf, &len);
 
 out:
+	if (need_locality && chip->ops->relinquish_locality) {
+		chip->ops->relinquish_locality(chip, 0);
+		chip->locality = -1;
+	}
+out_no_locality:
 	if (chip->dev.parent)
 		pm_runtime_put_sync(chip->dev.parent);
 
diff --git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h
index 5eacb3f..4b4c8de 100644
--- a/drivers/char/tpm/tpm.h
+++ b/drivers/char/tpm/tpm.h
@@ -228,6 +228,9 @@ struct tpm_chip {
 	struct tpm_space work_space;
 	u32 nr_commands;
 	u32 *cc_attrs_tbl;
+
+	/* active locality */
+	int locality;
 };
 
 #define to_tpm_chip(d) container_of(d, struct tpm_chip, dev)
diff --git a/drivers/char/tpm/tpm_crb.c b/drivers/char/tpm/tpm_crb.c
index 9f31609..d91e47d 100644
--- a/drivers/char/tpm/tpm_crb.c
+++ b/drivers/char/tpm/tpm_crb.c
@@ -34,6 +34,16 @@ enum crb_defaults {
 	CRB_ACPI_START_INDEX = 1,
 };
 
+enum crb_loc_ctrl {
+	CRB_LOC_CTRL_REQUEST_ACCESS	= BIT(0),
+	CRB_LOC_CTRL_RELINQUISH		= BIT(1),
+};
+
+enum crb_loc_state {
+	CRB_LOC_STATE_LOC_ASSIGNED	= BIT(1),
+	CRB_LOC_STATE_TPM_REG_VALID_STS	= BIT(7),
+};
+
 enum crb_ctrl_req {
 	CRB_CTRL_REQ_CMD_READY	= BIT(0),
 	CRB_CTRL_REQ_GO_IDLE	= BIT(1),
@@ -172,6 +182,35 @@ static int __maybe_unused crb_cmd_ready(struct device *dev,
 	return 0;
 }
 
+static int crb_request_locality(struct tpm_chip *chip, int loc)
+{
+	struct crb_priv *priv = dev_get_drvdata(&chip->dev);
+	u32 value = CRB_LOC_STATE_LOC_ASSIGNED |
+		CRB_LOC_STATE_TPM_REG_VALID_STS;
+
+	if (!priv->regs_h)
+		return 0;
+
+	iowrite32(CRB_LOC_CTRL_REQUEST_ACCESS, &priv->regs_h->loc_ctrl);
+	if (!crb_wait_for_reg_32(&priv->regs_h->loc_state, value, value,
+				 TPM2_TIMEOUT_C)) {
+		dev_warn(&chip->dev, "TPM_LOC_STATE_x.requestAccess timed out\n");
+		return -ETIME;
+	}
+
+	return 0;
+}
+
+static void crb_relinquish_locality(struct tpm_chip *chip, int loc)
+{
+	struct crb_priv *priv = dev_get_drvdata(&chip->dev);
+
+	if (!priv->regs_h)
+		return;
+
+	iowrite32(CRB_LOC_CTRL_RELINQUISH, &priv->regs_h->loc_ctrl);
+}
+
 static u8 crb_status(struct tpm_chip *chip)
 {
 	struct crb_priv *priv = dev_get_drvdata(&chip->dev);
@@ -278,6 +317,8 @@ static const struct tpm_class_ops tpm_crb = {
 	.send = crb_send,
 	.cancel = crb_cancel,
 	.req_canceled = crb_req_canceled,
+	.request_locality = crb_request_locality,
+	.relinquish_locality = crb_relinquish_locality,
 	.req_complete_mask = CRB_DRV_STS_COMPLETE,
 	.req_complete_val = CRB_DRV_STS_COMPLETE,
 };
diff --git a/include/linux/tpm.h b/include/linux/tpm.h
index da158f0..5a090f5 100644
--- a/include/linux/tpm.h
+++ b/include/linux/tpm.h
@@ -48,7 +48,8 @@ struct tpm_class_ops {
 	u8 (*status) (struct tpm_chip *chip);
 	bool (*update_timeouts)(struct tpm_chip *chip,
 				unsigned long *timeout_cap);
-
+	int (*request_locality)(struct tpm_chip *chip, int loc);
+	void (*relinquish_locality)(struct tpm_chip *chip, int loc);
 };
 
 #if defined(CONFIG_TCG_TPM) || defined(CONFIG_TCG_TPM_MODULE)
-- 
2.9.3

--
To unsubscribe from this list: send the line "unsubscribe linux-security-module" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [PATCH v4] tpm_crb: request and relinquish locality 0
@ 2017-03-24 10:10 ` Jarkko Sakkinen
  0 siblings, 0 replies; 28+ messages in thread
From: Jarkko Sakkinen @ 2017-03-24 10:10 UTC (permalink / raw)
  To: tpmdd-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f
  Cc: Jarkko Sakkinen, open list,
	linux-security-module-u79uwXL29TY76Z2rM5mHXA,
	gang.wei-ral2JQCrhuEAvxtiuMwx3w

This commit adds support for requesting and relinquishing locality 0 in
tpm_crb for the course of command transmission.

In order to achieve this, two new callbacks are added to struct
tpm_class_ops:

- request_locality
- relinquish_locality

With CRB interface you first set either requestAccess or relinquish bit
from TPM_LOC_CTRL_x register and then wait for locAssigned and
tpmRegValidSts bits to be set in the TPM_LOC_STATE_x register.

The reason why were are doing this is to make sure that the driver
will work properly with Intel TXT that uses locality 2. There's no
explicit guarantee that it would relinquish this locality. In more
general sense this commit enables tpm_crb to be a well behaving
citizen in a multi locality environment.

Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
---
v2:
- TPM driver level calllbacks
v3:
- Call ops->relinquish_locality only if ops->request_locality has been
  successful.
- Do not reserve locality in nested tpm_transmit calls.
- Check for tpmRegValidSts to make sure that the value in TPM_LOC_STATE_x is
  stable.
v4:
- Removed tpm_tis_core changes. It needs to be done separately. It will be
  postponed to 4.13.
- Store locality to struct tpm_chip while active.
 drivers/char/tpm/tpm-chip.c      |  1 +
 drivers/char/tpm/tpm-interface.c | 13 +++++++++++++
 drivers/char/tpm/tpm.h           |  3 +++
 drivers/char/tpm/tpm_crb.c       | 41 ++++++++++++++++++++++++++++++++++++++++
 include/linux/tpm.h              |  3 ++-
 5 files changed, 60 insertions(+), 1 deletion(-)

diff --git a/drivers/char/tpm/tpm-chip.c b/drivers/char/tpm/tpm-chip.c
index aade699..a321bd5 100644
--- a/drivers/char/tpm/tpm-chip.c
+++ b/drivers/char/tpm/tpm-chip.c
@@ -231,6 +231,7 @@ struct tpm_chip *tpm_chip_alloc(struct device *pdev,
 		goto out;
 	}
 
+	chip->locality = -1;
 	return chip;
 
 out:
diff --git a/drivers/char/tpm/tpm-interface.c b/drivers/char/tpm/tpm-interface.c
index 95c6f98..1815666 100644
--- a/drivers/char/tpm/tpm-interface.c
+++ b/drivers/char/tpm/tpm-interface.c
@@ -384,6 +384,7 @@ ssize_t tpm_transmit(struct tpm_chip *chip, struct tpm_space *space,
 	ssize_t len = 0;
 	u32 count, ordinal;
 	unsigned long stop;
+	bool need_locality = chip->locality == -1;
 
 	if (!tpm_validate_command(chip, buf, bufsiz))
 		return -EINVAL;
@@ -407,6 +408,13 @@ ssize_t tpm_transmit(struct tpm_chip *chip, struct tpm_space *space,
 	if (chip->dev.parent)
 		pm_runtime_get_sync(chip->dev.parent);
 
+	if (need_locality && chip->ops->request_locality)  {
+		rc = chip->ops->request_locality(chip, 0);
+		if (rc < 0)
+			goto out_no_locality;
+		chip->locality = rc;
+	}
+
 	rc = tpm2_prepare_space(chip, space, ordinal, buf);
 	if (rc)
 		goto out;
@@ -466,6 +474,11 @@ ssize_t tpm_transmit(struct tpm_chip *chip, struct tpm_space *space,
 	rc = tpm2_commit_space(chip, space, ordinal, buf, &len);
 
 out:
+	if (need_locality && chip->ops->relinquish_locality) {
+		chip->ops->relinquish_locality(chip, 0);
+		chip->locality = -1;
+	}
+out_no_locality:
 	if (chip->dev.parent)
 		pm_runtime_put_sync(chip->dev.parent);
 
diff --git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h
index 5eacb3f..4b4c8de 100644
--- a/drivers/char/tpm/tpm.h
+++ b/drivers/char/tpm/tpm.h
@@ -228,6 +228,9 @@ struct tpm_chip {
 	struct tpm_space work_space;
 	u32 nr_commands;
 	u32 *cc_attrs_tbl;
+
+	/* active locality */
+	int locality;
 };
 
 #define to_tpm_chip(d) container_of(d, struct tpm_chip, dev)
diff --git a/drivers/char/tpm/tpm_crb.c b/drivers/char/tpm/tpm_crb.c
index 9f31609..d91e47d 100644
--- a/drivers/char/tpm/tpm_crb.c
+++ b/drivers/char/tpm/tpm_crb.c
@@ -34,6 +34,16 @@ enum crb_defaults {
 	CRB_ACPI_START_INDEX = 1,
 };
 
+enum crb_loc_ctrl {
+	CRB_LOC_CTRL_REQUEST_ACCESS	= BIT(0),
+	CRB_LOC_CTRL_RELINQUISH		= BIT(1),
+};
+
+enum crb_loc_state {
+	CRB_LOC_STATE_LOC_ASSIGNED	= BIT(1),
+	CRB_LOC_STATE_TPM_REG_VALID_STS	= BIT(7),
+};
+
 enum crb_ctrl_req {
 	CRB_CTRL_REQ_CMD_READY	= BIT(0),
 	CRB_CTRL_REQ_GO_IDLE	= BIT(1),
@@ -172,6 +182,35 @@ static int __maybe_unused crb_cmd_ready(struct device *dev,
 	return 0;
 }
 
+static int crb_request_locality(struct tpm_chip *chip, int loc)
+{
+	struct crb_priv *priv = dev_get_drvdata(&chip->dev);
+	u32 value = CRB_LOC_STATE_LOC_ASSIGNED |
+		CRB_LOC_STATE_TPM_REG_VALID_STS;
+
+	if (!priv->regs_h)
+		return 0;
+
+	iowrite32(CRB_LOC_CTRL_REQUEST_ACCESS, &priv->regs_h->loc_ctrl);
+	if (!crb_wait_for_reg_32(&priv->regs_h->loc_state, value, value,
+				 TPM2_TIMEOUT_C)) {
+		dev_warn(&chip->dev, "TPM_LOC_STATE_x.requestAccess timed out\n");
+		return -ETIME;
+	}
+
+	return 0;
+}
+
+static void crb_relinquish_locality(struct tpm_chip *chip, int loc)
+{
+	struct crb_priv *priv = dev_get_drvdata(&chip->dev);
+
+	if (!priv->regs_h)
+		return;
+
+	iowrite32(CRB_LOC_CTRL_RELINQUISH, &priv->regs_h->loc_ctrl);
+}
+
 static u8 crb_status(struct tpm_chip *chip)
 {
 	struct crb_priv *priv = dev_get_drvdata(&chip->dev);
@@ -278,6 +317,8 @@ static const struct tpm_class_ops tpm_crb = {
 	.send = crb_send,
 	.cancel = crb_cancel,
 	.req_canceled = crb_req_canceled,
+	.request_locality = crb_request_locality,
+	.relinquish_locality = crb_relinquish_locality,
 	.req_complete_mask = CRB_DRV_STS_COMPLETE,
 	.req_complete_val = CRB_DRV_STS_COMPLETE,
 };
diff --git a/include/linux/tpm.h b/include/linux/tpm.h
index da158f0..5a090f5 100644
--- a/include/linux/tpm.h
+++ b/include/linux/tpm.h
@@ -48,7 +48,8 @@ struct tpm_class_ops {
 	u8 (*status) (struct tpm_chip *chip);
 	bool (*update_timeouts)(struct tpm_chip *chip,
 				unsigned long *timeout_cap);
-
+	int (*request_locality)(struct tpm_chip *chip, int loc);
+	void (*relinquish_locality)(struct tpm_chip *chip, int loc);
 };
 
 #if defined(CONFIG_TCG_TPM) || defined(CONFIG_TCG_TPM_MODULE)
-- 
2.9.3


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* Re: [PATCH v4] tpm_crb: request and relinquish locality 0
  2017-03-24 10:10 ` Jarkko Sakkinen
  (?)
@ 2017-03-24 10:19   ` Jarkko Sakkinen
  -1 siblings, 0 replies; 28+ messages in thread
From: Jarkko Sakkinen @ 2017-03-24 10:19 UTC (permalink / raw)
  To: Jarkko Sakkinen
  Cc: tpmdd-devel, linux-security-module, Jerry Snitselaar, gang.wei,
	Peter Huewe, Marcel Selhorst, Jason Gunthorpe, open list

On Fri, Mar 24, 2017 at 12:10:30PM +0200, Jarkko Sakkinen wrote:
> This commit adds support for requesting and relinquishing locality 0 in
> tpm_crb for the course of command transmission.
> 
> In order to achieve this, two new callbacks are added to struct
> tpm_class_ops:
> 
> - request_locality
> - relinquish_locality
> 
> With CRB interface you first set either requestAccess or relinquish bit
> from TPM_LOC_CTRL_x register and then wait for locAssigned and
> tpmRegValidSts bits to be set in the TPM_LOC_STATE_x register.
> 
> The reason why were are doing this is to make sure that the driver
> will work properly with Intel TXT that uses locality 2. There's no
> explicit guarantee that it would relinquish this locality. In more
> general sense this commit enables tpm_crb to be a well behaving
> citizen in a multi locality environment.
> 
> Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
> ---
> v2:
> - TPM driver level calllbacks
> v3:
> - Call ops->relinquish_locality only if ops->request_locality has been
>   successful.
> - Do not reserve locality in nested tpm_transmit calls.
> - Check for tpmRegValidSts to make sure that the value in TPM_LOC_STATE_x is
>   stable.
> v4:
> - Removed tpm_tis_core changes. It needs to be done separately. It will be
>   postponed to 4.13.
> - Store locality to struct tpm_chip while active.
>  drivers/char/tpm/tpm-chip.c      |  1 +
>  drivers/char/tpm/tpm-interface.c | 13 +++++++++++++
>  drivers/char/tpm/tpm.h           |  3 +++
>  drivers/char/tpm/tpm_crb.c       | 41 ++++++++++++++++++++++++++++++++++++++++
>  include/linux/tpm.h              |  3 ++-
>  5 files changed, 60 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/char/tpm/tpm-chip.c b/drivers/char/tpm/tpm-chip.c
> index aade699..a321bd5 100644
> --- a/drivers/char/tpm/tpm-chip.c
> +++ b/drivers/char/tpm/tpm-chip.c
> @@ -231,6 +231,7 @@ struct tpm_chip *tpm_chip_alloc(struct device *pdev,
>  		goto out;
>  	}
>  
> +	chip->locality = -1;
>  	return chip;
>  
>  out:
> diff --git a/drivers/char/tpm/tpm-interface.c b/drivers/char/tpm/tpm-interface.c
> index 95c6f98..1815666 100644
> --- a/drivers/char/tpm/tpm-interface.c
> +++ b/drivers/char/tpm/tpm-interface.c
> @@ -384,6 +384,7 @@ ssize_t tpm_transmit(struct tpm_chip *chip, struct tpm_space *space,
>  	ssize_t len = 0;
>  	u32 count, ordinal;
>  	unsigned long stop;
> +	bool need_locality = chip->locality == -1;

This must be set *after* taking the mutex. Otherwise, I think this
should be fine now.

/Jarkko

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [PATCH v4] tpm_crb: request and relinquish locality 0
@ 2017-03-24 10:19   ` Jarkko Sakkinen
  0 siblings, 0 replies; 28+ messages in thread
From: Jarkko Sakkinen @ 2017-03-24 10:19 UTC (permalink / raw)
  To: linux-security-module

On Fri, Mar 24, 2017 at 12:10:30PM +0200, Jarkko Sakkinen wrote:
> This commit adds support for requesting and relinquishing locality 0 in
> tpm_crb for the course of command transmission.
> 
> In order to achieve this, two new callbacks are added to struct
> tpm_class_ops:
> 
> - request_locality
> - relinquish_locality
> 
> With CRB interface you first set either requestAccess or relinquish bit
> from TPM_LOC_CTRL_x register and then wait for locAssigned and
> tpmRegValidSts bits to be set in the TPM_LOC_STATE_x register.
> 
> The reason why were are doing this is to make sure that the driver
> will work properly with Intel TXT that uses locality 2. There's no
> explicit guarantee that it would relinquish this locality. In more
> general sense this commit enables tpm_crb to be a well behaving
> citizen in a multi locality environment.
> 
> Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
> ---
> v2:
> - TPM driver level calllbacks
> v3:
> - Call ops->relinquish_locality only if ops->request_locality has been
>   successful.
> - Do not reserve locality in nested tpm_transmit calls.
> - Check for tpmRegValidSts to make sure that the value in TPM_LOC_STATE_x is
>   stable.
> v4:
> - Removed tpm_tis_core changes. It needs to be done separately. It will be
>   postponed to 4.13.
> - Store locality to struct tpm_chip while active.
>  drivers/char/tpm/tpm-chip.c      |  1 +
>  drivers/char/tpm/tpm-interface.c | 13 +++++++++++++
>  drivers/char/tpm/tpm.h           |  3 +++
>  drivers/char/tpm/tpm_crb.c       | 41 ++++++++++++++++++++++++++++++++++++++++
>  include/linux/tpm.h              |  3 ++-
>  5 files changed, 60 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/char/tpm/tpm-chip.c b/drivers/char/tpm/tpm-chip.c
> index aade699..a321bd5 100644
> --- a/drivers/char/tpm/tpm-chip.c
> +++ b/drivers/char/tpm/tpm-chip.c
> @@ -231,6 +231,7 @@ struct tpm_chip *tpm_chip_alloc(struct device *pdev,
>  		goto out;
>  	}
>  
> +	chip->locality = -1;
>  	return chip;
>  
>  out:
> diff --git a/drivers/char/tpm/tpm-interface.c b/drivers/char/tpm/tpm-interface.c
> index 95c6f98..1815666 100644
> --- a/drivers/char/tpm/tpm-interface.c
> +++ b/drivers/char/tpm/tpm-interface.c
> @@ -384,6 +384,7 @@ ssize_t tpm_transmit(struct tpm_chip *chip, struct tpm_space *space,
>  	ssize_t len = 0;
>  	u32 count, ordinal;
>  	unsigned long stop;
> +	bool need_locality = chip->locality == -1;

This must be set *after* taking the mutex. Otherwise, I think this
should be fine now.

/Jarkko
--
To unsubscribe from this list: send the line "unsubscribe linux-security-module" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH v4] tpm_crb: request and relinquish locality 0
@ 2017-03-24 10:19   ` Jarkko Sakkinen
  0 siblings, 0 replies; 28+ messages in thread
From: Jarkko Sakkinen @ 2017-03-24 10:19 UTC (permalink / raw)
  To: Jarkko Sakkinen
  Cc: open list, linux-security-module-u79uwXL29TY76Z2rM5mHXA,
	tpmdd-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f,
	gang.wei-ral2JQCrhuEAvxtiuMwx3w

On Fri, Mar 24, 2017 at 12:10:30PM +0200, Jarkko Sakkinen wrote:
> This commit adds support for requesting and relinquishing locality 0 in
> tpm_crb for the course of command transmission.
> 
> In order to achieve this, two new callbacks are added to struct
> tpm_class_ops:
> 
> - request_locality
> - relinquish_locality
> 
> With CRB interface you first set either requestAccess or relinquish bit
> from TPM_LOC_CTRL_x register and then wait for locAssigned and
> tpmRegValidSts bits to be set in the TPM_LOC_STATE_x register.
> 
> The reason why were are doing this is to make sure that the driver
> will work properly with Intel TXT that uses locality 2. There's no
> explicit guarantee that it would relinquish this locality. In more
> general sense this commit enables tpm_crb to be a well behaving
> citizen in a multi locality environment.
> 
> Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
> ---
> v2:
> - TPM driver level calllbacks
> v3:
> - Call ops->relinquish_locality only if ops->request_locality has been
>   successful.
> - Do not reserve locality in nested tpm_transmit calls.
> - Check for tpmRegValidSts to make sure that the value in TPM_LOC_STATE_x is
>   stable.
> v4:
> - Removed tpm_tis_core changes. It needs to be done separately. It will be
>   postponed to 4.13.
> - Store locality to struct tpm_chip while active.
>  drivers/char/tpm/tpm-chip.c      |  1 +
>  drivers/char/tpm/tpm-interface.c | 13 +++++++++++++
>  drivers/char/tpm/tpm.h           |  3 +++
>  drivers/char/tpm/tpm_crb.c       | 41 ++++++++++++++++++++++++++++++++++++++++
>  include/linux/tpm.h              |  3 ++-
>  5 files changed, 60 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/char/tpm/tpm-chip.c b/drivers/char/tpm/tpm-chip.c
> index aade699..a321bd5 100644
> --- a/drivers/char/tpm/tpm-chip.c
> +++ b/drivers/char/tpm/tpm-chip.c
> @@ -231,6 +231,7 @@ struct tpm_chip *tpm_chip_alloc(struct device *pdev,
>  		goto out;
>  	}
>  
> +	chip->locality = -1;
>  	return chip;
>  
>  out:
> diff --git a/drivers/char/tpm/tpm-interface.c b/drivers/char/tpm/tpm-interface.c
> index 95c6f98..1815666 100644
> --- a/drivers/char/tpm/tpm-interface.c
> +++ b/drivers/char/tpm/tpm-interface.c
> @@ -384,6 +384,7 @@ ssize_t tpm_transmit(struct tpm_chip *chip, struct tpm_space *space,
>  	ssize_t len = 0;
>  	u32 count, ordinal;
>  	unsigned long stop;
> +	bool need_locality = chip->locality == -1;

This must be set *after* taking the mutex. Otherwise, I think this
should be fine now.

/Jarkko

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH v4] tpm_crb: request and relinquish locality 0
  2017-03-24 10:10 ` Jarkko Sakkinen
  (?)
@ 2017-03-24 18:25   ` Jerry Snitselaar
  -1 siblings, 0 replies; 28+ messages in thread
From: Jerry Snitselaar @ 2017-03-24 18:25 UTC (permalink / raw)
  To: Jarkko Sakkinen
  Cc: tpmdd-devel, linux-security-module, gang.wei, Jarkko Sakkinen,
	Peter Huewe, Marcel Selhorst, Jason Gunthorpe, open list


Jarkko Sakkinen @ 2017-03-24 10:10 GMT:

> This commit adds support for requesting and relinquishing locality 0 in
> tpm_crb for the course of command transmission.
>
> In order to achieve this, two new callbacks are added to struct
> tpm_class_ops:
>
> - request_locality
> - relinquish_locality
>
> With CRB interface you first set either requestAccess or relinquish bit
> from TPM_LOC_CTRL_x register and then wait for locAssigned and
> tpmRegValidSts bits to be set in the TPM_LOC_STATE_x register.
>
> The reason why were are doing this is to make sure that the driver
> will work properly with Intel TXT that uses locality 2. There's no
> explicit guarantee that it would relinquish this locality. In more
> general sense this commit enables tpm_crb to be a well behaving
> citizen in a multi locality environment.
>
> Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>

Reviewed-by: Jerry Snitselaar <jsnitsel@redhat.com>
Tested-by: Jerry Snitselaar <jsnitsel@redhat.com>

Tested on kabylake system that was hitting issues with earlier
iteration. Still don't have platform to test it dealing with
multi-locality enviroment.

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [PATCH v4] tpm_crb: request and relinquish locality 0
@ 2017-03-24 18:25   ` Jerry Snitselaar
  0 siblings, 0 replies; 28+ messages in thread
From: Jerry Snitselaar @ 2017-03-24 18:25 UTC (permalink / raw)
  To: linux-security-module


Jarkko Sakkinen @ 2017-03-24 10:10 GMT:

> This commit adds support for requesting and relinquishing locality 0 in
> tpm_crb for the course of command transmission.
>
> In order to achieve this, two new callbacks are added to struct
> tpm_class_ops:
>
> - request_locality
> - relinquish_locality
>
> With CRB interface you first set either requestAccess or relinquish bit
> from TPM_LOC_CTRL_x register and then wait for locAssigned and
> tpmRegValidSts bits to be set in the TPM_LOC_STATE_x register.
>
> The reason why were are doing this is to make sure that the driver
> will work properly with Intel TXT that uses locality 2. There's no
> explicit guarantee that it would relinquish this locality. In more
> general sense this commit enables tpm_crb to be a well behaving
> citizen in a multi locality environment.
>
> Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>

Reviewed-by: Jerry Snitselaar <jsnitsel@redhat.com>
Tested-by: Jerry Snitselaar <jsnitsel@redhat.com>

Tested on kabylake system that was hitting issues with earlier
iteration. Still don't have platform to test it dealing with
multi-locality enviroment.
--
To unsubscribe from this list: send the line "unsubscribe linux-security-module" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH v4] tpm_crb: request and relinquish locality 0
@ 2017-03-24 18:25   ` Jerry Snitselaar
  0 siblings, 0 replies; 28+ messages in thread
From: Jerry Snitselaar @ 2017-03-24 18:25 UTC (permalink / raw)
  To: Jarkko Sakkinen
  Cc: open list, linux-security-module-u79uwXL29TY76Z2rM5mHXA,
	tpmdd-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f,
	gang.wei-ral2JQCrhuEAvxtiuMwx3w


Jarkko Sakkinen @ 2017-03-24 10:10 GMT:

> This commit adds support for requesting and relinquishing locality 0 in
> tpm_crb for the course of command transmission.
>
> In order to achieve this, two new callbacks are added to struct
> tpm_class_ops:
>
> - request_locality
> - relinquish_locality
>
> With CRB interface you first set either requestAccess or relinquish bit
> from TPM_LOC_CTRL_x register and then wait for locAssigned and
> tpmRegValidSts bits to be set in the TPM_LOC_STATE_x register.
>
> The reason why were are doing this is to make sure that the driver
> will work properly with Intel TXT that uses locality 2. There's no
> explicit guarantee that it would relinquish this locality. In more
> general sense this commit enables tpm_crb to be a well behaving
> citizen in a multi locality environment.
>
> Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>

Reviewed-by: Jerry Snitselaar <jsnitsel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
Tested-by: Jerry Snitselaar <jsnitsel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>

Tested on kabylake system that was hitting issues with earlier
iteration. Still don't have platform to test it dealing with
multi-locality enviroment.

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH v4] tpm_crb: request and relinquish locality 0
  2017-03-24 10:19   ` Jarkko Sakkinen
@ 2017-03-25 12:21     ` Jerry Snitselaar
  -1 siblings, 0 replies; 28+ messages in thread
From: Jerry Snitselaar @ 2017-03-25 12:21 UTC (permalink / raw)
  To: Jarkko Sakkinen
  Cc: Jarkko Sakkinen, tpmdd-devel, linux-security-module, gang.wei,
	Peter Huewe, Marcel Selhorst, Jason Gunthorpe, open list


Jarkko Sakkinen @ 2017-03-24 10:19 GMT:

> On Fri, Mar 24, 2017 at 12:10:30PM +0200, Jarkko Sakkinen wrote:
>> This commit adds support for requesting and relinquishing locality 0 in
>> tpm_crb for the course of command transmission.
>> 
>> In order to achieve this, two new callbacks are added to struct
>> tpm_class_ops:
>> 
>> - request_locality
>> - relinquish_locality
>> 
>> With CRB interface you first set either requestAccess or relinquish bit
>> from TPM_LOC_CTRL_x register and then wait for locAssigned and
>> tpmRegValidSts bits to be set in the TPM_LOC_STATE_x register.
>> 
>> The reason why were are doing this is to make sure that the driver
>> will work properly with Intel TXT that uses locality 2. There's no
>> explicit guarantee that it would relinquish this locality. In more
>> general sense this commit enables tpm_crb to be a well behaving
>> citizen in a multi locality environment.
>> 
>> Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
>> ---
>> v2:
>> - TPM driver level calllbacks
>> v3:
>> - Call ops->relinquish_locality only if ops->request_locality has been
>>   successful.
>> - Do not reserve locality in nested tpm_transmit calls.
>> - Check for tpmRegValidSts to make sure that the value in TPM_LOC_STATE_x is
>>   stable.
>> v4:
>> - Removed tpm_tis_core changes. It needs to be done separately. It will be
>>   postponed to 4.13.
>> - Store locality to struct tpm_chip while active.
>>  drivers/char/tpm/tpm-chip.c      |  1 +
>>  drivers/char/tpm/tpm-interface.c | 13 +++++++++++++
>>  drivers/char/tpm/tpm.h           |  3 +++
>>  drivers/char/tpm/tpm_crb.c       | 41 ++++++++++++++++++++++++++++++++++++++++
>>  include/linux/tpm.h              |  3 ++-
>>  5 files changed, 60 insertions(+), 1 deletion(-)
>> 
>> diff --git a/drivers/char/tpm/tpm-chip.c b/drivers/char/tpm/tpm-chip.c
>> index aade699..a321bd5 100644
>> --- a/drivers/char/tpm/tpm-chip.c
>> +++ b/drivers/char/tpm/tpm-chip.c
>> @@ -231,6 +231,7 @@ struct tpm_chip *tpm_chip_alloc(struct device *pdev,
>>  		goto out;
>>  	}
>>  
>> +	chip->locality = -1;
>>  	return chip;
>>  
>>  out:
>> diff --git a/drivers/char/tpm/tpm-interface.c b/drivers/char/tpm/tpm-interface.c
>> index 95c6f98..1815666 100644
>> --- a/drivers/char/tpm/tpm-interface.c
>> +++ b/drivers/char/tpm/tpm-interface.c
>> @@ -384,6 +384,7 @@ ssize_t tpm_transmit(struct tpm_chip *chip, struct tpm_space *space,
>>  	ssize_t len = 0;
>>  	u32 count, ordinal;
>>  	unsigned long stop;
>> +	bool need_locality = chip->locality == -1;
>
> This must be set *after* taking the mutex. Otherwise, I think this
> should be fine now.
>
> /Jarkko

Sorry, I missed this email earlier. Yeah, I ran into this while trying to get the
tpm_tis code working with this change tonight. Are you just going to move the
assignment to right before the if block for request_locality? I've
tested with the assignment moved inside the mutex on a kabylake
system.

I also tested with a patch for adding support to tpm_tis on a tpm_tis
system, but that is a work in progress.

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [PATCH v4] tpm_crb: request and relinquish locality 0
@ 2017-03-25 12:21     ` Jerry Snitselaar
  0 siblings, 0 replies; 28+ messages in thread
From: Jerry Snitselaar @ 2017-03-25 12:21 UTC (permalink / raw)
  To: linux-security-module


Jarkko Sakkinen @ 2017-03-24 10:19 GMT:

> On Fri, Mar 24, 2017 at 12:10:30PM +0200, Jarkko Sakkinen wrote:
>> This commit adds support for requesting and relinquishing locality 0 in
>> tpm_crb for the course of command transmission.
>> 
>> In order to achieve this, two new callbacks are added to struct
>> tpm_class_ops:
>> 
>> - request_locality
>> - relinquish_locality
>> 
>> With CRB interface you first set either requestAccess or relinquish bit
>> from TPM_LOC_CTRL_x register and then wait for locAssigned and
>> tpmRegValidSts bits to be set in the TPM_LOC_STATE_x register.
>> 
>> The reason why were are doing this is to make sure that the driver
>> will work properly with Intel TXT that uses locality 2. There's no
>> explicit guarantee that it would relinquish this locality. In more
>> general sense this commit enables tpm_crb to be a well behaving
>> citizen in a multi locality environment.
>> 
>> Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
>> ---
>> v2:
>> - TPM driver level calllbacks
>> v3:
>> - Call ops->relinquish_locality only if ops->request_locality has been
>>   successful.
>> - Do not reserve locality in nested tpm_transmit calls.
>> - Check for tpmRegValidSts to make sure that the value in TPM_LOC_STATE_x is
>>   stable.
>> v4:
>> - Removed tpm_tis_core changes. It needs to be done separately. It will be
>>   postponed to 4.13.
>> - Store locality to struct tpm_chip while active.
>>  drivers/char/tpm/tpm-chip.c      |  1 +
>>  drivers/char/tpm/tpm-interface.c | 13 +++++++++++++
>>  drivers/char/tpm/tpm.h           |  3 +++
>>  drivers/char/tpm/tpm_crb.c       | 41 ++++++++++++++++++++++++++++++++++++++++
>>  include/linux/tpm.h              |  3 ++-
>>  5 files changed, 60 insertions(+), 1 deletion(-)
>> 
>> diff --git a/drivers/char/tpm/tpm-chip.c b/drivers/char/tpm/tpm-chip.c
>> index aade699..a321bd5 100644
>> --- a/drivers/char/tpm/tpm-chip.c
>> +++ b/drivers/char/tpm/tpm-chip.c
>> @@ -231,6 +231,7 @@ struct tpm_chip *tpm_chip_alloc(struct device *pdev,
>>  		goto out;
>>  	}
>>  
>> +	chip->locality = -1;
>>  	return chip;
>>  
>>  out:
>> diff --git a/drivers/char/tpm/tpm-interface.c b/drivers/char/tpm/tpm-interface.c
>> index 95c6f98..1815666 100644
>> --- a/drivers/char/tpm/tpm-interface.c
>> +++ b/drivers/char/tpm/tpm-interface.c
>> @@ -384,6 +384,7 @@ ssize_t tpm_transmit(struct tpm_chip *chip, struct tpm_space *space,
>>  	ssize_t len = 0;
>>  	u32 count, ordinal;
>>  	unsigned long stop;
>> +	bool need_locality = chip->locality == -1;
>
> This must be set *after* taking the mutex. Otherwise, I think this
> should be fine now.
>
> /Jarkko

Sorry, I missed this email earlier. Yeah, I ran into this while trying to get the
tpm_tis code working with this change tonight. Are you just going to move the
assignment to right before the if block for request_locality? I've
tested with the assignment moved inside the mutex on a kabylake
system.

I also tested with a patch for adding support to tpm_tis on a tpm_tis
system, but that is a work in progress.
--
To unsubscribe from this list: send the line "unsubscribe linux-security-module" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH v4] tpm_crb: request and relinquish locality 0
  2017-03-25 12:21     ` Jerry Snitselaar
@ 2017-03-25 19:50       ` Jarkko Sakkinen
  -1 siblings, 0 replies; 28+ messages in thread
From: Jarkko Sakkinen @ 2017-03-25 19:50 UTC (permalink / raw)
  To: Jerry Snitselaar
  Cc: Jarkko Sakkinen, tpmdd-devel, linux-security-module, gang.wei,
	Peter Huewe, Marcel Selhorst, Jason Gunthorpe, open list

On Sat, Mar 25, 2017 at 05:21:30AM -0700, Jerry Snitselaar wrote:
> 
> Jarkko Sakkinen @ 2017-03-24 10:19 GMT:
> 
> > On Fri, Mar 24, 2017 at 12:10:30PM +0200, Jarkko Sakkinen wrote:
> >> This commit adds support for requesting and relinquishing locality 0 in
> >> tpm_crb for the course of command transmission.
> >> 
> >> In order to achieve this, two new callbacks are added to struct
> >> tpm_class_ops:
> >> 
> >> - request_locality
> >> - relinquish_locality
> >> 
> >> With CRB interface you first set either requestAccess or relinquish bit
> >> from TPM_LOC_CTRL_x register and then wait for locAssigned and
> >> tpmRegValidSts bits to be set in the TPM_LOC_STATE_x register.
> >> 
> >> The reason why were are doing this is to make sure that the driver
> >> will work properly with Intel TXT that uses locality 2. There's no
> >> explicit guarantee that it would relinquish this locality. In more
> >> general sense this commit enables tpm_crb to be a well behaving
> >> citizen in a multi locality environment.
> >> 
> >> Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
> >> ---
> >> v2:
> >> - TPM driver level calllbacks
> >> v3:
> >> - Call ops->relinquish_locality only if ops->request_locality has been
> >>   successful.
> >> - Do not reserve locality in nested tpm_transmit calls.
> >> - Check for tpmRegValidSts to make sure that the value in TPM_LOC_STATE_x is
> >>   stable.
> >> v4:
> >> - Removed tpm_tis_core changes. It needs to be done separately. It will be
> >>   postponed to 4.13.
> >> - Store locality to struct tpm_chip while active.
> >>  drivers/char/tpm/tpm-chip.c      |  1 +
> >>  drivers/char/tpm/tpm-interface.c | 13 +++++++++++++
> >>  drivers/char/tpm/tpm.h           |  3 +++
> >>  drivers/char/tpm/tpm_crb.c       | 41 ++++++++++++++++++++++++++++++++++++++++
> >>  include/linux/tpm.h              |  3 ++-
> >>  5 files changed, 60 insertions(+), 1 deletion(-)
> >> 
> >> diff --git a/drivers/char/tpm/tpm-chip.c b/drivers/char/tpm/tpm-chip.c
> >> index aade699..a321bd5 100644
> >> --- a/drivers/char/tpm/tpm-chip.c
> >> +++ b/drivers/char/tpm/tpm-chip.c
> >> @@ -231,6 +231,7 @@ struct tpm_chip *tpm_chip_alloc(struct device *pdev,
> >>  		goto out;
> >>  	}
> >>  
> >> +	chip->locality = -1;
> >>  	return chip;
> >>  
> >>  out:
> >> diff --git a/drivers/char/tpm/tpm-interface.c b/drivers/char/tpm/tpm-interface.c
> >> index 95c6f98..1815666 100644
> >> --- a/drivers/char/tpm/tpm-interface.c
> >> +++ b/drivers/char/tpm/tpm-interface.c
> >> @@ -384,6 +384,7 @@ ssize_t tpm_transmit(struct tpm_chip *chip, struct tpm_space *space,
> >>  	ssize_t len = 0;
> >>  	u32 count, ordinal;
> >>  	unsigned long stop;
> >> +	bool need_locality = chip->locality == -1;
> >
> > This must be set *after* taking the mutex. Otherwise, I think this
> > should be fine now.
> >
> > /Jarkko
> 
> Sorry, I missed this email earlier. Yeah, I ran into this while trying to get the
> tpm_tis code working with this change tonight. Are you just going to move the
> assignment to right before the if block for request_locality? I've
> tested with the assignment moved inside the mutex on a kabylake
> system.
> 
> I also tested with a patch for adding support to tpm_tis on a tpm_tis
> system, but that is a work in progress.

Yes. It's like that now in the locality branch in my tree.

/Jarkko

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [PATCH v4] tpm_crb: request and relinquish locality 0
@ 2017-03-25 19:50       ` Jarkko Sakkinen
  0 siblings, 0 replies; 28+ messages in thread
From: Jarkko Sakkinen @ 2017-03-25 19:50 UTC (permalink / raw)
  To: linux-security-module

On Sat, Mar 25, 2017 at 05:21:30AM -0700, Jerry Snitselaar wrote:
> 
> Jarkko Sakkinen @ 2017-03-24 10:19 GMT:
> 
> > On Fri, Mar 24, 2017 at 12:10:30PM +0200, Jarkko Sakkinen wrote:
> >> This commit adds support for requesting and relinquishing locality 0 in
> >> tpm_crb for the course of command transmission.
> >> 
> >> In order to achieve this, two new callbacks are added to struct
> >> tpm_class_ops:
> >> 
> >> - request_locality
> >> - relinquish_locality
> >> 
> >> With CRB interface you first set either requestAccess or relinquish bit
> >> from TPM_LOC_CTRL_x register and then wait for locAssigned and
> >> tpmRegValidSts bits to be set in the TPM_LOC_STATE_x register.
> >> 
> >> The reason why were are doing this is to make sure that the driver
> >> will work properly with Intel TXT that uses locality 2. There's no
> >> explicit guarantee that it would relinquish this locality. In more
> >> general sense this commit enables tpm_crb to be a well behaving
> >> citizen in a multi locality environment.
> >> 
> >> Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
> >> ---
> >> v2:
> >> - TPM driver level calllbacks
> >> v3:
> >> - Call ops->relinquish_locality only if ops->request_locality has been
> >>   successful.
> >> - Do not reserve locality in nested tpm_transmit calls.
> >> - Check for tpmRegValidSts to make sure that the value in TPM_LOC_STATE_x is
> >>   stable.
> >> v4:
> >> - Removed tpm_tis_core changes. It needs to be done separately. It will be
> >>   postponed to 4.13.
> >> - Store locality to struct tpm_chip while active.
> >>  drivers/char/tpm/tpm-chip.c      |  1 +
> >>  drivers/char/tpm/tpm-interface.c | 13 +++++++++++++
> >>  drivers/char/tpm/tpm.h           |  3 +++
> >>  drivers/char/tpm/tpm_crb.c       | 41 ++++++++++++++++++++++++++++++++++++++++
> >>  include/linux/tpm.h              |  3 ++-
> >>  5 files changed, 60 insertions(+), 1 deletion(-)
> >> 
> >> diff --git a/drivers/char/tpm/tpm-chip.c b/drivers/char/tpm/tpm-chip.c
> >> index aade699..a321bd5 100644
> >> --- a/drivers/char/tpm/tpm-chip.c
> >> +++ b/drivers/char/tpm/tpm-chip.c
> >> @@ -231,6 +231,7 @@ struct tpm_chip *tpm_chip_alloc(struct device *pdev,
> >>  		goto out;
> >>  	}
> >>  
> >> +	chip->locality = -1;
> >>  	return chip;
> >>  
> >>  out:
> >> diff --git a/drivers/char/tpm/tpm-interface.c b/drivers/char/tpm/tpm-interface.c
> >> index 95c6f98..1815666 100644
> >> --- a/drivers/char/tpm/tpm-interface.c
> >> +++ b/drivers/char/tpm/tpm-interface.c
> >> @@ -384,6 +384,7 @@ ssize_t tpm_transmit(struct tpm_chip *chip, struct tpm_space *space,
> >>  	ssize_t len = 0;
> >>  	u32 count, ordinal;
> >>  	unsigned long stop;
> >> +	bool need_locality = chip->locality == -1;
> >
> > This must be set *after* taking the mutex. Otherwise, I think this
> > should be fine now.
> >
> > /Jarkko
> 
> Sorry, I missed this email earlier. Yeah, I ran into this while trying to get the
> tpm_tis code working with this change tonight. Are you just going to move the
> assignment to right before the if block for request_locality? I've
> tested with the assignment moved inside the mutex on a kabylake
> system.
> 
> I also tested with a patch for adding support to tpm_tis on a tpm_tis
> system, but that is a work in progress.

Yes. It's like that now in the locality branch in my tree.

/Jarkko
--
To unsubscribe from this list: send the line "unsubscribe linux-security-module" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH v4] tpm_crb: request and relinquish locality 0
  2017-03-24 18:25   ` Jerry Snitselaar
  (?)
@ 2017-03-25 19:52     ` Jarkko Sakkinen
  -1 siblings, 0 replies; 28+ messages in thread
From: Jarkko Sakkinen @ 2017-03-25 19:52 UTC (permalink / raw)
  To: Jerry Snitselaar, gang.wei
  Cc: Jarkko Sakkinen, tpmdd-devel, linux-security-module, gang.wei,
	Peter Huewe, Marcel Selhorst, Jason Gunthorpe, open list

On Fri, Mar 24, 2017 at 11:25:57AM -0700, Jerry Snitselaar wrote:
> 
> Jarkko Sakkinen @ 2017-03-24 10:10 GMT:
> 
> > This commit adds support for requesting and relinquishing locality 0 in
> > tpm_crb for the course of command transmission.
> >
> > In order to achieve this, two new callbacks are added to struct
> > tpm_class_ops:
> >
> > - request_locality
> > - relinquish_locality
> >
> > With CRB interface you first set either requestAccess or relinquish bit
> > from TPM_LOC_CTRL_x register and then wait for locAssigned and
> > tpmRegValidSts bits to be set in the TPM_LOC_STATE_x register.
> >
> > The reason why were are doing this is to make sure that the driver
> > will work properly with Intel TXT that uses locality 2. There's no
> > explicit guarantee that it would relinquish this locality. In more
> > general sense this commit enables tpm_crb to be a well behaving
> > citizen in a multi locality environment.
> >
> > Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
> 
> Reviewed-by: Jerry Snitselaar <jsnitsel@redhat.com>
> Tested-by: Jerry Snitselaar <jsnitsel@redhat.com>
> 
> Tested on kabylake system that was hitting issues with earlier
> iteration. Still don't have platform to test it dealing with
> multi-locality enviroment.

I believe Jimmy (Gang Wei) has done such testing. Jimmy can you confirm
and possibly do re-test (there's a locality branch in my tree to ease
the testing) so that we could land this one?

/Jarkko

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [PATCH v4] tpm_crb: request and relinquish locality 0
@ 2017-03-25 19:52     ` Jarkko Sakkinen
  0 siblings, 0 replies; 28+ messages in thread
From: Jarkko Sakkinen @ 2017-03-25 19:52 UTC (permalink / raw)
  To: linux-security-module

On Fri, Mar 24, 2017 at 11:25:57AM -0700, Jerry Snitselaar wrote:
> 
> Jarkko Sakkinen @ 2017-03-24 10:10 GMT:
> 
> > This commit adds support for requesting and relinquishing locality 0 in
> > tpm_crb for the course of command transmission.
> >
> > In order to achieve this, two new callbacks are added to struct
> > tpm_class_ops:
> >
> > - request_locality
> > - relinquish_locality
> >
> > With CRB interface you first set either requestAccess or relinquish bit
> > from TPM_LOC_CTRL_x register and then wait for locAssigned and
> > tpmRegValidSts bits to be set in the TPM_LOC_STATE_x register.
> >
> > The reason why were are doing this is to make sure that the driver
> > will work properly with Intel TXT that uses locality 2. There's no
> > explicit guarantee that it would relinquish this locality. In more
> > general sense this commit enables tpm_crb to be a well behaving
> > citizen in a multi locality environment.
> >
> > Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
> 
> Reviewed-by: Jerry Snitselaar <jsnitsel@redhat.com>
> Tested-by: Jerry Snitselaar <jsnitsel@redhat.com>
> 
> Tested on kabylake system that was hitting issues with earlier
> iteration. Still don't have platform to test it dealing with
> multi-locality enviroment.

I believe Jimmy (Gang Wei) has done such testing. Jimmy can you confirm
and possibly do re-test (there's a locality branch in my tree to ease
the testing) so that we could land this one?

/Jarkko
--
To unsubscribe from this list: send the line "unsubscribe linux-security-module" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH v4] tpm_crb: request and relinquish locality 0
@ 2017-03-25 19:52     ` Jarkko Sakkinen
  0 siblings, 0 replies; 28+ messages in thread
From: Jarkko Sakkinen @ 2017-03-25 19:52 UTC (permalink / raw)
  To: Jerry Snitselaar
  Cc: Jarkko Sakkinen, tpmdd-devel, linux-security-module, gang.wei,
	Peter Huewe, Marcel Selhorst, Jason Gunthorpe, open list

On Fri, Mar 24, 2017 at 11:25:57AM -0700, Jerry Snitselaar wrote:
> 
> Jarkko Sakkinen @ 2017-03-24 10:10 GMT:
> 
> > This commit adds support for requesting and relinquishing locality 0 in
> > tpm_crb for the course of command transmission.
> >
> > In order to achieve this, two new callbacks are added to struct
> > tpm_class_ops:
> >
> > - request_locality
> > - relinquish_locality
> >
> > With CRB interface you first set either requestAccess or relinquish bit
> > from TPM_LOC_CTRL_x register and then wait for locAssigned and
> > tpmRegValidSts bits to be set in the TPM_LOC_STATE_x register.
> >
> > The reason why were are doing this is to make sure that the driver
> > will work properly with Intel TXT that uses locality 2. There's no
> > explicit guarantee that it would relinquish this locality. In more
> > general sense this commit enables tpm_crb to be a well behaving
> > citizen in a multi locality environment.
> >
> > Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
> 
> Reviewed-by: Jerry Snitselaar <jsnitsel@redhat.com>
> Tested-by: Jerry Snitselaar <jsnitsel@redhat.com>
> 
> Tested on kabylake system that was hitting issues with earlier
> iteration. Still don't have platform to test it dealing with
> multi-locality enviroment.

I believe Jimmy (Gang Wei) has done such testing. Jimmy can you confirm
and possibly do re-test (there's a locality branch in my tree to ease
the testing) so that we could land this one?

/Jarkko

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH v4] tpm_crb: request and relinquish locality 0
  2017-03-25 19:52     ` Jarkko Sakkinen
  (?)
@ 2017-03-26 10:52       ` Jarkko Sakkinen
  -1 siblings, 0 replies; 28+ messages in thread
From: Jarkko Sakkinen @ 2017-03-26 10:52 UTC (permalink / raw)
  To: Jerry Snitselaar, gang.wei
  Cc: Jarkko Sakkinen, tpmdd-devel, linux-security-module, Peter Huewe,
	Marcel Selhorst, Jason Gunthorpe, open list

On Sat, Mar 25, 2017 at 09:52:11PM +0200, Jarkko Sakkinen wrote:
> On Fri, Mar 24, 2017 at 11:25:57AM -0700, Jerry Snitselaar wrote:
> > 
> > Jarkko Sakkinen @ 2017-03-24 10:10 GMT:
> > 
> > > This commit adds support for requesting and relinquishing locality 0 in
> > > tpm_crb for the course of command transmission.
> > >
> > > In order to achieve this, two new callbacks are added to struct
> > > tpm_class_ops:
> > >
> > > - request_locality
> > > - relinquish_locality
> > >
> > > With CRB interface you first set either requestAccess or relinquish bit
> > > from TPM_LOC_CTRL_x register and then wait for locAssigned and
> > > tpmRegValidSts bits to be set in the TPM_LOC_STATE_x register.
> > >
> > > The reason why were are doing this is to make sure that the driver
> > > will work properly with Intel TXT that uses locality 2. There's no
> > > explicit guarantee that it would relinquish this locality. In more
> > > general sense this commit enables tpm_crb to be a well behaving
> > > citizen in a multi locality environment.
> > >
> > > Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
> > 
> > Reviewed-by: Jerry Snitselaar <jsnitsel@redhat.com>
> > Tested-by: Jerry Snitselaar <jsnitsel@redhat.com>
> > 
> > Tested on kabylake system that was hitting issues with earlier
> > iteration. Still don't have platform to test it dealing with
> > multi-locality enviroment.
> 
> I believe Jimmy (Gang Wei) has done such testing. Jimmy can you confirm
> and possibly do re-test (there's a locality branch in my tree to ease
> the testing) so that we could land this one?
> 
> /Jarkko

I applied this to my master and next branches.

/Jarkko

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [PATCH v4] tpm_crb: request and relinquish locality 0
@ 2017-03-26 10:52       ` Jarkko Sakkinen
  0 siblings, 0 replies; 28+ messages in thread
From: Jarkko Sakkinen @ 2017-03-26 10:52 UTC (permalink / raw)
  To: linux-security-module

On Sat, Mar 25, 2017 at 09:52:11PM +0200, Jarkko Sakkinen wrote:
> On Fri, Mar 24, 2017 at 11:25:57AM -0700, Jerry Snitselaar wrote:
> > 
> > Jarkko Sakkinen @ 2017-03-24 10:10 GMT:
> > 
> > > This commit adds support for requesting and relinquishing locality 0 in
> > > tpm_crb for the course of command transmission.
> > >
> > > In order to achieve this, two new callbacks are added to struct
> > > tpm_class_ops:
> > >
> > > - request_locality
> > > - relinquish_locality
> > >
> > > With CRB interface you first set either requestAccess or relinquish bit
> > > from TPM_LOC_CTRL_x register and then wait for locAssigned and
> > > tpmRegValidSts bits to be set in the TPM_LOC_STATE_x register.
> > >
> > > The reason why were are doing this is to make sure that the driver
> > > will work properly with Intel TXT that uses locality 2. There's no
> > > explicit guarantee that it would relinquish this locality. In more
> > > general sense this commit enables tpm_crb to be a well behaving
> > > citizen in a multi locality environment.
> > >
> > > Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
> > 
> > Reviewed-by: Jerry Snitselaar <jsnitsel@redhat.com>
> > Tested-by: Jerry Snitselaar <jsnitsel@redhat.com>
> > 
> > Tested on kabylake system that was hitting issues with earlier
> > iteration. Still don't have platform to test it dealing with
> > multi-locality enviroment.
> 
> I believe Jimmy (Gang Wei) has done such testing. Jimmy can you confirm
> and possibly do re-test (there's a locality branch in my tree to ease
> the testing) so that we could land this one?
> 
> /Jarkko

I applied this to my master and next branches.

/Jarkko
--
To unsubscribe from this list: send the line "unsubscribe linux-security-module" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH v4] tpm_crb: request and relinquish locality 0
@ 2017-03-26 10:52       ` Jarkko Sakkinen
  0 siblings, 0 replies; 28+ messages in thread
From: Jarkko Sakkinen @ 2017-03-26 10:52 UTC (permalink / raw)
  To: Jerry Snitselaar, gang.wei-ral2JQCrhuEAvxtiuMwx3w
  Cc: Jarkko Sakkinen, open list,
	linux-security-module-u79uwXL29TY76Z2rM5mHXA,
	tpmdd-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f

On Sat, Mar 25, 2017 at 09:52:11PM +0200, Jarkko Sakkinen wrote:
> On Fri, Mar 24, 2017 at 11:25:57AM -0700, Jerry Snitselaar wrote:
> > 
> > Jarkko Sakkinen @ 2017-03-24 10:10 GMT:
> > 
> > > This commit adds support for requesting and relinquishing locality 0 in
> > > tpm_crb for the course of command transmission.
> > >
> > > In order to achieve this, two new callbacks are added to struct
> > > tpm_class_ops:
> > >
> > > - request_locality
> > > - relinquish_locality
> > >
> > > With CRB interface you first set either requestAccess or relinquish bit
> > > from TPM_LOC_CTRL_x register and then wait for locAssigned and
> > > tpmRegValidSts bits to be set in the TPM_LOC_STATE_x register.
> > >
> > > The reason why were are doing this is to make sure that the driver
> > > will work properly with Intel TXT that uses locality 2. There's no
> > > explicit guarantee that it would relinquish this locality. In more
> > > general sense this commit enables tpm_crb to be a well behaving
> > > citizen in a multi locality environment.
> > >
> > > Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
> > 
> > Reviewed-by: Jerry Snitselaar <jsnitsel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
> > Tested-by: Jerry Snitselaar <jsnitsel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
> > 
> > Tested on kabylake system that was hitting issues with earlier
> > iteration. Still don't have platform to test it dealing with
> > multi-locality enviroment.
> 
> I believe Jimmy (Gang Wei) has done such testing. Jimmy can you confirm
> and possibly do re-test (there's a locality branch in my tree to ease
> the testing) so that we could land this one?
> 
> /Jarkko

I applied this to my master and next branches.

/Jarkko

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH v4] tpm_crb: request and relinquish locality 0
  2017-03-26 10:52       ` Jarkko Sakkinen
@ 2017-03-26 16:39         ` Jerry Snitselaar
  -1 siblings, 0 replies; 28+ messages in thread
From: Jerry Snitselaar @ 2017-03-26 16:39 UTC (permalink / raw)
  To: Jarkko Sakkinen
  Cc: gang wei, Jarkko Sakkinen, tpmdd-devel, linux-security-module,
	Peter Huewe, Marcel Selhorst, Jason Gunthorpe, open list



----- Original Message -----
> From: "Jarkko Sakkinen" <jarkko.sakkinen@linux.intel.com>
> To: "Jerry Snitselaar" <jsnitsel@redhat.com>, "gang wei" <gang.wei@intel.com>
> Cc: "Jarkko Sakkinen" <jarkko.sakkinen@iki.fi>, tpmdd-devel@lists.sourceforge.net,
> linux-security-module@vger.kernel.org, "Peter Huewe" <peterhuewe@gmx.de>, "Marcel Selhorst" <tpmdd@selhorst.net>,
> "Jason Gunthorpe" <jgunthorpe@obsidianresearch.com>, "open list" <linux-kernel@vger.kernel.org>
> Sent: Sunday, March 26, 2017 3:52:39 AM
> Subject: Re: [PATCH v4] tpm_crb: request and relinquish locality 0
> 
> On Sat, Mar 25, 2017 at 09:52:11PM +0200, Jarkko Sakkinen wrote:
> > On Fri, Mar 24, 2017 at 11:25:57AM -0700, Jerry Snitselaar wrote:
> > > 
> > > Jarkko Sakkinen @ 2017-03-24 10:10 GMT:
> > > 
> > > > This commit adds support for requesting and relinquishing locality 0 in
> > > > tpm_crb for the course of command transmission.
> > > >
> > > > In order to achieve this, two new callbacks are added to struct
> > > > tpm_class_ops:
> > > >
> > > > - request_locality
> > > > - relinquish_locality
> > > >
> > > > With CRB interface you first set either requestAccess or relinquish bit
> > > > from TPM_LOC_CTRL_x register and then wait for locAssigned and
> > > > tpmRegValidSts bits to be set in the TPM_LOC_STATE_x register.
> > > >
> > > > The reason why were are doing this is to make sure that the driver
> > > > will work properly with Intel TXT that uses locality 2. There's no
> > > > explicit guarantee that it would relinquish this locality. In more
> > > > general sense this commit enables tpm_crb to be a well behaving
> > > > citizen in a multi locality environment.
> > > >
> > > > Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
> > > 
> > > Reviewed-by: Jerry Snitselaar <jsnitsel@redhat.com>
> > > Tested-by: Jerry Snitselaar <jsnitsel@redhat.com>
> > > 
> > > Tested on kabylake system that was hitting issues with earlier
> > > iteration. Still don't have platform to test it dealing with
> > > multi-locality enviroment.
> > 
> > I believe Jimmy (Gang Wei) has done such testing. Jimmy can you confirm
> > and possibly do re-test (there's a locality branch in my tree to ease
> > the testing) so that we could land this one?
> > 
> > /Jarkko
> 
> I applied this to my master and next branches.
> 
> /Jarkko
> 

Hi Jarkko,

The patch applied to next and master doesn't have the assignment moved
inside the mutex.

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [PATCH v4] tpm_crb: request and relinquish locality 0
@ 2017-03-26 16:39         ` Jerry Snitselaar
  0 siblings, 0 replies; 28+ messages in thread
From: Jerry Snitselaar @ 2017-03-26 16:39 UTC (permalink / raw)
  To: linux-security-module



----- Original Message -----
> From: "Jarkko Sakkinen" <jarkko.sakkinen@linux.intel.com>
> To: "Jerry Snitselaar" <jsnitsel@redhat.com>, "gang wei" <gang.wei@intel.com>
> Cc: "Jarkko Sakkinen" <jarkko.sakkinen@iki.fi>, tpmdd-devel at lists.sourceforge.net,
> linux-security-module at vger.kernel.org, "Peter Huewe" <peterhuewe@gmx.de>, "Marcel Selhorst" <tpmdd@selhorst.net>,
> "Jason Gunthorpe" <jgunthorpe@obsidianresearch.com>, "open list" <linux-kernel@vger.kernel.org>
> Sent: Sunday, March 26, 2017 3:52:39 AM
> Subject: Re: [PATCH v4] tpm_crb: request and relinquish locality 0
> 
> On Sat, Mar 25, 2017 at 09:52:11PM +0200, Jarkko Sakkinen wrote:
> > On Fri, Mar 24, 2017 at 11:25:57AM -0700, Jerry Snitselaar wrote:
> > > 
> > > Jarkko Sakkinen @ 2017-03-24 10:10 GMT:
> > > 
> > > > This commit adds support for requesting and relinquishing locality 0 in
> > > > tpm_crb for the course of command transmission.
> > > >
> > > > In order to achieve this, two new callbacks are added to struct
> > > > tpm_class_ops:
> > > >
> > > > - request_locality
> > > > - relinquish_locality
> > > >
> > > > With CRB interface you first set either requestAccess or relinquish bit
> > > > from TPM_LOC_CTRL_x register and then wait for locAssigned and
> > > > tpmRegValidSts bits to be set in the TPM_LOC_STATE_x register.
> > > >
> > > > The reason why were are doing this is to make sure that the driver
> > > > will work properly with Intel TXT that uses locality 2. There's no
> > > > explicit guarantee that it would relinquish this locality. In more
> > > > general sense this commit enables tpm_crb to be a well behaving
> > > > citizen in a multi locality environment.
> > > >
> > > > Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
> > > 
> > > Reviewed-by: Jerry Snitselaar <jsnitsel@redhat.com>
> > > Tested-by: Jerry Snitselaar <jsnitsel@redhat.com>
> > > 
> > > Tested on kabylake system that was hitting issues with earlier
> > > iteration. Still don't have platform to test it dealing with
> > > multi-locality enviroment.
> > 
> > I believe Jimmy (Gang Wei) has done such testing. Jimmy can you confirm
> > and possibly do re-test (there's a locality branch in my tree to ease
> > the testing) so that we could land this one?
> > 
> > /Jarkko
> 
> I applied this to my master and next branches.
> 
> /Jarkko
> 

Hi Jarkko,

The patch applied to next and master doesn't have the assignment moved
inside the mutex.
--
To unsubscribe from this list: send the line "unsubscribe linux-security-module" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH v4] tpm_crb: request and relinquish locality 0
  2017-03-26 16:39         ` Jerry Snitselaar
@ 2017-03-26 19:51           ` Jarkko Sakkinen
  -1 siblings, 0 replies; 28+ messages in thread
From: Jarkko Sakkinen @ 2017-03-26 19:51 UTC (permalink / raw)
  To: Jerry Snitselaar
  Cc: gang wei, Jarkko Sakkinen, tpmdd-devel, linux-security-module,
	Peter Huewe, Marcel Selhorst, Jason Gunthorpe, open list

On Sun, Mar 26, 2017 at 12:39:29PM -0400, Jerry Snitselaar wrote:
> 
> 
> ----- Original Message -----
> > From: "Jarkko Sakkinen" <jarkko.sakkinen@linux.intel.com>
> > To: "Jerry Snitselaar" <jsnitsel@redhat.com>, "gang wei" <gang.wei@intel.com>
> > Cc: "Jarkko Sakkinen" <jarkko.sakkinen@iki.fi>, tpmdd-devel@lists.sourceforge.net,
> > linux-security-module@vger.kernel.org, "Peter Huewe" <peterhuewe@gmx.de>, "Marcel Selhorst" <tpmdd@selhorst.net>,
> > "Jason Gunthorpe" <jgunthorpe@obsidianresearch.com>, "open list" <linux-kernel@vger.kernel.org>
> > Sent: Sunday, March 26, 2017 3:52:39 AM
> > Subject: Re: [PATCH v4] tpm_crb: request and relinquish locality 0
> > 
> > On Sat, Mar 25, 2017 at 09:52:11PM +0200, Jarkko Sakkinen wrote:
> > > On Fri, Mar 24, 2017 at 11:25:57AM -0700, Jerry Snitselaar wrote:
> > > > 
> > > > Jarkko Sakkinen @ 2017-03-24 10:10 GMT:
> > > > 
> > > > > This commit adds support for requesting and relinquishing locality 0 in
> > > > > tpm_crb for the course of command transmission.
> > > > >
> > > > > In order to achieve this, two new callbacks are added to struct
> > > > > tpm_class_ops:
> > > > >
> > > > > - request_locality
> > > > > - relinquish_locality
> > > > >
> > > > > With CRB interface you first set either requestAccess or relinquish bit
> > > > > from TPM_LOC_CTRL_x register and then wait for locAssigned and
> > > > > tpmRegValidSts bits to be set in the TPM_LOC_STATE_x register.
> > > > >
> > > > > The reason why were are doing this is to make sure that the driver
> > > > > will work properly with Intel TXT that uses locality 2. There's no
> > > > > explicit guarantee that it would relinquish this locality. In more
> > > > > general sense this commit enables tpm_crb to be a well behaving
> > > > > citizen in a multi locality environment.
> > > > >
> > > > > Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
> > > > 
> > > > Reviewed-by: Jerry Snitselaar <jsnitsel@redhat.com>
> > > > Tested-by: Jerry Snitselaar <jsnitsel@redhat.com>
> > > > 
> > > > Tested on kabylake system that was hitting issues with earlier
> > > > iteration. Still don't have platform to test it dealing with
> > > > multi-locality enviroment.
> > > 
> > > I believe Jimmy (Gang Wei) has done such testing. Jimmy can you confirm
> > > and possibly do re-test (there's a locality branch in my tree to ease
> > > the testing) so that we could land this one?
> > > 
> > > /Jarkko
> > 
> > I applied this to my master and next branches.
> > 
> > /Jarkko
> > 
> 
> Hi Jarkko,
> 
> The patch applied to next and master doesn't have the assignment moved
> inside the mutex.

WTF, I applied old patch version by mistake. Sorry about that and
thanks for spotting that out. Better?

/Jarkko

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [PATCH v4] tpm_crb: request and relinquish locality 0
@ 2017-03-26 19:51           ` Jarkko Sakkinen
  0 siblings, 0 replies; 28+ messages in thread
From: Jarkko Sakkinen @ 2017-03-26 19:51 UTC (permalink / raw)
  To: linux-security-module

On Sun, Mar 26, 2017 at 12:39:29PM -0400, Jerry Snitselaar wrote:
> 
> 
> ----- Original Message -----
> > From: "Jarkko Sakkinen" <jarkko.sakkinen@linux.intel.com>
> > To: "Jerry Snitselaar" <jsnitsel@redhat.com>, "gang wei" <gang.wei@intel.com>
> > Cc: "Jarkko Sakkinen" <jarkko.sakkinen@iki.fi>, tpmdd-devel at lists.sourceforge.net,
> > linux-security-module at vger.kernel.org, "Peter Huewe" <peterhuewe@gmx.de>, "Marcel Selhorst" <tpmdd@selhorst.net>,
> > "Jason Gunthorpe" <jgunthorpe@obsidianresearch.com>, "open list" <linux-kernel@vger.kernel.org>
> > Sent: Sunday, March 26, 2017 3:52:39 AM
> > Subject: Re: [PATCH v4] tpm_crb: request and relinquish locality 0
> > 
> > On Sat, Mar 25, 2017 at 09:52:11PM +0200, Jarkko Sakkinen wrote:
> > > On Fri, Mar 24, 2017 at 11:25:57AM -0700, Jerry Snitselaar wrote:
> > > > 
> > > > Jarkko Sakkinen @ 2017-03-24 10:10 GMT:
> > > > 
> > > > > This commit adds support for requesting and relinquishing locality 0 in
> > > > > tpm_crb for the course of command transmission.
> > > > >
> > > > > In order to achieve this, two new callbacks are added to struct
> > > > > tpm_class_ops:
> > > > >
> > > > > - request_locality
> > > > > - relinquish_locality
> > > > >
> > > > > With CRB interface you first set either requestAccess or relinquish bit
> > > > > from TPM_LOC_CTRL_x register and then wait for locAssigned and
> > > > > tpmRegValidSts bits to be set in the TPM_LOC_STATE_x register.
> > > > >
> > > > > The reason why were are doing this is to make sure that the driver
> > > > > will work properly with Intel TXT that uses locality 2. There's no
> > > > > explicit guarantee that it would relinquish this locality. In more
> > > > > general sense this commit enables tpm_crb to be a well behaving
> > > > > citizen in a multi locality environment.
> > > > >
> > > > > Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
> > > > 
> > > > Reviewed-by: Jerry Snitselaar <jsnitsel@redhat.com>
> > > > Tested-by: Jerry Snitselaar <jsnitsel@redhat.com>
> > > > 
> > > > Tested on kabylake system that was hitting issues with earlier
> > > > iteration. Still don't have platform to test it dealing with
> > > > multi-locality enviroment.
> > > 
> > > I believe Jimmy (Gang Wei) has done such testing. Jimmy can you confirm
> > > and possibly do re-test (there's a locality branch in my tree to ease
> > > the testing) so that we could land this one?
> > > 
> > > /Jarkko
> > 
> > I applied this to my master and next branches.
> > 
> > /Jarkko
> > 
> 
> Hi Jarkko,
> 
> The patch applied to next and master doesn't have the assignment moved
> inside the mutex.

WTF, I applied old patch version by mistake. Sorry about that and
thanks for spotting that out. Better?

/Jarkko
--
To unsubscribe from this list: send the line "unsubscribe linux-security-module" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH v4] tpm_crb: request and relinquish locality 0
  2017-03-26 19:51           ` Jarkko Sakkinen
  (?)
@ 2017-03-26 22:42             ` Jerry Snitselaar
  -1 siblings, 0 replies; 28+ messages in thread
From: Jerry Snitselaar @ 2017-03-26 22:42 UTC (permalink / raw)
  To: Jarkko Sakkinen
  Cc: gang wei, Jarkko Sakkinen, tpmdd-devel, linux-security-module,
	Peter Huewe, Marcel Selhorst, Jason Gunthorpe, open list


Jarkko Sakkinen @ 2017-03-26 19:51 GMT:

> WTF, I applied old patch version by mistake. Sorry about that and
> thanks for spotting that out. Better?
>
> /Jarkko


Looks good now.

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [PATCH v4] tpm_crb: request and relinquish locality 0
@ 2017-03-26 22:42             ` Jerry Snitselaar
  0 siblings, 0 replies; 28+ messages in thread
From: Jerry Snitselaar @ 2017-03-26 22:42 UTC (permalink / raw)
  To: linux-security-module


Jarkko Sakkinen @ 2017-03-26 19:51 GMT:

> WTF, I applied old patch version by mistake. Sorry about that and
> thanks for spotting that out. Better?
>
> /Jarkko


Looks good now.
--
To unsubscribe from this list: send the line "unsubscribe linux-security-module" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH v4] tpm_crb: request and relinquish locality 0
@ 2017-03-26 22:42             ` Jerry Snitselaar
  0 siblings, 0 replies; 28+ messages in thread
From: Jerry Snitselaar @ 2017-03-26 22:42 UTC (permalink / raw)
  To: Jarkko Sakkinen
  Cc: Jarkko Sakkinen, open list,
	linux-security-module-u79uwXL29TY76Z2rM5mHXA,
	tpmdd-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f, gang wei


Jarkko Sakkinen @ 2017-03-26 19:51 GMT:

> WTF, I applied old patch version by mistake. Sorry about that and
> thanks for spotting that out. Better?
>
> /Jarkko


Looks good now.

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH v4] tpm_crb: request and relinquish locality 0
  2017-03-26 22:42             ` Jerry Snitselaar
@ 2017-03-27  5:17               ` Jarkko Sakkinen
  -1 siblings, 0 replies; 28+ messages in thread
From: Jarkko Sakkinen @ 2017-03-27  5:17 UTC (permalink / raw)
  To: Jerry Snitselaar
  Cc: gang wei, Jarkko Sakkinen, tpmdd-devel, linux-security-module,
	Peter Huewe, Marcel Selhorst, Jason Gunthorpe, open list

On Sun, Mar 26, 2017 at 03:42:12PM -0700, Jerry Snitselaar wrote:
> 
> Jarkko Sakkinen @ 2017-03-26 19:51 GMT:
> 
> > WTF, I applied old patch version by mistake. Sorry about that and
> > thanks for spotting that out. Better?
> >
> > /Jarkko
> 
> 
> Looks good now.

Great, thanks.

/Jarkko

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [PATCH v4] tpm_crb: request and relinquish locality 0
@ 2017-03-27  5:17               ` Jarkko Sakkinen
  0 siblings, 0 replies; 28+ messages in thread
From: Jarkko Sakkinen @ 2017-03-27  5:17 UTC (permalink / raw)
  To: linux-security-module

On Sun, Mar 26, 2017 at 03:42:12PM -0700, Jerry Snitselaar wrote:
> 
> Jarkko Sakkinen @ 2017-03-26 19:51 GMT:
> 
> > WTF, I applied old patch version by mistake. Sorry about that and
> > thanks for spotting that out. Better?
> >
> > /Jarkko
> 
> 
> Looks good now.

Great, thanks.

/Jarkko
--
To unsubscribe from this list: send the line "unsubscribe linux-security-module" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 28+ messages in thread

end of thread, other threads:[~2017-03-27  5:17 UTC | newest]

Thread overview: 28+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-03-24 10:10 [PATCH v4] tpm_crb: request and relinquish locality 0 Jarkko Sakkinen
2017-03-24 10:10 ` Jarkko Sakkinen
2017-03-24 10:10 ` Jarkko Sakkinen
2017-03-24 10:19 ` Jarkko Sakkinen
2017-03-24 10:19   ` Jarkko Sakkinen
2017-03-24 10:19   ` Jarkko Sakkinen
2017-03-25 12:21   ` Jerry Snitselaar
2017-03-25 12:21     ` Jerry Snitselaar
2017-03-25 19:50     ` Jarkko Sakkinen
2017-03-25 19:50       ` Jarkko Sakkinen
2017-03-24 18:25 ` Jerry Snitselaar
2017-03-24 18:25   ` Jerry Snitselaar
2017-03-24 18:25   ` Jerry Snitselaar
2017-03-25 19:52   ` Jarkko Sakkinen
2017-03-25 19:52     ` Jarkko Sakkinen
2017-03-25 19:52     ` Jarkko Sakkinen
2017-03-26 10:52     ` Jarkko Sakkinen
2017-03-26 10:52       ` Jarkko Sakkinen
2017-03-26 10:52       ` Jarkko Sakkinen
2017-03-26 16:39       ` Jerry Snitselaar
2017-03-26 16:39         ` Jerry Snitselaar
2017-03-26 19:51         ` Jarkko Sakkinen
2017-03-26 19:51           ` Jarkko Sakkinen
2017-03-26 22:42           ` Jerry Snitselaar
2017-03-26 22:42             ` Jerry Snitselaar
2017-03-26 22:42             ` Jerry Snitselaar
2017-03-27  5:17             ` Jarkko Sakkinen
2017-03-27  5:17               ` Jarkko Sakkinen

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.