Skip to content

Commit b22a5ee

Browse files
Pratyush BrahmamikeNG
authored andcommitted
iommu: Fix missing return check of arm_lpae_init_pte
UAF scenario may occur in clients with EL1 privileges for iova mappings when we miss to check the return value of arm_lpae_init_pte which may lead to an PTE be counted as it was set even if it was already existing. This can cause a dangling IOMMU PTE to be left mapped pointing to a freed object and cause UAF in the client if the dangling PTE is accessed after a failed unmap operation. Fixes: 27de1978c331 ("ANDROID: GKI: iommu/io-pgtable-arm: LPAE related updates by vendor") Change-Id: I674b9b520e705b8f8e63ba20ed76e64cb2fe0f47 Signed-off-by: Pratyush Brahma <quic_pbrahma@quicinc.com>
1 parent cb95f4e commit b22a5ee

1 file changed

Lines changed: 3 additions & 1 deletion

File tree

drivers/iommu/io-pgtable-arm.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -597,9 +597,11 @@ static int arm_lpae_map_sg(struct io_pgtable_ops *ops, unsigned long iova,
597597
arm_lpae_iopte *ptep = ms.pgtable +
598598
ARM_LPAE_LVL_IDX(iova, MAP_STATE_LVL,
599599
data);
600-
arm_lpae_init_pte(
600+
ret = arm_lpae_init_pte(
601601
data, iova, phys, prot, MAP_STATE_LVL,
602602
ptep, ms.prev_pgtable, false);
603+
if (ret)
604+
goto out_err;
603605
ms.num_pte++;
604606
} else {
605607
ret = __arm_lpae_map(data, iova, phys, pgsize,

0 commit comments

Comments
 (0)