compat: move cp_compat_stat to common code
struct stat / compat_stat is the same on all architectures, so cp_compat_stat should be, too. Turns out it is, except that various architectures have slightly and some high2lowuid/high2lowgid or the direct assignment instead of the SET_UID/SET_GID that expands to the correct one anyway. This patch replaces the arch-specific cp_compat_stat implementations with a common one based on the x86-64 one. Signed-off-by: Christoph Hellwig <hch@lst.de> Acked-by: David S. Miller <davem@davemloft.net> [ sparc bits ] Acked-by: Kyle McMartin <kyle@mcmartin.ca> [ parisc bits ] Cc: <linux-arch@vger.kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:

committed by
Linus Torvalds

parent
f7ad160b49
commit
f7a5000f7a
@@ -362,41 +362,6 @@ asmlinkage long sys32_ftruncate64(unsigned int fd, unsigned long high, unsigned
|
||||
return sys_ftruncate(fd, (high << 32) | low);
|
||||
}
|
||||
|
||||
int cp_compat_stat(struct kstat *stat, struct compat_stat __user *statbuf)
|
||||
{
|
||||
compat_ino_t ino;
|
||||
int err;
|
||||
|
||||
if (!old_valid_dev(stat->dev) || !old_valid_dev(stat->rdev))
|
||||
return -EOVERFLOW;
|
||||
|
||||
ino = stat->ino;
|
||||
if (sizeof(ino) < sizeof(stat->ino) && ino != stat->ino)
|
||||
return -EOVERFLOW;
|
||||
|
||||
err = put_user(old_encode_dev(stat->dev), &statbuf->st_dev);
|
||||
err |= put_user(stat->ino, &statbuf->st_ino);
|
||||
err |= put_user(stat->mode, &statbuf->st_mode);
|
||||
err |= put_user(stat->nlink, &statbuf->st_nlink);
|
||||
err |= put_user(high2lowuid(stat->uid), &statbuf->st_uid);
|
||||
err |= put_user(high2lowgid(stat->gid), &statbuf->st_gid);
|
||||
err |= put_user(old_encode_dev(stat->rdev), &statbuf->st_rdev);
|
||||
err |= put_user(stat->size, &statbuf->st_size);
|
||||
err |= put_user(stat->atime.tv_sec, &statbuf->st_atime);
|
||||
err |= put_user(stat->atime.tv_nsec, &statbuf->st_atime_nsec);
|
||||
err |= put_user(stat->mtime.tv_sec, &statbuf->st_mtime);
|
||||
err |= put_user(stat->mtime.tv_nsec, &statbuf->st_mtime_nsec);
|
||||
err |= put_user(stat->ctime.tv_sec, &statbuf->st_ctime);
|
||||
err |= put_user(stat->ctime.tv_nsec, &statbuf->st_ctime_nsec);
|
||||
err |= put_user(stat->blksize, &statbuf->st_blksize);
|
||||
err |= put_user(stat->blocks, &statbuf->st_blocks);
|
||||
/* fixme
|
||||
err |= put_user(0, &statbuf->__unused4[0]);
|
||||
err |= put_user(0, &statbuf->__unused4[1]);
|
||||
*/
|
||||
return err;
|
||||
}
|
||||
|
||||
asmlinkage long sys32_sched_rr_get_interval(compat_pid_t pid,
|
||||
struct compat_timespec __user *interval)
|
||||
{
|
||||
|
Reference in New Issue
Block a user