From 42eed3ba691cd89d758eddaae8d44593d026b9bd Mon Sep 17 00:00:00 2001 From: Alexander von Gluck IV Date: Tue, 16 Jul 2013 11:20:24 -0500 Subject: [PATCH] RadeonHD: Fix incorrect name -> chipset mapping * Put names and chipsets next to each other to help prevent further mismatch. * Fix potential (but unlikely) string overflow * CID 611140 --- .../private/graphics/radeon_hd/radeon_hd.h | 61 ++++++++++++++++++- .../drivers/graphics/radeon_hd/radeon_hd.cpp | 56 ++--------------- 2 files changed, 62 insertions(+), 55 deletions(-) diff --git a/headers/private/graphics/radeon_hd/radeon_hd.h b/headers/private/graphics/radeon_hd/radeon_hd.h index b979e1c7f7..26c49f3c8d 100644 --- a/headers/private/graphics/radeon_hd/radeon_hd.h +++ b/headers/private/graphics/radeon_hd/radeon_hd.h @@ -41,6 +41,8 @@ #define DEVICE_NAME "radeon_hd" #define RADEON_ACCELERANT_NAME "radeon_hd.accelerant" +#define MAX_NAME_LENGTH 32 + // Used to collect EDID from boot loader #define EDID_BOOT_INFO "vesa_edid/v1" #define MODES_BOOT_INFO "vesa_modes/v1" @@ -52,6 +54,7 @@ // Radeon Chipsets +// !! Must match chipset names below enum radeon_chipset { RADEON_R420 = 0, //r400, Radeon X700-X850 RADEON_R423, @@ -97,12 +100,64 @@ enum radeon_chipset { RADEON_TAHITI, // DCE 6.0 RADEON_ARUBA, // DCE 6.1 Trinity/Richland RADEON_OLAND, // DCE 6.4 - RADEON_HAINAN, // NO DCE + RADEON_HAINAN, // NO DCE, only compute RADEON_KAVERI, //Sea Islands, DCE 8.1 RADEON_BONAIRE, // DCE 8.2 RADEON_KABINI, // DCE 8.3 }; +// !! Must match chipset families above +static const char radeon_chip_name[][MAX_NAME_LENGTH] = { + "R420", + "R423", + "RV410", + "RS400", + "RS480", + "RS600", + "RS690", + "RS740", + "RV515", + "R520", + "RV530", + "RV560", + "RV570", + "R580", + "R600", + "RV610", + "RV630", + "RV670", + "RV620", + "RV635", + "RS780", + "RS880", + "RV770", + "RV730", + "RV710", + "RV740", + "Cedar", + "Redwood", + "Juniper", + "Cypress", + "Hemlock", + "Palm", + "Sumo", + "Sumo2", + "Caicos", + "Turks", + "Barts", + "Cayman", + "Antilles", + "Cape Verde", + "Pitcairn", + "Tahiti", + "Aruba", + "Oland", + "Hainan", + "Kaveri", + "Bonaire", + "Kabini" +}; + struct ring_buffer { struct lock lock; @@ -170,9 +225,9 @@ struct radeon_shared_info { uint16 cursor_hot_x; uint16 cursor_hot_y; - char deviceName[32]; + char deviceName[MAX_NAME_LENGTH]; uint16 chipsetID; - char chipsetName[16]; + char chipsetName[MAX_NAME_LENGTH]; uint32 chipsetFlags; uint8 dceMajor; uint8 dceMinor; diff --git a/src/add-ons/kernel/drivers/graphics/radeon_hd/radeon_hd.cpp b/src/add-ons/kernel/drivers/graphics/radeon_hd/radeon_hd.cpp index 4d048920f0..8c9e69a231 100644 --- a/src/add-ons/kernel/drivers/graphics/radeon_hd/radeon_hd.cpp +++ b/src/add-ons/kernel/drivers/graphics/radeon_hd/radeon_hd.cpp @@ -38,55 +38,6 @@ #define ERROR(x...) dprintf("radeon_hd: " x) -// Must match chipset families in radeon_hd.h -static const char radeon_chip_name[][16] = { - "R420", - "R423", - "RV410", - "RS400", - "RS480", - "RS600", - "RS690", - "RS740", - "RV515", - "R520", - "RV530", - "RV560", - "RV570", - "R580", - "R600", - "RV610", - "RV630", - "RV670", - "RV620", - "RV635", - "RS780", - "RS880", - "RV770", - "RV730", - "RV710", - "RV740", - "Cedar", - "Redwood", - "Juniper", - "Cypress", - "Hemlock", - "Palm", - "Sumo", - "Sumo2", - "Caicos", - "Turks", - "Barts", - "Cayman", - "Antilles", - "Lombok", - "Cape Verde", - "Pitcairn", - "Tahiti", - "New Zealand" -}; - - // #pragma mark - @@ -693,9 +644,10 @@ radeon_hd_init(radeon_info &info) info.shared_info->dceMajor = info.dceMajor; info.shared_info->dceMinor = info.dceMinor; info.shared_info->registers_area = info.registers_area; - strcpy(info.shared_info->deviceName, info.deviceName); - strcpy(info.shared_info->chipsetName, - radeon_chip_name[info.chipsetID]); + strncpy(info.shared_info->deviceName, + info.deviceName, MAX_NAME_LENGTH); + strncpy(info.shared_info->chipsetName, + radeon_chip_name[info.chipsetID], MAX_NAME_LENGTH); // *** AtomBIOS mapping // First we try an active bios read