Avoid forcible mounting a dirty filessystem. Mount such filesystems
authorkettenis <kettenis@openbsd.org>
Wed, 18 Oct 2023 22:44:42 +0000 (22:44 +0000)
committerkettenis <kettenis@openbsd.org>
Wed, 18 Oct 2023 22:44:42 +0000 (22:44 +0000)
read-only instead.  This means that writing to the filesystem will fail.
As a consequence chmod'ing of files in the bootloader will fail, but that
will fix itself on the next clean boot.

ok kn@

sys/arch/powerpc64/stand/rdboot/disk.c

index 767f070..6dc70ba 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: disk.c,v 1.3 2020/08/29 11:46:54 kettenis Exp $       */
+/*     $OpenBSD: disk.c,v 1.4 2023/10/18 22:44:42 kettenis Exp $       */
 
 /*
  * Copyright (c) 2019 Visa Hankala
@@ -195,11 +195,13 @@ disk_open(const char *path)
 
        memset(&ffs_args, 0, sizeof(ffs_args));
        ffs_args.fspec = devpath;
-       if (mount(MOUNT_FFS, "/mnt", MNT_FORCE | MNT_NOATIME,
-           &ffs_args) == -1) {
-               fprintf(stderr, "failed to mount %s: %s\n", devpath,
-                   strerror(errno));
-               return NULL;
+       if (mount(MOUNT_FFS, "/mnt", MNT_NOATIME, &ffs_args) == -1) {
+               if (mount(MOUNT_FFS, "/mnt", MNT_RDONLY, &ffs_args) == -1) {
+                       fprintf(stderr, "failed to mount %s: %s\n", devpath,
+                           strerror(errno));
+                       return NULL;
+               }
+               fprintf(stderr, "%s: mounted read-only\n", devpath);
        }
        if (chroot("/mnt") == -1) {
                fprintf(stderr, "failed to chroot: %s\n", strerror(errno));