On 21:03 Sun 31 May     , hemanshu.khilari.foss wrote:
> qdev_get_clocklist() function returns a pointer to the NamedClockList
> struct. This function is called in qdev_alias_clock() and the returned
> pointer is immediately dereferenced without a null check.
> 
> Passing clock name that doesn't exist to qdev_get_clocklist() is a
> programming error, and so this change is not fixing a bug, only making
> the reporting of that programming error a bit more helpful and bringing
> it in to line with qdev_get_clock_in() and qdev_get_clock_out().
> 
> Cc: [email protected]
> Cc: [email protected]
> Cc: [email protected]
> Resolves: https://gitlab.com/qemu-project/qemu/-/work_items/2342
> Signed-off-by: hemanshu.khilari.foss <[email protected]>

Reviewed-by: Luc Michel <[email protected]>

> ---
>  hw/core/qdev-clock.c | 9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/hw/core/qdev-clock.c b/hw/core/qdev-clock.c
> index 6e2967e433..861f78f94c 100644
> --- a/hw/core/qdev-clock.c
> +++ b/hw/core/qdev-clock.c
> @@ -157,7 +157,14 @@ Clock *qdev_alias_clock(DeviceState *dev, const char 
> *name,
>                          DeviceState *alias_dev, const char *alias_name)
>  {
>      NamedClockList *ncl = qdev_get_clocklist(dev, name);
> -    Clock *clk = ncl->clock;
> +    Clock *clk;
> +
> +    if (!ncl) {
> +        error_report("Can not find clock '%s' for device type '%s'",
> +                     name, object_get_typename(OBJECT(dev)));
> +        abort();
> +    }
> +    clk = ncl->clock;
>  
>      ncl = qdev_init_clocklist(alias_dev, alias_name, true, ncl->output, clk);
>  
> -- 
> 2.42.0
> 

-- 

Reply via email to