From 90c587408f39de42b7d3599fc7742668048e70e1 Mon Sep 17 00:00:00 2001 From: Eric Farman Date: Fri, 6 Oct 2023 17:24:00 +0200 Subject: [PATCH] cpictl: Limit kernel sublevel to one byte MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Linux stable kernels can reach greater than 256 sublevels [1], which can cause the cpi tooling to generate an invalid string that gets passed to the firmware and causes unusual responses: $ uname -r 5.4.255 $ cat /sys/firmware/cpi/system_level 0x04260000000504ff --reboot-- $ uname -r 5.4.256 $ cat /sys/firmware/cpi/system_level 0x4260000000504100 The first sublevel field is defined as one byte, so ensure that a value larger than that isn't included. [1] https://lore.kernel.org/lkml/1612534196241236@kroah.com/ Signed-off-by: Eric Farman Reviewed-by: Peter Oberparleiter Reviewed-by: Jan Höppner Signed-off-by: Jan Höppner --- scripts/cpictl | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scripts/cpictl b/scripts/cpictl index 344b6d6f..475a80f4 100755 --- a/scripts/cpictl +++ b/scripts/cpictl @@ -246,6 +246,9 @@ get_system_level() read -r k_ver k_patchlvl k_sublvl k_sublvl2 <<< "$(split_kver "$kver_str" 4)" # Handle excessive sublevel numbers consistently + if [[ "$k_sublvl" -gt 255 ]] ; then + k_sublvl=0 + fi if [[ "$k_sublvl2" -gt 65535 ]] ; then k_sublvl2=0 fi