arch/x86/events/rapl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
Replace sizeof() with struct_size() to avoid potential integer
or heap overflow.
Also, address the following sparse warnings:
arch/x86/events/rapl.c:685:16: warning: using sizeof on a
flexible structure
Signed-off-by: Lin Yujun <linyujun809@huawei.com>
---
arch/x86/events/rapl.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/x86/events/rapl.c b/arch/x86/events/rapl.c
index 77e3a47af5ad..c7e79f0ac04f 100644
--- a/arch/x86/events/rapl.c
+++ b/arch/x86/events/rapl.c
@@ -685,7 +685,7 @@ static int __init init_rapl_pmus(void)
int maxdie = topology_max_packages() * topology_max_die_per_package();
size_t size;
- size = sizeof(*rapl_pmus) + maxdie * sizeof(struct rapl_pmu *);
+ size = struct_size(rapl_pmus, pmus, maxdie);
rapl_pmus = kzalloc(size, GFP_KERNEL);
if (!rapl_pmus)
return -ENOMEM;
--
2.17.1
On Wed, May 18, 2022 at 09:16:26PM +0800, Lin Yujun wrote: > Replace sizeof() with struct_size() to avoid potential integer > or heap overflow. This is not exactly what the patch does. Your patch is replacing the open-coded calculation of the total amount of memory to be allocated for rapl_pmus with struct_size(). > > Also, address the following sparse warnings: > arch/x86/events/rapl.c:685:16: warning: using sizeof on a > flexible structure This does not address this warning because struct_size() still make use of sizeof on the struct-with-flex-array, internally. So, the mention to the sparse warning should be removed from this changelog text. > > Signed-off-by: Lin Yujun <linyujun809@huawei.com> > --- > arch/x86/events/rapl.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/arch/x86/events/rapl.c b/arch/x86/events/rapl.c > index 77e3a47af5ad..c7e79f0ac04f 100644 > --- a/arch/x86/events/rapl.c > +++ b/arch/x86/events/rapl.c > @@ -685,7 +685,7 @@ static int __init init_rapl_pmus(void) > int maxdie = topology_max_packages() * topology_max_die_per_package(); > size_t size; > > - size = sizeof(*rapl_pmus) + maxdie * sizeof(struct rapl_pmu *); > + size = struct_size(rapl_pmus, pmus, maxdie); > rapl_pmus = kzalloc(size, GFP_KERNEL); It seems that in this case, size could be entirely replaced by struct_size(). Thanks -- Gustavo
Thank you for your suggestion. I will modify the patch according to your suggestion and make the v2 version. Thanks -- LinYujun 在 2022/5/18 21:49, Gustavo A. R. Silva 写道: > On Wed, May 18, 2022 at 09:16:26PM +0800, Lin Yujun wrote: >> Replace sizeof() with struct_size() to avoid potential integer >> or heap overflow. > This is not exactly what the patch does. > > Your patch is replacing the open-coded calculation of the total amount > of memory to be allocated for rapl_pmus with struct_size(). > >> Also, address the following sparse warnings: >> arch/x86/events/rapl.c:685:16: warning: using sizeof on a >> flexible structure > This does not address this warning because struct_size() > still make use of sizeof on the struct-with-flex-array, > internally. > > So, the mention to the sparse warning should be removed from > this changelog text. > >> Signed-off-by: Lin Yujun <linyujun809@huawei.com> >> --- >> arch/x86/events/rapl.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/arch/x86/events/rapl.c b/arch/x86/events/rapl.c >> index 77e3a47af5ad..c7e79f0ac04f 100644 >> --- a/arch/x86/events/rapl.c >> +++ b/arch/x86/events/rapl.c >> @@ -685,7 +685,7 @@ static int __init init_rapl_pmus(void) >> int maxdie = topology_max_packages() * topology_max_die_per_package(); >> size_t size; >> >> - size = sizeof(*rapl_pmus) + maxdie * sizeof(struct rapl_pmu *); >> + size = struct_size(rapl_pmus, pmus, maxdie); >> rapl_pmus = kzalloc(size, GFP_KERNEL); > It seems that in this case, size could be entirely replaced by > struct_size(). > > Thanks > -- > Gustavo > .
On Wed, May 18, 2022 at 08:49:20AM -0500, Gustavo A. R. Silva wrote: > > Signed-off-by: Lin Yujun <linyujun809@huawei.com> > > --- > > arch/x86/events/rapl.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/arch/x86/events/rapl.c b/arch/x86/events/rapl.c > > index 77e3a47af5ad..c7e79f0ac04f 100644 > > --- a/arch/x86/events/rapl.c > > +++ b/arch/x86/events/rapl.c > > @@ -685,7 +685,7 @@ static int __init init_rapl_pmus(void) > > int maxdie = topology_max_packages() * topology_max_die_per_package(); > > size_t size; > > > > - size = sizeof(*rapl_pmus) + maxdie * sizeof(struct rapl_pmu *); > > + size = struct_size(rapl_pmus, pmus, maxdie); > > rapl_pmus = kzalloc(size, GFP_KERNEL); > > It seems that in this case, size could be entirely replaced by > struct_size(). Except every time I look at struct_size() I go: WTF does that do; while the code as-is is crystal clear, no de-obfucstaion required.
On Wed, May 18, 2022 at 03:55:00PM +0200, Peter Zijlstra wrote: > On Wed, May 18, 2022 at 08:49:20AM -0500, Gustavo A. R. Silva wrote: > > > > Signed-off-by: Lin Yujun <linyujun809@huawei.com> > > > --- > > > arch/x86/events/rapl.c | 2 +- > > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > > > diff --git a/arch/x86/events/rapl.c b/arch/x86/events/rapl.c > > > index 77e3a47af5ad..c7e79f0ac04f 100644 > > > --- a/arch/x86/events/rapl.c > > > +++ b/arch/x86/events/rapl.c > > > @@ -685,7 +685,7 @@ static int __init init_rapl_pmus(void) > > > int maxdie = topology_max_packages() * topology_max_die_per_package(); > > > size_t size; > > > > > > - size = sizeof(*rapl_pmus) + maxdie * sizeof(struct rapl_pmu *); > > > + size = struct_size(rapl_pmus, pmus, maxdie); > > > rapl_pmus = kzalloc(size, GFP_KERNEL); > > > > It seems that in this case, size could be entirely replaced by > > struct_size(). > > Except every time I look at struct_size() I go: WTF does that do; while > the code as-is is crystal clear, no de-obfucstaion required. Naming it flex_struct_size() would be more informative? -- Gustavo
On Wed, May 18, 2022 at 11:03:45AM -0500, Gustavo A. R. Silva wrote:
> Naming it flex_struct_size() would be more informative?
Not use it at all if it makes the code less readable.
--
Regards/Gruss,
Boris.
https://people.kernel.org/tglx/notes-about-netiquette
© 2016 - 2026 Red Hat, Inc.