xfs: Disallow 32bit project quota id
authorArkadiusz Mi?kiewicz <arekm@maven.pl>
Thu, 26 Aug 2010 10:19:43 +0000 (10:19 +0000)
committerAlex Elder <aelder@sgi.com>
Thu, 2 Sep 2010 15:29:08 +0000 (10:29 -0500)
Currently on-disk structure is able to keep only 16bit project quota
id, so disallow 32bit ones. This fixes a problem where parts of
kernel structures holding project quota id are 32bit while parts
(on-disk) are 16bit variables which causes project quota member
files to be inaccessible for some operations (like mv/rm).

Signed-off-by: Arkadiusz Mi?kiewicz <arekm@maven.pl>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Alex Elder <aelder@sgi.com>
fs/xfs/linux-2.6/xfs_ioctl.c

index 237f5ffb2ee8ca067f6dc81ebc38a6de1f7b36ce..4fec427b83efc9dbf42ae9cda3aa64c5c71cdbec 100644 (file)
@@ -906,6 +906,13 @@ xfs_ioctl_setattr(
        if (XFS_FORCED_SHUTDOWN(mp))
                return XFS_ERROR(EIO);
 
+       /*
+        * Disallow 32bit project ids because on-disk structure
+        * is 16bit only.
+        */
+       if ((mask & FSX_PROJID) && (fa->fsx_projid > (__uint16_t)-1))
+               return XFS_ERROR(EINVAL);
+
        /*
         * If disk quotas is on, we make sure that the dquots do exist on disk,
         * before we start any other transactions. Trying to do this later