Do not attempt to write to read-only softraid
authorkn <kn@openbsd.org>
Tue, 25 Apr 2023 10:06:12 +0000 (10:06 +0000)
committerkn <kn@openbsd.org>
Tue, 25 Apr 2023 10:06:12 +0000 (10:06 +0000)
Bootloaders have no write support for softraid volumes, which manifests in,
e.g. /bsd.upgrade not being stripped of its 'x' permission bit to prevent
sysupgrade loops in case of upgrade failure.

Set a no-write flag handled by libsa to bail out early in write calls.
There should be no real behaviour change, writes just fail earlier now.

amd64 BIOS bits first, rest to come.  Crank minor.

"seems sensible" jsing

sys/arch/amd64/stand/boot/conf.c
sys/arch/amd64/stand/cdboot/conf.c
sys/arch/amd64/stand/libsa/biosdev.c
sys/arch/amd64/stand/pxeboot/conf.c

index ac2bf3b..0017659 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: conf.c,v 1.55 2022/08/12 20:18:58 stsp Exp $  */
+/*     $OpenBSD: conf.c,v 1.56 2023/04/25 10:06:12 kn Exp $    */
 
 /*
  * Copyright (c) 1996 Michael Shalayeff
@@ -41,7 +41,7 @@
 #include <biosdev.h>
 #include <dev/cons.h>
 
-const char version[] = "3.55";
+const char version[] = "3.56";
 int    debug = 1;
 
 
index f376f5f..654825f 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: conf.c,v 1.49 2022/08/12 20:18:58 stsp Exp $  */
+/*     $OpenBSD: conf.c,v 1.50 2023/04/25 10:06:12 kn Exp $    */
 
 /*
  * Copyright (c) 2004 Tom Cosgrove
@@ -42,7 +42,7 @@
 #include <biosdev.h>
 #include <dev/cons.h>
 
-const char version[] = "3.55";
+const char version[] = "3.56";
 int    debug = 1;
 
 
index 4e56de6..f669d16 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: biosdev.c,v 1.35 2022/08/12 20:17:46 stsp Exp $       */
+/*     $OpenBSD: biosdev.c,v 1.36 2023/04/25 10:06:12 kn Exp $ */
 
 /*
  * Copyright (c) 1996 Michael Shalayeff
@@ -533,6 +533,8 @@ biosopen(struct open_file *f, ...)
 #ifdef SOFTRAID
        /* Intercept softraid disks. */
        if (strncmp("sr", dev, 2) == 0) {
+               /* We only support read-only softraid. */
+               f->f_flags |= F_NOWRITE;
 
                /* Create a fake diskinfo for this softraid volume. */
                SLIST_FOREACH(bv, &sr_volumes, sbv_link)
index da73475..290d50f 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: conf.c,v 1.54 2022/08/12 20:18:58 stsp Exp $  */
+/*     $OpenBSD: conf.c,v 1.55 2023/04/25 10:06:12 kn Exp $    */
 
 /*
  * Copyright (c) 2004 Tom Cosgrove
@@ -44,7 +44,7 @@
 #include "pxeboot.h"
 #include "pxe_net.h"
 
-const char version[] = "3.55";
+const char version[] = "3.56";
 int    debug = 0;
 
 void (*sa_cleanup)(void) = pxe_shutdown;