lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Fri, 26 Jun 2009 22:26:53 +0200 From: Robert Olsson <robert@...ur.slu.se> To: Jarek Poplawski <jarkao2@...il.com> Cc: "Paul E. McKenney" <paulmck@...ux.vnet.ibm.com>, Robert Olsson <Robert.Olsson@...a.slu.se>, Eric Dumazet <dada1@...mosbay.com>, =?ISO-8859-2?Q?Pawe=B3_Staszewski?= <pstaszewski@...are.pl>, Robert Olsson <robert.olsson@....uu.se>, Linux Network Development list <netdev@...r.kernel.org> Subject: Re: rib_trie / Fix inflate_threshold_root. Now=15 size=11 bits Yes looks like a good solution but maybe it safest to synchronize unconditionally? diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c index 012cf5a..9cb8623 100644 --- a/net/ipv4/fib_trie.c +++ b/net/ipv4/fib_trie.c @@ -1028,8 +1028,11 @@ static void trie_rebalance(struct trie *t, struct tnode *tn) } /* Handle last (top) tnode */ - if (IS_TNODE(tn)) + if (IS_TNODE(tn)) { + /* force memory freeing after last changes */ + synchronize_rcu(); tn = (struct tnode *)resize(t, (struct tnode *)tn); + } rcu_assign_pointer(t->trie, (struct node *)tn); tnode_free_flush(); Cheers --ro Jarek Poplawski writes: > net/ipv4/fib_trie.c | 8 ++++++-- > 1 files changed, 6 insertions(+), 2 deletions(-) > > diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c > index 012cf5a..98b31a1 100644 > --- a/net/ipv4/fib_trie.c > +++ b/net/ipv4/fib_trie.c > @@ -1008,7 +1008,7 @@ static void trie_rebalance(struct trie *t, struct tnode *tn) > { > int wasfull; > t_key cindex, key; > - struct tnode *tp; > + struct tnode *tp, *oldtnode = tn; > > key = tn->key; > > @@ -1028,8 +1028,12 @@ static void trie_rebalance(struct trie *t, struct tnode *tn) > } > > /* Handle last (top) tnode */ > - if (IS_TNODE(tn)) > + if (IS_TNODE(tn)) { > + /* force memory freeing after last changes */ > + if (oldtnode != tn) > + synchronize_rcu(); > tn = (struct tnode *)resize(t, (struct tnode *)tn); > + } > > rcu_assign_pointer(t->trie, (struct node *)tn); > tnode_free_flush(); > -- > To unsubscribe from this list: send the line "unsubscribe netdev" in > the body of a message to majordomo@...r.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists