• Nathan Chancellor's avatar
    thermal: core: Move initial num_trips assignment before memcpy() · da198335
    Nathan Chancellor authored
    When booting a CONFIG_FORTIFY_SOURCE=y kernel compiled with a toolchain
    that supports __counted_by() (such as clang-18 and newer), there is a
    panic on boot:
    
      [    2.913770] memcpy: detected buffer overflow: 72 byte write of buffer size 0
      [    2.920834] WARNING: CPU: 2 PID: 1 at lib/string_helpers.c:1027 __fortify_report+0x5c/0x74
      ...
      [    3.039208] Call trace:
      [    3.041643]  __fortify_report+0x5c/0x74
      [    3.045469]  __fortify_panic+0x18/0x20
      [    3.049209]  thermal_zone_device_register_with_trips+0x4c8/0x4f8
    
    This panic occurs because trips is counted by num_trips but num_trips is
    assigned after the call to memcpy(), so the fortify checks think the
    buffer size is zero because tz was allocated with kzalloc().
    
    Move the num_trips assignment before the memcpy() to resolve the panic
    and ensure that the fortify checks work properly.
    
    Fixes: 9b0a6275 ("thermal: core: Store zone trips table in struct thermal_zone_device")
    Signed-off-by: default avatarNathan Chancellor <nathan@kernel.org>
    Reviewed-by: default avatarKees Cook <keescook@chromium.org>
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    da198335
thermal_core.c 42.9 KB