Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/netbsd-9]: src/sys/uvm Pull up following revision(s) (requested by riast...
details: https://anonhg.NetBSD.org/src/rev/f63314f171e3
branches: netbsd-9
changeset: 374111:f63314f171e3
user: martin <martin%NetBSD.org@localhost>
date: Sat Apr 01 16:00:28 2023 +0000
description:
Pull up following revision(s) (requested by riastradh in ticket #1622):
sys/uvm/uvm_map.c: revision 1.395
uvm(9): Fix 19-year-old bug in assertion about mmap hint.
Previously this would _first_ remember the original hint, and _then_
clamp the hint to the VM map's range:
orig_hint = hint;
if (hint < vm_map_min(map)) { /* check ranges ... */
if (flags & UVM_FLAG_FIXED) {
UVMHIST_LOG(maphist,"<- VA below map range",0,0,0,0);
return (NULL);
}
hint = vm_map_min(map);
...
KASSERTMSG(!topdown || hint <= orig_hint, "hint: %#jx, orig_hint: %#jx",
(uintmax_t)hint, (uintmax_t)orig_hint);
Even if nothing else happens in the ellipsis, taking the branch
guarantees the assertion will fail in the topdown case.
diffstat:
sys/uvm/uvm_map.c | 20 +++++++++++++-------
1 files changed, 13 insertions(+), 7 deletions(-)
diffs (49 lines):
diff -r 081bdd85c178 -r f63314f171e3 sys/uvm/uvm_map.c
--- a/sys/uvm/uvm_map.c Sat Apr 01 15:54:35 2023 +0000
+++ b/sys/uvm/uvm_map.c Sat Apr 01 16:00:28 2023 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: uvm_map.c,v 1.362.2.2 2019/11/01 18:24:31 martin Exp $ */
+/* $NetBSD: uvm_map.c,v 1.362.2.3 2023/04/01 16:00:28 martin Exp $ */
/*
* Copyright (c) 1997 Charles D. Cranor and Washington University.
@@ -66,7 +66,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_map.c,v 1.362.2.2 2019/11/01 18:24:31 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvm_map.c,v 1.362.2.3 2023/04/01 16:00:28 martin Exp $");
#include "opt_ddb.h"
#include "opt_pax.h"
@@ -1882,12 +1882,17 @@ uvm_map_findspace(struct vm_map *map, va
uvm_map_check(map, "map_findspace entry");
/*
- * remember the original hint. if we are aligning, then we
- * may have to try again with no alignment constraint if
- * we fail the first time.
+ * Clamp the hint to the VM map's min/max address, and remmeber
+ * the clamped original hint. Remember the original hint,
+ * clamped to the min/max address. If we are aligning, then we
+ * may have to try again with no alignment constraint if we
+ * fail the first time.
+ *
+ * We use the original hint to verify later that the search has
+ * been monotonic -- that is, nonincreasing or nondecreasing,
+ * according to topdown or !topdown respectively. But the
+ * clamping is not monotonic.
*/
-
- orig_hint = hint;
if (hint < vm_map_min(map)) { /* check ranges ... */
if (flags & UVM_FLAG_FIXED) {
UVMHIST_LOG(maphist,"<- VA below map range",0,0,0,0);
@@ -1900,6 +1905,7 @@ uvm_map_findspace(struct vm_map *map, va
hint, vm_map_min(map), vm_map_max(map), 0);
return (NULL);
}
+ orig_hint = hint;
/*
* hint may not be aligned properly; we need round up or down it
Home |
Main Index |
Thread Index |
Old Index