• Thiébaud Weksteen's avatar
    firmware_loader: use kernel credentials when reading firmware · 3677563e
    Thiébaud Weksteen authored
    Device drivers may decide to not load firmware when probed to avoid
    slowing down the boot process should the firmware filesystem not be
    available yet. In this case, the firmware loading request may be done
    when a device file associated with the driver is first accessed. The
    credentials of the userspace process accessing the device file may be
    used to validate access to the firmware files requested by the driver.
    Ensure that the kernel assumes the responsibility of reading the
    firmware.
    
    This was observed on Android for a graphic driver loading their firmware
    when the device file (e.g. /dev/mali0) was first opened by userspace
    (i.e. surfaceflinger). The security context of surfaceflinger was used
    to validate the access to the firmware file (e.g.
    /vendor/firmware/mali.bin).
    
    Because previous configurations were relying on the userspace fallback
    mechanism, the security context of the userspace daemon (i.e. ueventd)
    was consistently used to read firmware files. More devices are found to
    use the command line argument firmware_class.path which gives the kernel
    the opportunity to read the firmware directly, hence surfacing this
    misattribution.
    Signed-off-by: default avatarThiébaud Weksteen <tweek@google.com>
    Reviewed-by: default avatarLuis Chamberlain <mcgrof@kernel.org>
    Tested-by: default avatarJohn Stultz <jstultz@google.com>
    Link: https://lore.kernel.org/r/20220422013215.2301793-1-tweek@google.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    3677563e
main.c 39.1 KB