[lvc-project] [PATCH net] liquidio: check other_oct before dereferencing
Alexey V. Vissarionov
gremlin at altlinux.org
Mon May 5 06:00:22 MSK 2025
Good ${greeting_time}!
On 2025-04-30 13:46:54 -0700, Jacob Keller wrote:
>> get_other_octeon_device() may return NULL; avoid dereferencing
>> the other_oct pointer in that case.
>> @@ -796,10 +796,11 @@ static int liquidio_watchdog(void *param)
>>
>> #ifdef CONFIG_MODULE_UNLOAD
>> vfs_mask1 =
>> READ_ONCE(oct->sriov_info.vf_drv_loaded_mask);
>> - vfs_mask2 =
>> READ_ONCE(other_oct->sriov_info.vf_drv_loaded_mask);
>> -
>> - vfs_referencing_pf = hweight64(vfs_mask1);
>> - vfs_referencing_pf += hweight64(vfs_mask2);
>> + vfs_referencing_pf = hweight64(vfs_mask1);
>> + if (other_oct) {
>> + vfs_mask2 =
>> READ_ONCE(other_oct->sriov_info.vf_drv_loaded_mask);
>> + vfs_referencing_pf += hweight64(vfs_mask2);
>> + }
> Obviously crashing when other_oct is NULL is bad..
Yes, even if this happens only when attempting to unload the
module.
> But is it ok to proceed when it is NULL? Is leaving out the
> counts ok? I guess I don't really understand what other_oct
> actually represents here.
As I can see, the vf_drv_loaded_mask is a bitmap containing
the flags for all existing virtual functions of all devices.
So, if there's no other device, its' functions are missing
and marked as unavailable in the vf_drv_loaded_mask.
--
Alexey V. Vissarionov
gremlin ПРИ altlinux ТЧК org; +vii-cmiii-ccxxix-lxxix-xlii
GPG: 0D92F19E1C0DC36E27F61A29CD17E2B43D879005 @ hkp://keys.gnupg.net
More information about the lvc-project
mailing list