From: deraadt Date: Sun, 21 Jan 2024 00:23:29 +0000 (+0000) Subject: some bizzare glitch related to ramdisk instbin static binaries, their X-Git-Url: http://artulab.com/gitweb/?a=commitdiff_plain;h=c6f8eb87e480ffbeb43bedb5f5677b132ecf6b7a;p=openbsd some bizzare glitch related to ramdisk instbin static binaries, their mutable mapping is not working right, so temporarily bring back the RW -> R *only* for ramdisk kernels --- diff --git a/sys/uvm/uvm_map.c b/sys/uvm/uvm_map.c index 5078f3a229d..c877457db64 100644 --- a/sys/uvm/uvm_map.c +++ b/sys/uvm/uvm_map.c @@ -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) {