Hi, You are correct, the parameters received in the driver are allocated in devargs_list (char *params variable). However, they already get strdup'd in rte_kvargs_parse(). This newly allocated string is part of kvlist and never freed up. The params variable is never used again so it can be freed by someone else using free_devargs_list(). I'd say it's safe enough to set up pointers in the way it's currently done.
Nico. On 2014-09-29 15:24, Neil Horman wrote: > On Wed, Sep 10, 2014 at 05:17:05PM -0300, Nicol?s Pernas Maradei wrote: >> From: Nicol?s Pernas Maradei <nico at emutex.com> >> >> librte_pmd_pcap driver was opening the pcap/interfaces only at init >> time and >> closing them only when the port was being stopped. This behaviour >> would cause >> problems (leading to segfault) if the user closed the port 2 times. >> The first >> time the pcap/interfaces would be normally closed but libpcap would >> throw an >> error causing a segfault if the closed pcaps/interfaces were closed >> again. >> This behaviour is solved by re-openning pcaps/interfaces when the port >> is >> started (only if these weren't open already for example at init time). >> >> Signed-off-by: Nicol?s Pernas Maradei <nico at emutex.com> > > This patch assigns pointers to strings that are allocated in the > devargs_list. > Given that there exists an api interface free_devargs_list(), I'm not > sure that > whats being done here is consistently safe. It seems like you should > dup the > strings to make sure you always have the storage allocated, or find > some other > method to store the needed information. > > Neil