On Thu, Jun 09, 2016 at 09:19:30PM +0200, Theo Buehler wrote:
> On Tue, Mar 15, 2016 at 12:32:16PM -0600, Theo de Raadt wrote:
> > I am simply saying that pledge before opendev() makes no sense,
> > because opendev() does not gaurantee the type of descriptor it is
> > opening.
>
> I noticed that this patch is still uncommitted since nobody ok'd it.
> Sorry about that. Freshly generated patch below.
>
> ok tb@
ok semarie@ too
> $ ktrace fdisk /dev/tty
> Abort trap (core dumped)
> $ kdump | tail
> 28663 fdisk CALL open(0x17b1f512f220,0<O_RDONLY>)
> 28663 fdisk NAMI "/dev/tty"
> 28663 fdisk RET open 3
> 28663 fdisk CALL fstat(3,0x7f7fffff07f0)
> 28663 fdisk STRU struct stat { dev=1040, ino=1280, mode=crw-rw-rw- ,
> nlink=1, uid=0<"root">, gid=0<"wheel">, rdev=256, atime=1465498384<"Jun 9
> 20:53:04 2016">.697276353, mtime=1465498384<"Jun 9 20:53:04
> 2016">.697276353, ctime=1465498384<"Jun 9 20:53:04 2016">.697276353, size=0,
> blocks=0, blksize=65536, flags=0x0, gen=0x0 }
> 28663 fdisk RET fstat 0
> 28663 fdisk CALL ioctl(3,DIOCGPDINFO,0x17b1f5135160)
> 28663 fdisk PLDG ioctl, "ioctl", errno 1 Operation not permitted
> 28663 fdisk PSIG SIGABRT SIG_DFL code <-538976289>
> 28663 fdisk NAMI "fdisk.core"
>
> Index: fdisk.c
> ===================================================================
> RCS file: /var/cvs/src/sbin/fdisk/fdisk.c,v
> retrieving revision 1.100
> diff -u -p -r1.100 fdisk.c
> --- fdisk.c 28 Mar 2016 16:55:09 -0000 1.100
> +++ fdisk.c 28 Apr 2016 08:05:27 -0000
> @@ -85,10 +85,6 @@ main(int argc, char *argv[])
> struct dos_mbr dos_mbr;
> struct mbr mbr;
>
> - /* "proc exec" for man page display */
> - if (pledge("stdio rpath wpath disklabel proc exec", NULL) == -1)
> - err(1, "pledge");
> -
> while ((ch = getopt(argc, argv, "iegpuvf:c:h:s:l:b:y")) != -1) {
> const char *errstr;
>
> @@ -168,6 +164,10 @@ main(int argc, char *argv[])
>
> disk.name = argv[0];
> DISK_open(i_flag || u_flag || e_flag);
> +
> + /* "proc exec" for man page display */
> + if (pledge("stdio rpath wpath disklabel proc exec", NULL) == -1)
> + err(1, "pledge");
>
> error = MBR_read(0, &dos_mbr);
> if (error)
>
>
--
Sebastien Marie