Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit eca8dac4 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull tpm fixes from James Morris:
 "fixes for the TPM driver"

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security:
  tpm: fix call order in tpm-chip.c
  tpm/ibmvtpm: Additional LE support for tpm_ibmvtpm_send
parents ecddad64 4d08a363
Loading
Loading
Loading
Loading
+14 −20
Original line number Diff line number Diff line
@@ -140,24 +140,24 @@ static int tpm_dev_add_device(struct tpm_chip *chip)
{
	int rc;

	rc = device_add(&chip->dev);
	rc = cdev_add(&chip->cdev, chip->dev.devt, 1);
	if (rc) {
		dev_err(&chip->dev,
			"unable to device_register() %s, major %d, minor %d, err=%d\n",
			"unable to cdev_add() %s, major %d, minor %d, err=%d\n",
			chip->devname, MAJOR(chip->dev.devt),
			MINOR(chip->dev.devt), rc);

		device_unregister(&chip->dev);
		return rc;
	}

	rc = cdev_add(&chip->cdev, chip->dev.devt, 1);
	rc = device_add(&chip->dev);
	if (rc) {
		dev_err(&chip->dev,
			"unable to cdev_add() %s, major %d, minor %d, err=%d\n",
			"unable to device_register() %s, major %d, minor %d, err=%d\n",
			chip->devname, MAJOR(chip->dev.devt),
			MINOR(chip->dev.devt), rc);

		device_unregister(&chip->dev);
		return rc;
	}

@@ -174,27 +174,17 @@ static void tpm_dev_del_device(struct tpm_chip *chip)
 * tpm_chip_register() - create a character device for the TPM chip
 * @chip: TPM chip to use.
 *
 * Creates a character device for the TPM chip and adds sysfs interfaces for
 * the device, PPI and TCPA. As the last step this function adds the
 * chip to the list of TPM chips available for use.
 * Creates a character device for the TPM chip and adds sysfs attributes for
 * the device. As the last step this function adds the chip to the list of TPM
 * chips available for in-kernel use.
 *
 * NOTE: This function should be only called after the chip initialization
 * is complete.
 *
 * Called from tpm_<specific>.c probe function only for devices
 * the driver has determined it should claim.  Prior to calling
 * this function the specific probe function has called pci_enable_device
 * upon errant exit from this function specific probe function should call
 * pci_disable_device
 * This function should be only called after the chip initialization is
 * complete.
 */
int tpm_chip_register(struct tpm_chip *chip)
{
	int rc;

	rc = tpm_dev_add_device(chip);
	if (rc)
		return rc;

	/* Populate sysfs for TPM1 devices. */
	if (!(chip->flags & TPM_CHIP_FLAG_TPM2)) {
		rc = tpm_sysfs_add_device(chip);
@@ -208,6 +198,10 @@ int tpm_chip_register(struct tpm_chip *chip)
		chip->bios_dir = tpm_bios_log_setup(chip->devname);
	}

	rc = tpm_dev_add_device(chip);
	if (rc)
		return rc;

	/* Make the chip available. */
	spin_lock(&driver_lock);
	list_add_rcu(&chip->list, &tpm_chip_list);
+5 −5
Original line number Diff line number Diff line
@@ -124,7 +124,7 @@ static int tpm_ibmvtpm_send(struct tpm_chip *chip, u8 *buf, size_t count)
{
	struct ibmvtpm_dev *ibmvtpm;
	struct ibmvtpm_crq crq;
	u64 *word = (u64 *) &crq;
	__be64 *word = (__be64 *)&crq;
	int rc;

	ibmvtpm = (struct ibmvtpm_dev *)TPM_VPRIV(chip);
@@ -145,11 +145,11 @@ static int tpm_ibmvtpm_send(struct tpm_chip *chip, u8 *buf, size_t count)
	memcpy((void *)ibmvtpm->rtce_buf, (void *)buf, count);
	crq.valid = (u8)IBMVTPM_VALID_CMD;
	crq.msg = (u8)VTPM_TPM_COMMAND;
	crq.len = (u16)count;
	crq.data = ibmvtpm->rtce_dma_handle;
	crq.len = cpu_to_be16(count);
	crq.data = cpu_to_be32(ibmvtpm->rtce_dma_handle);

	rc = ibmvtpm_send_crq(ibmvtpm->vdev, cpu_to_be64(word[0]),
			      cpu_to_be64(word[1]));
	rc = ibmvtpm_send_crq(ibmvtpm->vdev, be64_to_cpu(word[0]),
			      be64_to_cpu(word[1]));
	if (rc != H_SUCCESS) {
		dev_err(ibmvtpm->dev, "tpm_ibmvtpm_send failed rc=%d\n", rc);
		rc = 0;
+3 −3
Original line number Diff line number Diff line
@@ -22,9 +22,9 @@
struct ibmvtpm_crq {
	u8 valid;
	u8 msg;
	u16 len;
	u32 data;
	u64 reserved;
	__be16 len;
	__be32 data;
	__be64 reserved;
} __attribute__((packed, aligned(8)));

struct ibmvtpm_crq_queue {