Date: Fri, 3 Nov 2006 01:56:49 +0100 (CET) From: Csaba Henk <csaba.henk@creo.hu> To: FreeBSD-gnats-submit@FreeBSD.org Cc: Csaba Henk <csaba.henk@creo.hu> Subject: kern/105093: ext2fs on read-only media cannot be mounted Message-ID: <200611030056.kA30unfs025866@beastie.creo.hu> Resent-Message-ID: <200611030100.kA310mYp008893@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 105093 >Category: kern >Synopsis: ext2fs on read-only media cannot be mounted >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Fri Nov 03 01:00:46 GMT 2006 >Closed-Date: >Last-Modified: >Originator: Csaba Henk >Release: FreeBSD 6.1-PRERELEASE i386 >Organization: creo.hu >Environment: System: FreeBSD beastie.creo.hu 6.1-PRERELEASE FreeBSD 6.1-PRERELEASE #1: Tue Feb 21 14:50:42 CET 2006 toor@beastie.creo.hu:/usr/obj/usr/src/sys/HCS i386 >Description: In ext_mountfs of sys/gnu/fs/ext2fs/ext2_vfsops.c it's checked errorneously whether mounter wants a read-only mount. Therefore this function will always act as in case of a writable mount which yields an EROFS if the media is actually read-only. This might also lead to unintended fs modification despite the "-o ro" option; I haven't made experiments of such type though, it's just a hypothetical problem at this point. This bug is present at least in RELENG6 and HEAD branches. >How-To-Repeat: - Create a sparse file in some of your filesystems. - Format the sparse file as an ext2 filesystem by mke2fs(8). - Remount the host filesystem read-only. - Create an md node backed by the ext2 file using mdconfig(8). - Try to mount the resulting md node with ext2 type. You will get EROFS either you use "-o ro" or not. >Fix: Apply the follwing patch: --- ext2_vfsops.c.orig Fri Nov 3 01:31:42 2006 +++ ext2_vfsops.c Fri Nov 3 01:34:10 2006 @@ -601,7 +601,7 @@ ext2_mountfs(devvp, mp, td) int error; int ronly; - ronly = vfs_flagopt(mp->mnt_optnew, "ro", NULL, 0); + ronly = (mp->mnt_flag & MNT_RDONLY) ? : 1 : 0; /* XXX: use VOP_ACESS to check FS perms */ DROP_GIANT(); g_topology_lock(); Csaba >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200611030056.kA30unfs025866>