Skip to content

Commit cb30dfa

Browse files
committed
iommufd: Don't overflow during division for dirty tracking
If pgshift is 63 then BITS_PER_TYPE(*bitmap->bitmap) * pgsize will overflow to 0 and this triggers divide by 0. In this case the index should just be 0, so reorganize things to divide by shift and avoid hitting any overflows. Link: https://patch.msgid.link/r/[email protected] Cc: [email protected] Fixes: 58ccf01 ("vfio: Add an IOVA bitmap support") Reviewed-by: Joao Martins <[email protected]> Reviewed-by: Nicolin Chen <[email protected]> Reviewed-by: Kevin Tian <[email protected]> Reported-by: [email protected] Closes: https://syzkaller.appspot.com/bug?extid=093a8a8b859472e6c257 Signed-off-by: Jason Gunthorpe <[email protected]>
1 parent 211ddde commit cb30dfa

1 file changed

Lines changed: 2 additions & 3 deletions

File tree

drivers/iommu/iommufd/iova_bitmap.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -130,9 +130,8 @@ struct iova_bitmap {
130130
static unsigned long iova_bitmap_offset_to_index(struct iova_bitmap *bitmap,
131131
unsigned long iova)
132132
{
133-
unsigned long pgsize = 1UL << bitmap->mapped.pgshift;
134-
135-
return iova / (BITS_PER_TYPE(*bitmap->bitmap) * pgsize);
133+
return (iova >> bitmap->mapped.pgshift) /
134+
BITS_PER_TYPE(*bitmap->bitmap);
136135
}
137136

138137
/*

0 commit comments

Comments
 (0)