z/OS V2R2(APAR OA51647適用後)、z/OS V2R3以降では、「IBM z14」以降のサーバーで稼働する場合に限り、「IEP」(Instruction-Execution-Protection)新機能(非実行可能メモリー)が使用可能です。
※z/OS 3.1は「IBM z14」サーバーが稼働前提となるため、「IEP」新機能が常に使用可能です
【「IEP」新機能とは】
■「IEP」は「EXECUTABLE=NO」指定で確保されたストレージ(非実行可能メモリー)領域でのプログラム・コード(命令)実行を禁止する新機能で、例えば、EX(EXECUTE)命令のターゲットが「非実行可能メモリー」領域に存在する場合など「ABEND0C4-4」(保護例外)が発生します。
■新機能を利用することで、「STACK」、「HEAP」ストレージのように通常はデータしか含まれない領域での意図せぬ命令実行を禁止することが可能となり、システム全体の更なるインテグリティー向上に役立ちます。
■「非実行可能メモリー」領域を確保する方法 ・・・ いずれも、省略時解釈は「EXECUTABLE=YES」(実行可能メモリー)
※31ビット領域(私用域サブプール): STORAGE OBTAIN,EXECUTABLE=NO (対象サブプール: 0-127、129-132、229-230、236-237、240、244、249-252)
※64ビット領域(メモリー・オブジェクト): IARV64 REQUEST=GETSTOR,EXECUTABLE=NO
■「STORAGE RELEASE」処理での「EXECUTABLE=YES/NO」パラメータ指定は、「STORAGE OBTAIN」処理の指定値と合わせる必要があります。
【「IEP」新機能のサポート環境】
■下表の「○」印の組み合わせ(OS & サーバー)は、「IEP」新機能が使用可能な環境です。
※z/OS 3.1は「IBM z14」サーバーが稼働前提となるため、指定された「EXECUTABLE=NO」パラメータが常に有効化されます
■下表の「×」印の組み合わせは「IEP」新機能をサポートしておらず、「STORAGE OBTAIN/RELEASE」、「IARV64 REQUEST=GETSTOR」マクロにて指定された「EXECUTABLE=NO」パラメータは実行時に無視されます。
■「IEP」新機能(非実行可能メモリー)のサポート状況は、z/OS移行時のみならず、サーバー更改をトリガーにして変化するため、注意が必要です。
①z/OS V2R4環境で、稼働サーバーを「IBM z12」、「IBM z13」から「IBM z14」以降に移行する場合
➁z/OS V2R5環境で、稼働サーバーを「IBM z13」から「IBM z14」以降に移行する場合
【z/OS V2R4の変更点(LE)】 ※既知情報
■z/OS V2R4 LEでは、PARMLIB(CEEPRMxx)メンバーにて「CEENXSTG(ON/OFF)」キーワードが新規追加され、HEAPストレージ(31ビット領域)における「非実行可能メモリー」の使用が省略時解釈(ON)として活動化されました。
※「SETCEE CEENXSTG,ON」、「SETCEE CEENXSTG,OFF」コマンドによる動的変更可能
■LE実行時オプションとして「CEENXSTG(ON)」(省略時解釈)が有効な場合、チェックポイント・リスタート機能が利用できないという制約事項があります。
【z/OS V2R4の変更点(JES2)】 ※既知情報
■z/OS V2R3 JES2では、$GETMAINマクロに対して「EXECUTABLE=YES/NO」(省略時値: YES)パラメータが新規追加され、さらに、z/OS V2R4 JES2では省略時値が「NO」に変更されました。
■JES2導入出口(Exit)などを利用して、$GETMAINマクロにて確保された領域で命令実行する必要がある場合は、例えばz/OS V2R3からV2R5への移行時など、導入出口の再アセンブル処理を行う際、$GETMAINマクロ、$FREMAINマクロの両方に対して「EXECUTABLE=YES」パラメータの明示指定が必要です。
※上記の変更点(LE、JES2)に関しては、下記情報を参照ください
#092【z/OS V2R4変更点】 「IEP」新機能(非実行可能メモリー)の省略時活動化に伴う考慮事項
https://community.ibm.com/community/user/ibmz-and-linuxone/blogs/shigeki-kimura1/2023/02/17/sharing-zos-upgrade-info-by-professor-kimura-092j
【z/OS 3.1の変更点と影響・対策】
■z/OS 3.1では、JCL実行時のジョブステップ・プログラム(EXEC PGM=)に渡される「パラメータ・リスト」、「パラメータ」を含む領域が、省略時解釈として「非実行可能メモリー」を使用するように変わりました。
※z/OS 3.1は「IBM z14」サーバーが稼働前提となるため、当変更が常に適用されます
■①、②、③のように「パラメータ・リスト」、「パラメータ」を含む領域が「IEP」対象(非実行可能メモリー)の場合、CHKPTマクロの実行がサポートされない(戻りコード08、理由コード117)ため、DFSMSの「チェックポイント再始動」機能が使用できません。
※「パラメータ」の受け渡しを行わないケース①でも、レジスター1からポイントされる「パラメータ・リスト」を含む領域が「IEP」対象となるため、CHKPTマクロは失敗します
■z/OS 3.1変更点の影響を回避し、従来同様CHKPTマクロを実行するには、PARMLIB(DIAGxx)メンバーによる「CBATTR EXECUTABLE(JCLPARM)」パラメータの明示指定が必要です。
※省略時解釈は、「CBATTR NONEXECUTABLE(JCLPARM)」(非実行可能メモリー)扱いとなります
【z/OS 3.1の挙動例】
■IVPCKPTプログラムの仕様 ・・・ CPAC.IVPLIB(IVPCKPT)参照
※CHKPT DCBCHK,CHKID,16(SVC 63: 0A3Fの発行)
※WTOR IEC254Dメッセージ出力を回避するため、便宜的にチェックポイント・データセット(CPPCHK)をVIO指定
IEC254D SHOULD jjj USE (ddname,utn,ser) FOR CREATING A NEW CHECKPOINT DATA SET REPLY ‘YES’ OR ‘NO’
■実行結果の比較
以上