Skip to contentSkip to conversation

drivers/misc/pch_phub.c: don't oops if dmi_get_system_info returns NULL

PATCH In review Darren Hart 3 participants 5 messages Jul 28, 2011 – Aug 3, 2011 Char and misc drivers

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 drivers/misc/pch_phub.c: don't oops if dmi_get_system_info returns NULL

Bruce,

Please apply to yocto/base. Fixes a boot issue for a tunnel creek development board.

--

commit 2b934c6236983392d01bef22e43af3051cac16f5

If dmi_get_system_info() returns NULL, pch_phub_probe() will dereferencea a zero pointer.

This oops was observed on an Atom based board which has no BIOS, but a bootloder which doesn't privde DMI data.

---
 drivers/misc/pch_phub.c |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)
drivers/misc/pch_phub.c +4 -1
index 5fe79df..01eb67b 100644
@@ -686,6 +686,8 @@ static int __devinit pch_phub_probe(struct pci_dev *pdev,
 	}
 
 	if (id->driver_data == 1) { /* EG20T PCH */
+		const char *board_name;
+
 		retval = sysfs_create_file(&pdev->dev.kobj,
 					   &dev_attr_pch_mac.attr);
 		if (retval)
@@ -701,7 +703,8 @@ static int __devinit pch_phub_probe(struct pci_dev *pdev,
 					       CLKCFG_CANCLK_MASK);
 
 		/* quirk for CM-iTC board */
-		if (strstr(dmi_get_system_info(DMI_BOARD_NAME), "CM-iTC"))
+		board_name = dmi_get_system_info(DMI_BOARD_NAME);
+		if (board_name && strstr(board_name, "CM-iTC"))
 			pch_phub_read_modify_write_reg(chip,
 						(unsigned int)CLKCFG_REG_OFFSET,
 						CLKCFG_UART_48MHZ | CLKCFG_BAUDDIV |
Signature · 5 lines
1.7.1
-- 
Darren Hart
Intel Open Source Technology Center
Yocto Project - Linux Kernel
#1 lore raw
Quoted 4 lines · Darren Hart

Bruce,

Please apply to yocto/base. Fixes a boot issue for a tunnel creek development board.

I fetched and updated master in linux-yocto-3.0 and cherry picked this into yocto/base, and merged it out.

e6625fa..55f9c40 master -> master
935b896..c33fc74 yocto/base -> yocto/base 67283c12..30a2cec yocto/standard/arm-versatile-926ejs ->
yocto/standard/arm-versatile-926ejs
dee149a..318b059 yocto/standard/base -> yocto/standard/base 850784c..f79313d yocto/standard/beagleboard ->
yocto/standard/beagleboard
b584e72..c30a568 yocto/standard/common-pc-64/base ->
yocto/standard/common-pc-64/base
8064012..61da1e3 yocto/standard/common-pc-64/jasperforest ->
yocto/standard/common-pc-64/jasperforest
69faf26..ac5c59d yocto/standard/common-pc-64/romley ->
yocto/standard/common-pc-64/romley
1da9aad..c49c587 yocto/standard/common-pc-64/sugarbay ->
yocto/standard/common-pc-64/sugarbay
287479a..9e321ee yocto/standard/common-pc/atom-pc ->
yocto/standard/common-pc/atom-pc
f56a137..efaab1f yocto/standard/common-pc/base ->
yocto/standard/common-pc/base

   34a9e0e..9a259cf  yocto/standard/crownbay -> yocto/standard/crownbay
   311152b..8c09403  yocto/standard/emenlow -> yocto/standard/emenlow
   813ec5a..e556c2a  yocto/standard/fishriver -> yocto/standard/fishriver
   2d19d3f..5e08aa8  yocto/standard/fri2 -> yocto/standard/fri2
   1562ec0..a8eef04  yocto/standard/fsl-mpc8315e-rdb -> 

yocto/standard/fsl-mpc8315e-rdb
ac0f36e..f9b9688 yocto/standard/mti-malta32-be ->
yocto/standard/mti-malta32-be
7d24c08..bb024ac yocto/standard/mti-malta32-le ->
yocto/standard/mti-malta32-le
40381c3..6c76d97 yocto/standard/preempt-rt/base ->
yocto/standard/preempt-rt/base
40381c3..5ae5cb6 yocto/standard/preempt-rt/common-pc ->
yocto/standard/preempt-rt/common-pc
38525f1..a46a4c3 yocto/standard/qemu-ppc32 -> yocto/standard/qemu-ppc32 5eaea5c..df9213c yocto/standard/routerstationpro ->
yocto/standard/routerstationpro

You'll need to use kernel-dev or update your SRCREVs manually to pick it up. I've got a pending update that I'll send out later. But we'd have to wait for it to merge into poky master anyway.

Cheers,

Bruce

Quoted 43 lines

--

commit 2b934c6236983392d01bef22e43af3051cac16f5

If dmi_get_system_info() returns NULL, pch_phub_probe() will dereferencea a zero pointer.

This oops was observed on an Atom based board which has no BIOS, but a bootloder which doesn't privde DMI data.

---
  drivers/misc/pch_phub.c |    5 ++++-
  1 files changed, 4 insertions(+), 1 deletions(-)
drivers/misc/pch_phub.c +4 -1
index 5fe79df..01eb67b 100644
@@ -686,6 +686,8 @@ static int __devinit pch_phub_probe(struct pci_dev *pdev,
  	}
 
  	if (id->driver_data == 1) { /* EG20T PCH */
+		const char *board_name;
+
  		retval = sysfs_create_file(&pdev->dev.kobj,
  					&dev_attr_pch_mac.attr);
  		if (retval)
@@ -701,7 +703,8 @@ static int __devinit pch_phub_probe(struct pci_dev *pdev,
  					       CLKCFG_CANCLK_MASK);
 
  		/* quirk for CM-iTC board */
-		if (strstr(dmi_get_system_info(DMI_BOARD_NAME), "CM-iTC"))
+		board_name = dmi_get_system_info(DMI_BOARD_NAME);
+		if (board_name&&  strstr(board_name, "CM-iTC"))
  			pch_phub_read_modify_write_reg(chip,
  						(unsigned int)CLKCFG_REG_OFFSET,
  						CLKCFG_UART_48MHZ | CLKCFG_BAUDDIV |
#2 lore raw
In reply to Darren Hart
Quoted 38 lines · Darren Hart

Bruce,

Please apply to yocto/base. Fixes a boot issue for a tunnel creek development board.

--

commit 2b934c6236983392d01bef22e43af3051cac16f5

If dmi_get_system_info() returns NULL, pch_phub_probe() will dereferencea a zero pointer.

This oops was observed on an Atom based board which has no BIOS, but a bootloder which doesn't privde DMI data.

---
 drivers/misc/pch_phub.c |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)
drivers/misc/pch_phub.c +2 -0
index 5fe79df..01eb67b 100644
@@ -686,6 +686,8 @@ static int __devinit pch_phub_probe(struct pci_dev
 *pdev, }
 
 	if (id->driver_data == 1) { /* EG20T PCH */
+		const char *board_name;
+
 		retval = sysfs_create_file(&pdev->dev.kobj,
 					   &dev_attr_pch_mac.attr);
 		if (retval)

drivers/misc/pch_phub.c static int __devinit pch_phub_probe(struct pci_dev · line 707

Quoted 6 lines
drivers/misc/pch_phub.c +2 -1
@@ -701,7 +703,8 @@ static int __devinit pch_phub_probe(struct pci_dev
 *pdev, CLKCFG_CANCLK_MASK);
 
 		/* quirk for CM-iTC board */
-		if (strstr(dmi_get_system_info(DMI_BOARD_NAME), "CM-iTC"))
+		board_name = dmi_get_system_info(DMI_BOARD_NAME);
+		if (board_name && strstr(board_name, "CM-iTC"))

May be it could be just if ( dmi_get_system_info(DMI_BOARD_NAME) && strstr(board_name, "CM-iTC"))

although I think compiler will already do it internally

Quoted 3 lines
drivers/misc/pch_phub.c +0 -0
 			pch_phub_read_modify_write_reg(chip,
 						(unsigned int)CLKCFG_REG_OFFSET,
 						CLKCFG_UART_48MHZ | CLKCFG_BAUDDIV |
Signature · 1 line
Khem Raj
#3 lore raw
Quoted 49 lines · Khem Raj
Quoted 38 lines · Darren Hart

Bruce,

Please apply to yocto/base. Fixes a boot issue for a tunnel creek development board.

--

commit 2b934c6236983392d01bef22e43af3051cac16f5

If dmi_get_system_info() returns NULL, pch_phub_probe() will dereferencea a zero pointer.

This oops was observed on an Atom based board which has no BIOS, but a bootloder which doesn't privde DMI data.

---
  drivers/misc/pch_phub.c |    5 ++++-
  1 files changed, 4 insertions(+), 1 deletions(-)
drivers/misc/pch_phub.c +2 -0
index 5fe79df..01eb67b 100644
@@ -686,6 +686,8 @@ static int __devinit pch_phub_probe(struct pci_dev
 *pdev, }
 
  	if (id->driver_data == 1) { /* EG20T PCH */
+		const char *board_name;
+
  		retval = sysfs_create_file(&pdev->dev.kobj,
  					&dev_attr_pch_mac.attr);
  		if (retval)

drivers/misc/pch_phub.c static int __devinit pch_phub_probe(struct pci_dev · line 707

Quoted 6 lines
drivers/misc/pch_phub.c +2 -1
@@ -701,7 +703,8 @@ static int __devinit pch_phub_probe(struct pci_dev
 *pdev, CLKCFG_CANCLK_MASK);
 
  		/* quirk for CM-iTC board */
-		if (strstr(dmi_get_system_info(DMI_BOARD_NAME), "CM-iTC"))
+		board_name = dmi_get_system_info(DMI_BOARD_NAME);
+		if (board_name&&  strstr(board_name, "CM-iTC"))

May be it could be just if ( dmi_get_system_info(DMI_BOARD_NAME)&& strstr(board_name, "CM-iTC"))

Quoted 1 line

although I think compiler will already do it internally

Could very well be. I grabbed this one directly from linus' tree, so I've got it as-is for now, but I've tagged it to be considered later if we do decide that we want to send a tweak of this upstream

Thanks!

Bruce

Quoted 4 lines
Quoted 4 lines
drivers/misc/pch_phub.c +0 -0
  			pch_phub_read_modify_write_reg(chip,
  						(unsigned int)CLKCFG_REG_OFFSET,
  						CLKCFG_UART_48MHZ | CLKCFG_BAUDDIV |
#4 lore raw
In reply to Khem Raj
Quoted 41 lines · Khem Raj
Quoted 40 lines · Darren Hart

Bruce,

Please apply to yocto/base. Fixes a boot issue for a tunnel creek development board.

--

commit 2b934c6236983392d01bef22e43af3051cac16f5

If dmi_get_system_info() returns NULL, pch_phub_probe() will dereferencea a zero pointer.

This oops was observed on an Atom based board which has no BIOS, but a bootloder which doesn't privde DMI data.

---
 drivers/misc/pch_phub.c |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)
drivers/misc/pch_phub.c +2 -0
index 5fe79df..01eb67b 100644
@@ -686,6 +686,8 @@ static int __devinit pch_phub_probe(struct pci_dev
 *pdev, }
 
 	if (id->driver_data == 1) { /* EG20T PCH */
+		const char *board_name;
+
 		retval = sysfs_create_file(&pdev->dev.kobj,
 					   &dev_attr_pch_mac.attr);
 		if (retval)
@@ -701,7 +703,8 @@ static int __devinit pch_phub_probe(struct pci_dev
 *pdev, CLKCFG_CANCLK_MASK);
 
Quoted 7 lines

drivers/misc/pch_phub.c static int __devinit pch_phub_probe(struct pci_dev *pdev, · line 707

Quoted 4 lines
drivers/misc/pch_phub.c +2 -1
 		/* quirk for CM-iTC board */
-		if (strstr(dmi_get_system_info(DMI_BOARD_NAME), "CM-iTC"))
+		board_name = dmi_get_system_info(DMI_BOARD_NAME);
+		if (board_name && strstr(board_name, "CM-iTC"))

May be it could be just if ( dmi_get_system_info(DMI_BOARD_NAME) && strstr(board_name, "CM-iTC"))

Where does board_name get initialized in your version?

Signature · 3 lines
Darren Hart
Intel Open Source Technology Center
Yocto Project - Linux Kernel