On 10/14/25 1:39 PM, Eelco Chaudron wrote:
>
>
> On 14 Oct 2025, at 13:12, Ilya Maximets wrote:
>
>> On 10/14/25 12:09 PM, Kevin Traynor via dev wrote:
>>> On 14/10/2025 10:15, Eelco Chaudron wrote:
>>>>
>>>>
>>>> On 14 Oct 2025, at 11:11, Kevin Traynor wrote:
>>>>
>>>>> On 13/10/2025 13:32, Eelco Chaudron via dev wrote:
>>>>>> This patch fixes a potential null pointer dereference reported
>>>>>> by Coverity if an null actions list is passed to nl_attr_get()
>>>>>> in odp_execute_sample().
>>>>>>
>>>>>> Fixes: 26c6b6cd2b2e ("dpif-netdev: Implement OVS_ACTION_ATTR_SAMPLE
>>>>>> action.")
>>>>>> Signed-off-by: Eelco Chaudron <[email protected]>
>>>>>> ---
>>>>>> v2: Actually check for the actions non-null
>>>>>> ---
>>>>>> lib/odp-execute.c | 7 +++++++
>>>>>> 1 file changed, 7 insertions(+)
>>>>>>
>>>>>> diff --git a/lib/odp-execute.c b/lib/odp-execute.c
>>>>>> index 7f4e337f8..8943db2a5 100644
>>>>>> --- a/lib/odp-execute.c
>>>>>> +++ b/lib/odp-execute.c
>>>>>> @@ -739,6 +739,13 @@ odp_execute_sample(void *dp, struct dp_packet
>>>>>> *packet, bool steal,
>>>>>> }
>>>>>> }
>>>>>>
>>>>>> + if (!subactions || !nl_attr_get_size(subactions)) {
>>>>>> + if (steal) {
>>>>>> + dp_packet_delete(packet);
>>>>>
>>>>> Seems like it needs the coverage counter increased here as well
>>>>>
>>>>> COVERAGE_INC(datapath_drop_sample_error);
>>>>
>>>> Good catch, I can fold that in when applying. I’ll wait a bit longer
>>>> to see if any other comments come in.
>>
>> FWIW, the original datapath_drop_sample_error makes no sense as is not
>> an error to drop a packet based on probability, it's just how the action
>> works. I'd say this counter shouldn't have existed. But it is suitable
>> for this new condition, which is actually an error if there are no
>> actions in the sample. At the same time if the action list exists, but
>> it is empty, I'm not sure that qualifies as error, it can be a normal
>> condition.
>>
>> Best regards, Ilya Maximets.
>
> Ok, I added the !nl_attr_get_size(subactions) as an optimization to avoid
> allocating + freeing the packet without any actions. Maybe we should remove
> it, and only cover the error case?
>
> + if (!subactions) {
> + if (steal) {
> + dp_packet_delete(packet);
> + }
> + COVERAGE_INC(datapath_drop_sample_error);
> + return;
> + }
> +
>
> WDYT?
Looks fine, but we should probably move the counter under the if statement,
as we shouldn't count this as a packet drop if it's not.
>
>>> ok, thanks. With coverage counter,
>>>
>>> Acked-by: Kevin Traynor <[email protected]>
>>>
>>>> Thanks,
>>>>
>>>> Eelco
>>>>
>>>>>> + }
>>>>>> + return;
>>>>>> + }
>>>>>> +
>>>>>> if (!steal) {
>>>>>> /* The 'subactions' may modify the packet, but the modification
>>>>>> * should not propagate beyond this sample action. Make a copy
>>>>
>>>
>>> _______________________________________________
>>> dev mailing list
>>> [email protected]
>>> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev