Skip to content
  • Vasily Tarasov's avatar
    diskquota: 32bit quota tools on 64bit architectures · b716395e
    Vasily Tarasov authored
    
    
    OpenVZ Linux kernel team has discovered the problem with 32bit quota tools
    working on 64bit architectures.  In 2.6.10 kernel sys32_quotactl() function
    was replaced by sys_quotactl() with the comment "sys_quotactl seems to be
    32/64bit clean, enable it for 32bit" However this isn't right.  Look at
    if_dqblk structure:
    
    struct if_dqblk {
            __u64 dqb_bhardlimit;
            __u64 dqb_bsoftlimit;
            __u64 dqb_curspace;
            __u64 dqb_ihardlimit;
            __u64 dqb_isoftlimit;
            __u64 dqb_curinodes;
            __u64 dqb_btime;
            __u64 dqb_itime;
            __u32 dqb_valid;
    };
    
    For 32 bit quota tools sizeof(if_dqblk) == 0x44.
    But for 64 bit kernel its size is 0x48, 'cause of alignment!
    Thus we got a problem. Attached patch reintroduce sys32_quotactl() function,
    that handles this and related situations.
    
    [michal.k.k.piotrowski@gmail.com: build fix]
    [akpm@linux-foundation.org: Make it link with CONFIG_QUOTA=n]
    Signed-off-by: default avatarVasily Tarasov <vtaras@openvz.org>
    Cc: Andi Kleen <ak@suse.de>
    Cc: "Luck, Tony" <tony.luck@intel.com>
    Cc: Jan Kara <jack@ucw.cz>
    Cc: <linux-arch@vger.kernel.org>
    Signed-off-by: default avatarMichal Piotrowski <michal.k.k.piotrowski@gmail.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    b716395e