Commit 95fb6144 authored by Dan Carpenter's avatar Dan Carpenter Committed by David Woodhouse
Browse files

iommu/vt-d: shift wrapping bug in prq_event_thread()



The "req->addr" variable is a bit field declared as "u64 addr:52;".
The "address" variable is a u64.  We need to cast "req->addr" to a u64
before the shift or the result is truncated to 52 bits.

Fixes: a222a7f0 ('iommu/vt-d: Implement page request handling')
Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: default avatarDavid Woodhouse <David.Woodhouse@intel.com>
parent 26322ab5
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -490,7 +490,7 @@ static irqreturn_t prq_event_thread(int irq, void *d)
		req = &iommu->prq[head / sizeof(*req)];

		result = QI_RESP_FAILURE;
		address = req->addr << PAGE_SHIFT;
		address = (u64)req->addr << PAGE_SHIFT;
		if (!req->pasid_present) {
			pr_err("%s: Page request without PASID: %08llx %08llx\n",
			       iommu->name, ((unsigned long long *)req)[0],