Bug 2159760

Summary: [RHEL-8][perl:5.32] Perl .ph files are broken on rhel8.
Product: Red Hat Enterprise Linux 8 Reporter: Jitka Plesnikova <jplesnik>
Component: perl-5.32-moduleAssignee: Jitka Plesnikova <jplesnik>
Status: CLOSED ERRATA QA Contact: Martin Kyral <mkyral>
Severity: high Docs Contact:
Priority: unspecified    
Version: 8.6CC: jplesnik, mkyral, perl-maint-list, rdulhani, rhel-cs-apps-subsystem-qe
Target Milestone: rcKeywords: Triaged
Target Release: ---Flags: pm-rhel: mirror+
Hardware: x86_64   
OS: Linux   
Whiteboard:
Fixed In Version: perl-5.32-8080020230118125925.af169298 Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: 2152012 Environment:
Last Closed: 2023-05-16 08:41:23 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Jitka Plesnikova 2023-01-10 15:58:32 UTC
+++ This bug was initially created as a clone of Bug #2152012 +++

Description of problem:

Perl .ph files are pretty broken on rhel8.  Almost any attempt to use them produces a confusing warning about _FORTIFY_SOURCE and compiling with optimization (even when nothing is being compiled).


Version-Release number of selected component (if applicable):


How reproducible:

Package - perl-5.32.1-471.module+el8.6.0+13324+628a2397.x86_64.rpm


Steps to Reproduce:


rhel8test04.nyc|psc:~[13:53](2093) $ perl -e 'require "features.ph"'
_FORTIFY_SOURCE requires compiling with optimization (-O) at /usr/lib64/perl5/features.ph line 207.

Another reproducer:

rhel8test04.nyc|psc:~[13:55](2095) $ perl -e 'require "sys/ioctl.ph"'
_FORTIFY_SOURCE requires compiling with optimization (-O) at /usr/lib64/perl5/features.ph line 207.


Actual results:

The normal usecase where we encountered this was ...


require "sys/ioctl.ph"; # for TIOCGWINSZ
Lots of .ph files require features.ph, and they are all affected similarly.  Another example is sys/socket.ph.
.ph files are intended to obtain constants (like TIOCGWINSZ) that are defined in C .h headers. So, we think this is a normal usecase.



Additional info:


Perl .ph files are automatic, mechanical translations of C .h files, and are intended to provide access to C constants in Perl code.  The fortify.h header includes a test to ensure that -O is used when compiling with _FORTIFY_SOURCE, and the header looks for OPTIMIZE, which is set by the compiler whenever -O is used.  Perl translates this test to the .ph file, but nothing ever sets OPTIMIZE  when Perl runs, because nothing is being compiled!  This causes a warning for anything that uses features.ph.  


As a hacky workaround, we could patch anything that uses an affected .ph module to set OPTIMIZE. But that could be a good number of scripts.

--- Additional comment from Jitka Plesnikova on 2022-12-12 11:38:32 UTC ---

Thanks for the report. I am able to reproduce the issue. I will investigate what is wrong.

--- Additional comment from Jitka Plesnikova on 2022-12-15 14:54:46 UTC ---

_FORTIFY_SOURCE is defined in /usr/lib64/perl5/_h2ph_pre.ph which is generated by h2ph. It uses value of @Config{'ccsymbols', 'cppsymbols', 'cppccsymbols'}. It does not contains definition for OPTIMIZE. 

The workaround could be to add line below to _h2ph_pre.ph
unless (defined &__OPTIMIZE__) { sub __OPTIMIZE__() { 2 } }

I try to update h2ph to add definition of OPTIMIZE if it is listed in ccflags.

Comment 1 Jitka Plesnikova 2023-01-19 14:20:49 UTC
commit c3a4677df810fdbee0eb8052e728d16783226a69 (HEAD -> 5.32-rhel-8.8.0, origin/5.32-rhel-8.8.0)
Author: Jitka Plesnikova <jplesnik>
Date:   Wed Jan 18 13:59:25 2023 +0100

    Resolves: #2159760 - Add definition of OPTIMIZE to .ph files, if optimizing is used

Comment 7 errata-xmlrpc 2023-05-16 08:41:23 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory (perl:5.32 bug fix and enhancement update), and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://access.redhat.com/errata/RHBA-2023:2886