Yeah, go for it!
On Sat, May 28, 2016 at 2:14 PM, Theo Buehler <[email protected]> wrote:
> A slightly different beast:
>
> $ touch abcdabcdabcdabcd.a
> $ ktrace growfs abcdabcdabcdabcd.a
> Abort trap (core dumped)
> $ kdump | tail
> 63324 growfs CALL mprotect(0xe2b84265000,0x1000,0x1<PROT_READ>)
> 63324 growfs RET mprotect 0
> 63324 growfs CALL
> mmap(0,0x1000,0x3<PROT_READ|PROT_WRITE>,0x1002<MAP_PRIVATE|MAP_ANON>,-1,0)
> 63324 growfs RET mmap 15591131877376/0xe2e17e09000
> 63324 growfs CALL
> mmap(0,0x1000,0x3<PROT_READ|PROT_WRITE>,0x1002<MAP_PRIVATE|MAP_ANON>,-1,0)
> 63324 growfs RET mmap 15592351502336/0xe2e60929000
> 63324 growfs CALL ioctl(3,DIOCGDINFO,0xe2e17e09a00)
> 63324 growfs PLDG ioctl, "ioctl", errno 1 Operation not permitted
> 63324 growfs PSIG SIGABRT SIG_DFL
> 63324 growfs NAMI "growfs.core"
>
> Moving the pledge call a bit down will allow growfs to error out with
> ENOTTY instead of crashing. As there are other "disklabel" operations,
> further down (e.g. in return_disklabel()), keep the "disklabel" pledge.
>
> Index: growfs.c
> ===================================================================
> RCS file: /var/cvs/src/sbin/growfs/growfs.c,v
> retrieving revision 1.50
> diff -u -p -r1.50 growfs.c
> --- growfs.c 17 Mar 2016 05:27:10 -0000 1.50
> +++ growfs.c 28 May 2016 20:02:36 -0000
> @@ -1767,9 +1767,6 @@ main(int argc, char **argv)
> err(1, "%s", device);
> }
>
> - if (pledge("stdio disklabel", NULL) == -1)
> - err(1, "pledge");
> -
> /*
> * Now we have a file descriptor for our device, fstat() it to
> * figure out the partition number.
> @@ -1788,6 +1785,9 @@ main(int argc, char **argv)
> else
> errx(1, "%s: invalid partition number %u",
> device, DISKPART(st.st_rdev));
> +
> + if (pledge("stdio disklabel", NULL) == -1)
> + err(1, "pledge");
>
> /*
> * Check if that partition is suitable for growing a file system.
>