Skip to content
  • Steffen Klassert's avatar
    padata: Handle empty padata cpumasks · 33e54450
    Steffen Klassert authored
    
    
    This patch fixes a bug when the padata cpumask does not
    intersect with the active cpumask. In this case we get a
    division by zero in padata_alloc_pd and we end up with a
    useless padata instance. Padata can end up with an empty
    cpumask for two reasons:
    
    1. A user removed the last cpu that belongs to the padata
    cpumask and the active cpumask.
    
    2. The last cpu that belongs to the padata cpumask and the
    active cpumask goes offline.
    
    We introduce a function padata_validate_cpumask to check if the padata
    cpumask does intersect with the active cpumask. If the cpumasks do not
    intersect we mark the instance as invalid, so it can't be used. We do not
    allocate the cpumask dependend recources in this case. This fixes the
    division by zero and keeps the padate instance in a consistent state.
    
    It's not possible to trigger this bug by now because the only padata user,
    pcrypt uses always the possible cpumask.
    
    Reported-by: default avatarDan Kruchinin <dkruchinin@acm.org>
    Signed-off-by: default avatarSteffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
    33e54450