Zheng Wang
2022-Oct-29 08:03 UTC
[Nouveau] [PATCH] drm/nouveau/mmu: fix use-after-free bug in nvkm_vmm_pfn_map
If it failed in kzalloc, vma will be freed in nvkm_vmm_node_merge. The later use of vma will casue use after free. Reported-by: Zheng Wang <hackerzheng666 at gmail.com> Reported-by: Zhuorao Yang <alex000young at gmail.com> Fix it by returning to upper caller as soon as error occurs. Signed-off-by: Zheng Wang <zyytlz.wz at 163.com> --- drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmm.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmm.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmm.c index ae793f400ba1..04befd28f80b 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmm.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmm.c @@ -1272,8 +1272,7 @@ nvkm_vmm_pfn_map(struct nvkm_vmm *vmm, u8 shift, u64 addr, u64 size, u64 *pfn) page - vmm->func->page, map); if (WARN_ON(!tmp)) { - ret = -ENOMEM; - goto next; + return -ENOMEM; } if ((tmp->mapped = map)) -- 2.25.1
Zheng Hacker
2022-Nov-02 10:35 UTC
[Nouveau] [PATCH] drm/nouveau/mmu: fix use-after-free bug in nvkm_vmm_pfn_map
Friendly Ping :)
Lyude Paul
2023-Mar-07 00:04 UTC
[Nouveau] [PATCH] drm/nouveau/mmu: fix use-after-free bug in nvkm_vmm_pfn_map
Reviewed-by: Lyude Paul <lyude at redhat.com> Will push upstream in a moment On Sat, 2022-10-29 at 15:46 +0800, Zheng Wang wrote:> If it failed in kzalloc, vma will be freed in nvkm_vmm_node_merge. > The later use of vma will casue use after free. > > Reported-by: Zheng Wang <hackerzheng666 at gmail.com> > Reported-by: Zhuorao Yang <alex000young at gmail.com> > > Fix it by returning to upper caller as soon as error occurs. > > Signed-off-by: Zheng Wang <zyytlz.wz at 163.com> > --- > drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmm.c | 3 +-- > 1 file changed, 1 insertion(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmm.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmm.c > index ae793f400ba1..04befd28f80b 100644 > --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmm.c > +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmm.c > @@ -1272,8 +1272,7 @@ nvkm_vmm_pfn_map(struct nvkm_vmm *vmm, u8 shift, u64 addr, u64 size, u64 *pfn) > page - > vmm->func->page, map); > if (WARN_ON(!tmp)) { > - ret = -ENOMEM; > - goto next; > + return -ENOMEM; > } > > if ((tmp->mapped = map))-- Cheers, Lyude Paul (she/her) Software Engineer at Red Hat
Lyude Paul
2023-Mar-07 00:11 UTC
[Nouveau] [PATCH] drm/nouveau/mmu: fix use-after-free bug in nvkm_vmm_pfn_map
Actually - could you resend this with dri-devel at lists.freedesktop.org added to the cc list just to make patchwork happy? On Sat, 2022-10-29 at 15:46 +0800, Zheng Wang wrote:> If it failed in kzalloc, vma will be freed in nvkm_vmm_node_merge. > The later use of vma will casue use after free. > > Reported-by: Zheng Wang <hackerzheng666 at gmail.com> > Reported-by: Zhuorao Yang <alex000young at gmail.com> > > Fix it by returning to upper caller as soon as error occurs. > > Signed-off-by: Zheng Wang <zyytlz.wz at 163.com> > --- > drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmm.c | 3 +-- > 1 file changed, 1 insertion(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmm.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmm.c > index ae793f400ba1..04befd28f80b 100644 > --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmm.c > +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmm.c > @@ -1272,8 +1272,7 @@ nvkm_vmm_pfn_map(struct nvkm_vmm *vmm, u8 shift, u64 addr, u64 size, u64 *pfn) > page - > vmm->func->page, map); > if (WARN_ON(!tmp)) { > - ret = -ENOMEM; > - goto next; > + return -ENOMEM; > } > > if ((tmp->mapped = map))-- Cheers, Lyude Paul (she/her) Software Engineer at Red Hat
Apparently Analagous Threads
- [PATCH] drm/nouveau/mmu: fix use-after-free bug in nvkm_vmm_pfn_map
- [PATCH] drm/nouveau/mmu: fix use-after-free bug in nvkm_vmm_pfn_map
- [PATCH hmm 5/5] mm/hmm: remove the customizable pfn format from hmm_range_fault
- [PATCH v3 0/5] mm/hmm/nouveau: add PMD system memory mapping
- [PATCH hmm 0/5] Adjust hmm_range_fault() API