The branch stable/13 has been updated by kib:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=b2ebf64aaef53802a1be25fbc6adcd9ad76085a8

commit b2ebf64aaef53802a1be25fbc6adcd9ad76085a8
Author:     Konstantin Belousov <[email protected]>
AuthorDate: 2021-03-27 11:08:52 +0000
Commit:     Konstantin Belousov <[email protected]>
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);
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/dev-commits-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to