mirror of
https://github.com/torvalds/linux.git
synced 2026-05-27 16:44:58 +02:00
gpio: 74x164: Annotate buffer with __counted_by()
Add the __counted_by() compiler attribute to the flexible array member volumes to improve access bounds-checking via CONFIG_UBSAN_BOUNDS and CONFIG_FORTIFY_SOURCE. Use struct_size() instead of manually calculating the number of bytes to allocate the private structure with a buffer. Reviewed-by: Gustavo A. R. Silva <gustavoars@kernel.org> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Link: https://lore.kernel.org/r/20250207151825.2122419-4-andriy.shevchenko@linux.intel.com Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
This commit is contained in:
parent
bdd603acf6
commit
d746cc6e64
|
|
@ -30,7 +30,7 @@ struct gen_74x164_chip {
|
|||
* register at the end of the transfer. So, to have a logical
|
||||
* numbering, store the bytes in reverse order.
|
||||
*/
|
||||
u8 buffer[];
|
||||
u8 buffer[] __counted_by(registers);
|
||||
};
|
||||
|
||||
static int __gen_74x164_write_config(struct gen_74x164_chip *chip)
|
||||
|
|
@ -97,6 +97,7 @@ static int gen_74x164_direction_output(struct gpio_chip *gc,
|
|||
|
||||
static int gen_74x164_probe(struct spi_device *spi)
|
||||
{
|
||||
struct device *dev = &spi->dev;
|
||||
struct gen_74x164_chip *chip;
|
||||
u32 nregs;
|
||||
int ret;
|
||||
|
|
@ -116,10 +117,12 @@ static int gen_74x164_probe(struct spi_device *spi)
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
chip = devm_kzalloc(&spi->dev, sizeof(*chip) + nregs, GFP_KERNEL);
|
||||
chip = devm_kzalloc(dev, struct_size(chip, buffer, nregs), GFP_KERNEL);
|
||||
if (!chip)
|
||||
return -ENOMEM;
|
||||
|
||||
chip->registers = nregs;
|
||||
|
||||
chip->gpiod_oe = devm_gpiod_get_optional(&spi->dev, "enable",
|
||||
GPIOD_OUT_LOW);
|
||||
if (IS_ERR(chip->gpiod_oe))
|
||||
|
|
@ -133,10 +136,7 @@ static int gen_74x164_probe(struct spi_device *spi)
|
|||
chip->gpio_chip.set = gen_74x164_set_value;
|
||||
chip->gpio_chip.set_multiple = gen_74x164_set_multiple;
|
||||
chip->gpio_chip.base = -1;
|
||||
|
||||
chip->registers = nregs;
|
||||
chip->gpio_chip.ngpio = GEN_74X164_NUMBER_GPIOS * chip->registers;
|
||||
|
||||
chip->gpio_chip.can_sleep = true;
|
||||
chip->gpio_chip.parent = &spi->dev;
|
||||
chip->gpio_chip.owner = THIS_MODULE;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user