On 1/23/2024 2:59 PM, Ferruh Yigit wrote: > On 1/23/2024 12:07 PM, Power, Ciara wrote: >> Hi Ferruh, >> >>> -----Original Message----- >>> From: Ferruh Yigit <[email protected]> >>> Sent: Friday, January 19, 2024 2:51 PM >>> To: Sivaramakrishnan, VenkatX <[email protected]>; Igor >>> Russkikh <[email protected]>; Selwin Sebastian >>> <[email protected]>; Ajit Khaparde >>> <[email protected]>; Somnath Kotur >>> <[email protected]>; Nithin Dabilpuram >>> <[email protected]>; Kiran Kumar K <[email protected]>; >>> Sunil Kumar Kori <[email protected]>; Satha Rao >>> <[email protected]>; Zhang, Yuying <[email protected]>; Xing, >>> Beilei <[email protected]>; Rahul Lakkireddy >>> <[email protected]>; Hemant Agrawal >>> <[email protected]>; Sachin Saxena <[email protected]>; Su, >>> Simei <[email protected]>; Wu, Wenjun1 <[email protected]>; >>> Gagandeep Singh <[email protected]>; John Daley <[email protected]>; >>> Hyong Youb Kim <[email protected]>; Gaetan Rivet <[email protected]>; >>> Zhang, Qi Z <[email protected]>; Wang, Xiao W <[email protected]>; >>> Jie Hai <[email protected]>; Yisen Zhuang <[email protected]>; >>> Wu, Jingjing <[email protected]>; Yang, Qiming >>> <[email protected]>; Guo, Junfeng <[email protected]>; Andrew >>> Boyer <[email protected]>; Long Li <[email protected]>; Matan >>> Azrad <[email protected]>; Viacheslav Ovsiienko <[email protected]>; >>> Dariusz Sosnowski <[email protected]>; Ori Kam <[email protected]>; >>> Suanming Mou <[email protected]>; Chaoyong He >>> <[email protected]>; Jiawen Wu <[email protected]>; >>> Harman Kalra <[email protected]>; Devendra Singh Rawat >>> <[email protected]>; Alok Prasad <[email protected]>; Andrew >>> Rybchenko <[email protected]>; Jerin Jacob >>> <[email protected]>; Maciej Czekaj <[email protected]>; Jian Wang >>> <[email protected]>; Behrens, Jochen <[email protected]>; >>> Thomas Monjalon <[email protected]> >>> Cc: [email protected]; Power, Ciara <[email protected]> >>> Subject: Re: [PATCH v5 2/2] drivers/net: return number of types in get >>> supported types >>> >>> On 1/18/2024 12:07 PM, Sivaramakrishnan Venkat wrote: >>>> Missing "RTE_PTYPE_UNKNOWN" ptype causes buffer overflow. >>>> Enhance code such that the dev_supported_ptypes_get() function pointer >>>> now returns the number of elements to eliminate the need for >>>> "RTE_PTYPE_UNKNOWN" as the last item. >>>> >>>> Signed-off-by: Sivaramakrishnan Venkat >>>> <[email protected]> >>>> >>>> -- >>>> v5: >>>> - modified commit message. >>>> - tidied formatting of code. >>>> - added doxygen comment. >>>> v4: >>>> - split into two patches, one for backporting and another one for >>>> upstream rework. >>>> v3: >>>> - reworked the function to return number of elements and remove the >>>> need for RTE_PTYPE_UNKNOWN in list. >>>> v2: >>>> - extended fix for multiple drivers. >>>> --- >>> >>> <...> >>> >>>> 59 files changed, 188 insertions(+), 141 deletions(-) >>>> >>> >>> Some driver still have the flag: >>> - drivers/net/mvneta/mvneta_ethdev.c >>> - drivers/net/mvpp2/mrvl_ethdev.c >>> - pfe >>> - dpaa >>> - drivers/net/thunderx/nicvf_ethdev.c >>> - drivers/net/nfp/nfp_net_common.c >>> >>> Above seems the ones updated in previous patch, flags added in previous >>> patch should be removed in this one. >>> >>> >>> And following seems missed and still has the flag: >>> >>> - drivers/net/ngbe/ngbe_ptypes.c >>> >>> <...> >>> >>>> @@ -3971,9 +3975,6 @@ rte_eth_dev_set_ptypes(uint16_t port_id, >>> uint32_t ptype_mask, >>>> } >>>> } >>>> >>>> - if (set_ptypes != NULL && j < num) >>>> - set_ptypes[j] = RTE_PTYPE_UNKNOWN; >>>> - >>>> >>> >>> This change is new in this version and not mentioned in the changelog. >>> >>> 'rte_eth_dev_set_ptypes()' returns 'set_ptypes' that terminated with >>> 'RTE_PTYPE_UNKNOWN', this is how that API works. >>> Why changing it in this patch? >> >> Apologies, yes, we missed this in the changelog. >> >> For the change itself, if we are removing the need for RTE_PTYPE_UNKNOWN in >> the supported ptypes lists to mark the last element, do we still need to add >> it here when setting ptypes list? >> Maybe a misunderstanding on my part - I thought it would be the same for >> both cases. >> >> > > They are two different APIs, and 'rte_eth_dev_set_ptypes()' returns > ptypes to user that will be terminated by RTE_PTYPE_UNKNOWN, so to not > break the user code we can't change it. >
A little more details if helps: 'rte_eth_dev_get_supported_ptypes()', fills the '*ptypes' and function return value is number of elements in the '*ptypes' array. There is no requirement that last element of '*ptypes' will be 'RTE_PTYPE_UNKNOWN', and if you check the current implementation, it is not. 'rte_eth_dev_set_ptypes()', fills the '*set_ptypes' array and function return value is function success status. User can deduce the size of '*set_ptypes' by 'RTE_PTYPE_UNKNOWN' marker at the end of the array. Requirement is last element should be 'RTE_PTYPE_UNKNOWN', and this documented in API. We are preserving above API behavior and only changing ethdev - driver interface.

