Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 02 Apr 2010 22:31:33 +0300
From:      Andriy Gapon <avg@freebsd.org>
To:        Fabian Keil <freebsd-listen@fabiankeil.de>
Cc:        Kostik Belousov <kostikbel@gmail.com>, freebsd-current@freebsd.org, Bruce Evans <bde@zeta.org.au>
Subject:   Re: newfs_msdos and DVD-RAM
Message-ID:  <4BB64615.9060601@freebsd.org>
In-Reply-To: <4BB644CA.4000807@freebsd.org>
References:  <3a142e751003190508x6a06868ene2e8fd9ddd977f66@mail.gmail.com>	<3a142e751003191021p141af009m6acf7d160c890cbb@mail.gmail.com>	<20100319191133.46fe271c@r500.local>	<3a142e751003191126j331e525fwb9e5573bbf6f7d58@mail.gmail.com>	<4BAA30CB.1070707@icyb.net.ua>	<20100328172537.501ed3d1@r500.local>	<4BB0A053.9060007@freebsd.org>	<20100329222920.5eef6395@r500.local>	<4BB111D4.8060809@freebsd.org>	<20100330173637.202b4b1e@r500.local>	<4BB21BBA.7030407@freebsd.org>	<4BB360A1.7020309@freebsd.org> <20100402125721.50b3ba4f@r500.local> <4BB5D06C.8080902@freebsd.org> <4BB644CA.4000807@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
on 02/04/2010 22:26 Andriy Gapon said the following:
> 
> OK, I did it again.
> I tested the below patch using the scenario described above.
> Could you please review and/or test this patch?
> If you like it and it works, I can commit it.
> Thanks!
> 
> --- a/sbin/newfs_msdos/newfs_msdos.c
> +++ b/sbin/newfs_msdos/newfs_msdos.c
> @@ -427,6 +427,9 @@ main(int argc, char *argv[])
>      if (bpb.bpbBytesPerSec < MINBPS)
>  	errx(1, "bytes/sector (%u) is too small; minimum is %u",
>  	     bpb.bpbBytesPerSec, MINBPS);
> +    bpb.bpbSecPerClust /= (bpb.bpbBytesPerSec / MINBPS);
> +    if (bpb.bpbSecPerClust == 0)
> +	bpb.bpbSecPerClust = 1;
>      if (!(fat = opt_F)) {
>  	if (opt_f)
>  	    fat = 12;
> 

And here is a safer one (in case of a huge sector size > 32KB).
I will appreciate any testing with real media that you might have.

diff --git a/sbin/newfs_msdos/newfs_msdos.c b/sbin/newfs_msdos/newfs_msdos.c
index 955c3a5..3f2778d 100644
--- a/sbin/newfs_msdos/newfs_msdos.c
+++ b/sbin/newfs_msdos/newfs_msdos.c
@@ -427,6 +427,12 @@ main(int argc, char *argv[])
     if (bpb.bpbBytesPerSec < MINBPS)
 	errx(1, "bytes/sector (%u) is too small; minimum is %u",
 	     bpb.bpbBytesPerSec, MINBPS);
+    bpb.bpbSecPerClust /= (bpb.bpbBytesPerSec / MINBPS);
+    if (bpb.bpbSecPerClust == 0)
+	bpb.bpbSecPerClust = 1;
+    if (bpb.bpbSecPerClust * bpb.bpbBytesPerSec > 32 * 1024)
+	errx(1, "bytes per sector (%u) is greater than 32k",
+	    bpb.bpbSecPerClust * bpb.bpbBytesPerSec);
     if (!(fat = opt_F)) {
 	if (opt_f)
 	    fat = 12;


-- 
Andriy Gapon



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4BB64615.9060601>