Date: Fri, 19 Sep 1997 20:57:49 +1000 From: Bruce Evans <bde@zeta.org.au> To: cvs-all@freebsd.org, cvs-committers@freebsd.org, cvs-sys@freebsd.org, phk@freebsd.org Subject: Re: cvs commit: src/sys/ufs/ffs ffs_alloc.c Message-ID: <199709191057.UAA12942@godzilla.zeta.org.au>
next in thread | raw e-mail | index | archive | help
>phk 1997/09/18 11:07:45 PDT > > Modified files: > sys/ufs/ffs ffs_alloc.c > Log: > Ffs_alloc allow users to write one block beyond the limit. > > PR: 3398 > Reviewed by: phk > Submitted by: Wolfram Schneider <wosch@apfel.de> This is completely wrong. 1. ffs_alloc() actually allowed writing one block less one frag (normally 7 frags or 7/8 blocks) beyond the limit. 2. freebufspace() gives the free space in frags, but `size' is in bytes, so the change results in approximately `size' fragments too many being reserved. 3. ffs_realloccg() has the same bug but wasn't changed. Bruce Incompetely tested patches relative to the old version: diff -c2 ffs_alloc.c~ ffs_alloc.c *** ffs_alloc.c~ Wed Sep 3 11:16:21 1997 --- ffs_alloc.c Fri Sep 19 19:15:49 1997 *************** *** 118,122 **** if (size == fs->fs_bsize && fs->fs_cstotal.cs_nbfree == 0) goto nospace; ! if (cred->cr_uid != 0 && freespace(fs, fs->fs_minfree) <= 0) goto nospace; #ifdef QUOTA --- 118,123 ---- if (size == fs->fs_bsize && fs->fs_cstotal.cs_nbfree == 0) goto nospace; ! if (cred->cr_uid != 0 && freespace(fs, fs->fs_minfree) - ! numfrags(fs, size) < 0) goto nospace; #ifdef QUOTA *************** *** 188,192 **** panic("ffs_realloccg: missing credential"); #endif /* DIAGNOSTIC */ ! if (cred->cr_uid != 0 && freespace(fs, fs->fs_minfree) <= 0) goto nospace; if ((bprev = ip->i_db[lbprev]) == 0) { --- 189,194 ---- panic("ffs_realloccg: missing credential"); #endif /* DIAGNOSTIC */ ! if (cred->cr_uid != 0 && freespace(fs, fs->fs_minfree) - ! numfrags(fs, nsize - osize) < 0) goto nospace; if ((bprev = ip->i_db[lbprev]) == 0) {
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199709191057.UAA12942>