*bump*
On Fri, May 24, 2019 at 07:17:29PM +0200, Jesper Wallin wrote:
> Hi tech@
>
> A few days ago, I decided to set kern.securelevel=2 just for the sake
> of locking down my machine as much as possible. Today I learned that
> this affects bioctl(8) when trying to attach a crypto RAID.
>
> So, bioctl(8) gave me "softraid0: invalid metadata format" and I had
> a minor panic attack, thinking my backup disk was corrupt. I then
> remembered increasing securelevel and tried again with a lower value.
>
> This patch makes sr_meta_probe() print an error if the device can't
> be opened with read/write. It also returns SR_META_F_NOOPEN to
> prevent giving the normal SR_META_F_INVALID error. I guess the error
> could be moved to the function above, but then we don't know the
> device name.
>
>
> Jesper Wallin
>
>
> Index: sys/dev/softraid.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/softraid.c,v
> retrieving revision 1.394
> diff -u -p -r1.394 softraid.c
> --- sys/dev/softraid.c 18 May 2019 14:02:27 -0000 1.394
> +++ sys/dev/softraid.c 24 May 2019 10:57:50 -0000
> @@ -337,10 +337,9 @@ sr_meta_probe(struct sr_discipline *sd,
> */
> error = VOP_OPEN(vn, FREAD | FWRITE, NOCRED, curproc);
> if (error) {
> - DNPRINTF(SR_D_META,"%s: sr_meta_probe can't "
> - "open %s\n", DEVNAME(sc), devname);
> + sr_error(sc, "sr_meta_probe can't open %s",
> devname);
> vput(vn);
> - goto unwind;
> + return (SR_META_F_NOOPEN);
> }
>
> strlcpy(ch_entry->src_devname, devname,
> @@ -3365,8 +3364,8 @@ sr_ioctl_createraid(struct sr_softc *sc,
> sr_error(sc, "invalid metadata format");
> goto unwind;
> }
> -
> - if (sr_meta_attach(sd, no_chunk, bc->bc_flags & BIOC_SCFORCE))
> + if (sd->sd_meta_type == SR_META_F_NOOPEN ||
> + sr_meta_attach(sd, no_chunk, bc->bc_flags & BIOC_SCFORCE))
> goto unwind;
>
> /* force the raid volume by clearing metadata region */
> Index: sys/dev/softraidvar.h
> ===================================================================
> RCS file: /cvs/src/sys/dev/softraidvar.h,v
> retrieving revision 1.168
> diff -u -p -r1.168 softraidvar.h
> --- sys/dev/softraidvar.h 6 Jan 2019 14:59:56 -0000 1.168
> +++ sys/dev/softraidvar.h 24 May 2019 10:57:50 -0000
> @@ -102,6 +102,7 @@ struct sr_crypto_kdfpair {
>
> #define SR_META_F_NATIVE 0 /* Native metadata format. */
> #define SR_META_F_INVALID -1
> +#define SR_META_F_NOOPEN -2
>
> #define SR_HEADER_SIZE (SR_META_SIZE + SR_BOOT_SIZE)
> #define SR_DATA_OFFSET (SR_META_OFFSET + SR_HEADER_SIZE)
>