• L
    ACPICA: Tables: Mechanism to handle late stage acpi_get_table() imbalance · 83848fbe
    Lv Zheng 提交于
    Considering this case:
    
     1. A program opens a sysfs table file 65535 times, it can increase
        validation_count and first increment cause the table to be mapped:
    
         validation_count = 65535
    
     2. AML execution causes "Load" to be executed on the same
        table, this time it cannot increase validation_count, so
        validation_count remains:
    
          validation_count = 65535
    
     3. The program closes sysfs table file 65535 times, it can decrease
        validation_count and the last decrement cause the table to be
        unmapped:
    
         validation_count = 0
    
     4. AML code still accessing the loaded table, kernel crash can be
        observed.
    
    To prevent that from happening, add a validation_count threashold.
    When it is reached, the validation_count can no longer be
    incremented/decremented to invalidate the table descriptor (means
    preventing table unmappings)
    
    Note that code added in acpi_tb_put_table() is actually a no-op but
    changes the warning message into a "warn once" one. Lv Zheng.
    Signed-off-by: NLv Zheng <lv.zheng@intel.com>
    [ rjw: Changelog, comments ]
    Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
    83848fbe
tbutils.c 14.6 KB