Configure DEPs for FIPS provider on AIX.
authorMatthias Kraft <Matthias.Kraft@softwareag.com>
Mon, 25 May 2020 08:10:24 +0000 (10:10 +0200)
committerRichard Levitte <levitte@openssl.org>
Thu, 18 Jun 2020 07:14:37 +0000 (09:14 +0200)
The binder of the AIX linker needs to be told which functions to call on
loading and initializing a shared object. Therefore another configuration
variable shared_fipsflag is introduced, which is appended to shared_defflag
when the providers/fips module gets configured.

It was suggested to refactor the line in the build file template to become
more generic and less magic. There is, however, currently no suggestion how
to actually achive this, so we leave a TODO comment.
The possible shared_fipsflag must only be appended to the shared_def iff
this code is acting on behalf of the fips provider module build.

Reviewed-by: Shane Lontis <shane.lontis@oracle.com>
Reviewed-by: Richard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/11950)

Configurations/10-main.conf
Configurations/unix-Makefile.tmpl
providers/fips/self_test.c

index a44a74cb32199e4e5f01dba749edb819f1f803b2..3332f03765082beae0b9925058df452e2f15ea38 100644 (file)
@@ -1164,6 +1164,7 @@ my %targets = (
         module_ldflags   => "-Wl,-G,-bsymbolic,-bnoentry",
         shared_ldflag    => "-Wl,-G,-bsymbolic,-bnoentry",
         shared_defflag   => "-Wl,-bE:",
+        shared_fipsflag  => "-Wl,-binitfini:init:cleanup",
         perl_platform    => 'AIX',
     },
     "aix-gcc" => {
index 126180ace7e63e412004b567268b97898633feed..fc4f60770b9b867b6f5462a4273deb4bdb692fe0 100644 (file)
@@ -1485,7 +1485,8 @@ EOF
                  @{$args{objs}};
       my @deps = compute_lib_depends(@{$args{deps}});
       my $shared_def = join("", map { ' '.$target{shared_defflag}.$_ } @defs);
-
+      # TODO(3.0): next line needs to become "less magic" (see PR #11950)
+      $shared_def .= ' '.$target{shared_fipsflag} if (m/providers\/fips/ && defined $target{shared_fipsflag});
       my $objs = join(" \\\n\t\t", fill_lines(' ', $COLUMNS - 16, @objs));
       my $deps = join(" \\\n" . ' ' x (length($dso) + 2),
                       fill_lines(' ', $COLUMNS - length($dso) - 2,
index 4619fedef5dcc7bdb4271a78ae89ddd1e0842e2f..c48254434618fc8eac59271342ea91ba3ac2feed 100644 (file)
@@ -92,7 +92,7 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
     }
     return TRUE;
 }
-#elif defined(__sun)
+#elif defined(__sun) || defined(_AIX)
 
 DEP_DECLARE() /* must be declared before pragma */
 # define DEP_INIT_ATTRIBUTE