[SRU] [Bionic] [PATCH 0/1] Fix TBT ICM firmware issue

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

[SRU] [Bionic] [PATCH 0/1] Fix TBT ICM firmware issue

Kai-Heng Feng
BugLink: https://bugs.launchpad.net/bugs/1768292

[Impact]
When TBT ICM firmware is not running properly, it may crash the kernel.

[Fix]
Protect against cases when ICM is not set.

[Test]
User confirmed the additional patch works.

[Regression Potential]
Low. It adds a simple logic to avoid NULL dereference.


Mika Westerberg (1):
  thunderbolt: Prevent crash when ICM firmware is not running

 drivers/thunderbolt/icm.c | 3 +++
 1 file changed, 3 insertions(+)

--
2.17.0


--
kernel-team mailing list
[hidden email]
https://lists.ubuntu.com/mailman/listinfo/kernel-team
Reply | Threaded
Open this post in threaded view
|

[SRU] [Bionic] [PATCH 1/1] thunderbolt: Prevent crash when ICM firmware is not running

Kai-Heng Feng
From: Mika Westerberg <[hidden email]>

BugLink: https://bugs.launchpad.net/bugs/1768292

On Lenovo ThinkPad Yoga 370 (and possibly some other Lenovo models as
well) the Thunderbolt host controller sometimes comes up in such way
that the ICM firmware is not running properly. This is most likely an
issue in BIOS/firmware but as side-effect driver crashes the kernel due
to NULL pointer dereference:

  BUG: unable to handle kernel NULL pointer dereference at 0000000000000980
  IP: pci_write_config_dword+0x5/0x20
  Call Trace:
   pcie2cio_write+0x3b/0x70 [thunderbolt]
   icm_driver_ready+0x168/0x260 [thunderbolt]
   ? tb_ctl_start+0x50/0x70 [thunderbolt]
   tb_domain_add+0x73/0xf0 [thunderbolt]
   nhi_probe+0x182/0x300 [thunderbolt]
   local_pci_probe+0x42/0xa0
   ? pci_match_device+0xd9/0x100
   pci_device_probe+0x146/0x1b0
   driver_probe_device+0x315/0x480
   ...

Instead of crashing update the driver to bail out gracefully if we
encounter such situation.

Fixes: f67cf491175a ("thunderbolt: Add support for Internal Connection Manager (ICM)")
Reported-by: Jordan Glover <[hidden email]>
Signed-off-by: Mika Westerberg <[hidden email]>
Acked-by: Yehezkel Bernat <[hidden email]>
Cc: [hidden email]
(cherry picked from commit ea9d7bb798900096f26c585957d6ad9c532417e6)
Signed-off-by: Kai-Heng Feng <[hidden email]>
---
 drivers/thunderbolt/icm.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/thunderbolt/icm.c b/drivers/thunderbolt/icm.c
index 6b1041677604..2d2ceda9aa26 100644
--- a/drivers/thunderbolt/icm.c
+++ b/drivers/thunderbolt/icm.c
@@ -1452,6 +1452,9 @@ static int icm_firmware_reset(struct tb *tb, struct tb_nhi *nhi)
  struct icm *icm = tb_priv(tb);
  u32 val;
 
+ if (!icm->upstream_port)
+ return -ENODEV;
+
  /* Put ARC to wait for CIO reset event to happen */
  val = ioread32(nhi->iobase + REG_FW_STS);
  val |= REG_FW_STS_CIO_RESET_REQ;
--
2.17.0


--
kernel-team mailing list
[hidden email]
https://lists.ubuntu.com/mailman/listinfo/kernel-team
Reply | Threaded
Open this post in threaded view
|

ACK: [SRU] [Bionic] [PATCH 1/1] thunderbolt: Prevent crash when ICM firmware is not running

Kleber Souza
On 05/03/18 07:13, Kai-Heng Feng wrote:

> From: Mika Westerberg <[hidden email]>
>
> BugLink: https://bugs.launchpad.net/bugs/1768292
>
> On Lenovo ThinkPad Yoga 370 (and possibly some other Lenovo models as
> well) the Thunderbolt host controller sometimes comes up in such way
> that the ICM firmware is not running properly. This is most likely an
> issue in BIOS/firmware but as side-effect driver crashes the kernel due
> to NULL pointer dereference:
>
>   BUG: unable to handle kernel NULL pointer dereference at 0000000000000980
>   IP: pci_write_config_dword+0x5/0x20
>   Call Trace:
>    pcie2cio_write+0x3b/0x70 [thunderbolt]
>    icm_driver_ready+0x168/0x260 [thunderbolt]
>    ? tb_ctl_start+0x50/0x70 [thunderbolt]
>    tb_domain_add+0x73/0xf0 [thunderbolt]
>    nhi_probe+0x182/0x300 [thunderbolt]
>    local_pci_probe+0x42/0xa0
>    ? pci_match_device+0xd9/0x100
>    pci_device_probe+0x146/0x1b0
>    driver_probe_device+0x315/0x480
>    ...
>
> Instead of crashing update the driver to bail out gracefully if we
> encounter such situation.
>
> Fixes: f67cf491175a ("thunderbolt: Add support for Internal Connection Manager (ICM)")
> Reported-by: Jordan Glover <[hidden email]>
> Signed-off-by: Mika Westerberg <[hidden email]>
> Acked-by: Yehezkel Bernat <[hidden email]>
> Cc: [hidden email]
> (cherry picked from commit ea9d7bb798900096f26c585957d6ad9c532417e6)
> Signed-off-by: Kai-Heng Feng <[hidden email]>

Acked-by: Kleber Sacilotto de Souza <[hidden email]>

> ---
>  drivers/thunderbolt/icm.c | 3 +++
>  1 file changed, 3 insertions(+)
>
> diff --git a/drivers/thunderbolt/icm.c b/drivers/thunderbolt/icm.c
> index 6b1041677604..2d2ceda9aa26 100644
> --- a/drivers/thunderbolt/icm.c
> +++ b/drivers/thunderbolt/icm.c
> @@ -1452,6 +1452,9 @@ static int icm_firmware_reset(struct tb *tb, struct tb_nhi *nhi)
>   struct icm *icm = tb_priv(tb);
>   u32 val;
>  
> + if (!icm->upstream_port)
> + return -ENODEV;
> +
>   /* Put ARC to wait for CIO reset event to happen */
>   val = ioread32(nhi->iobase + REG_FW_STS);
>   val |= REG_FW_STS_CIO_RESET_REQ;
>

--
kernel-team mailing list
[hidden email]
https://lists.ubuntu.com/mailman/listinfo/kernel-team
Reply | Threaded
Open this post in threaded view
|

ACK: [SRU] [Bionic] [PATCH 0/1] Fix TBT ICM firmware issue

AceLan Kao
In reply to this post by Kai-Heng Feng
Acked-By: AceLan Kao <[hidden email]>

--
kernel-team mailing list
[hidden email]
https://lists.ubuntu.com/mailman/listinfo/kernel-team
Reply | Threaded
Open this post in threaded view
|

APPLIED: [SRU] [Bionic] [PATCH 0/1] Fix TBT ICM firmware issue

Kleber Souza
In reply to this post by Kai-Heng Feng
On 05/03/18 07:13, Kai-Heng Feng wrote:

> BugLink: https://bugs.launchpad.net/bugs/1768292
>
> [Impact]
> When TBT ICM firmware is not running properly, it may crash the kernel.
>
> [Fix]
> Protect against cases when ICM is not set.
>
> [Test]
> User confirmed the additional patch works.
>
> [Regression Potential]
> Low. It adds a simple logic to avoid NULL dereference.
>
>
> Mika Westerberg (1):
>   thunderbolt: Prevent crash when ICM firmware is not running
>
>  drivers/thunderbolt/icm.c | 3 +++
>  1 file changed, 3 insertions(+)
>

Applied to bionic/master-next branch.

Thanks,
Kleber

--
kernel-team mailing list
[hidden email]
https://lists.ubuntu.com/mailman/listinfo/kernel-team