swiotlb: avoid potential left shift overflow
[ Upstream commit 3f0461613ebcdc8c4073e235053d06d5aa58750f ] The second operand passed to slot_addr() is declared as int or unsigned int in all call sites. The left-shift to get the offset of a slot can overflow if swiotlb size is larger than 4G. Convert the macro to an inline function and declare the second argument as phys_addr_t to avoid the potential overflow. Fixes: 26a7e094783d ("swiotlb: refactor swiotlb_tbl_map_single") Signed-off-by: Chao Gao <chao.gao@intel.com> Reviewed-by: Dongli Zhang <dongli.zhang@oracle.com> Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
586f8c8330
commit
1a27425523
@@ -452,7 +452,10 @@ static void swiotlb_bounce(phys_addr_t orig_addr, phys_addr_t tlb_addr,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#define slot_addr(start, idx) ((start) + ((idx) << IO_TLB_SHIFT))
|
static inline phys_addr_t slot_addr(phys_addr_t start, phys_addr_t idx)
|
||||||
|
{
|
||||||
|
return start + (idx << IO_TLB_SHIFT);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return the offset into a iotlb slot required to keep the device happy.
|
* Return the offset into a iotlb slot required to keep the device happy.
|
||||||
|
Reference in New Issue
Block a user