• Yasuaki Ishimatsu's avatar
    firmware, memmap: fix firmware_map_entry leak · 7a6f93b0
    Yasuaki Ishimatsu authored
    When hot removing memory, a firmware_map_entry which has memory range of
    the memory is released by release_firmware_map_entry().  If the entry is
    allocated by bootmem, release_firmware_map_entry() adds the entry to
    map_entires_bootmem list when firmware_map_find_entry() finds the entry
    from map_entries list.  But firmware_map_find_entry never find the entry
    sicne map_entires list does not have the entry.  So the entry just
    leaks.
    
    Here are steps of leaking firmware_map_entry:
    firmware_map_remove()
    -> firmware_map_find_entry()
       Find released entry from map_entries list
    -> firmware_map_remove_entry()
       Delete the entry from map_entries list
    -> remove_sysfs_fw_map_entry()
       ...
       -> release_firmware_map_entry()
          -> firmware_map_find_entry()
             Find the entry from map_entries list but the entry has been
             deleted from map_entries list. So the entry is not added
             to map_entries_bootmem. Thus the entry leaks
    
    release_firmware_map_entry() should not call firmware_map_find_entry()
    since releaed entry has been deleted from map_entries list.  So the
    patch delete firmware_map_find_entry() from releae_firmware_map_entry()
    Signed-off-by: default avatarYasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>
    Reviewed-by: default avatarWanpeng Li <liwanp@linux.vnet.ibm.com>
    Reviewed-by: default avatarTang Chen <tangchen@cn.fujitsu.com>
    Acked-by: default avatarToshi Kani <toshi.kani@hp.com>
    Cc: Wen Congyang <wency@cn.fujitsu.com>
    Cc: Greg KH <greg@kroah.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    7a6f93b0
memmap.c 11.8 KB