If we fail to decrypt the softraid keys, return EPERM rather than falling
authorjsing <jsing@openbsd.org>
Sat, 28 Dec 2013 02:40:41 +0000 (02:40 +0000)
committerjsing <jsing@openbsd.org>
Sat, 28 Dec 2013 02:40:41 +0000 (02:40 +0000)
through and failing when we attempt to read and validate the disklabel.
Also return ENOTSUP rather than EPERM if an attempt is made to write to a
softraid volume.

sys/arch/amd64/stand/libsa/biosdev.c
sys/arch/amd64/stand/libsa/softraid.c
sys/arch/i386/stand/libsa/biosdev.c
sys/arch/i386/stand/libsa/softraid.c

index 319d9a3..379592b 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: biosdev.c,v 1.20 2013/03/23 16:08:27 deraadt Exp $    */
+/*     $OpenBSD: biosdev.c,v 1.21 2013/12/28 02:40:41 jsing Exp $      */
 
 /*
  * Copyright (c) 1996 Michael Shalayeff
@@ -524,7 +524,8 @@ biosopen(struct open_file *f, ...)
                }
 
                if (bv->sbv_level == 'C' && bv->sbv_keys == NULL)
-                       sr_crypto_decrypt_keys(bv);
+                       if (sr_crypto_decrypt_keys(bv) != 0)
+                               return EPERM;
 
                if (bv->sbv_diskinfo == NULL) {
                        dip = alloc(sizeof(struct diskinfo));
index b98ec2e..5c7f9b3 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: softraid.c,v 1.5 2013/10/20 13:25:20 stsp Exp $       */
+/*     $OpenBSD: softraid.c,v 1.6 2013/12/28 02:40:41 jsing Exp $      */
 
 /*
  * Copyright (c) 2012 Joel Sing <jsing@openbsd.org>
@@ -333,7 +333,7 @@ sr_strategy(struct sr_boot_volume *bv, int rw, daddr32_t blk, size_t size,
 
        /* We only support read-only softraid. */
        if (rw != F_READ)
-               return EPERM;
+               return ENOTSUP;
 
        /* Partition offset within softraid volume. */
        sr_dip = (struct diskinfo *)bv->sbv_diskinfo;
index 2967e7e..fcc2681 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: biosdev.c,v 1.87 2013/03/23 16:08:29 deraadt Exp $    */
+/*     $OpenBSD: biosdev.c,v 1.88 2013/12/28 02:40:41 jsing Exp $      */
 
 /*
  * Copyright (c) 1996 Michael Shalayeff
@@ -525,7 +525,8 @@ biosopen(struct open_file *f, ...)
                }
 
                if (bv->sbv_level == 'C' && bv->sbv_keys == NULL)
-                       sr_crypto_decrypt_keys(bv);
+                       if (sr_crypto_decrypt_keys(bv) != 0)
+                               return EPERM;
 
                if (bv->sbv_diskinfo == NULL) {
                        dip = alloc(sizeof(struct diskinfo));
index a3f4caa..5c7f9b3 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: softraid.c,v 1.5 2013/10/20 13:25:21 stsp Exp $       */
+/*     $OpenBSD: softraid.c,v 1.6 2013/12/28 02:40:41 jsing Exp $      */
 
 /*
  * Copyright (c) 2012 Joel Sing <jsing@openbsd.org>
@@ -333,7 +333,7 @@ sr_strategy(struct sr_boot_volume *bv, int rw, daddr32_t blk, size_t size,
 
        /* We only support read-only softraid. */
        if (rw != F_READ)
-               return EPERM;
+               return ENOTSUP;
 
        /* Partition offset within softraid volume. */
        sr_dip = (struct diskinfo *)bv->sbv_diskinfo;