some bizzare glitch related to ramdisk instbin static binaries, their
authorderaadt <deraadt@openbsd.org>
Sun, 21 Jan 2024 00:23:29 +0000 (00:23 +0000)
committerderaadt <deraadt@openbsd.org>
Sun, 21 Jan 2024 00:23:29 +0000 (00:23 +0000)
mutable mapping is not working right, so temporarily bring back the
RW -> R *only* for ramdisk kernels

sys/uvm/uvm_map.c

index 5078f3a..c877457 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: uvm_map.c,v 1.321 2024/01/20 13:19:39 deraadt Exp $   */
+/*     $OpenBSD: uvm_map.c,v 1.322 2024/01/21 00:23:29 deraadt Exp $   */
 /*     $NetBSD: uvm_map.c,v 1.86 2000/11/27 08:40:03 chs Exp $ */
 
 /*
@@ -3145,8 +3145,17 @@ uvm_map_protect(struct vm_map *map, vaddr_t start, vaddr_t end,
                        continue;
 
                if (checkimmutable && (iter->etype & UVM_ET_IMMUTABLE)) {
-                       error = EPERM;
-                       goto out;
+#ifdef SMALL_KERNEL
+                       if (iter->protection == (PROT_READ | PROT_WRITE) &&
+                           new_prot == PROT_READ) {
+                               /* Permit RW to R as a data-locking mechanism */
+                               goto ok;
+                       } else
+#endif
+                       {
+                               error = EPERM;
+                               goto out;
+                       }
                }
                old_prot = iter->protection;
                if (old_prot == PROT_NONE && new_prot != old_prot) {