On 14 Oct 2025, at 14:09, Ilya Maximets wrote:
> 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.
Yes, you are right!
>>>> 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