amd: restrict radeon_info::marketing_name to 64 characters and copy it

The pointer is owned by the DRM device.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/38546>
This commit is contained in:
Daniel Schürmann 2025-11-20 11:01:41 +01:00 committed by Marge Bot
parent 5a39e1e645
commit fc534ed209
7 changed files with 8 additions and 11 deletions

View file

@ -586,7 +586,8 @@ ac_query_gpu_info(int fd, void *dev_p, struct radeon_info *info,
info->family_id = device_info.family;
info->chip_external_rev = device_info.external_rev;
info->chip_rev = device_info.chip_rev;
info->marketing_name = ac_drm_get_marketing_name(dev);
const char *marketing_name = ac_drm_get_marketing_name(dev);
strncpy(info->marketing_name, marketing_name ? marketing_name : "AMD Unknown", sizeof(info->marketing_name));
}
#define VCN_IP_VERSION(mj, mn, rv) (((mj) << 16) | ((mn) << 8) | (rv))

View file

@ -33,7 +33,7 @@ struct amd_ip_info {
struct radeon_info {
/* Device info. */
const char *marketing_name;
char marketing_name[64];
uint32_t num_se; /* only enabled SEs */
uint32_t num_rb; /* only enabled RBs */
uint32_t num_cu; /* only enabled CUs */

View file

@ -14,6 +14,7 @@ ac_null_device_create(struct radeon_info *gpu_info, const char *family)
gpu_info->gfx_level = CLASS_UNKNOWN;
gpu_info->family = CHIP_UNKNOWN;
strcpy(gpu_info->marketing_name, "AMD Unknown");
for (i = CHIP_TAHITI; i < CHIP_LAST; i++) {
if (!strcasecmp(family, ac_get_family_name(i))) {

View file

@ -2361,8 +2361,7 @@ radv_physical_device_try_create(struct radv_instance *instance, drmDevicePtr drm
const char *name = ac_get_family_name(pdev->info.family);
snprintf(pdev->name, sizeof(pdev->name), "AMD RADV %s%s", name, radv_get_compiler_string(pdev));
snprintf(pdev->marketing_name, sizeof(pdev->name), "%s (RADV %s%s)",
pdev->info.marketing_name ? pdev->info.marketing_name : "AMD Unknown", name,
snprintf(pdev->marketing_name, sizeof(pdev->name), "%s (RADV %s%s)", pdev->info.marketing_name, name,
radv_get_compiler_string(pdev));
if (pdev->info.gfx_level >= GFX12)

View file

@ -423,8 +423,7 @@ radv_rmv_fill_device_info(const struct radv_physical_device *pdev, struct vk_rmv
fill_memory_info(gpu_info, &info->memory_infos[i], i);
}
if (gpu_info->marketing_name)
strncpy(info->device_name, gpu_info->marketing_name, sizeof(info->device_name) - 1);
strncpy(info->device_name, gpu_info->marketing_name, sizeof(info->device_name) - 1);
info->pcie_family_id = gpu_info->family_id;
info->pcie_revision_id = gpu_info->pci_rev_id;
info->pcie_device_id = gpu_info->pci.dev;

View file

@ -177,9 +177,7 @@ rra_dump_asic_info(const struct radeon_info *gpu_info, FILE *output)
.rev_id = gpu_info->pci_rev_id,
};
strncpy(asic_info.device_name,
gpu_info->marketing_name ? gpu_info->marketing_name : ac_get_family_name(gpu_info->family),
RRA_FILE_DEVICE_NAME_MAX_SIZE - 1);
strncpy(asic_info.device_name, gpu_info->marketing_name, RRA_FILE_DEVICE_NAME_MAX_SIZE - 1);
fwrite(&asic_info, sizeof(struct rra_asic_info), 1, output);
}

View file

@ -690,8 +690,7 @@ static void si_init_renderer_string(struct si_screen *sscreen)
struct utsname uname_data;
const char *name = ac_get_family_name(sscreen->info.family);
snprintf(first_name, sizeof(first_name), "%s",
sscreen->info.marketing_name ? sscreen->info.marketing_name : name);
snprintf(first_name, sizeof(first_name), "%s", sscreen->info.marketing_name);
memset(second_name, 0, sizeof(second_name));
for (unsigned i = 0; name[i] && i < ARRAY_SIZE(second_name) - 1; i++)
second_name[i] = tolower(name[i]);