Page MenuHomeFreeBSD

D16822.id47401.diff
No OneTemporary

D16822.id47401.diff

Index: lib/libvmmapi/vmmapi.c
===================================================================
--- lib/libvmmapi/vmmapi.c
+++ lib/libvmmapi/vmmapi.c
@@ -389,12 +389,20 @@
* and the adjoining guard regions.
*/
len = VM_MMAP_GUARD_SIZE + objsize + VM_MMAP_GUARD_SIZE;
- flags = MAP_PRIVATE | MAP_ANON | MAP_NOCORE | MAP_ALIGNED_SUPER;
- ptr = mmap(NULL, len, PROT_NONE, flags, -1, 0);
+ flags = MAP_PRIVATE | MAP_ANON | MAP_NOCORE | MAP_ALIGNED_SUPER
+ | MAP_FIXED;
+ ptr = mmap(NULL, len, PROT_NONE, MAP_GUARD | MAP_ALIGNED_SUPER,
+ -1, 0);
if (ptr == MAP_FAILED)
return (-1);
- baseaddr = ptr + VM_MMAP_GUARD_SIZE;
+ baseaddr = mmap(ptr + VM_MMAP_GUARD_SIZE, objsize, PROT_NONE,
+ flags, -1, 0);
+ if (baseaddr == MAP_FAILED) {
+ munmap(ptr, len);
+ return (-1);
+ }
+
if (ctx->highmem > 0) {
gpa = 4*GB;
len = ctx->highmem;
@@ -492,10 +500,22 @@
* adjoining guard regions.
*/
len2 = VM_MMAP_GUARD_SIZE + len + VM_MMAP_GUARD_SIZE;
- flags = MAP_PRIVATE | MAP_ANON | MAP_NOCORE | MAP_ALIGNED_SUPER;
- base = mmap(NULL, len2, PROT_NONE, flags, -1, 0);
+ flags = MAP_PRIVATE | MAP_ANON | MAP_NOCORE | MAP_ALIGNED_SUPER
+ | MAP_FIXED;
+
+ /*
+ * Map the entire region with MAP_GUARD first. Remap the
+ * device memory post-guard.
+ */
+ base = mmap(NULL, len2, PROT_NONE,
+ MAP_GUARD | MAP_ALIGNED_SUPER, -1, 0);
if (base == MAP_FAILED)
goto done;
+ if (mmap(base + VM_MMAP_GUARD_SIZE, len, PROT_NONE, flags, -1,
+ 0) == MAP_FAILED) {
+ munmap(base, len2);
+ goto done;
+ }
flags = MAP_SHARED | MAP_FIXED;
if ((ctx->memflags & VM_MEM_F_INCORE) == 0)

File Metadata

Mime Type
text/plain
Expires
Thu, Apr 2, 12:07 PM (6 h, 34 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
30722005
Default Alt Text
D16822.id47401.diff (1 KB)

Event Timeline