48 lines
1.6 KiB
Diff
48 lines
1.6 KiB
Diff
Index: gnutls-3.8.9/lib/fips.c
|
|
===================================================================
|
|
--- gnutls-3.8.9.orig/lib/fips.c
|
|
+++ gnutls-3.8.9/lib/fips.c
|
|
@@ -268,6 +268,28 @@ static int handler(void *user, const cha
|
|
return 1;
|
|
}
|
|
|
|
+
|
|
+/* In case of x86_64-v3 optmizations, names might differ in version numbers.
|
|
+ * @mac_file: buffer where the hmac file path will be written to
|
|
+ * @lib_path: path to the dependent library, used to deduce hmac file path
|
|
+ * @file_name: The file name of the library
|
|
+ */
|
|
+ static void get_hwcaps_lib_hmac_path(char *mac_file, const char *lib_path, char *file_name) {
|
|
+ // Cut name short if more than SOVER is present
|
|
+ char *soname = strstr(file_name, ".so.");
|
|
+ char correct_ext[256];
|
|
+ memset(correct_ext, 0x0, 256);
|
|
+ soname += strlen(".so.");
|
|
+ for (uint32_t i = 0; i < strlen(soname); i++) {
|
|
+ if (soname[i] == '.') {
|
|
+ int proper_len = soname - file_name + i;
|
|
+ strncpy(correct_ext, file_name, proper_len);
|
|
+ snprintf(mac_file, 256, "%.*s/.%.*s.hmac", (int)(file_name-lib_path),lib_path,proper_len,correct_ext);
|
|
+ break;
|
|
+ }
|
|
+ }
|
|
+}
|
|
+
|
|
/*
|
|
* get_hmac_path:
|
|
* @mac_file: buffer where the hmac file path will be written to
|
|
@@ -300,6 +322,13 @@ static int get_hmac_path(char *mac_file,
|
|
if (ret == 0)
|
|
return GNUTLS_E_SUCCESS;
|
|
|
|
+ if (strstr(gnutls_path, "glibc-hwcaps")) {
|
|
+ get_hwcaps_lib_hmac_path(mac_file, gnutls_path, p + 1);
|
|
+ ret = _gnutls_file_exists(mac_file);
|
|
+ if (ret == 0)
|
|
+ return GNUTLS_E_SUCCESS;
|
|
+ }
|
|
+
|
|
if (p == NULL)
|
|
ret = snprintf(mac_file, mac_file_size, "fipscheck/.%s.hmac",
|
|
gnutls_path);
|