* [PATCH] ipv4: fib: Fix fib_info_hash_alloc() allocation type
@ 2025-04-26 6:05 Kees Cook
2025-04-28 20:01 ` Simon Horman
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Kees Cook @ 2025-04-26 6:05 UTC (permalink / raw)
To: David S. Miller
Cc: Kees Cook, David Ahern, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Simon Horman, netdev, linux-kernel, linux-hardening
In preparation for making the kmalloc family of allocators type aware,
we need to make sure that the returned type from the allocation matches
the type of the variable being assigned. (Before, the allocator would
always return "void *", which can be implicitly cast to any pointer type.)
This was allocating many sizeof(struct hlist_head *) when it actually
wanted sizeof(struct hlist_head). Luckily these are the same size.
Adjust the allocation type to match the assignment.
Signed-off-by: Kees Cook <kees@kernel.org>
---
Cc: "David S. Miller" <davem@davemloft.net>
Cc: David Ahern <dsahern@kernel.org>
Cc: Eric Dumazet <edumazet@google.com>
Cc: Jakub Kicinski <kuba@kernel.org>
Cc: Paolo Abeni <pabeni@redhat.com>
Cc: Simon Horman <horms@kernel.org>
Cc: <netdev@vger.kernel.org>
---
net/ipv4/fib_semantics.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/net/ipv4/fib_semantics.c b/net/ipv4/fib_semantics.c
index f68bb9e34c34..37d12b0bc6be 100644
--- a/net/ipv4/fib_semantics.c
+++ b/net/ipv4/fib_semantics.c
@@ -365,7 +365,7 @@ static struct hlist_head *fib_info_laddrhash_bucket(const struct net *net,
static struct hlist_head *fib_info_hash_alloc(unsigned int hash_bits)
{
/* The second half is used for prefsrc */
- return kvcalloc((1 << hash_bits) * 2, sizeof(struct hlist_head *),
+ return kvcalloc((1 << hash_bits) * 2, sizeof(struct hlist_head),
GFP_KERNEL);
}
--
2.34.1
^ permalink raw reply related [flat|nested] 7+ messages in thread* Re: [PATCH] ipv4: fib: Fix fib_info_hash_alloc() allocation type
2025-04-26 6:05 [PATCH] ipv4: fib: Fix fib_info_hash_alloc() allocation type Kees Cook
@ 2025-04-28 20:01 ` Simon Horman
2025-04-28 22:50 ` David Ahern
2025-04-29 18:00 ` patchwork-bot+netdevbpf
2 siblings, 0 replies; 7+ messages in thread
From: Simon Horman @ 2025-04-28 20:01 UTC (permalink / raw)
To: Kees Cook
Cc: David S. Miller, David Ahern, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, netdev, linux-kernel, linux-hardening
On Fri, Apr 25, 2025 at 11:05:30PM -0700, Kees Cook wrote:
> In preparation for making the kmalloc family of allocators type aware,
> we need to make sure that the returned type from the allocation matches
> the type of the variable being assigned. (Before, the allocator would
> always return "void *", which can be implicitly cast to any pointer type.)
>
> This was allocating many sizeof(struct hlist_head *) when it actually
> wanted sizeof(struct hlist_head). Luckily these are the same size.
> Adjust the allocation type to match the assignment.
>
> Signed-off-by: Kees Cook <kees@kernel.org>
Thanks, your analysis matches my understanding of the code.
Reviewed-by: Simon Horman <horms@kernel.org>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] ipv4: fib: Fix fib_info_hash_alloc() allocation type
2025-04-26 6:05 [PATCH] ipv4: fib: Fix fib_info_hash_alloc() allocation type Kees Cook
2025-04-28 20:01 ` Simon Horman
@ 2025-04-28 22:50 ` David Ahern
2025-04-29 0:43 ` Kuniyuki Iwashima
2025-04-29 18:00 ` patchwork-bot+netdevbpf
2 siblings, 1 reply; 7+ messages in thread
From: David Ahern @ 2025-04-28 22:50 UTC (permalink / raw)
To: Kees Cook, David S. Miller
Cc: Eric Dumazet, Jakub Kicinski, Paolo Abeni, Simon Horman, netdev,
linux-kernel, linux-hardening, Kuniyuki Iwashima
On 4/25/25 11:05 PM, Kees Cook wrote:
> In preparation for making the kmalloc family of allocators type aware,
> we need to make sure that the returned type from the allocation matches
> the type of the variable being assigned. (Before, the allocator would
> always return "void *", which can be implicitly cast to any pointer type.)
>
> This was allocating many sizeof(struct hlist_head *) when it actually
> wanted sizeof(struct hlist_head). Luckily these are the same size.
> Adjust the allocation type to match the assignment.
>
> Signed-off-by: Kees Cook <kees@kernel.org>
> ---
> Cc: "David S. Miller" <davem@davemloft.net>
> Cc: David Ahern <dsahern@kernel.org>
> Cc: Eric Dumazet <edumazet@google.com>
> Cc: Jakub Kicinski <kuba@kernel.org>
> Cc: Paolo Abeni <pabeni@redhat.com>
> Cc: Simon Horman <horms@kernel.org>
> Cc: <netdev@vger.kernel.org>
> ---
> net/ipv4/fib_semantics.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/net/ipv4/fib_semantics.c b/net/ipv4/fib_semantics.c
> index f68bb9e34c34..37d12b0bc6be 100644
> --- a/net/ipv4/fib_semantics.c
> +++ b/net/ipv4/fib_semantics.c
> @@ -365,7 +365,7 @@ static struct hlist_head *fib_info_laddrhash_bucket(const struct net *net,
> static struct hlist_head *fib_info_hash_alloc(unsigned int hash_bits)
> {
> /* The second half is used for prefsrc */
> - return kvcalloc((1 << hash_bits) * 2, sizeof(struct hlist_head *),
> + return kvcalloc((1 << hash_bits) * 2, sizeof(struct hlist_head),
> GFP_KERNEL);
> }
>
Reviewed-by: David Ahern <dsahern@kernel.org>
Fixes: fa336adc100e ("ipv4: fib: Allocate fib_info_hash[] and
fib_info_laddrhash[] by kvcalloc().)
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH] ipv4: fib: Fix fib_info_hash_alloc() allocation type
2025-04-28 22:50 ` David Ahern
@ 2025-04-29 0:43 ` Kuniyuki Iwashima
2025-04-29 3:52 ` Kees Cook
0 siblings, 1 reply; 7+ messages in thread
From: Kuniyuki Iwashima @ 2025-04-29 0:43 UTC (permalink / raw)
To: dsahern
Cc: davem, edumazet, horms, kees, kuba, kuniyu, linux-hardening,
linux-kernel, netdev, pabeni
Thanks for CC me, David.
From: David Ahern <dsahern@kernel.org>
Date: Mon, 28 Apr 2025 16:50:53 -0600
> On 4/25/25 11:05 PM, Kees Cook wrote:
> > In preparation for making the kmalloc family of allocators type aware,
> > we need to make sure that the returned type from the allocation matches
> > the type of the variable being assigned. (Before, the allocator would
> > always return "void *", which can be implicitly cast to any pointer type.)
> >
> > This was allocating many sizeof(struct hlist_head *) when it actually
> > wanted sizeof(struct hlist_head). Luckily these are the same size.
> > Adjust the allocation type to match the assignment.
> >
> > Signed-off-by: Kees Cook <kees@kernel.org>
> > ---
> > Cc: "David S. Miller" <davem@davemloft.net>
> > Cc: David Ahern <dsahern@kernel.org>
> > Cc: Eric Dumazet <edumazet@google.com>
> > Cc: Jakub Kicinski <kuba@kernel.org>
> > Cc: Paolo Abeni <pabeni@redhat.com>
> > Cc: Simon Horman <horms@kernel.org>
> > Cc: <netdev@vger.kernel.org>
> > ---
> > net/ipv4/fib_semantics.c | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/net/ipv4/fib_semantics.c b/net/ipv4/fib_semantics.c
> > index f68bb9e34c34..37d12b0bc6be 100644
> > --- a/net/ipv4/fib_semantics.c
> > +++ b/net/ipv4/fib_semantics.c
> > @@ -365,7 +365,7 @@ static struct hlist_head *fib_info_laddrhash_bucket(const struct net *net,
> > static struct hlist_head *fib_info_hash_alloc(unsigned int hash_bits)
> > {
> > /* The second half is used for prefsrc */
> > - return kvcalloc((1 << hash_bits) * 2, sizeof(struct hlist_head *),
> > + return kvcalloc((1 << hash_bits) * 2, sizeof(struct hlist_head),
> > GFP_KERNEL);
> > }
> >
>
> Reviewed-by: David Ahern <dsahern@kernel.org>
>
> Fixes: fa336adc100e ("ipv4: fib: Allocate fib_info_hash[] and
> fib_info_laddrhash[] by kvcalloc().)
I agree this should target net.git as the last statement
will be false with LOCKDEP.
Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
Thanks!
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH] ipv4: fib: Fix fib_info_hash_alloc() allocation type
2025-04-29 0:43 ` Kuniyuki Iwashima
@ 2025-04-29 3:52 ` Kees Cook
2025-04-29 5:22 ` Kuniyuki Iwashima
0 siblings, 1 reply; 7+ messages in thread
From: Kees Cook @ 2025-04-29 3:52 UTC (permalink / raw)
To: Kuniyuki Iwashima, dsahern
Cc: davem, edumazet, horms, kuba, kuniyu, linux-hardening,
linux-kernel, netdev, pabeni
On April 28, 2025 5:43:05 PM PDT, Kuniyuki Iwashima <kuniyu@amazon.com> wrote:
>Thanks for CC me, David.
>
>From: David Ahern <dsahern@kernel.org>
>Date: Mon, 28 Apr 2025 16:50:53 -0600
>> On 4/25/25 11:05 PM, Kees Cook wrote:
>> > In preparation for making the kmalloc family of allocators type aware,
>> > we need to make sure that the returned type from the allocation matches
>> > the type of the variable being assigned. (Before, the allocator would
>> > always return "void *", which can be implicitly cast to any pointer type.)
>> >
>> > This was allocating many sizeof(struct hlist_head *) when it actually
>> > wanted sizeof(struct hlist_head). Luckily these are the same size.
>> > Adjust the allocation type to match the assignment.
>> >
>> > Signed-off-by: Kees Cook <kees@kernel.org>
>> > ---
>> > Cc: "David S. Miller" <davem@davemloft.net>
>> > Cc: David Ahern <dsahern@kernel.org>
>> > Cc: Eric Dumazet <edumazet@google.com>
>> > Cc: Jakub Kicinski <kuba@kernel.org>
>> > Cc: Paolo Abeni <pabeni@redhat.com>
>> > Cc: Simon Horman <horms@kernel.org>
>> > Cc: <netdev@vger.kernel.org>
>> > ---
>> > net/ipv4/fib_semantics.c | 2 +-
>> > 1 file changed, 1 insertion(+), 1 deletion(-)
>> >
>> > diff --git a/net/ipv4/fib_semantics.c b/net/ipv4/fib_semantics.c
>> > index f68bb9e34c34..37d12b0bc6be 100644
>> > --- a/net/ipv4/fib_semantics.c
>> > +++ b/net/ipv4/fib_semantics.c
>> > @@ -365,7 +365,7 @@ static struct hlist_head *fib_info_laddrhash_bucket(const struct net *net,
>> > static struct hlist_head *fib_info_hash_alloc(unsigned int hash_bits)
>> > {
>> > /* The second half is used for prefsrc */
>> > - return kvcalloc((1 << hash_bits) * 2, sizeof(struct hlist_head *),
>> > + return kvcalloc((1 << hash_bits) * 2, sizeof(struct hlist_head),
>> > GFP_KERNEL);
>> > }
>> >
>>
>> Reviewed-by: David Ahern <dsahern@kernel.org>
>>
>> Fixes: fa336adc100e ("ipv4: fib: Allocate fib_info_hash[] and
>> fib_info_laddrhash[] by kvcalloc().)
>
>I agree this should target net.git as the last statement
>will be false with LOCKDEP.
Which will be false with lockdep? Unless I'm missing it, I think hlist_head is always pointer sized:
struct hlist_head {
struct hlist_node *first;
};
>
>Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
Thanks!
--
Kees Cook
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH] ipv4: fib: Fix fib_info_hash_alloc() allocation type
2025-04-29 3:52 ` Kees Cook
@ 2025-04-29 5:22 ` Kuniyuki Iwashima
0 siblings, 0 replies; 7+ messages in thread
From: Kuniyuki Iwashima @ 2025-04-29 5:22 UTC (permalink / raw)
To: kees
Cc: davem, dsahern, edumazet, horms, kuba, kuniyu, linux-hardening,
linux-kernel, netdev, pabeni
From: Kees Cook <kees@kernel.org>
Date: Mon, 28 Apr 2025 20:52:59 -0700
> On April 28, 2025 5:43:05 PM PDT, Kuniyuki Iwashima <kuniyu@amazon.com> wrote:
> >Thanks for CC me, David.
> >
> >From: David Ahern <dsahern@kernel.org>
> >Date: Mon, 28 Apr 2025 16:50:53 -0600
> >> On 4/25/25 11:05 PM, Kees Cook wrote:
> >> > In preparation for making the kmalloc family of allocators type aware,
> >> > we need to make sure that the returned type from the allocation matches
> >> > the type of the variable being assigned. (Before, the allocator would
> >> > always return "void *", which can be implicitly cast to any pointer type.)
> >> >
> >> > This was allocating many sizeof(struct hlist_head *) when it actually
> >> > wanted sizeof(struct hlist_head). Luckily these are the same size.
> >> > Adjust the allocation type to match the assignment.
> >> >
> >> > Signed-off-by: Kees Cook <kees@kernel.org>
> >> > ---
> >> > Cc: "David S. Miller" <davem@davemloft.net>
> >> > Cc: David Ahern <dsahern@kernel.org>
> >> > Cc: Eric Dumazet <edumazet@google.com>
> >> > Cc: Jakub Kicinski <kuba@kernel.org>
> >> > Cc: Paolo Abeni <pabeni@redhat.com>
> >> > Cc: Simon Horman <horms@kernel.org>
> >> > Cc: <netdev@vger.kernel.org>
> >> > ---
> >> > net/ipv4/fib_semantics.c | 2 +-
> >> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >> >
> >> > diff --git a/net/ipv4/fib_semantics.c b/net/ipv4/fib_semantics.c
> >> > index f68bb9e34c34..37d12b0bc6be 100644
> >> > --- a/net/ipv4/fib_semantics.c
> >> > +++ b/net/ipv4/fib_semantics.c
> >> > @@ -365,7 +365,7 @@ static struct hlist_head *fib_info_laddrhash_bucket(const struct net *net,
> >> > static struct hlist_head *fib_info_hash_alloc(unsigned int hash_bits)
> >> > {
> >> > /* The second half is used for prefsrc */
> >> > - return kvcalloc((1 << hash_bits) * 2, sizeof(struct hlist_head *),
> >> > + return kvcalloc((1 << hash_bits) * 2, sizeof(struct hlist_head),
> >> > GFP_KERNEL);
> >> > }
> >> >
> >>
> >> Reviewed-by: David Ahern <dsahern@kernel.org>
> >>
> >> Fixes: fa336adc100e ("ipv4: fib: Allocate fib_info_hash[] and
> >> fib_info_laddrhash[] by kvcalloc().)
> >
> >I agree this should target net.git as the last statement
> >will be false with LOCKDEP.
>
> Which will be false with lockdep? Unless I'm missing it, I think hlist_head is always pointer sized:
Oh sorry, now I'm not sure why I mentioned lockdep...
maybe confused with other code :/
>
> struct hlist_head {
> struct hlist_node *first;
> };
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] ipv4: fib: Fix fib_info_hash_alloc() allocation type
2025-04-26 6:05 [PATCH] ipv4: fib: Fix fib_info_hash_alloc() allocation type Kees Cook
2025-04-28 20:01 ` Simon Horman
2025-04-28 22:50 ` David Ahern
@ 2025-04-29 18:00 ` patchwork-bot+netdevbpf
2 siblings, 0 replies; 7+ messages in thread
From: patchwork-bot+netdevbpf @ 2025-04-29 18:00 UTC (permalink / raw)
To: Kees Cook
Cc: davem, dsahern, edumazet, kuba, pabeni, horms, netdev,
linux-kernel, linux-hardening
Hello:
This patch was applied to netdev/net-next.git (main)
by Jakub Kicinski <kuba@kernel.org>:
On Fri, 25 Apr 2025 23:05:30 -0700 you wrote:
> In preparation for making the kmalloc family of allocators type aware,
> we need to make sure that the returned type from the allocation matches
> the type of the variable being assigned. (Before, the allocator would
> always return "void *", which can be implicitly cast to any pointer type.)
>
> This was allocating many sizeof(struct hlist_head *) when it actually
> wanted sizeof(struct hlist_head). Luckily these are the same size.
> Adjust the allocation type to match the assignment.
>
> [...]
Here is the summary with links:
- ipv4: fib: Fix fib_info_hash_alloc() allocation type
https://git.kernel.org/netdev/net-next/c/fca6170f5a03
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2025-04-29 17:59 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-04-26 6:05 [PATCH] ipv4: fib: Fix fib_info_hash_alloc() allocation type Kees Cook
2025-04-28 20:01 ` Simon Horman
2025-04-28 22:50 ` David Ahern
2025-04-29 0:43 ` Kuniyuki Iwashima
2025-04-29 3:52 ` Kees Cook
2025-04-29 5:22 ` Kuniyuki Iwashima
2025-04-29 18:00 ` patchwork-bot+netdevbpf
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).