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 <[email protected]>
> ---
> 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 <[email protected]>
> > ---
> > 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 <[email protected]>
> > > ---
> > > 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
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 <[email protected]>
>> ---
>> 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
> .