amdgpu: NetBSD lacks secure_getenv

When adding support for defining extra paths for the `amdgpu.ids`
file using an environment variable, the patch used a call to
secure_getenv(), which is only available in GNU. This breaks the
build in NetBSD systems.

This patch adds conditional compilation to use secure_getenv()
only when compiling against the GNU libraries.

Fix c3c7fb21aa (note_3229411)

Signed-off-by: Sergio Costas Rodriguez <sergio.costas@canonical.com>
This commit is contained in:
Sergio Costas Rodriguez 2025-12-09 10:36:14 +01:00
parent b7861fb536
commit 64ef303d70
No known key found for this signature in database
GPG key ID: D4A5410CE1372A40
3 changed files with 13 additions and 2 deletions

View file

@ -58,3 +58,6 @@ The AMDGPU driver requires the `amdgpu.ids` file. It is usually located at
paths at runtime by setting the `AMDGPU_ASIC_ID_TABLE_PATHS` environment paths at runtime by setting the `AMDGPU_ASIC_ID_TABLE_PATHS` environment
variable with one or more colon-separated paths where to search for the variable with one or more colon-separated paths where to search for the
`amdgpu.ids` file. `amdgpu.ids` file.
For this option to be available, the C library must support secure_getenv()
function. In systems without it (like NetBSD), this option won't be available.

View file

@ -165,6 +165,7 @@ static void amdgpu_parse_proc_cpuinfo(struct amdgpu_device *dev)
fclose(fp); fclose(fp);
} }
#if HAVE_SECURE_GETENV
static char *join_path(const char *dir, const char *file) { static char *join_path(const char *dir, const char *file) {
size_t dir_len = strlen(dir); size_t dir_len = strlen(dir);
size_t file_len = strlen(file); size_t file_len = strlen(file);
@ -268,6 +269,7 @@ static char *find_asic_id_table(void)
split_env_var_free(paths); split_env_var_free(paths);
return found_path; return found_path;
} }
#endif
void amdgpu_parse_asic_ids(struct amdgpu_device *dev) void amdgpu_parse_asic_ids(struct amdgpu_device *dev)
{ {
@ -278,8 +280,12 @@ void amdgpu_parse_asic_ids(struct amdgpu_device *dev)
int line_num = 1; int line_num = 1;
int r = 0; int r = 0;
char *amdgpu_asic_id_table_path = find_asic_id_table(); char *amdgpu_asic_id_table_path = NULL;
#if HAVE_SECURE_GETENV
// if this system lacks secure_getenv(), don't allow extra paths
// for security reasons.
amdgpu_asic_id_table_path = find_asic_id_table();
#endif
// if not found, use the default AMDGPU_ASIC_ID_TABLE path // if not found, use the default AMDGPU_ASIC_ID_TABLE path
if (!amdgpu_asic_id_table_path) if (!amdgpu_asic_id_table_path)
amdgpu_asic_id_table_path = strdup(AMDGPU_ASIC_ID_TABLE); amdgpu_asic_id_table_path = strdup(AMDGPU_ASIC_ID_TABLE);

View file

@ -51,6 +51,8 @@ dep_threads = dependency('threads')
cc = meson.get_compiler('c') cc = meson.get_compiler('c')
config.set10('HAVE_SECURE_GETENV', cc.has_function('secure_getenv'))
android = cc.compiles('''int func() { return __ANDROID__; }''') android = cc.compiles('''int func() { return __ANDROID__; }''')
# Solaris / Illumos # Solaris / Illumos