Skip site navigation (1)Skip section navigation (2)
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>