• Milan Broz's avatar
    dm io:ctl use constant struct size · 027d50f9
    Milan Broz authored
    Make size of dm_ioctl struct always 312 bytes on all supported
    architectures.
    
    This change retains compatibility with already-compiled code because
    it uses an embedded offset to locate the payload that follows the
    structure.
    
    On 64-bit architectures there is no change at all; on 32-bit
    we are increasing the size of dm-ioctl from 308 to 312 bytes.
    
    Currently with 32-bit userspace / 64-bit kernel on x86_64
    some ioctls (including rename, message) are incorrectly rejected
    by the comparison against 'param + 1'.  This breaks userspace
    lvrename and multipath 'fail_if_no_path' changes, for example.
    
    (BTW Device-mapper uses its own versioning and ignores the ioctl
    size bits.  Only the generic ioctl compat code on mixed arches
    checks them, and that will continue to accept both sizes for now,
    but we intend to list 308 as deprecated and eventually remove it.)
    Signed-off-by: default avatarMilan Broz <mbroz@redhat.com>
    Signed-off-by: default avatarAlasdair G Kergon <agk@redhat.com>
    Cc: Guido Guenther <agx@sigxcpu.org>
    Cc: Kevin Corry <kevcorry@us.ibm.com>
    Cc: stable@kernel.org
    027d50f9
dm-ioctl.c 30.5 KB