Date: Sat, 3 Apr 2021 00:53:22 GMT From: Konstantin Belousov <kib@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org Subject: git: b2ebf64aaef5 - stable/13 - vm_fault: handle KERN_PROTECTION_FAILURE Message-ID: <202104030053.1330rMsW082458@gitrepo.freebsd.org>
next in thread | raw e-mail | index | archive | help
The branch stable/13 has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=b2ebf64aaef53802a1be25fbc6adcd9ad76085a8 commit b2ebf64aaef53802a1be25fbc6adcd9ad76085a8 Author: Konstantin Belousov <kib@FreeBSD.org> AuthorDate: 2021-03-27 11:08:52 +0000 Commit: Konstantin Belousov <kib@FreeBSD.org> CommitDate: 2021-04-03 00:39:06 +0000 vm_fault: handle KERN_PROTECTION_FAILURE (cherry picked from commit c7b913aa47bac8b35b6a0679497ad28e561318c2) --- sys/vm/vm_fault.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/sys/vm/vm_fault.c b/sys/vm/vm_fault.c index da7b1f1d2d8e..585e1544415d 100644 --- a/sys/vm/vm_fault.c +++ b/sys/vm/vm_fault.c @@ -506,6 +506,8 @@ vm_fault_populate(struct faultstate *fs) PMAP_ENTER_LARGEPAGE, bdry_idx); VM_OBJECT_WLOCK(fs->first_object); vm_page_xunbusy(m); + if (rv != KERN_SUCCESS) + goto out; if ((fs->fault_flags & VM_FAULT_WIRE) != 0) { for (i = 0; i < atop(pagesizes[bdry_idx]); i++) vm_page_wire(m + i); @@ -586,7 +588,7 @@ vm_fault_populate(struct faultstate *fs) } out: curthread->td_ru.ru_majflt++; - return (KERN_SUCCESS); + return (rv); } static int prot_fault_translation; @@ -1073,6 +1075,7 @@ vm_fault_allocate(struct faultstate *fs) switch (rv) { case KERN_SUCCESS: case KERN_FAILURE: + case KERN_PROTECTION_FAILURE: case KERN_RESTART: return (rv); case KERN_NOT_RECEIVER: @@ -1343,6 +1346,7 @@ RetryFault: goto RetryFault; case KERN_SUCCESS: case KERN_FAILURE: + case KERN_PROTECTION_FAILURE: case KERN_OUT_OF_BOUNDS: unlock_and_deallocate(&fs); return (rv); @@ -1410,6 +1414,7 @@ RetryFault: goto RetryFault; case KERN_SUCCESS: case KERN_FAILURE: + case KERN_PROTECTION_FAILURE: case KERN_OUT_OF_BOUNDS: unlock_and_deallocate(&fs); return (rv);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202104030053.1330rMsW082458>