+ alimp = &u.u_rlimit[uap->which];
+ u.u_error = copyin((caddr_t)uap->lim, (caddr_t)&alim,
+ sizeof (struct rlimit));
+ if (u.u_error)
+ return;
+ if (alim.rlim_cur > alimp->rlim_max || alim.rlim_max > alimp->rlim_max)
+ if (u.u_error = suser(u.u_cred, &u.u_acflag))
+ return;
+ switch (uap->which) {
+
+ case RLIMIT_DATA:
+ if (alim.rlim_cur > maxdmap)
+ alim.rlim_cur = maxdmap;
+ if (alim.rlim_max > maxdmap)
+ alim.rlim_max = maxdmap;
+ break;
+
+ case RLIMIT_STACK:
+ if (alim.rlim_cur > maxdmap)
+ alim.rlim_cur = maxdmap;
+ if (alim.rlim_max > maxdmap)
+ alim.rlim_max = maxdmap;
+ break;