Messages in this thread | | | Subject | Re: [PATCH] ipv4: only allow increasing fib_info_hash_size | From | David Ahern <> | Date | Tue, 12 Oct 2021 07:55:24 -0600 |
| |
On 10/12/21 5:06 AM, zhang kai wrote: > and when failed to allocate memory, check fib_info_hash_size.
what problem are you trying to solve?
> > Signed-off-by: zhang kai <zhangkaiheb@126.com> > --- > net/ipv4/fib_semantics.c | 25 ++++++++++++++----------- > 1 file changed, 14 insertions(+), 11 deletions(-) > > diff --git a/net/ipv4/fib_semantics.c b/net/ipv4/fib_semantics.c > index a632b66bc..7547708a9 100644 > --- a/net/ipv4/fib_semantics.c > +++ b/net/ipv4/fib_semantics.c > @@ -1403,17 +1403,20 @@ struct fib_info *fib_create_info(struct fib_config *cfg, > > if (!new_size) > new_size = 16; > - bytes = new_size * sizeof(struct hlist_head *); > - new_info_hash = fib_info_hash_alloc(bytes); > - new_laddrhash = fib_info_hash_alloc(bytes); > - if (!new_info_hash || !new_laddrhash) { > - fib_info_hash_free(new_info_hash, bytes); > - fib_info_hash_free(new_laddrhash, bytes); > - } else > - fib_info_hash_move(new_info_hash, new_laddrhash, new_size); > - > - if (!fib_info_hash_size) > - goto failure; > + > + if (new_size > fib_info_hash_size) { > + bytes = new_size * sizeof(struct hlist_head *); > + new_info_hash = fib_info_hash_alloc(bytes); > + new_laddrhash = fib_info_hash_alloc(bytes); > + if (!new_info_hash || !new_laddrhash) { > + fib_info_hash_free(new_info_hash, bytes); > + fib_info_hash_free(new_laddrhash, bytes); > + > + if (!fib_info_hash_size) > + goto failure; > + } else > + fib_info_hash_move(new_info_hash, new_laddrhash, new_size); > + } > } > > fi = kzalloc(struct_size(fi, fib_nh, nhs), GFP_KERNEL); >
| |