From: Arnd Bergmann <arnd@arndb.de>
To: Christoph Hellwig <hch@lst.de>
Cc: linux-kernel@vger.kernel.org, sandeen@sandeen.net,
davem@davemloft.net, tony.luck@intel.com, ralf@linux-mips.org,
kyle@mcmartin.ca, schwidefsky@de.ibm.com
Subject: Re: [PATCH] generic compat_sys_ustat
Date: Wed, 26 Nov 2008 14:17:16 +0100 [thread overview]
Message-ID: <200811261417.18016.arnd@arndb.de> (raw)
In-Reply-To: <20081126124046.GA22340@lst.de>
On Wednesday 26 November 2008, Christoph Hellwig wrote:
> +asmlinkage long compat_sys_ustat(unsigned dev, struct compat_ustat __user *cu)
> +{
> + struct ustat __user *u = compat_alloc_user_space(sizeof(*u));
> + int ret;
> +
> + ret = sys_ustat(dev, u);
> + if (ret < 0)
> + return ret;
> +
> + if (!access_ok(VERIFY_WRITE, cu, sizeof(*cu)) ||
> + __copy_in_user(&cu->f_tfree, &u->f_tfree, sizeof(compat_daddr_t)) ||
> + __copy_in_user(&cu->f_tinode, &u->f_tinode, sizeof(compat_ino_t)) ||
> + __copy_in_user(&cu->f_fname, u->f_fname, sizeof(cu->f_fname)) ||
> + __copy_in_user(&cu->f_fpack, u->f_fpack, sizeof(cu->f_fpack)))
> + return -EFAULT;
> + return 0;
> +}
The __copy_in_user for f_tinode and f_tfree only work on little-endian
systems, or if the sizes are the same for 32 and 64 bit. f_fname and
f_fpack don't need to be copied at all, as they are always zero-filled in
the current implementation (which is unlikely to ever change).
Also, this function is not much simpler than the actual sys_ustat function,
so have you considered implementing it directly like this?
asmlinkage long compat_sys_ustat(unsigned dev, struct compat_ustat __user * ubuf)
{
struct super_block *s;
struct compat_ustat tmp;
struct kstatfs sbuf;
int err = -EINVAL;
s = user_get_super(new_decode_dev(dev));
if (s == NULL)
goto out;
err = vfs_statfs(s->s_root, &sbuf);
drop_super(s);
if (err)
goto out;
memset(&tmp,0,sizeof(struct compat_ustat));
tmp.f_tfree = sbuf.f_bfree;
tmp.f_tinode = sbuf.f_ffree;
err = copy_to_user(ubuf,&tmp,sizeof(struct compat_ustat)) ? -EFAULT : 0;
out:
return err;
}
This code is directly lifted from the sys_ustat implementation, with a few
compat_ added in the right places.
Arnd <><
next prev parent reply other threads:[~2008-11-26 13:17 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-11-21 8:41 [PATCH] generic compat_sys_ustat Christoph Hellwig
2008-11-21 9:01 ` Ralf Baechle
2008-11-21 15:10 ` Eric Sandeen
2008-11-21 17:38 ` Eric Sandeen
2008-11-24 20:47 ` Eric Sandeen
2008-11-25 17:01 ` Kyle McMartin
2008-11-26 12:40 ` Christoph Hellwig
2008-11-26 13:17 ` Arnd Bergmann [this message]
2008-11-28 9:09 ` Christoph Hellwig
2009-03-11 19:18 ` Eric Sandeen
2009-03-14 12:45 ` Christoph Hellwig
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200811261417.18016.arnd@arndb.de \
--to=arnd@arndb.de \
--cc=davem@davemloft.net \
--cc=hch@lst.de \
--cc=kyle@mcmartin.ca \
--cc=linux-kernel@vger.kernel.org \
--cc=ralf@linux-mips.org \
--cc=sandeen@sandeen.net \
--cc=schwidefsky@de.ibm.com \
--cc=tony.luck@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.