On 18/09/2025 01.21, Zhuoying Cai wrote:
The secure-IPL-code-loading-attributes facility (SCLAF)
provides additional security during secure IPL.

Availability of SCLAF is determined by byte 136 bit 3 of the
SCLP Read Info block.

This feature is available starting with the gen16 CPU model.

Signed-off-by: Zhuoying Cai <[email protected]>
Reviewed-by: Collin Walling <[email protected]>
---
  docs/specs/s390x-secure-ipl.rst     | 25 +++++++++++++++++++++++++
  target/s390x/cpu_features.c         |  2 ++
  target/s390x/cpu_features_def.h.inc |  1 +
  target/s390x/cpu_models.c           |  3 +++
  target/s390x/gen-features.c         |  2 ++
  target/s390x/kvm/kvm.c              |  1 +
  6 files changed, 34 insertions(+)

diff --git a/docs/specs/s390x-secure-ipl.rst b/docs/specs/s390x-secure-ipl.rst
index 760a066084..a19b976e25 100644
--- a/docs/specs/s390x-secure-ipl.rst
+++ b/docs/specs/s390x-secure-ipl.rst
@@ -85,3 +85,28 @@ operations such as:
  * certificate data
The guest kernel will inspect the IIRB and build the keyring.
+
+
+Secure Code Loading Attributes Facility
+---------------------------------
+
+The Secure Code Loading Attributes Facility (SCLAF) enhances system security 
during the
+IPL by enforcing additional verification rules.

Please wrap your text so that it fits into 80 columns.
(Not sure why checkpatch.pl is not warning here...?)

+When SCLAF is available, its behavior depends on the IPL mode. It introduces 
verification
+of both signed and unsigned components to help ensure that only authorized 
code is loaded
+during the IPL process. Any errors detected by SCLAF are reported in the IIRB.

+Unsigned components are restricted to load addresses at or above absolute 
storage address
+``0x2000``.
+
+Signed components must include a Secure Code Loading Attribute Block (SCLAB), 
which is
+appended at the very end of the component. The SCLAB defines security 
attributes for
+handling the signed code. Specifically, it may:
+
+* Provide direction on how to process the rest of the component.
+
+* Provide further validation of information on where to load the signed binary 
code
+  from the load device.
+
+* Specify where to start the execution of the loaded OS code.

Do you maybe want to mention any tool from s390-tools that helps with this task (assuming that there is one)? (or should that rather not be part of the specs here?)

...
diff --git a/target/s390x/gen-features.c b/target/s390x/gen-features.c
index bd2060ab93..c3e0c6ceff 100644
--- a/target/s390x/gen-features.c
+++ b/target/s390x/gen-features.c
@@ -722,6 +722,7 @@ static uint16_t full_GEN16_GA1[] = {
      S390_FEAT_UV_FEAT_AP_INTR,
      S390_FEAT_CERT_STORE,
      S390_FEAT_SIPL,
+    S390_FEAT_SCLAF,
  };
>
  static uint16_t full_GEN17_GA1[] = {
@@ -924,6 +925,7 @@ static uint16_t qemu_MAX[] = {
      S390_FEAT_EXTENDED_LENGTH_SCCB,
      S390_FEAT_CERT_STORE,
      S390_FEAT_SIPL,
+    S390_FEAT_SCLAF,
  };

In the cover letter you wrote "All actions must be performed on a KVM guest" ... so does this feature depend on KVM or not? If you cannot use the feature with TCG, I think you should not add this to the "qemu_MAX" CPU model?

 Thomas


Reply via email to