2024-03-28 19:59:07

by Kuniyuki Iwashima

[permalink] [raw]
Subject: [PATCH v2 4/4] ax.25: Remove the now superfluous sentinel elements from ctl_table array

From: Joel Granados via B4 Relay <[email protected]>
Date: Thu, 28 Mar 2024 16:40:05 +0100
> This commit comes at the tail end of a greater effort to remove the
> empty elements at the end of the ctl_table arrays (sentinels) which will
> reduce the overall build time size of the kernel and run time memory
> bloat by ~64 bytes per sentinel (further information Link :
> https://lore.kernel.org/all/ZO5Yx5JFogGi%[email protected]/)
>
> When we remove the sentinel from ax25_param_table a buffer overflow
> shows its ugly head. The sentinel's data element used to be changed when
> CONFIG_AX25_DAMA_SLAVE was not defined.

I think it's better to define the relation explicitly between the
enum and sysctl table by BUILD_BUG_ON() in ax25_register_dev_sysctl()

BUILD_BUG_ON(AX25_MAX_VALUES != ARRAY_SIZE(ax25_param_table));

and guard AX25_VALUES_DS_TIMEOUT with #ifdef CONFIG_AX25_DAMA_SLAVE
as done for other enum.


> This did not have any adverse
> effects as we still stopped on the sentinel because of its null
> procname. But now that we do not have the sentinel element, we are
> careful to check ax25_param_table's size.
>
> Signed-off-by: Joel Granados <[email protected]>
> ---
> net/ax25/sysctl_net_ax25.c | 4 +---
> 1 file changed, 1 insertion(+), 3 deletions(-)
>
> diff --git a/net/ax25/sysctl_net_ax25.c b/net/ax25/sysctl_net_ax25.c
> index db66e11e7fe8..e55be8817a1e 100644
> --- a/net/ax25/sysctl_net_ax25.c
> +++ b/net/ax25/sysctl_net_ax25.c
> @@ -141,8 +141,6 @@ static const struct ctl_table ax25_param_table[] = {
> .extra2 = &max_ds_timeout
> },
> #endif
> -
> - { } /* that's all, folks! */
> };
>
> int ax25_register_dev_sysctl(ax25_dev *ax25_dev)
> @@ -155,7 +153,7 @@ int ax25_register_dev_sysctl(ax25_dev *ax25_dev)
> if (!table)
> return -ENOMEM;
>
> - for (k = 0; k < AX25_MAX_VALUES; k++)
> + for (k = 0; k < AX25_MAX_VALUES && k < ARRAY_SIZE(ax25_param_table); k++)
> table[k].data = &ax25_dev->values[k];
>
> snprintf(path, sizeof(path), "net/ax25/%s", ax25_dev->dev->name);
>
> --
> 2.43.0


2024-04-05 13:36:33

by Joel Granados

[permalink] [raw]
Subject: Re: [PATCH v2 4/4] ax.25: Remove the now superfluous sentinel elements from ctl_table array

On Thu, Mar 28, 2024 at 12:49:34PM -0700, Kuniyuki Iwashima wrote:
> From: Joel Granados via B4 Relay <[email protected]>
> Date: Thu, 28 Mar 2024 16:40:05 +0100
> > This commit comes at the tail end of a greater effort to remove the
> > empty elements at the end of the ctl_table arrays (sentinels) which will
> > reduce the overall build time size of the kernel and run time memory
> > bloat by ~64 bytes per sentinel (further information Link :
> > https://lore.kernel.org/all/ZO5Yx5JFogGi%[email protected]/)
> >
> > When we remove the sentinel from ax25_param_table a buffer overflow
> > shows its ugly head. The sentinel's data element used to be changed when
> > CONFIG_AX25_DAMA_SLAVE was not defined.
>
> I think it's better to define the relation explicitly between the
> enum and sysctl table by BUILD_BUG_ON() in ax25_register_dev_sysctl()
>
> BUILD_BUG_ON(AX25_MAX_VALUES != ARRAY_SIZE(ax25_param_table));
>
> and guard AX25_VALUES_DS_TIMEOUT with #ifdef CONFIG_AX25_DAMA_SLAVE
> as done for other enum.

When I remove AX25_VALUES_DS_TIMEOUT from the un-guarded build it
complains in net/ax25/ax25_ds_timer.c (ax25_ds_set_timer). Here is the
report https://lore.kernel.org/oe-kbuild-all/[email protected]/.

How best to address this? Should we just guard the whole function and do
nothing when not set? like this:

```
void ax25_ds_set_timer(ax25_dev *ax25_dev)
{
#ifdef COFNIG_AX25_DAMA_SLAVE
if (ax25_dev == NULL) ???/* paranoia */
return;

ax25_dev->dama.slave_timeout =
msecs_to_jiffies(ax25_dev->values[AX25_VALUES_DS_TIMEOUT]) / 10;
mod_timer(&ax25_dev->dama.slave_timer, jiffies + HZ);
#else
return;
#endif
}

```

I'm not too familiar with this, so pointing me to the "correct" way to
handle this would be helpfull.

Thx in advance.

Best

--

Joel Granados


Attachments:
(No filename) (1.92 kB)
signature.asc (673.00 B)
Download all attachments