Hi Ben, If we keep this fix as is can we please have it backported all the way to and including branch-2.10? Right now it's there in master and branch 2.12.
ovn-nbctl daemon mode is available since branch-2.10 and might be affected by this leak as it creates new entries in the database. Thanks, Dumitru On Mon, Jul 22, 2019 at 9:58 AM Damijan Skvarc <damjan.skv...@gmail.com> wrote: > > Hi Dumitru, > > The problem is that ovsdb_idl entity is part of library and can be used by > different application, where each application > instantiates its own parse/unparse callback functions. Library itself does > not know how these parse/unparse functions are > implemented thus it is not reliable to call unparse() function without > calling apparent parse() function first. This case > happens in case the application modifies one column, while common parse flag > insinuates unparse() > function of some another column is called. The most problematic case are > parse/unparse pairs where parse() > function allocates memory and its unparse() counterpart deallocates it. > Common parse flag would in this case cause some > memory would be freed despite it has not been allocated or even worse, some > memory could be deallocated multiple times. > I strongly believe this would lead soon or later to the application crash. > > However, since I am just a self-invited visitor on this project (just to > gain/discover some practices on github platform) you should > not rely on my opinion. Ben looks to be a moderator/architect of this project > and he should advice how to precede with this issue. > > regards, > Damijan > > > On Fri, Jul 19, 2019 at 10:12 AM Dumitru Ceara <dce...@redhat.com> wrote: >> >> Hi Damijan, Ben, >> >> Damijan, sorry, I didn't realize you had already reported and fixed >> the problem in your pending pull request. I wouldn't have sent my >> patch otherwise. >> >> Regarding a single parsed field instead of parsed bits per column I >> had the impression that it's ok if unparsing is done for all columns. >> Right now, whenever we set a column we call ovsdb_idl_txn_write__() >> which unconditionally executes "(column->unparse)(row)" even if there >> was no old value set before parsing the new datum. As we zero out rows >> when we allocate them I assumed that this unparsing is safe. >> >> What do you guys think? >> >> Thanks, >> Dumitru >> >> On Fri, Jul 19, 2019 at 4:50 AM Damijan Skvarc <damjan.skv...@gmail.com> >> wrote: >> > >> > https://mail.openvswitch.org/pipermail/ovs-dev/2019-July/360285.htmlhttps://mail.openvswitch.org/pipermail/ovs-dev/2019-July/360285.html >> > >> > On Thu, 18 Jul 2019, 20:12 Ben Pfaff, <b...@ovn.org> wrote: >> >> >> >> I guess I missed it. Will you please point it out to me, for example in >> >> the list archive? >> >> >> >> On Thu, Jul 18, 2019 at 06:58:34PM +0200, Damijan Skvarc wrote: >> >> > Hmm, the problem of "parsed" flag is that it identifies "all" columns of >> >> > certain row have been parsed, however there are CLI tools which modify >> >> > only >> >> > individual colums by calling ovsdb_idl_txn_write_() function. In this >> >> > case >> >> > and in case parsed flag would be set in ovsdb_idl_txn_write() function >> >> > then >> >> > unparsing procedure would be called also for columns which were not >> >> > parsed. >> >> > The problem could be overcome by having individual flag for each column. >> >> > This has been addresed in pending pull request. Apparent mail has been >> >> > sent >> >> > to dev list, but obviosly has been somehow overlooked. >> >> > br, damijan >> >> > >> >> > On Thu, 18 Jul 2019, 17:52 Ben Pfaff, <b...@ovn.org> wrote: >> >> > >> >> > > On Wed, Jul 17, 2019 at 09:05:04PM +0200, Dumitru Ceara wrote: >> >> > > > Once a column is set in a row using ovsdb_idl_txn_write__ we also >> >> > > > mark >> >> > > > the row "parsed". Otherwise the memory allocated by >> >> > > > sbrec_<table>_parse_<col>() will never be freed. After marking the >> >> > > > row >> >> > > > "parsed", the ovsdb_idl_txn_disassemble function will properly free >> >> > > > the >> >> > > > newly allocated memory for the column (ovsdb_idl_row_unparse). >> >> > > >> >> > > Wow, good catch. I bet that's been there forever. >> >> > > >> >> > > The OVSDB IDL code is too complicated. It's too hard to spot the >> >> > > issues. I wish I saw a way to make it simpler. >> >> > > _______________________________________________ >> >> > > dev mailing list >> >> > > d...@openvswitch.org >> >> > > https://mail.openvswitch.org/mailman/listinfo/ovs-dev >> >> > > _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev