• Vasant Hegde's avatar
    powerpc/powernv/dump: Fix race while processing OPAL dump · 0a43ae3e
    Vasant Hegde authored
    Every dump reported by OPAL is exported to userspace through a sysfs
    interface and notified using kobject_uevent(). The userspace daemon
    (opal_errd) then reads the dump and acknowledges that the dump is
    saved safely to disk. Once acknowledged the kernel removes the
    respective sysfs file entry causing respective resources to be
    released including kobject.
    
    However it's possible the userspace daemon may already be scanning
    dump entries when a new sysfs dump entry is created by the kernel.
    User daemon may read this new entry and ack it even before kernel can
    notify userspace about it through kobject_uevent() call. If that
    happens then we have a potential race between
    dump_ack_store->kobject_put() and kobject_uevent which can lead to
    use-after-free of a kernfs object resulting in a kernel crash.
    
    This patch fixes this race by protecting the sysfs file
    creation/notification by holding a reference count on kobject until we
    safely send kobject_uevent().
    
    The function create_dump_obj() returns the dump object which if used
    by caller function will end up in use-after-free problem again.
    However, the return value of create_dump_obj() function isn't being
    used today and there is no need as well. Hence change it to return
    void to make this fix complete.
    
    Fixes: c7e64b9c ("powerpc/powernv Platform dump interface")
    Signed-off-by: default avatarVasant Hegde <hegdevasant@linux.vnet.ibm.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/20201017164210.264619-1-hegdevasant@linux.vnet.ibm.com
    0a43ae3e
opal-dump.c 10.1 KB