• C
    drm: Pad drm_mode_get_connector to 64-bit boundary · bc5bd37c
    Chris Wilson 提交于
    Pavel Roskin reported that DRM_IOCTL_MODE_GETCONNECTOR was overwritting
    the 4 bytes beyond the end of its structure with a 32-bit userspace
    running on a 64-bit kernel. This is due to the padding gcc inserts as
    the drm_mode_get_connector struct includes a u64 and its size is not a
    natural multiple of u64s.
    
    64-bit kernel:
    
    sizeof(drm_mode_get_connector)=80, alignof=8
    sizeof(drm_mode_get_encoder)=20, alignof=4
    sizeof(drm_mode_modeinfo)=68, alignof=4
    
    32-bit userspace:
    
    sizeof(drm_mode_get_connector)=76, alignof=4
    sizeof(drm_mode_get_encoder)=20, alignof=4
    sizeof(drm_mode_modeinfo)=68, alignof=4
    
    Fortuituously we can insert explicit padding to the tail of our
    structures without breaking ABI.
    Reported-by: NPavel Roskin <proski@gnu.org>
    Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
    Cc: Dave Airlie <airlied@redhat.com>
    Cc: dri-devel@lists.freedesktop.org
    Cc: stable@vger.kernel.org
    Signed-off-by: NDave Airlie <airlied@redhat.com>
    bc5bd37c
drm_mode.h 12.5 KB