diff -rup linux/fs/reiserfs/file.c linux.patched/fs/reiserfs/file.c
--- linux/fs/reiserfs/file.c    Thu Nov 15 16:29:50 2001
+++ linux.patched/fs/reiserfs/file.c    Thu Nov 15 16:29:26 2001
@@ -109,6 +109,12 @@ static int reiserfs_setattr(struct dentr
       }
    }

+    if ((((attr->ia_valid & ATTR_UID) && (attr->ia_uid & ~0xffff)) ||
+        ((attr->ia_valid & ATTR_GID) && (attr->ia_gid & ~0xffff))) &&
+       (get_inode_sd_version (inode) == STAT_DATA_V1))
+               /* stat data of format v3.5 has 16 bit uid and gid */
+           return -EINVAL;
+
    error = inode_change_ok(inode, attr) ;
    if (!error)
        inode_setattr(inode, attr) ;
diff -rup linux/fs/reiserfs/inode.c linux.patched/fs/reiserfs/inode.c
--- linux/fs/reiserfs/inode.c   Thu Nov 15 16:29:50 2001
+++ linux.patched/fs/reiserfs/inode.c   Thu Nov 15 16:14:21 2001
@@ -219,7 +219,7 @@ static inline void set_block_dev_mapped
// files which were created in the earlier version can not be longer,
// than 2 gb
//
-int file_capable (struct inode * inode, long block)
+static int file_capable (struct inode * inode, long block)
{
    if (get_inode_item_key_version (inode) != KEY_FORMAT_3_5 || // it is new file.
       block < (1 << (31 - inode->i_sb->s_blocksize_bits))) // old file, but 'block' is inside of 2gb
@@ -1517,9 +1517,16 @@ struct inode * reiserfs_new_inode (struc

    INIT_LIST_HEAD(&inode->u.reiserfs_i.i_prealloc_list) ;

-    if (old_format_only (sb))
+    if (old_format_only (sb)) {
+       if (inode->i_uid & ~0xffff || inode->i_gid & ~0xffff) {
+           pathrelse (&path_to_key);
+           /* i_uid or i_gid is too big to be stored in stat data v3.5 */
+           iput (inode);
+           *err = -EINVAL;
+           return NULL;
+       }
       inode2sd_v1 (&sd, inode);
-    else
+    } else
       inode2sd (&sd, inode);

    // these do not go to on-disk stat data