+ if (alim.rlim_cur > maxdmap)
+ alim.rlim_cur = maxdmap;
+ if (alim.rlim_max > maxdmap)
+ alim.rlim_max = maxdmap;
+ /*
+ * Stack is allocated to the max at exec time with only
+ * "rlim_cur" bytes accessible. If stack limit is going
+ * up make more accessible, if going down make inaccessible.
+ */
+ if (alim.rlim_cur != alimp->rlim_cur) {
+ vm_offset_t addr;
+ vm_size_t size;
+ vm_prot_t prot;
+
+ if (alim.rlim_cur > alimp->rlim_cur) {
+ prot = VM_PROT_ALL;
+ size = alim.rlim_cur - alimp->rlim_cur;
+ addr = USRSTACK - alim.rlim_cur;
+ } else {
+ prot = VM_PROT_NONE;
+ size = alimp->rlim_cur - alim.rlim_cur;
+ addr = USRSTACK - alimp->rlim_cur;
+ }
+ addr = trunc_page(addr);
+ size = round_page(size);
+ (void) vm_map_protect(&p->p_vmspace->vm_map,
+ addr, addr+size, prot, FALSE);
+ }