• Tanu Malhotra's avatar
    HID: intel-ish-hid: Fix kernel panic during warm reset · 38518593
    Tanu Malhotra authored
    During warm reset device->fw_client is set to NULL. If a bus driver is
    registered after this NULL setting and before new firmware clients are
    enumerated by ISHTP, kernel panic will result in the function
    ishtp_cl_bus_match(). This is because of reference to
    device->fw_client->props.protocol_name.
    
    ISH firmware after getting successfully loaded, sends a warm reset
    notification to remove all clients from the bus and sets
    device->fw_client to NULL. Until kernel v5.15, all enabled ISHTP kernel
    module drivers were loaded right after any of the first ISHTP device was
    registered, regardless of whether it was a matched or an unmatched
    device. This resulted in all drivers getting registered much before the
    warm reset notification from ISH.
    
    Starting kernel v5.16, this issue got exposed after the change was
    introduced to load only bus drivers for the respective matching devices.
    In this scenario, cros_ec_ishtp device and cros_ec_ishtp driver are
    registered after the warm reset device fw_client NULL setting.
    cros_ec_ishtp driver_register() triggers the callback to
    ishtp_cl_bus_match() to match ISHTP driver to the device and causes kernel
    panic in guid_equal() when dereferencing fw_client NULL pointer to get
    protocol_name.
    
    Fixes: f155dfea ("platform/x86: isthp_eclite: only load for matching devices")
    Fixes: facfe0a4 ("platform/chrome: chros_ec_ishtp: only load for matching devices")
    Fixes: 0d0cccc0 ("HID: intel-ish-hid: hid-client: only load for matching devices")
    Fixes: 44e2a58c ("HID: intel-ish-hid: fw-loader: only load for matching devices")
    Cc: <stable@vger.kernel.org> # 5.16+
    Signed-off-by: default avatarTanu Malhotra <tanu.malhotra@intel.com>
    Tested-by: default avatarShaunak Saha <shaunak.saha@intel.com>
    Acked-by: default avatarSrinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
    Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
    38518593
bus.c 23.4 KB