On Fri, Mar 12, 2021 at 08:41:59AM +0100, Sebastien Marie wrote: > Hi, > > The following diff is a cleanup to remove two leftover checks, which > were used when ni_unveil was used with UNVEIL_INSPECT: > > it was used by: > - readlink(2) - removed 2019-08-31 > > Make readlink require UNVEIL_READ instead of UNVEIL_INSPECT only > since realpath() is now a system call > > - stat(2) and access(2) - removed 2019-03-24 > > Make stat(2) and access(2) need UNVEIL_READ instead of UNVEIL_INSPECT > > UNVEIL_INSPECT is a hack we added to get chrome/glib working. It silently > adds permission for stat(2), access(2), and readlink(2) to be used on > all path components of any unveil'ed path. robert@ has sucessfully now > fixed chrome/glib to not require exessive TOC vs TOU stat(2) and access(2) > calls on the paths it uses, so that this no longer needed there. > > readlink(2) is the sole call that is now permitted by UNVEIL_INSPECT, > and this is only needed so that realpath(3) can work. Going forward we will > likely make a realpath(2), after which we can completely deprecate > UNVEIL_INSPECT. > > > I audited the values sets in ni_unveil, and UNVEIL_INSPECT is > effectively not used anywhere in this variable. > > The diff removes two checks that were done: > - one in unveil_flagmatch(), for a debug printf > - one in pledge_namei(), for "getpw" usage when using > access("/var/run/ypbind.lock") > > Comments or OK ?
OK claudio@ I think all of UNVEIL_INSPECT can go. I have a diff that does that on top of this one. > -- > Sebastien Marie > > diff 48cf7af2deddb13b1f53f18782fd5612c3fdc34a /home/semarie/repos/openbsd/src > blob - 2de0d500e39367046a93c951aeded70bcdeb097d > file + sys/kern/kern_pledge.c > --- sys/kern/kern_pledge.c > +++ sys/kern/kern_pledge.c > @@ -619,8 +619,7 @@ pledge_namei(struct proc *p, struct nameidata *ni, cha > /* when avoiding YP mode, getpw* functions touch this */ > if (ni->ni_pledge == PLEDGE_RPATH && > strcmp(path, "/var/run/ypbind.lock") == 0) { > - if ((p->p_p->ps_pledge & PLEDGE_GETPW) || > - (ni->ni_unveil == UNVEIL_INSPECT)) { > + if (p->p_p->ps_pledge & PLEDGE_GETPW) { > ni->ni_cnd.cn_flags |= BYPASSUNVEIL; > return (0); > } else > blob - 0822248e435b45baf4fa2640cc1a89d85f632cad > file + sys/kern/kern_unveil.c > --- sys/kern/kern_unveil.c > +++ sys/kern/kern_unveil.c > @@ -720,11 +720,6 @@ unveil_flagmatch(struct nameidata *ni, u_char flags) > return 0; > } > } > - if (ni->ni_unveil & UNVEIL_INSPECT) { > -#ifdef DEBUG_UNVEIL > - printf("any unveil allows UNVEIL_INSPECT\n"); > -#endif > - } > return 1; > } > > -- :wq Claudio