Hi,

>From the unveil manpage:

     The first call to unveil() removes visibility of the entire filesystem
     from all other filesystem-related system calls (such as open(2), chmod(2)
     and rename(2)), except for the specified path and permissions.

Can the first call also be the last?  I have a test program called unveiltest.c
and it does the following:

----paste---->
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>

int
main(void)
{
        int fd;

#ifdef UNVEIL_MOTD
        if (unveil("/etc/motd", "r") < 0)
                perror("unveil");
#endif
        if (unveil(NULL, NULL) < 0)
                perror("unveil");
        
        for (;;) {
                if ((fd = open("/etc/motd", O_RDONLY, 0)) < 0)
                        perror("open");
                else
                        close(fd);

                sleep(1);
        }
}
<------

When I run it without UNVEIL_MOTD, meaning my first (and last) unveil was
NULL, NULL.. it doesn't deny /etc/motd reads.

beta$ cc -g -o unveiltest unveiltest.c               
beta$ ./unveiltest                     
^C

beta$ ps ax | grep unveiltest
21482 pg  S+       0:00.10 ./unveiltest
98206 ph  R+/3     0:00.00 grep unveiltest

And when I recompile with UNVEIL_MOTD same behaviour:

beta$ cc -g -DUNVEIL_MOTD -o unveiltest unveiltest.c 
beta$ ./unveiltest                              
^C

except there is a difference in the ps listing:

beta$ ps ax | grep unveiltest 
40907 pg  S+U      0:00.01 ./unveiltest
40013 ph  R+/2     0:00.00 grep unveiltest

Am I interpreting unveil manpage wrong or is it written wrong?  I did have
a first call to unveil in the first example only it's NULL, NULL, me telling
the system I don't want anything opened at all.  Is there any way to do that?

Or is that pledge()'s job?  

Another weird one I have is that I call unveil() to a path but chroot() later,
then call unveil(NULL, NULL) and the ps flag doesn't indicate the U flag.  Is 
because of the chroot() the unveil lost?

Best regards,
-peter

Reply via email to