]> git.neil.brown.name Git - history.git/commitdiff
[PATCH] ia64: Fix unaligned faults in IA-32 putstat64
authorArun Sharma <arun.sharma@intel.com>
Fri, 10 Oct 2003 06:57:41 +0000 (23:57 -0700)
committerDavid Mosberger <davidm@tiger.hpl.hp.com>
Fri, 10 Oct 2003 06:57:41 +0000 (23:57 -0700)
This seems to be introduced by recent changes in 2.6.0-test series.

arch/ia64/ia32/sys_ia32.c

index 30e8eccfbe805f72f621a5b958bd39250fc14d6f..95baf7ddd117a5c3700eefa59d50d38fcf68c323 100644 (file)
@@ -2486,11 +2486,14 @@ static int
 putstat64 (struct stat64 *ubuf, struct kstat *kbuf)
 {
        int err;
+       u64 hdev;
 
        if (clear_user(ubuf, sizeof(*ubuf)))
                return -EFAULT;
 
-       err  = __put_user(huge_encode_dev(kbuf->dev), &ubuf->st_dev);
+       hdev = huge_encode_dev(kbuf->dev);
+       err  = __put_user(hdev, (u32*)&ubuf->st_dev);
+       err |= __put_user(hdev >> 32, ((u32*)&ubuf->st_dev) + 1);
        err |= __put_user(kbuf->ino, &ubuf->__st_ino);
        err |= __put_user(kbuf->ino, &ubuf->st_ino_lo);
        err |= __put_user(kbuf->ino >> 32, &ubuf->st_ino_hi);
@@ -2498,7 +2501,9 @@ putstat64 (struct stat64 *ubuf, struct kstat *kbuf)
        err |= __put_user(kbuf->nlink, &ubuf->st_nlink);
        err |= __put_user(kbuf->uid, &ubuf->st_uid);
        err |= __put_user(kbuf->gid, &ubuf->st_gid);
-       err |= __put_user(huge_encode_dev(kbuf->rdev), &ubuf->st_rdev);
+       hdev = huge_encode_dev(kbuf->rdev);
+       err  = __put_user(hdev, (u32*)&ubuf->st_rdev);
+       err |= __put_user(hdev >> 32, ((u32*)&ubuf->st_rdev) + 1);
        err |= __put_user(kbuf->size, &ubuf->st_size_lo);
        err |= __put_user((kbuf->size >> 32), &ubuf->st_size_hi);
        err |= __put_user(kbuf->atime.tv_sec, &ubuf->st_atime);