diff --git a/module/dkms.conf b/module/dkms.conf index 486a61ed..332123e6 100644 --- a/module/dkms.conf +++ b/module/dkms.conf @@ -1,5 +1,5 @@ PACKAGE_NAME="kvmfr" -PACKAGE_VERSION="0.0.10" +PACKAGE_VERSION="0.0.11" BUILT_MODULE_NAME[0]="${PACKAGE_NAME}" MAKE[0]="make KDIR=${kernel_source_dir}" CLEAN="make KDIR=${kernel_source_dir} clean" diff --git a/module/kvmfr.c b/module/kvmfr.c index c99a5d79..62149039 100644 --- a/module/kvmfr.c +++ b/module/kvmfr.c @@ -88,8 +88,12 @@ static vm_fault_t kvmfr_vm_fault(struct vm_fault *vmf) { struct vm_area_struct *vma = vmf->vma; struct kvmfrbuf *kbuf = (struct kvmfrbuf *)vma->vm_private_data; + pgoff_t pgoff = vmf->pgoff; - vmf->page = kbuf->pages[vmf->pgoff]; + if (pgoff >= kbuf->pagecount) + return VM_FAULT_SIGBUS; + + vmf->page = kbuf->pages[pgoff]; get_page(vmf->page); return 0; }