[PATCH] More statfs error checking in the VFS

kdp0101@hpmail.lrz-muenchen.de
Sat, 19 Jul 1997 17:19:08 METDST


Hello Linus,

This patch adds statfs error checking to sys_ustat() and to sys_fstatfs().
It also removes an unnecessary verify_area(). Patch against 2.1.45.

--- fs/super.c~ Thu Jul 17 14:48:55 1997
+++ fs/super.c Thu Jul 17 23:00:02 1997
@@ -473,14 +473,16 @@

old_fs = get_fs();
set_fs(get_ds());
- s->s_op->statfs(s,&sbuf,sizeof(struct statfs));
+ err = s->s_op->statfs(s,&sbuf,sizeof(struct statfs));
set_fs(old_fs);
+ if (err)
+ goto out;

memset(&tmp,0,sizeof(struct ustat));
tmp.f_tfree = sbuf.f_bfree;
tmp.f_tinode = sbuf.f_ffree;

- err = copy_to_user(ubuf,&tmp,sizeof(struct ustat)) ? -EFAULT : 0;
+ err = copy_to_user(ubuf,&tmp,sizeof(struct ustat)) ? -EFAULT : 0;
out:
unlock_kernel();
return err;
--- fs/open.c~ Thu Jul 17 14:48:52 1997
+++ fs/open.c Thu Jul 17 23:01:33 1997
@@ -53,9 +53,6 @@
int error;

lock_kernel();
- error = verify_area(VERIFY_WRITE, buf, sizeof(struct statfs));
- if (error)
- goto out;
if (fd >= NR_OPEN || !(file = current->files->fd[fd]))
error = -EBADF;
else if (!(dentry = file->f_dentry))
@@ -67,8 +64,7 @@
else if (!inode->i_sb->s_op->statfs)
error = -ENOSYS;
else
- inode->i_sb->s_op->statfs(inode->i_sb, buf, sizeof(struct statfs));
-out:
+ error = inode->i_sb->s_op->statfs(inode->i_sb, buf, sizeof(struct statfs));
unlock_kernel();
return error;
}

-Andi