• Michael Ellerman's avatar
    powerpc/iommu: Avoid undefined right shift in iommu_range_alloc() · 63b85621
    Michael Ellerman authored
    In iommu_range_alloc() we generate a mask by right shifting ~0,
    however if the specified alignment is 0 then we right shift by 64,
    which is undefined. UBSAN tells us so:
    
      UBSAN: Undefined behaviour in ../arch/powerpc/kernel/iommu.c:193:35
      shift exponent 64 is too large for 64-bit type 'long unsigned int'
    
    We can avoid it by instead generating the mask with:
    
      align_mask = (1ull << align_order) - 1;
    
    That will also generate an undefined shift if align_order is 64 or
    greater, but that shouldn't be a problem for a while.
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    63b85621
iommu.c 30 KB