> foe_check_time is declared as u16 pointer but was allocated with > only ppe_num_entries bytes instead of ppe_num_entries * sizeof(u16). > > When airoha_ppe_foe_verify_entry() is called with hash >= ppe_num_entries/2, > it writes beyond the allocated buffer, causing heap buffer overflow and > potential kernel crash. > > Fixes: 6d5b601d52a2 ("net: airoha: ppe: Dynamically allocate foe_check_time array in airoha_ppe struct") > Signed-off-by: Wayen Yan Acked-by: Lorenzo Bianconi > --- > drivers/net/ethernet/airoha/airoha_ppe.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/ethernet/airoha/airoha_ppe.c b/drivers/net/ethernet/airoha/airoha_ppe.c > index 5c9dff6bcc..8fb8ecf909 100644 > --- a/drivers/net/ethernet/airoha/airoha_ppe.c > +++ b/drivers/net/ethernet/airoha/airoha_ppe.c > @@ -1578,7 +1578,8 @@ int airoha_ppe_init(struct airoha_eth *eth) > return -ENOMEM; > } > > - ppe->foe_check_time = devm_kzalloc(eth->dev, ppe_num_entries, > + ppe->foe_check_time = devm_kzalloc(eth->dev, > + ppe_num_entries * sizeof(*ppe->foe_check_time), > GFP_KERNEL); > if (!ppe->foe_check_time) > return -ENOMEM; > -- > 2.51.0 > >