Messages in this thread | | | Date | Sat, 23 Sep 2023 10:26:43 -0600 | Subject | Re: [PATCH] i2c: mux: demux-pinctrl: Annotate struct i2c_demux_pinctrl_priv with __counted_by | From | "Gustavo A. R. Silva" <> |
| |
On 9/22/23 11:49, Kees Cook wrote: > Prepare for the coming implementation by GCC and Clang of the __counted_by > attribute. Flexible array members annotated with __counted_by can have > their accesses bounds-checked at run-time checking via CONFIG_UBSAN_BOUNDS > (for array indexing) and CONFIG_FORTIFY_SOURCE (for strcpy/memcpy-family > functions). > > As found with Coccinelle[1], add __counted_by for struct i2c_demux_pinctrl_priv. > Additionally, since the element count member must be set before accessing > the annotated flexible array member, move its initialization earlier. > > [1] https://github.com/kees/kernel-tools/blob/trunk/coccinelle/examples/counted_by.cocci > > Cc: Wolfram Sang <wsa+renesas@sang-engineering.com> > Cc: Peter Rosin <peda@axentia.se> > Cc: linux-i2c@vger.kernel.org > Signed-off-by: Kees Cook <keescook@chromium.org>
Reviewed-by: Gustavo A. R. Silva <gustavoars@kernel.org>
Thanks -- Gustavo
> --- > drivers/i2c/muxes/i2c-demux-pinctrl.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/drivers/i2c/muxes/i2c-demux-pinctrl.c b/drivers/i2c/muxes/i2c-demux-pinctrl.c > index a3a122fae71e..5e15d8777229 100644 > --- a/drivers/i2c/muxes/i2c-demux-pinctrl.c > +++ b/drivers/i2c/muxes/i2c-demux-pinctrl.c > @@ -32,7 +32,7 @@ struct i2c_demux_pinctrl_priv { > const char *bus_name; > struct i2c_adapter cur_adap; > struct i2c_algorithm algo; > - struct i2c_demux_pinctrl_chan chan[]; > + struct i2c_demux_pinctrl_chan chan[] __counted_by(num_chan); > }; > > static int i2c_demux_master_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], int num) > @@ -226,6 +226,8 @@ static int i2c_demux_pinctrl_probe(struct platform_device *pdev) > if (!priv || !props) > return -ENOMEM; > > + priv->num_chan = num_chan; > + > err = of_property_read_string(np, "i2c-bus-name", &priv->bus_name); > if (err) > return err; > @@ -248,8 +250,6 @@ static int i2c_demux_pinctrl_probe(struct platform_device *pdev) > of_changeset_init(&priv->chan[i].chgset); > of_changeset_update_property(&priv->chan[i].chgset, adap_np, &props[i]); > } > - > - priv->num_chan = num_chan; > priv->dev = &pdev->dev; > > platform_set_drvdata(pdev, priv);
| |