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)

Reply via email to