Merge "msm: kgsl: Fix upper bound check for iommu address"
This commit is contained in:
committed by
Gerrit - the friendly Code Review server
commit
63b678c6fe
@@ -1,7 +1,7 @@
|
|||||||
// SPDX-License-Identifier: GPL-2.0-only
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2011-2021, The Linux Foundation. All rights reserved.
|
* Copyright (c) 2011-2021, The Linux Foundation. All rights reserved.
|
||||||
* Copyright (c) 2022-2023, Qualcomm Innovation Center, Inc. All rights reserved.
|
* Copyright (c) 2022-2024, Qualcomm Innovation Center, Inc. All rights reserved.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/compat.h>
|
#include <linux/compat.h>
|
||||||
@@ -2586,18 +2586,19 @@ static bool kgsl_iommu_addr_in_range(struct kgsl_pagetable *pagetable,
|
|||||||
uint64_t gpuaddr, uint64_t size)
|
uint64_t gpuaddr, uint64_t size)
|
||||||
{
|
{
|
||||||
struct kgsl_iommu_pt *pt = pagetable->priv;
|
struct kgsl_iommu_pt *pt = pagetable->priv;
|
||||||
|
u64 end = gpuaddr + size;
|
||||||
|
|
||||||
if (gpuaddr == 0)
|
/* Make sure we don't wrap around */
|
||||||
|
if (gpuaddr == 0 || end < gpuaddr)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (gpuaddr >= pt->va_start && (gpuaddr + size) < pt->va_end)
|
if (gpuaddr >= pt->va_start && end <= pt->va_end)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (gpuaddr >= pt->compat_va_start &&
|
if (gpuaddr >= pt->compat_va_start && end <= pt->compat_va_end)
|
||||||
(gpuaddr + size) < pt->compat_va_end)
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (gpuaddr >= pt->svm_start && (gpuaddr + size) < pt->svm_end)
|
if (gpuaddr >= pt->svm_start && end <= pt->svm_end)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
Reference in New Issue
Block a user