On Thu, Jun 04, 2015 at 11:37:33PM +0100, Nicholas Marriott wrote:
> file shouldn't need chflagsat?

Yes. The chflagsat was for cp(1). I'm just combining the diff
from earlier (sent to ports[1]), so it does not get lost.

Thanks,
--patrick

[1] http://marc.info/?l=openbsd-ports&m=143340587303885&w=2


> Otherwise I think this is fine.
> 
> 
> On Thu, Jun 04, 2015 at 03:29:06PM -0700, patrick keshishian wrote:
> > On Thu, Jun 04, 2015 at 11:06:38PM +0100, Nicholas Marriott wrote:
> > > /usr/ports/infrastructure/db/systrace.filter has these:
> > > 
> > >         native-recvmsg: permit
> > >         native-sendmsg: sockaddr match "/tmp" then permit
> > >   native-sendmsg: sockaddr match "/var/tmp" then permit
> > >   native-sendmsg: sockaddr match "/tmp" then permit
> > >   native-sendmsg: sockaddr match "/usr/ports/pobj/unzip-6.0" then permit
> > >         native-sendmsg: sockaddr match "/<non-existent filename>: *" then 
> > > deny[enoent]
> > > 
> > > We could add this I think:
> > > 
> > >         native-sendmsg: sockaddr eq "<unknown>" then permit
> > 
> > If this is acceptable, then the file(1) patch reduces to simply
> > skipping the systrace set-up if STRIOCATTACH fails.
> > 
> > Patches follow for file(1) and ports' systrace.policy
> > 
> > 
> > Index: sandbox.c
> > ===================================================================
> > RCS file: /cvs/obsd/src/usr.bin/file/sandbox.c,v
> > retrieving revision 1.7
> > diff -u -p -u -p -r1.7 sandbox.c
> > --- sandbox.c       29 May 2015 15:58:34 -0000      1.7
> > +++ sandbox.c       4 Jun 2015 22:23:32 -0000
> > @@ -130,7 +130,7 @@ sandbox_fork(const char *user)
> >     close(devfd);
> >  
> >     if (ioctl(fd, STRIOCATTACH, &pid) == -1)
> > -           err(1, "ioctl(STRIOCATTACH)");
> > +           goto out;
> >  
> >     memset(&policy, 0, sizeof policy);
> >     policy.strp_op = SYSTR_POLICY_NEW;
> > @@ -150,7 +150,7 @@ sandbox_fork(const char *user)
> >                     err(1, "ioctl(STRIOCPOLICY/MODIFY)");
> >     }
> >  
> > -   if (kill(pid, SIGCONT) != 0)
> > +out:       if (kill(pid, SIGCONT) != 0)
> >             err(1, "kill(SIGCONT)");
> >     return (pid);
> >  }
> > 
> > 
> > Index: systrace.filter
> > ===================================================================
> > RCS file: /cvs/obsd/ports/infrastructure/db/systrace.filter,v
> > retrieving revision 1.45
> > diff -u -p -u -p -r1.45 systrace.filter
> > --- systrace.filter 11 Sep 2014 10:33:44 -0000      1.45
> > +++ systrace.filter 4 Jun 2015 22:25:08 -0000
> > @@ -22,6 +22,7 @@
> >     native-chflags: filename match "${TMPDIR}" then permit
> >     native-chflags: filename match "${WRKDIR}" then permit
> >     native-chflags: filename match "/<non-existent filename>: *" then 
> > deny[enoent]
> > +   native-chflagsat: filename match "${WRKDIR}" then permit
> >     native-chmod: filename match "/tmp" then permit
> >     native-chmod: filename match "/var/tmp" then permit
> >     native-chmod: filename match "${TMPDIR}" then permit
> > @@ -93,6 +94,7 @@
> >     native-futimes: permit
> >     native-futimens: permit
> >     native-getdents: permit
> > +   native-getdtablecount: permit
> >     native-getegid: permit
> >     native-getentropy: permit
> >     native-geteuid: permit
> > @@ -196,6 +198,7 @@
> >     native-sendmsg: sockaddr match "${TMPDIR}" then permit
> >     native-sendmsg: sockaddr match "${WRKDIR}" then permit
> >     native-sendmsg: sockaddr match "/<non-existent filename>: *" then 
> > deny[enoent]
> > +   native-sendmsg: sockaddr eq "<unknown>" then permit
> >     native-sendsyslog: permit
> >     native-sendto: permit
> >     native-setegid: permit
> > 
> > 
> > 
> > > 
> > > On Thu, Jun 04, 2015 at 10:47:47PM +0100, Nicholas Marriott wrote:
> > > > Hi
> > > > 
> > > > On Thu, Jun 04, 2015 at 03:39:45PM -0600, Theo de Raadt wrote:
> > > > > > Is it just to avoid adding sendmsg to the ports systrace policy? 
> > > > > > Why not
> > > > > > add it - maybe not globally but just for file?
> > > > > 
> > > > > sendmsg with a CMSG fd passing in/out of such a jail is a bad thing.
> > > > 
> > > > The systrace policy already allows recvmsg(). So we can get new fds in,
> > > > why not send them out?
> > > > 
> > > > Any fd we have inside to send out will have had to have passed the
> > > > open(), bind() etc systrace rules already.
> > > > 
> > > > > 
> > > > > However.
> > > > > 
> > > > > It is likely that a ports configure test may try to test this 
> > > > > interface.
> > > > > Not just CMSG, but sendmsg itself.
> > > > > 
> > > > > It suspect it needs to find that it works.
> > > > > 
> > > > > I doubt this is a system call that can be blocked.
> > > > > 
> > > > > It sounds like a great idea to limit the build environment 
> > > > > substantially,
> > > > > but an eye must be kept on fallout from being too strict.  That's the
> > > > > problem with systrace; it is too easy to return an 'error' and a 
> > > > > program
> > > > > will continue...
> > > > > 
> > > 
> 

Reply via email to