From: Nuno Das Neves <[email protected]> Sent: Thursday, November 6, 2025 2:14 PM > > From: Magnus Kulke <[email protected]> > > Currently the MSHV driver rejects mappings that would overlap in > userspace. > > Some VMMs require the same memory to be mapped to different parts of > the guest's address space, and so working around this restriction is > difficult. > > The hypervisor itself doesn't prohibit mappings that overlap in uaddr, > (really in SPA; system physical addresses), so supporting this in the > driver doesn't require any extra work: only the checks need to be > removed. > > Since no userspace code until now has been able to overlap regions in > userspace, relaxing this constraint can't break any existing code. > > Signed-off-by: Magnus Kulke <[email protected]> > Signed-off-by: Nuno Das Neves <[email protected]> > --- > drivers/hv/mshv_root_main.c | 8 ++------ > include/uapi/linux/mshv.h | 2 +- > 2 files changed, 3 insertions(+), 7 deletions(-) > > diff --git a/drivers/hv/mshv_root_main.c b/drivers/hv/mshv_root_main.c > index 25a68912a78d..b1821b18fa09 100644 > --- a/drivers/hv/mshv_root_main.c > +++ b/drivers/hv/mshv_root_main.c > @@ -1220,12 +1220,8 @@ static int mshv_partition_create_region(struct > mshv_partition *partition, > > /* Reject overlapping regions */ > hlist_for_each_entry(rg, &partition->pt_mem_regions, hnode) { > - u64 rg_size = rg->nr_pages << HV_HYP_PAGE_SHIFT; > - > - if ((mem->guest_pfn + nr_pages <= rg->start_gfn || > - rg->start_gfn + rg->nr_pages <= mem->guest_pfn) && > - (mem->userspace_addr + mem->size <= rg->start_uaddr || > - rg->start_uaddr + rg_size <= mem->userspace_addr)) > + if (mem->guest_pfn + nr_pages <= rg->start_gfn || > + rg->start_gfn + rg->nr_pages <= mem->guest_pfn) > continue; > > return -EEXIST; > diff --git a/include/uapi/linux/mshv.h b/include/uapi/linux/mshv.h > index 9091946cba23..b10c8d1cb2ad 100644 > --- a/include/uapi/linux/mshv.h > +++ b/include/uapi/linux/mshv.h > @@ -123,7 +123,7 @@ enum { > * @rsvd: MBZ > * > * Map or unmap a region of userspace memory to Guest Physical Addresses > (GPA). > - * Mappings can't overlap in GPA space or userspace. > + * Mappings can't overlap in GPA space. > * To unmap, these fields must match an existing mapping. > */ > struct mshv_user_mem_region { > -- > 2.34.1
Reviewed-by: Michael Kelley <[email protected]>
