• Kees Cook's avatar
    bnx2x: Fix firmware version string character counts · 5642c82b
    Kees Cook authored
    A potential string truncation was reported in bnx2x_fill_fw_str(),
    when a long bp->fw_ver and a long phy_fw_ver might coexist, but seems
    unlikely with real-world hardware.
    
    Use scnprintf() to indicate the intent that truncations are tolerated.
    
    While reading this code, I found a collection of various buffer size
    counting issues. None looked like they might lead to a buffer overflow
    with current code (the small buffers are 20 bytes and might only ever
    consume 10 bytes twice with a trailing %NUL). However, early truncation
    (due to a %NUL in the middle of the string) might be happening under
    likely rare conditions. Regardless fix the formatters and related
    functions:
    
    - Switch from a separate strscpy() to just adding an additional "%s" to
      the format string that immediately follows it in bnx2x_fill_fw_str().
    - Use sizeof() universally instead of using unbound defines.
    - Fix bnx2x_7101_format_ver() and bnx2x_null_format_ver() to report the
      number of characters written, not including the trailing %NUL (as
      already done with the other firmware formatting functions).
    - Require space for at least 1 byte in bnx2x_get_ext_phy_fw_version()
      for the trailing %NUL.
    - Correct the needed buffer size in bnx2x_3_seq_format_ver().
    Reported-by: default avatarkernel test robot <lkp@intel.com>
    Closes: https://lore.kernel.org/oe-kbuild-all/202401260858.jZN6vD1k-lkp@intel.com/
    Cc: Ariel Elior <aelior@marvell.com>
    Cc: Sudarsana Kalluru <skalluru@marvell.com>
    Cc: Manish Chopra <manishc@marvell.com>
    Signed-off-by: default avatarKees Cook <keescook@chromium.org>
    Link: https://lore.kernel.org/r/20240126041044.work.220-kees@kernel.orgSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    5642c82b
bnx2x_cmn.c 136 KB