[Skiboot] [PATCH 1/8] interrupts: add_opal_interrupts avoid NULL dereference on P10 mambo
Cédric Le Goater
clg at kaod.org
Tue Oct 5 03:41:20 AEDT 2021
On 10/3/21 03:22, Nicholas Piggin wrote:
> On P10, get_ics_phandle() calls xive2_get_phandle() directly. This
> results in a NULL dereference on mambo when xive2 is not set up.
Indeed. Sorry about that. I tend to prefer having devices !
Reviewed-by: Cédric Le Goater <clg at kaod.org>
Thanks,
C.
>
> This was caught with the virtual memory boot patch on P10 mambo.
>
> Signed-off-by: Nicholas Piggin <npiggin at gmail.com>
> ---
> core/interrupts.c | 7 ++++++-
> hw/xive2.c | 3 +++
> 2 files changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/core/interrupts.c b/core/interrupts.c
> index 5d2d04db5..c39c2801c 100644
> --- a/core/interrupts.c
> +++ b/core/interrupts.c
> @@ -204,10 +204,15 @@ void add_opal_interrupts(void)
> {
> struct irq_source *is;
> unsigned int i, ns, tns = 0, count = 0;
> + uint32_t parent;
> uint32_t isn;
> __be32 *irqs = NULL;
> char *names = NULL;
>
> + parent = get_ics_phandle();
> + if (!parent)
> + return;
> +
> lock(&irq_lock);
> list_for_each(&irq_sources, is, link) {
> /*
> @@ -251,7 +256,7 @@ void add_opal_interrupts(void)
> /* First create the standard "interrupts" property and the
> * corresponding names property
> */
> - dt_add_property_cells(opal_node, "interrupt-parent", get_ics_phandle());
> + dt_add_property_cells(opal_node, "interrupt-parent", parent);
> dt_add_property(opal_node, "interrupts", irqs, count * 8);
> dt_add_property(opal_node, "opal-interrupts-names", names, tns);
> dt_add_property(opal_node, "interrupt-names", names, tns);
> diff --git a/hw/xive2.c b/hw/xive2.c
> index 810ab91d8..0254175a9 100644
> --- a/hw/xive2.c
> +++ b/hw/xive2.c
> @@ -1977,6 +1977,9 @@ static void xive_create_mmio_dt_node(struct xive *x)
>
> uint32_t xive2_get_phandle(void)
> {
> + if (!xive_dt_node)
> + return 0;
> +
> return xive_dt_node->phandle;
> }
>
>
More information about the Skiboot
mailing list