Hi,

Maybe I'm missing some background here, I noticed group_mask_cpus_evenly()
is called inside irq_create_affinity_masks() and the "numgrps" it is this_vecs 
in the latter.

Looking to group_cpus_evenly(), seems it is possible to have this_vecs
equals to 0, indeed this function return NULL if numgrps == 0:

>488 struct cpumask *group_cpus_evenly(unsigned int numgrps, unsigned int 
>*nummasks)
>489 {
>[...]
>495 
>496     if (numgrps == 0)
>497         return NULL;

Without it, I guess the kmalloc() in `group_mask_cpus_evenly()` will return 
ZERO_SIZE_PTR:

>+struct cpumask *group_mask_cpus_evenly(unsigned int numgrps,
>+                                     const struct cpumask *mask,
>+                                     unsigned int *nummasks)
>+{
> 
> [...]
> 
>+      masks = kcalloc(numgrps, sizeof(*masks), GFP_KERNEL);
>+      if (!masks)
>+              goto fail_node_to_cpumask;

and this value is then passed to `__group_cpus_evenly()`.

Should this check be added or it is not needed? Or maybe rely on 
`ZERO_OR_NULL_PTR()` ?

Thanks!

--

Marco Crivellari

SUSE Labs

Reply via email to