• Stefan Richter's avatar
    firewire: cdev: fix information leak · 9cac00b8
    Stefan Richter authored
    A userspace client got to see uninitialized stack-allocated memory if it
    specified an _IOC_READ type of ioctl and an argument size larger than
    expected by firewire-core's ioctl handlers (but not larger than the
    core's union ioctl_arg).
    
    Fix this by clearing the requested buffer size to zero, but only at _IOR
    ioctls.  This way, there is almost no runtime penalty to legitimate
    ioctls.  The only legitimate _IOR is FW_CDEV_IOC_GET_CYCLE_TIMER with 12
    or 16 bytes to memset.
    
    [Another way to fix this would be strict checking of argument size (and
    possibly direction) vs. command number.  However, we then need a lookup
    table, and we need to allow for slight size deviations in case of 32bit
    userland on 64bit kernel.]
    Reported-by: default avatarClemens Ladisch <clemens@ladisch.de>
    Signed-off-by: default avatarStefan Richter <stefanr@s5r6.in-berlin.de>
    9cac00b8
core-cdev.c 37.9 KB