> +static int gaudi_nic_get_module_eeprom(struct net_device *netdev, > + struct ethtool_eeprom *ee, u8 *data) > +{ > + struct gaudi_nic_device **ptr = netdev_priv(netdev); > + struct gaudi_nic_device *gaudi_nic = *ptr; > + struct hl_device *hdev = gaudi_nic->hdev; > + > + if (!ee->len) > + return -EINVAL; > + > + memset(data, 0, ee->len); > + memcpy(data, hdev->asic_prop.cpucp_nic_info.qsfp_eeprom, ee->len); > +
You memset and then memcpy the same number of bytes? You also need to validate ee->offset, and ee->len. Otherwise this is a vector for user space to read kernel memory after hdev->asic_prop.cpucp_nic_info.qsfp_eeprom. See drivers/net/phy/sfp.c: sfp_module_eeprom() as a good example of this validation. Andrew