The code in drivers/net/ethernet/intel/ice/ice_parser_rt.c: 114 static void ice_bst_key_init(struct ice_parser_rt *rt, 115 struct ice_imem_item *imem) 116 { 117 u8 tsr = (u8)rt->gpr[ICE_GPR_TSR_IDX]; 118 u16 ho = rt->gpr[ICE_GPR_HO_IDX]; 119 u8 *key = rt->bst_key; 120 int idd, i; 121 122 idd = ICE_BST_TCAM_KEY_SIZE - 1; 123 if (imem->b_kb.tsr_ctrl) 124 key[idd] = tsr; 125 else 126 key[idd] = imem->b_kb.prio;
The "ICE_BST_TCAM_KEY_SIZE" macro is 20, so "idd" is 20 - 1 = 19. "key" equals "rt->bst_key" which is an array, and the size of the array is ICE_BST_KEY_SIZE which is 10. Is it possible that 'key[idd]' might access invalid memory? Should the "idd" be "ICE_BST_KEY_SIZE"? - idd = ICE_BST_TCAM_KEY_SIZE - 1; + idd = ICE_BST_KEY_SIZE - 1; -- Best, Qianqiang Liu