• Topi Miettinen's avatar
    firmware_loader: load files from the mount namespace of init · 901cff7c
    Topi Miettinen authored
    I have an experimental setup where almost every possible system
    service (even early startup ones) runs in separate namespace, using a
    dedicated, minimal file system. In process of minimizing the contents
    of the file systems with regards to modules and firmware files, I
    noticed that in my system, the firmware files are loaded from three
    different mount namespaces, those of systemd-udevd, init and
    systemd-networkd. The logic of the source namespace is not very clear,
    it seems to depend on the driver, but the namespace of the current
    process is used.
    
    So, this patch tries to make things a bit clearer and changes the
    loading of firmware files only from the mount namespace of init. This
    may also improve security, though I think that using firmware files as
    attack vector could be too impractical anyway.
    
    Later, it might make sense to make the mount namespace configurable,
    for example with a new file in /proc/sys/kernel/firmware_config/. That
    would allow a dedicated file system only for firmware files and those
    need not be present anywhere else. This configurability would make
    more sense if made also for kernel modules and /sbin/modprobe. Modules
    are already loaded from init namespace (usermodehelper uses kthreadd
    namespace) except when directly loaded by systemd-udevd.
    
    Instead of using the mount namespace of the current process to load
    firmware files, use the mount namespace of init process.
    
    Link: https://lore.kernel.org/lkml/bb46ebae-4746-90d9-ec5b-fce4c9328c86@gmail.com/
    Link: https://lore.kernel.org/lkml/0e3f7653-c59d-9341-9db2-c88f5b988c68@gmail.com/Signed-off-by: default avatarTopi Miettinen <toiwoton@gmail.com>
    Link: https://lore.kernel.org/r/20200123125839.37168-1-toiwoton@gmail.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    901cff7c
exec.c 47.6 KB