提交 62aa751d 编写于 作者: K Kumar Gala 提交者: Linus Torvalds

[PATCH] ppc32: Check return of ppc_sys_get_pdata before accessing pointer

Ensure that the returned pointer from ppc_sys_get_pdata is not NULL before we
start using it.  This handles any cases where we have variants of processors
on the same board with different functionality.
Signed-off-by: NKumar Gala <kumar.gala@freescale.com>
Signed-off-by: NAndrew Morton <akpm@osdl.org>
Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
上级 09ffd94f
...@@ -94,20 +94,24 @@ mpc834x_sys_setup_arch(void) ...@@ -94,20 +94,24 @@ mpc834x_sys_setup_arch(void)
/* setup the board related information for the enet controllers */ /* setup the board related information for the enet controllers */
pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC83xx_TSEC1); pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC83xx_TSEC1);
pdata->board_flags = FSL_GIANFAR_BRD_HAS_PHY_INTR; if (pdata) {
pdata->interruptPHY = MPC83xx_IRQ_EXT1; pdata->board_flags = FSL_GIANFAR_BRD_HAS_PHY_INTR;
pdata->phyid = 0; pdata->interruptPHY = MPC83xx_IRQ_EXT1;
/* fixup phy address */ pdata->phyid = 0;
pdata->phy_reg_addr += binfo->bi_immr_base; /* fixup phy address */
memcpy(pdata->mac_addr, binfo->bi_enetaddr, 6); pdata->phy_reg_addr += binfo->bi_immr_base;
memcpy(pdata->mac_addr, binfo->bi_enetaddr, 6);
}
pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC83xx_TSEC2); pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC83xx_TSEC2);
pdata->board_flags = FSL_GIANFAR_BRD_HAS_PHY_INTR; if (pdata) {
pdata->interruptPHY = MPC83xx_IRQ_EXT2; pdata->board_flags = FSL_GIANFAR_BRD_HAS_PHY_INTR;
pdata->phyid = 1; pdata->interruptPHY = MPC83xx_IRQ_EXT2;
/* fixup phy address */ pdata->phyid = 1;
pdata->phy_reg_addr += binfo->bi_immr_base; /* fixup phy address */
memcpy(pdata->mac_addr, binfo->bi_enet1addr, 6); pdata->phy_reg_addr += binfo->bi_immr_base;
memcpy(pdata->mac_addr, binfo->bi_enet1addr, 6);
}
#ifdef CONFIG_BLK_DEV_INITRD #ifdef CONFIG_BLK_DEV_INITRD
if (initrd_start) if (initrd_start)
......
...@@ -92,28 +92,34 @@ mpc8540ads_setup_arch(void) ...@@ -92,28 +92,34 @@ mpc8540ads_setup_arch(void)
/* setup the board related information for the enet controllers */ /* setup the board related information for the enet controllers */
pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC85xx_TSEC1); pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC85xx_TSEC1);
pdata->board_flags = FSL_GIANFAR_BRD_HAS_PHY_INTR; if (pdata) {
pdata->interruptPHY = MPC85xx_IRQ_EXT5; pdata->board_flags = FSL_GIANFAR_BRD_HAS_PHY_INTR;
pdata->phyid = 0; pdata->interruptPHY = MPC85xx_IRQ_EXT5;
/* fixup phy address */ pdata->phyid = 0;
pdata->phy_reg_addr += binfo->bi_immr_base; /* fixup phy address */
memcpy(pdata->mac_addr, binfo->bi_enetaddr, 6); pdata->phy_reg_addr += binfo->bi_immr_base;
memcpy(pdata->mac_addr, binfo->bi_enetaddr, 6);
}
pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC85xx_TSEC2); pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC85xx_TSEC2);
pdata->board_flags = FSL_GIANFAR_BRD_HAS_PHY_INTR; if (pdata) {
pdata->interruptPHY = MPC85xx_IRQ_EXT5; pdata->board_flags = FSL_GIANFAR_BRD_HAS_PHY_INTR;
pdata->phyid = 1; pdata->interruptPHY = MPC85xx_IRQ_EXT5;
/* fixup phy address */ pdata->phyid = 1;
pdata->phy_reg_addr += binfo->bi_immr_base; /* fixup phy address */
memcpy(pdata->mac_addr, binfo->bi_enet1addr, 6); pdata->phy_reg_addr += binfo->bi_immr_base;
memcpy(pdata->mac_addr, binfo->bi_enet1addr, 6);
pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC85xx_FEC); }
pdata->board_flags = 0;
pdata->interruptPHY = MPC85xx_IRQ_EXT5; if (pdata) {
pdata->phyid = 3; pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC85xx_FEC);
/* fixup phy address */ pdata->board_flags = 0;
pdata->phy_reg_addr += binfo->bi_immr_base; pdata->interruptPHY = MPC85xx_IRQ_EXT5;
memcpy(pdata->mac_addr, binfo->bi_enet2addr, 6); pdata->phyid = 3;
/* fixup phy address */
pdata->phy_reg_addr += binfo->bi_immr_base;
memcpy(pdata->mac_addr, binfo->bi_enet2addr, 6);
}
#ifdef CONFIG_BLK_DEV_INITRD #ifdef CONFIG_BLK_DEV_INITRD
if (initrd_start) if (initrd_start)
......
...@@ -90,20 +90,24 @@ mpc8560ads_setup_arch(void) ...@@ -90,20 +90,24 @@ mpc8560ads_setup_arch(void)
/* setup the board related information for the enet controllers */ /* setup the board related information for the enet controllers */
pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC85xx_TSEC1); pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC85xx_TSEC1);
pdata->board_flags = FSL_GIANFAR_BRD_HAS_PHY_INTR; if (pdata) {
pdata->interruptPHY = MPC85xx_IRQ_EXT5; pdata->board_flags = FSL_GIANFAR_BRD_HAS_PHY_INTR;
pdata->phyid = 0; pdata->interruptPHY = MPC85xx_IRQ_EXT5;
/* fixup phy address */ pdata->phyid = 0;
pdata->phy_reg_addr += binfo->bi_immr_base; /* fixup phy address */
memcpy(pdata->mac_addr, binfo->bi_enetaddr, 6); pdata->phy_reg_addr += binfo->bi_immr_base;
memcpy(pdata->mac_addr, binfo->bi_enetaddr, 6);
}
pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC85xx_TSEC2); pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC85xx_TSEC2);
pdata->board_flags = FSL_GIANFAR_BRD_HAS_PHY_INTR; if (pdata) {
pdata->interruptPHY = MPC85xx_IRQ_EXT5; pdata->board_flags = FSL_GIANFAR_BRD_HAS_PHY_INTR;
pdata->phyid = 1; pdata->interruptPHY = MPC85xx_IRQ_EXT5;
/* fixup phy address */ pdata->phyid = 1;
pdata->phy_reg_addr += binfo->bi_immr_base; /* fixup phy address */
memcpy(pdata->mac_addr, binfo->bi_enet1addr, 6); pdata->phy_reg_addr += binfo->bi_immr_base;
memcpy(pdata->mac_addr, binfo->bi_enet1addr, 6);
}
#ifdef CONFIG_BLK_DEV_INITRD #ifdef CONFIG_BLK_DEV_INITRD
if (initrd_start) if (initrd_start)
......
...@@ -129,20 +129,24 @@ sbc8560_setup_arch(void) ...@@ -129,20 +129,24 @@ sbc8560_setup_arch(void)
/* setup the board related information for the enet controllers */ /* setup the board related information for the enet controllers */
pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC85xx_TSEC1); pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC85xx_TSEC1);
pdata->board_flags = FSL_GIANFAR_BRD_HAS_PHY_INTR; if (pdata) {
pdata->interruptPHY = MPC85xx_IRQ_EXT6; pdata->board_flags = FSL_GIANFAR_BRD_HAS_PHY_INTR;
pdata->phyid = 25; pdata->interruptPHY = MPC85xx_IRQ_EXT6;
/* fixup phy address */ pdata->phyid = 25;
pdata->phy_reg_addr += binfo->bi_immr_base; /* fixup phy address */
memcpy(pdata->mac_addr, binfo->bi_enetaddr, 6); pdata->phy_reg_addr += binfo->bi_immr_base;
memcpy(pdata->mac_addr, binfo->bi_enetaddr, 6);
}
pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC85xx_TSEC2); pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC85xx_TSEC2);
pdata->board_flags = FSL_GIANFAR_BRD_HAS_PHY_INTR; if (pdata) {
pdata->interruptPHY = MPC85xx_IRQ_EXT7; pdata->board_flags = FSL_GIANFAR_BRD_HAS_PHY_INTR;
pdata->phyid = 26; pdata->interruptPHY = MPC85xx_IRQ_EXT7;
/* fixup phy address */ pdata->phyid = 26;
pdata->phy_reg_addr += binfo->bi_immr_base; /* fixup phy address */
memcpy(pdata->mac_addr, binfo->bi_enet1addr, 6); pdata->phy_reg_addr += binfo->bi_immr_base;
memcpy(pdata->mac_addr, binfo->bi_enet1addr, 6);
}
#ifdef CONFIG_BLK_DEV_INITRD #ifdef CONFIG_BLK_DEV_INITRD
if (initrd_start) if (initrd_start)
......
...@@ -122,19 +122,23 @@ gp3_setup_arch(void) ...@@ -122,19 +122,23 @@ gp3_setup_arch(void)
/* setup the board related information for the enet controllers */ /* setup the board related information for the enet controllers */
pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC85xx_TSEC1); pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC85xx_TSEC1);
/* pdata->board_flags = FSL_GIANFAR_BRD_HAS_PHY_INTR; */ if (pdata) {
pdata->interruptPHY = MPC85xx_IRQ_EXT5; /* pdata->board_flags = FSL_GIANFAR_BRD_HAS_PHY_INTR; */
pdata->phyid = 2; pdata->interruptPHY = MPC85xx_IRQ_EXT5;
pdata->phy_reg_addr += binfo->bi_immr_base; pdata->phyid = 2;
memcpy(pdata->mac_addr, binfo->bi_enetaddr, 6); pdata->phy_reg_addr += binfo->bi_immr_base;
memcpy(pdata->mac_addr, binfo->bi_enetaddr, 6);
}
pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC85xx_TSEC2); pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC85xx_TSEC2);
/* pdata->board_flags = FSL_GIANFAR_BRD_HAS_PHY_INTR; */ if (pdata) {
pdata->interruptPHY = MPC85xx_IRQ_EXT5; /* pdata->board_flags = FSL_GIANFAR_BRD_HAS_PHY_INTR; */
pdata->phyid = 4; pdata->interruptPHY = MPC85xx_IRQ_EXT5;
/* fixup phy address */ pdata->phyid = 4;
pdata->phy_reg_addr += binfo->bi_immr_base; /* fixup phy address */
memcpy(pdata->mac_addr, binfo->bi_enet1addr, 6); pdata->phy_reg_addr += binfo->bi_immr_base;
memcpy(pdata->mac_addr, binfo->bi_enet1addr, 6);
}
#ifdef CONFIG_BLK_DEV_INITRD #ifdef CONFIG_BLK_DEV_INITRD
if (initrd_start) if (initrd_start)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册