FAILED: patch "[PATCH] vTPM: Fix missing NULL check" failed to apply to 4.9-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 4.9-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
Quoted 1 line
From
31574d321c70f6d3b40fe98f9b2eafd9a903fef9Mon Sep 17 00:00:00 2001
From: "Hon Ching \\(Vicky\\) Lo" <[email protected]>
Date: Wed, 15 Mar 2017 01:28:07 -0400
Subject: [PATCH] vTPM: Fix missing NULL check
The current code passes the address of tpm_chip as the argument to dev_get_drvdata() without prior NULL check in tpm_ibmvtpm_get_desired_dma. This resulted an oops during kernel boot when vTPM is enabled in Power partition configured in active memory sharing mode.
The vio_driver's get_desired_dma() is called before the probe(), which for vtpm is tpm_ibmvtpm_probe, and it's this latter function that initializes the driver and set data. Attempting to get data before the probe() caused the problem.
This patch adds a NULL check to the tpm_ibmvtpm_get_desired_dma.
drivers/char/tpm/tpm_ibmvtpm.c +6 -2
@@ -299,6 +299,8 @@ static int tpm_ibmvtpm_remove(struct vio_dev *vdev) }kfree (ibmvtpm); +/* For tpm_ibmvtpm_get_desired_dma */ +dev_set_drvdata (&vdev->dev,NULL );return 0 ; }
@@ -313,14 +315,16 @@ static int tpm_ibmvtpm_remove(struct vio_dev *vdev)static unsigned long tpm_ibmvtpm_get_desired_dma (struct vio_dev *vdev) {struct tpm_chip *chip =dev_get_drvdata (&vdev->dev); -struct ibmvtpm_dev *ibmvtpm =dev_get_drvdata (&chip->dev); +struct ibmvtpm_dev *ibmvtpm;/* * ibmvtpm initializes at probe time, so the data we are * asking for may not be set yet. Estimate that 4K required * for TCE-mapped buffer in addition to CRQ. */ -if (!ibmvtpm) +if (chip) + ibmvtpm =dev_get_drvdata (&chip->dev); +else return CRQ_RES_BUF_SIZE +PAGE_SIZE ;return CRQ_RES_BUF_SIZE + ibmvtpm->rtce_size;