Chapter 4. New features


This part describes new features and major enhancements introduced in Red Hat Enterprise Linux 9.9.

4.1. Installer and image creation

bootc rebased to version 1.16.4

The bootc package, which enables building and managing bootable container images, has been rebased to upstream version 1.16.4. This version provides important fixes and enhancements, most notably the following:

  • The handling of merging files in the /etc directory is improved.
  • The initramfs tool correctly handles pre-existing /run/systemd/volatile-root symlinks.
  • The composefs implementation includes multiple changes and updates to the composefs-rs library.
  • Unified Kernel Image (UKI) cleanup behavior is enhanced.
  • Privilege dropping for container pulls is removed to improve reliability.
  • The sd-boot component uses the --random-seed flag only on systemd version 257 or later, which resolves compatibility issues on systems running earlier versions of systemd.
  • Registry authentication discovery is restored for composefs direct pull operations. Previously, direct pulls failed to locate registry credentials correctly.

Jira:RHEL-213824

4.2. Security

Keylime rebased to 7.14.3

The Keylime packages are rebased to upstream version 7.14.3, which includes the following enhancements and bug fixes:

Confidential VM evidence verification
Introduces API version 2.5 and the /verify/evidence endpoint to verify AMD Secure Encrypted Virtualization-Secure Nested Paging (SEV-SNP) attestation evidence.
API version negotiation
Adds automatic REST API version negotiation to the tenant component to maintain compatibility across different verifier versions.
SANs in generated TLS certificates
TLS certificates automatically generated by the verifier include Subject Alternative Names (SANs) to allow strict hostname verification during TLS handshakes.
Runtime socket path location
Updates default socket locations for Keylime components to /run/keylime/.
Database session and migration fixes
Resolves database session leaks, fixes MySQL migration script incompatibilities, and prevents race conditions during agent deletion operations.
New manual pages
Adds man pages for keylime_verifier(8), keylime_registrar(8), keylime_agent(8), keylime_push_model_agent(8), and keylime-policy(1).

Jira:RHEL-180618

keylime-agent-rust rebased to 0.2.10

The keylime-agent-rust package is rebased to upstream version 0.2.10. With this update, the agent hashes qualifying data for the Trusted Platform Module (TPM) during Initial Attestation Key (IAK) certification.

Jira:RHEL-180619

fapolicyd rebased to 2.0.1

The fapolicyd packages are rebased to upstream version 2.0.1 and provide many important enhancements and bug fixes over the previously available 1.4.3 version. Most notably:

Transactional policy and trust database updates
Rule reloads are transactional, and trust database reloads use generation tracking. If rule verification or database rebuild fails, fapolicyd preserves the last valid state and does not apply an incomplete policy. Additional updates to fagenrules and internal Lightning Memory-Mapped Database (LMDB) handling reduce race conditions during live updates.
Parallel decision processing
A new decision_threads configuration option enables fapolicyd to process permission evaluation events across multiple worker threads. This improves throughput on multi-core systems. Provided per-worker queue and cache statistics help administrators with thread count tuning.
Enhanced operational visibility and metrics
New metrics and timing reports track rule hits, default allow decisions, reply failures, cache effectiveness, attribute lookups, queue delays, and decision latency. Reports also display active configuration, ruleset, and trust database generations. Aggregated and per-worker measurements make workload imbalance and capacity problems easier to diagnose.
Improved policy authoring and validation
Policy authoring supports explicit glob: path patterns and double-quoted values for file paths containing spaces. The --check-rules and --lint options validate policies before deployment and provide diagnostic details . Additionally, packages can extend the %languages MIME set without replacing distribution default definitions.
Automatic trust database management
The db_max_size=auto setting is used as default, which allows fapolicyd to dynamically resize LMDB when package sets and reload requirements change. Status reports provide resize and compaction guidance, and the fapolicyd-cli --compact-trustdb command helps administrators to rebuild oversized databases safely. This reduces manual tuning and prevents reload failures caused by an undersized map.
systemd health monitoring and service recovery
With this update, service monitoring integrates systemd readiness and watchdog notifications tied to actual decision worker progress. If a decision worker stops responding, fapolicyd logs the failure and terminates, which allows systemd to automatically restart the service according to the service policy. This improves unattended recovery and gives service managers a more accurate view of daemon health.
Trust database indexing for interpreted scripts
With this update, the RPM trust database back end indexes non-executable application script files owned by installed packages, such as KDE Logout.qml and polkit JavaScript files. By registering these files in the trust database during package inspection, fapolicyd no longer blocks desktop session actions such as Sleep, Restart, and Shutdown.

Jira:RHEL-212483

fagenrules validates rule syntax before a fapolicyd reload

With this update, the fagenrules script uses the fapolicyd-cli --check-rules command to validate the compiled ruleset before a service reload. This prevents service failures caused by invalid configuration files.

As a result, if validation fails, fagenrules aborts the reload operation, outputs diagnostic details, and preserves the active policy.

Jira:RHEL-13011

fapolicyd provides a sample rule for NFS daemon library access

fapolicyd provides a sample rule in the /usr/share/fapolicyd/sample-rules/41-nfsd.rules file. You can use this rule to allow nfsd to access shared library files hosted on NFS-exported directories.

  • To apply the rule, copy the sample rule file:

    # cp /usr/share/fapolicyd/sample-rules/41-nfsd.rules /etc/fapolicyd/rules.d/
  • Load the updated rules into fapolicyd:

    # fagenrules --load

Jira:RHEL-73816

opencryptoki rebased to version 3.27.0

The opencryptoki packages, which implement the PKCS #11 cryptographic token interface, are rebased to upstream version 3.27.0. This version provides bug fixes and enhancements over the previous version. Notable changes by token type and component include:

General changes across tokens
  • Base support for the PKCS #11 version 3.2 specification, which includes the C_VerifySignature API family (Init, Update, Final) and the key encapsulation APIs C_EncapsulateKey and C_DecapsulateKey
  • Key encapsulation and decapsulation for RSA-PKCS, RSA-OAEP, and ECDH mechanisms across the Soft, ICA, CCA, and EP11 tokens
  • Support for PKCS #11 version 3.0 Edwards and Montgomery key types across all tokens and the p11sak utility
  • Support for the CKM_PUB_KEY_FROM_PRIV_KEY mechanism across the Soft, ICA, CCA, and EP11 tokens
  • A configurable limit for the maximum number of supported token objects
Soft token
  • Support for post-quantum cryptography (PQC) ML-DSA and ML-KEM key types and mechanisms - requires OpenSSL 3.5 or later, or a configured OQS provider
  • Support for DH-PKCS key encapsulation and decapsulation, CKM_ECDH1_COFACTOR_DERIVE, and CKM_ECDH_AES_KEY_WRAP with Montgomery keys
  • Support for CKM_ECDH_X_AES_KEY_WRAP and CKM_ECDH_COF_AES_KEY_WRAP key wrap mechanisms
EP11 token
  • Support for PQC ML-DSA and ML-KEM key types and mechanisms - requires EP11 host library version 4.2 or later, and a CEX8P crypto card with firmware version 9.6 or later on IBM z17, or version 8.39 or later on IBM z16
  • Support for DH-PKCS key encapsulation and decapsulation
CCA token
  • Support for PQC ML-DSA key types and mechanisms - requires CCA version 8.4 or later
  • Support for RSA public exponents 5, 17, and 257
ICA token
  • Support for CKM_ECDH_AES_KEY_WRAP with Montgomery keys
  • Support for CKM_ECDH_X_AES_KEY_WRAP and CKM_ECDH_COF_AES_KEY_WRAP key wrap mechanisms
p11sak utility
  • Support for PKCS #11 version 3.2 ML-DSA and ML-KEM key types
  • Support for key wrap with the CKM_ECDH_X_AES_KEY_WRAP and CKM_ECDH_COF_AES_KEY_WRAP mechanisms
  • A new option for the list-key command to display EP11 session IDs

Jira:RHEL-136096[1]

New package: sequoia-sq

This update introduces the sequoia-sq package, which provides the sq command-line tool to read and inspect OpenPGP certificates. As a result, you can inspect default RHEL RPM signing keys directly from the terminal.

Jira:RHEL-188914[1]

OpenSSL startup certificate self-check removed

This update changes how OpenSSL validates certificates. The internal check of a service’s own certificate chain at startup is no longer performed, as it is the peer’s responsibility to verify the chain during the handshake. Ensure that peer systems, clients or servers, are correctly configured to perform standard certificate chain validation to maintain security.

Jira:RHEL-256875

cryptsetup luksDump correctly reports hash algorithm for Clevis slots

Before this update, when a LUKS device was formatted by using the --hash sha512 option and subsequently bound by using the clevis luks bind command, the cryptsetup luksDump command incorrectly reported SHA-256 instead of the configured SHA-512 hash algorithm. With this update, the cryptsetup luksDump command correctly reports the hash algorithm used during a LUKS device formatting.

Jira:RHEL-163324

SELinux policy supports BIND packages with suffixes

With this update, the SELinux policy supports BIND packages with suffixes, ensuring daemons from all installed BIND packages start in the correct SELinux context.

As a result, you can install multiple BIND packages required for a smooth upgrade of the freeipa-server-dns package.

Jira:RHEL-192093

Custom SELinux context hid_sensor_device_t available for HID-SENSOR devices

With this update, the hid_sensor_device_t, a custom SELinux context, is available for HID-SENSOR devices. It differentiates HID-SENSOR devices from USB devices to ensure correct labeling, improved access control, and STIG compliance.

Jira:RHEL-166739[1]

Enhanced rsyslog statistics integration with Zabbix and granular imkafka metrics

The rsyslog package supports native Zabbix Low-Level Discovery (LLD) format for the impstats module and provides more granular metrics for the imkafka module. These enhancements eliminate the need for additional processing when you integrate rsyslog statistics with Zabbix monitoring systems. As a result, Zabbix can consume rsyslog statistics directly, and imkafka metrics provide finer operational detail.

Jira:RHEL-140914[1]

GnuTLS TLS driver in rsyslog enforces CRL expiration

The GnuTLS Transport Layer Security (TLS) stream driver in rsyslog checks whether configured Certificate Revocation List (CRL) files have expired. When a CRL file is past its validity period, the driver refuses to accept new TLS connections. This enhancement aligns the GnuTLS driver behavior with the OpenSSL driver, which already enforced CRL expiration. As a result, administrators using the GnuTLS driver with the defaultNetstreamDriverCRLFile parameter can ensure that expired CRLs prevent TLS connections.

Jira:RHEL-169794[1]

The rsyslog omelasticsearch module supports configurable TLS parameters

With this update, the omelasticsearch module provides the tls.tlsversion, tls.ciphersuites, and tls.keyexchangegroups configuration parameters. You can use these parameters to configure TLS protocol versions, cipher suites, and key exchange groups when forwarding logs to Elasticsearch over TLS. This update also includes support for post-quantum cryptography (PQC) compatible key exchange algorithms.

Jira:RHEL-193506[1]

Pre-configured systemd timer for automated AIDE integrity checks

The aide package includes the aide-check.timer systemd timer unit for automated integrity checks. With this timer, administrators can schedule periodic Advanced Intrusion Detection Environment (AIDE) integrity checks with CPU quota limits, without requiring custom cron jobs. As a result, administrators can configure AIDE automation by using standard systemd timer controls.

Jira:RHEL-178121[1]

aide supports drop-in configuration files in the /etc/aide.d directory

The aide package supports drop-in configuration files placed in the /etc/aide.d directory. The default /etc/aide.conf configuration file automatically includes *.conf files from /etc/aide.d. This enhancement enables administrators to add custom Advanced Intrusion Detection Environment (AIDE) rules without modifying the main configuration file. As a result, you/administrators can manage AIDE customizations separately from the base configuration.

Jira:RHEL-178122[1]

OpenSCAP rebased to 1.3.16

The OpenSCAP packages have been rebased to upstream version 1.3.16. This version provides bug fixes and various enhancements. For additional information, see the OpenSCAP release notes.

Jira:RHEL-278223[1]

SCAP Security Guide rebased to 0.1.82

For additional information, see the SCAP Security Guide release notes.

Jira:RHEL-242528

4.3. Software management

reposync supports a new --min-buildtime option

Before this update, synchronizing large repositories could be expensive because they could contain multiple versions of the same package built over time. With this release, the reposync utility supports a new --min-buildtime <YYYY-MM-DD> option. As a result, you can synchronize only a subset of the packages that were built since the specified timestamp.

Jira:RHEL-119475[1]

DNF preserves POSIX ACLs on the rotating dnf.log file

The DNF utility copies POSIX access control lists (ACLs) from the existing /var/log/dnf.log file to a new, empty log file during rotation. As a result, custom permissions granted to specific users survive the log rotation process.

Jira:RHEL-122013

4.4. Infrastructure services

cyrus-imapd reconstruct gains the --fix-uidvalidity option

Before this update, the reconstruct command could not repair UIDVALIDITY mismatches between the mailbox index (cyrus.index) and the mailboxes database (mailboxes.db), causing mail transfer failures. With this update, the reconstruct command includes a new --fix-uidvalidity option that detects and corrects such mismatches.

By default, reconstruct updates the index to match the database; when combined with -M, the command updates the database to match the index instead. This option is specific to the Red Hat build of Cyrus IMAP.

Jira:RHEL-76907[1]

PHP 8.4 available

RHEL 9.9 includes PHP 8.4. This version provides notable enhancements and bug fixes over version 8.3, most notably the following:

  • Property hooks support computed properties that IDEs and static analysis tools understand natively.
  • Asymmetric visibility controls the scope to write to a property independently from the scope to read the property.
  • The #[\Deprecated] attribute makes the existing deprecation mechanism available to user-defined functions, methods, and class constants.
  • A new DOM API is available within the Dom namespace, which includes standards-compliant support for parsing HTML5 documents.
  • The BcMath\Number object enables object-oriented usage and standard mathematical operators when working with arbitrary precision numbers.
  • The array_find(), array_find_key(), array_any(), and array_all() functions are available.
  • You can access properties and methods of a newly instantiated object without wrapping the new expression in parentheses.

Jira:RHEL-105517

SystemTap rebased to version 5.5

SystemTap has been rebased to version 5.5 and includes the following changes:

  • The @enum() script construct resolves enumeration values in probed programs.
  • String-concatenation chains that use the . operator provide improved compilation and execution performance.
  • The stap-serverd infrastructure includes several security improvements.

Jira:RHEL-169427[1]

elfutils includes several enhancements across debugging and analysis tools

The elfutils tools and libraries include the following changes:

  • debuginfod supports the --home-redirect and --home-html options to redirect document root requests to a custom URL or serve a custom HTML file.
  • debuginfod supports the --max-depth option to limit scanner depth and Metadata queries in debuginfod support lookup by build ID. The libdebuginfod library includes the debuginfod_default_progressfn function.
  • debuginfod-find honors the DEBUGINFOD_PROGRESS environment variable when invoked without the -v option.
  • elflint recognizes .debug_*.dwo sections, .relro_padding sections, SHT_AARCH64_ATTRIBUTES, SHT_LLVM_LTO, and SHT_LLVM_ADDRSIG.
  • elflint accepts R_X86_64_DTPOFF64 in ET_REL files and includes additional lints for PT_LOAD, PT_INTERP, and PT_PHDR segments.
  • libdw includes language constants for Erlang, Elixir, and Gleam. It also processes sections in DWARF package (.dwp) files when the .debug_dwp section is present.
  • libdwfl improves handling of Linux kernel object files with non-zero sh_addr fields.
  • libdwfl_stacktrace supports AArch64 and 32-bit ARM architectures. The interface remains experimental and might be subject to API or ABI changes.
  • libelf includes new manual pages for gelf.h functions and resolves assertion failures in gelf_getmove and gelf_update_move related to ELF class handling.
  • libelf handles binaries with 65280 or more sections when section zero headers are not loaded.
  • readelf improves support for DWARF package (.dwp) file sections and provides improved output formatting for .gcc_except_table.

    The experimental stacktrace tool is scheduled for removal in the next release and will be replaced by the upcoming eu-stackprof tool.

Jira:RHEL-169428[1]

Valgrind rebased to version 3.27.1

The valgrind package has been rebased from version to 3.27.1. The enhancements improve platform support on IBM Z systems, extend application introspection capabilities through new client requests, add support for recent Linux memory-management features to provide additional debugging and analysis options in Helgrind.

This update includes the following notable changes:

  • Added the VALGRIND_REPLACES_MALLOC client request that supports applications to determine whether the active Valgrind tool replaces the malloc() implementation.
  • Added the VALGRIND_GET_TOOLNAME client request that returns the name of the currently running Valgrind tool.
  • Added support for Linux lightweight guard pages created with madvise(MADV_GUARD_INSTALL).
  • The minimum value accepted by the --num-callers option is 2.
  • On IBM Z (s390x) systems, support for machine models older than z196 has been removed.
  • On IBM Z (s390x) systems, support has been added for new z/Architecture features introduced in the 15th edition. This supports running of binaries compiled with -march=arch15 or -march=z17 and support for MSA extensions 10 through 13.
  • In Helgrind, a new --show-events=0|1|2 options have been added to control tracing of internal synchronization, threading, and memory events.
  • In Helgrind, a new --track-destroy=no|yes|all options have been added to detect missing pthread_mutex_destroy() and pthread_rwlock_destroy() calls.

Jira:RHEL-169431[1]

4.5. Networking

bind rebased to 9.16.50

The bind package is rebased to upstream version 9.16.50. This update provides bug fixes and enhancements, including the following key changes:

  • Adds RESOLVER.ARPA to the built-in empty zones.
  • Adds the new reuseport and update-quota configuration options.
  • Deprecates the auto-dnssec option, which is removed in BIND 9.20.0. Migrate to dnssec-policy instead.
  • Adds support for parsing and validating the dohpath service parameter in SVCB records.
  • Exposes the EDNS Client-Subnet (ECS) option to DLZ modules.
  • Deprecates the Differentiated Services Code Point (DSCP) feature and outputs a warning when used.
  • Significantly improves catalog zone performance.
  • Displays a warning when using zones with dnssec-policy without explicit configuration of dynamic DNS or inline-signing.

Jira:RHEL-6454

The ip link command supports displaying the HSR protocol version

With this update of the iproute package, the ip link command supports displaying the High-availability Seamless Redundancy (HSR) protocol version configured on an interface. This improvement simplifies the verification of the HSR version in fault-tolerant Ethernet network environments.

Jira:RHEL-134979[1]

RHEL supports TCP-AO in networking sockets

With this enhancement, RHEL supports the TCP Authentication Option (TCP-AO) as specified in RFC 5925. This feature provides a secure alternative to the TCP-MD5 (RFC 2385) extension, which is vulnerable to cryptographic collision attacks due to known weaknesses in the MD5 algorithm.

System administrators and application developers can now deprecate TCP-MD5 and transition to the more secure TCP-AO authentication method. You can configure TCP-AO by using standard socket APIs, specifically the setsockopt() system call, to bind TCP-AO keychains to active or listening sockets.

For more information, see the /usr/share/doc/kernel-doc-<version>/Documentation/networking/tcp_ao.rst file provided by the kernel-doc package.

Jira:RHEL-142637[1]

The sendmail-milter package is available in the RHEL 9 AppStream repository

The sendmail-milter package has moved from the CodeReady Linux Builder (CRB) repository to the RHEL 9 AppStream repository. As a result, you can install the sendmail-milter package without enabling the CRB repository.

Jira:RHEL-147755

The nmcli utility can configure interfaces as managed or unmanaged

With this enhancement, you can use the nmcli device set <interface> managed --permanent <option> command to permanently configure whether NetworkManager manages an interface. You can use the following options:

  • no: The interface is unmanaged, but its current kernel state is preserved.
  • down: The interface is unmanaged, and its kernel state is immediately set to down.
  • yes: The interface is managed, but its current kernel state is preserved.
  • up: The interface is managed, and its kernel state is immediately set to up.
  • reset: NetworkManager clears the management status of the interface and returns to defaults or more general configuration rules that might apply.

    If you do not require the flexibility to match multiple interfaces by certain criteria, such as wildcards, prefer nmcli over creating a device section in the NetworkManager configuration files.

Jira:RHEL-157392[1]

Nmstate supports IPIP, IP6IP6, IPIP6, and SIT interfaces

With this enhancement, you can use Nmstate to configure the following tunnel interfaces:

  • IPv4 over IPv4 (IPIP)
  • IPv4 over IPv6 (IPIP6)
  • IPv6 over IPv6 (IP6IP6)
  • Simple Internet Transition (SIT)

    In the Nmstate YAML file, you can configure all properties that NetworkManager supports for these interfaces, such as flow label, flags, and encapsulation limit.

Jira:RHEL-166367

The zl3073x DPLL driver supports precise phase synchronization

The zl3073x Digital Phase Locked Loop (DPLL) driver now supports reference-synchronization (ref-sync) pairing. With this feature, you can pair a high-frequency clock source with a separate, low-frequency synchronization signal, such as 1PPS or 8 kHz, by using hardware device tree settings.

As a result, you can achieve highly accurate phase alignment in timing-sensitive environments where clock and sync sources are provided separately. The driver automatically handles frequency validation and manages reference priorities if a source disconnects, simplifying configuration and preventing errors.

Jira:RHEL-167274[1]

zl3073x DPLL driver rebased to version 7.1

The zl3073x Digital Phase Locked Loop (DPLL) driver has been upgraded to upstream version 7.1. The most notable changes are:

  • Runtime detection: The driver dynamically detects chip variants and channel counts. This eliminates the need for compile-time hardware selection and simplifies deployment.
  • Temperature monitoring: Supported chip models include die temperature monitoring capabilities to enable critical diagnostics and device health assessments.
  • Frequency tracking: New frequency tracking metrics improve troubleshooting and observability of clock synchronization infrastructure.
  • State management: A structured caching system enhances internal state management and streamlines support for future chip variants.

Jira:RHEL-172939[1]

4.6. Kernel

Red Hat Enterprise Linux 9.9 is distributed with the kernel version 5.14.0-741.11.1.

New kernel sysctl parameters to control memory reclaim aggressiveness

Before this update, under sustained memory pressure, applications could remain on the memory direct reclaim path, reclaiming only small amounts of memory while severely degrading system performance and delaying or preventing the kernel from invoking the out-of-memory (OOM) killer. With this enhancement, the kernel provides two new sysctl parameters that adjust memory reclaim aggressiveness, giving you control over when the OOM killer is invoked under sustained memory pressure.

The available sysctl parameters are:

  • sysctl_dr_prio_drop provides a way to bail out earlier from the direct reclaim path by reducing the number of loops taken when scanning over pages. The normal reclaim path scans DEF_PRIORITY times (12 times), and sysctl_dr_prio_drop decrements from that counter. The default value is 0 and can be increased up to 12.
  • sysctl_mem_cgroup_reclaim_retries adjusts memory reclaim aggressiveness by controlling the number of reclaim retries within a cgroup. The default value is 16 and can be decreased down to 0.

    As a result, when memory cannot be reclaimed efficiently, the kernel invokes the OOM killer as expected, preventing the reclaim path from stalling.

Jira:RHEL-100912[1]

The CentOS Stream kernel enables Runtime Verification monitors

Before this update, the Runtime Verification (RV) monitors were compile-disabled for the CentOS Stream kernel. With this update, the kernel enables RV monitors, including the sched and rtapp monitors, to improve kernel functionality and reduce latency for real-time applications.

Jira:RHEL-116707[1]

Custom eBPF program execution in the RTLA framework

With this update, the Real-Time Linux Analysis (RTLA) framework supports the execution of custom extended Berkeley Packet Filter (eBPF) programs, enabling low-latency responses to threshold overflows. You can also use a custom eBPF program to process timer latency in real time.

Jira:RHEL-153391[1]

The ima-evm-utils package enforces IMA appraisal on previously unevaluated file systems

Before this update, the Integrity Measurement Architecture (IMA) policy did not appraise executables on certain file systems, such as /proc, /sysfs, and /tmp. This gap allowed the root user to execute modified executables on those file systems without IMA verification.

With this update, the IMA policy appraises all execution attempts on these file systems, which reduces the attack surface. The only exception is temporary executable memory mapping, which the policy still allows to support libraries, such as libffi that require it.

As a result, IMA integrity enforcement is now more comprehensive, and modified executables on previously unevaluated file systems are no longer permitted to run without proper appraisal.

Jira:RHEL-153545[1]

rtla timerlat auto-analysis displays stack traces for EFI calls

Before this update, the rtla timerlat auto-analysis (AA) tool omitted stack trace entries for kernel functions that could not be converted into symbols as well as any succeeding stack entries. With this release, a command-line option is available to control how the tool handles addresses for unknown functions, allowing the user to skip unknown addresses rather than stopping on them, or, alternatively, display all unknown addresses. As a result, you can identify latency spikes during automated tests more effectively.

Jira:RHEL-155232[1]

Kernel Samepage Merging can now deduplicate only zero pages

With this enhancement, the kernel package provides a new redhat_only_zero_pages sysfs parameter for Kernel Samepage Merging (KSM). When you enable this parameter, KSM merges only pages whose content matches the zero page and skips all other pages during scanning. As a result, you can use KSM to combine zero-filled memory pages across the system without the overhead of deduplicating pages that have other content.

This option is useful in the following scenarios:

  • Virtualization hosts that run Microsoft Windows guests, which commonly fill large amounts of memory with zeros.
  • Systems that boot with the init_on_free=1 kernel parameter, which fills freed memory with zeros.

To enable the option, set the /sys/kernel/mm/ksm/redhat_only_zero_pages parameter to 1.

This option is also available in RHEL 10. As a result, OpenShift Virtualization nodes keep the same KSM behavior when you migrate them from RHEL 9-based Red Hat Enterprise Linux CoreOS (RHCOS) to RHEL 10-based RHCOS.

+ Jira:RHEL-185517[1]

libzpc version 2 packages are available

RHEL introduces the libzpc-provider and libzpc-tools packages to support security features on new IBM Z systems. Version 2 of libzpc uses OpenSSL to provide these capabilities.

Jira:RHEL-186086[1]

MPAM support for virtual machines on ARM

This update adds support for Memory System Resource Partitioning and Monitoring (MPAM) on 64-bit ARM systems (also known as AArch64). With this feature, you can use the resctrl file system to monitor and allocate L3 cache and memory bandwidth on MPAM-compatible hardware, such as NVIDIA Grace-based systems. As a result, you can optimize workload performance, including the performance of virtual machines with assigned GPUs on 64-bit ARM hosts that use Grace-Hopper or Grace-Blackwell hardware.

Jira:RHEL-164227[1]

4.7. Boot loader

grub2 provides support for booting from NVMe over Fibre Channel devices on IBM Power Systems

With this release, the grub2 bootloader adds support for NVMe over Fibre Channel (NVMeoFC) on the ppc64le architecture. Previously, grub2 could not discover or boot from NVMe namespaces presented over a Fibre Channel fabric, which limited the storage configurations available for the boot device on IBM Power Systems.

As a result, you can now install and boot Red Hat Enterprise Linux from NVMeoFC-attached storage on IBM Power Systems. This support also includes booting from multiple NVMe boot paths, enabling multipath boot configurations for NVMeoFC devices.

Jira:RHEL-15853[1]

4.8. File systems and storage

libaio rebased to version 0.3.112

With this update, the libaio library is rebased to version 0.3.112 or later. This update reintroduces the asynchronous polling feature to improve I/O performance in database-centric workloads. This change restores feature and performance parity between RHEL 8 and RHEL 9.

Jira:RHEL-192174[1]

4.9. High availability and clusters

New pcs commands simplify the cluster node renaming workflow

Before this update, renaming a cluster node required numerous manual configuration edits across multiple files.
This update adds the pcs cluster node rename-corosync and pcs cluster node rename-cib commands to automate and streamline the renaming process.

As a result, you can rename cluster nodes with significantly fewer manual interventions, which reduces the risk of misconfiguration.

Jira:RHEL-149172

pcs validates resource and fencing operations during updates and additions

Before this update, commands such as pcs resource update …​ op and pcs resource op add did not validate operation names or option values against the resource agent. As a consequence, pcs silently accepted unsupported operations or invalid values, which could lead to cluster misconfigurations.

This update introduces strict validation checks to resource and stonith configuration update commands. If you specify an operation name that the agent does not support, pcs returns an error, though you can override this check using the --force option. Invalid option values (such as role or on-fail) now trigger non-overridable errors, matching the existing behavior of pcs resource create. If pcs cannot load the agent metadata, it displays a warning but allows the command to proceed to avoid breaking existing automation workflows.

Additionally, the name=<value> syntax in pcs resource op add and pcs resource update …​ op is deprecated. You must pass the operation name as the first argument.

Jira:RHEL-176268[1]

The sybaseASE resource agent requires explicit sybase_ase configuration

The sybaseASE resource agent requires you to explicitly configure the sybase_ase parameter instead of auto-detecting it from the SYBASE.env file. This change was implemented to prevent probe operation failures when sybase_home is a cluster-managed filesystem that is not yet mounted. As a result, monitor and stop operations return correct status codes even when the sybase_home filesystem is unavailable during resource probing.

Jira:RHEL-182808[1]

The nfsserver resource agent monitors critical NFSv4 components

The nfsserver resource agent actively monitors the rpc.mountd and nfsdcld processes in addition to the nfs-server.service unit. This enhancement was implemented to prevent silent service degradation when these critical NFSv4 components terminate unexpectedly while the parent nfs-server.service remains active. As a result, the Pacemaker cluster detects component failures and initiates recovery actions, eliminating the need for manual systemd drop-in configurations to bind service lifecycles.

Jira:RHEL-184272[1]

Token-based authentication for the fence_vmware_rest fence agent

The fence_vmware_rest fence agent supports token-based authentication as an alternative to password-based authentication. This feature was implemented to improve security by eliminating the need to store passwords in fence device configuration. As a result, you can configure passwordless authentication by using the --token-script parameter to specify a script that retrieves authentication tokens from the VMware vCenter API.

Jira:RHEL-193739[1]

4.10. Compilers and development tools

gdb package rebased to version 17.2

With this release, the GNU Debugger (gdb) is rebased to upstream version 17.2. This update provides multiple bug fixes and enhancements over the previously available version.

Notable enhancements include the following:

  • Added support for x86-64 Control-flow Enforcement Technology (CET) shadow stacks.
  • Added support for debugging Linux programs that use AArch64 Guarded Control Stacks (GCS).
  • Extended the record feature to support the RISC-V rv64gc architecture.
  • Added built-in Thread-Local Storage (TLS) support on Linux as a fallback when libthread_db is not available, on the x86_64, aarch64, ppc64, s390x, and riscv architectures.
  • Added the -stopped and -running options to the info threads command to limit the list of displayed threads.
  • Improved linker namespace support, including the $_linker_namespace and $linker_namespace_count convenience variables.
  • Enhanced the Python API, and added support for the completions request in the Debugger Adapter Protocol (DAP).
  • Added support for emoji in output, which you can control with the new set style emoji command.

    This update also includes the following incompatible changes:

  • Support for Python versions earlier than 3.4 is removed.
  • Support for the stabs debugging format and the a.out/dbx object format is deprecated and will be removed in gdb 18.
  • Support for user-level statically defined tracing (UST) in gdbserver is removed.

Jira:RHEL-126211[1]

LLVM Toolset rebased to version 22.1.8

llvm-toolset is rebased to upstream LLVM 22.1.8 in Red Hat Enterprise Linux 9.9. This update provides new features, bug fixes, and performance improvements over the previously shipped version.

Notable changes include the following:

  • The llvm-toolset package is rebased from the LLVM 21.x release series to the LLVM 22.1.8 release series.
  • Fixed an issue on the IBM Z (s390x) architecture that caused data corruption after the concat_vectors(trunc(scalar), undef) operation.
  • Fixed an issue where the clang-22 compiler crashed when building systemd.
  • Backported important fixes from the upstream LLVM project.
  • Removed the llvm21 compatibility package from the buildroot.

    For a complete list of changes, see the upstream LLVM release notes.

Jira:RHEL-140408

rust rebased to version 1.97

The rust package is updated to version 1.97. This update applies changes from upstream Rust versions 1.93 through 1.97, providing multiple bug fixes, enhancements, and security fixes over the previous version.

With this update, Rust switches to the v0 symbol mangling format. This change is not visible to most users. However, if you are debugging, using a sampling profiler such as perf, or using any other tool that inspects binaries, the raw symbol names differ and might not print in the demangled form. The v0 format provides more accurate demangling of symbols, notably for generic types. The gcc-toolset-12 package and later versions support this format, but perf on RHEL 9 does not.

Other notable changes are:

  • The new core::range types (Range, RangeFrom, and RangeInclusive) now implement the Copy trait. These are distinct from the long-standing range types in core::ops, which do not implement Copy. Unlike the older types, the new core::range types are not iterators directly, but are convertible into iterators through IntoIterator.
  • The <[T]>::array_windows method provides fixed-length sliding windows over slices with compile-time known sizes, improving SIMD optimization opportunities.
  • The assert_matches! and debug_assert_matches! macros are now available in the standard library, producing more informative failure output than assert!(matches!(..)).
  • The cfg_select! macro provides a built-in alternative to the cfg-if crate for compile-time configuration matching.
  • The if let guards are now supported in match expressions, allowing pattern-based conditionals within match arms.
  • Cargo now supports TOML 1.1 for the Cargo.toml project manifest and the .cargo/config.toml configuration file.

Jira:RHEL-141251

The gcc-toolset-16 package is available
GCC Toolset 16 is a compiler toolset that provides recent stable versions of development tools. It is available as an Application Stream, delivered as a Software Collection in the AppStream repository. You can install the toolset by using the gcc-toolset-16 package, which pulls in the complete tool suite as a dependency.

GCC Toolset 16 installs to the /opt/rh/gcc-toolset-16/ directory. As a result, you can use it alongside the system version of GCC without changing the default compiler.

To install and use GCC Toolset 16, run the following commands:

  • To install the toolset, enter the dnf install gcc-toolset-16 command.
  • To run a tool from the toolset, enter the gcc-toolset-16-env bash command.
  • To start a shell session in which the toolset versions of the tools take precedence, enter scl enable gcc-toolset-16 bash.

GCC 16 introduces changes that can require updates to existing code. Notable changes are:

  • The default language version for C++ compilation changes from -std=gnu{pp}17 to -std=gnu{pp}20. Code that requires an older standard must set it explicitly.
  • The json format for -fdiagnostics-format= is removed. Use the SARIF format for machine-readable diagnostics instead.
  • The ABI of std::variant is updated for C++20 conformance.
  • std::generate_canonical is updated to match the latest specification.
  • Template and other diagnostics are displayed with nested indentation by default. To restore the previous output, use -fno-diagnostics-show-nesting.
  • On the AArch64 architecture, PC-relative literal loads are deprecated.
  • On the 64-bit x86 architecture, several deprecated ISA features are removed from the -march= options.

For more information about porting your code, see Porting to GCC 16.

+ Jira:RHEL-160025

New gcc-toolset-16-gcc package in GCC Toolset 16
The gcc-toolset-16-gcc package is available in RHEL 9.9 as part of GCC Toolset 16 and provides version 16.2.1 of the GNU Compiler Collection (GCC). GCC Toolset is a Red Hat offering that provides more recent versions of development tools alongside the versions that ship with the base RHEL system. The GCC Toolset tools are available as an Application Stream and do not replace the default system compiler.

To install the gcc-toolset-16-gcc package, run the dnf install gcc-toolset-16 command. This metapackage also installs the matching gcc-toolset-16-binutils package.

This update of GCC provides many bug fixes and enhancements over the version in the previous GCC Toolset.

General improvements:

  • Link-Time Optimization (LTO) handles top-level assembly statements more effectively.
  • The vectorizer gains enhancements for in-loop reduction parallelism and for loops whose iteration count cannot be determined at compile time.
  • Speculative devirtualization is extended to general indirect function calls.
  • New experimental HTML diagnostic output is available through the -fdiagnostics-add-output=experimental-html option.
  • The SARIF diagnostic format provides improved metadata and nested location tracking.
  • The static analyzer adds basic C++ support, including Named Return Value Optimization and exception handling.

The C language:

  • The counted_by attribute is extended to pointer-type members for better compile-time and runtime bounds checking of flexible array members.
  • The new _Maxof and _Minof operators determine the maximum and minimum representable values of integer types at compile time.
  • Compound literals with empty initializers can have a variable size.

The C++ language:

  • The default C++ standard changes from -std=gnu++17 to -std=gnu++20. Code that requires an earlier standard should specify it explicitly, for example by using -std=gnu++17.
  • GCC 16 adds support for several C++26 features, including Reflection, Expansion statements, Contracts, and constexpr exceptions.
  • The libstdc++ library adds C++26 components such as std::simd, std::inplace_vector, std::optional<T&>, and std::copyable_function, and marks the C++20 components as supported.
  • GCC 16 adds support for several C++23 features, including a change to the scope of lambda trailing return types, explicit lifetime management, and character encoding of diagnostic text.
  • Experimental support for C++20 modules is improved. The new --compile-std-module option builds the standard library header unit and the std and std.compat modules before compiling the specified source files. C++20 modules support remains experimental and is enabled by using the -fmodules option.

The Fortran language:

  • Coarrays are supported through native shared-memory multithreading, including the TEAM feature.
  • GCC 16 adds support for the REDUCE intrinsic, the GENERIC statement, and selected Fortran 2023 features such as the sinpi intrinsic and the split subroutine.

Architecture-specific improvements:

  • On AMD and Intel 64-bit systems, GCC 16 adds support for AMD Zen 6 processors (-march=znver6) and Intel Wildcat Lake and Nova Lake processors.
  • On the 64-bit ARM architecture, GCC 16 adds support for the Armv9.6-A architecture and new CPUs, and Function Multi Versioning (FMV) is fully supported.
  • On the 64-bit IBM Z architecture, GCC 16 adds support for the _BitInt(N) and _Float16 types.

    Jira:RHEL-169583

New gcc-toolset-16-binutils package is available

With this enhancement, the gcc-toolset-16-binutils package is available as part of GCC Toolset 16. This package provides version 2.46 of the GNU binary utilities, including the ld linker, the as assembler, and utilities such as objdump, readelf, nm, and strip for creating, inspecting, and modifying object files, archives, and other binaries.

This version of the binary utilities provides the following notable enhancements:

  • The utilities add support for new instructions in the AMD, Arm, and RISC-V architectures.
  • The utilities add support for version 3 of the SFrame stack trace format
  • You can display the contents of Global Offset Tables (GOT) by using the readelf tool.
  • Improved linker tagging support

Jira:RHEL-169585

Improved performance of string and memory functions on AMD Zen 5 processors

The glibc package provides 512-bit EVEX instruction variants of several string and memory functions by default on supported AMD Zen 5 processors. This change takes full advantage of the native 512-bit execution units on newer AMD hardware to increase execution throughput and can reduce execution time by up to 64 percent. The affected functions include strchr, strlen, strnlen, strrchr, strchrnul, and memchr.

In addition, a new runtime tunable, glibc.cpu.x86_cpu_features.preferred, is available. You can use this tunable to manually control the hardware feature preference.

Jira:RHEL-175520[1]

4.11. Identity Management

Performance of user lookups for users with large group memberships has been improved

Previously, when an LDAP user belonged to a large number of groups, for example 5,000 or more, user lookup operations such as id <username> took several minutes or timed out completely. This issue occurred because SSSD handled local database operations and group membership caching inefficiently during lookups.

With this update, SSSD includes multiple performance optimizations for user lookups and group membership handling. While these improvements apply to all configurations, they are most noticeable in RFC 2307 environments without nested groups. As a result, user lookups for users with thousands of group memberships complete faster and no longer time out.

Jira:RHEL-150439

SSSD supports mapping Active Directory AMA SIDs to authentication indicators

With this enhancement, SSSD introduces the pam_gssapi_indicators_apply configuration option. SSSD uses this option to map Security Identifiers (SIDs) from a Kerberos ticket Privilege Attribute Certificate (PAC) to authentication indicators during pam_sss_gss requests. This provides support for Active Directory Authentication Mechanism Assurance, which uses SIDs to track authentication methods such as smart card logins.

Administrators can define mapping rules in sssd.conf using SID:<SID>:<authentication_indicator> triples. As a result, applications relying on pam_sss_gss.so can enforce access restrictions based on Active Directory authentication methods in the same way as IdM.

Jira:RHEL-152067[1]

python-qrcode rebased to 8.0

The python-qrcode packages have been rebased to upstream version 8.0. This version provides important fixes and enhancements, most notably the following:

  • Support for Python 3.11 and 3.12 is available.
  • The typing_extensions runtime dependency is removed.

Jira:RHEL-155709

Passwordless authentication mechanisms are available in GDM (Technology Preview)

Identity Management (IdM) administrators can configure the GNOME Display Manager (GDM) login screen to display multiple authentication mechanisms. In addition to existing smart card authentication, administrators can enable new passwordless methods, such as external identity providers (EIdP) and FIDO2-compatible passkeys. Enable the with-switchable-auth feature in authselect and configure the System Security Services Daemon (SSSD) to allow users to choose their preferred credential directly at login.

Passwordless authentication aligns with zero trust architecture by replacing static passwords with cryptographic proof that verifies both user identity and device integrity for each access request. For detailed configuration instructions, see Enabling authentication mechanism selection in GDM by using SSSD.

Jira:RHEL-156519[1]

openldap rebased to 2.6.13

The openldap packages, which provide Lightweight Directory Access Protocol (LDAP) client utilities and libraries, have been rebased to upstream version 2.6.13. This rebase includes the following fixes from the intervening upstream releases:

  • The libldap library prevents out-of-bounds memory access when parsing schema definitions.
  • The liblber library avoids a potential null pointer dereference if memory allocation fails when replacing a value.
  • The libldap library rejects empty attribute types in LDAP Data Interchange Format (LDIF) input and correctly handles NUL bytes when parsing schema definitions and LDIF input.
  • The ldap_result() function correctly handles the LDAP_MSG_RECEIVED mode.
  • The libldap library correctly handles failures when configuring OpenSSL cipher suites or performing digest operations.

Jira:RHEL-157475[1]

python-jwcrypto rebased to 1.5.7

The python-jwcrypto packages have been rebased to upstream version 1.5.7. This version provides important fixes and enhancements, most notably the following:

  • Ed25519 and Ed448 signature algorithm support is available.
  • JWE general serialization syntax support is available.
  • HMAC key length enforcement is applied for improved security hardening.

Jira:RHEL-168728

389-ds-base rebased to 2.9.0

The 389-ds-base packages, which provide the 389 Directory Server, have been rebased to upstream version 2.9.0. This version provides the following fixes and enhancements:

  • Directory Server threads have names visible to operating system diagnostic tools.
  • Work queue metrics help administrators identify processing backlogs.
  • Lightweight Directory Access Protocol (LDAP) bind operations handle escaped interior spaces in distinguished names correctly.
  • The healthcheck tool limits MemberOf index recommendations to backends within the plug-in scope.
  • Directory Server shuts down cleanly when deferred MemberOf updates are in progress.

Jira:RHEL-169530

Directory Server threads have OS-visible names for diagnostics

Directory Server uses pthread_setname_np to assign OS-level names to all ns-slapd threads. The server designates worker threads as worker-0 through worker-N and applies descriptive names like listener, repl-prot, and repl-inc-res to other threads. All names stay within the 15-character Linux limit. This enhancement enables support engineers and administrators to identify thread purpose directly in tools such as pstack, top -H, and perf output without correlating thread IDs against internal data structures.

Jira:RHEL-174525[1]

python-ldap rebased to 3.4.7

The python-ldap packages, which provide a Python application programming interface (API) for Lightweight Directory Access Protocol (LDAP) servers, have been rebased to upstream version 3.4.7. This rebase includes the following fixes from the intervening upstream releases:

  • The python-ldap library validates the attrlist parameter before use to prevent memory errors caused by type mismatches.
  • The ReconnectLDAPObject class reconnects after UNAVAILABLE, CONNECT_ERROR, and TIMEOUT errors, improving recovery during server restarts.
  • The ldap.filter.escape_filter_chars function requires str input when escape_mode=1 and correctly escapes filter values.
  • The ldap.dn.escape_dn_chars function correctly escapes NUL characters as \00 in distinguished names.
  • The extop.dds module correctly handles requestName and requestValue.
  • The ldif and ldap.schema modules close sockets when they finish using them.

Jira:RHEL-183876[1]

python-pyasn1 rebased to 0.6.4

The python-pyasn1 packages, which provide tools for encoding and decoding Abstract Syntax Notation One (ASN.1) data in Python, have been rebased to upstream version 0.6.4. This version provides the following security fixes:

  • Object identifier and relative object identifier decoders process identifiers in linear time, avoiding excessive processor use from specially crafted input.
  • Decoders reject long-form tag identifiers longer than 20 octets, preventing excessive processor and memory use.
  • Conversion of ASN.1 REAL values with large decimal exponents to Python floating-point values avoids excessive processor and memory use.

Jira:RHEL-211095[1]

The LMDB backend in Directory Server is fully supported

The Lightning Memory-Mapped Database (LMDB) backend in 389-ds-base, available as a Technology Preview before this update, is fully supported starting with RHEL 9.9. As a result, you can use the LMDB backend for Directory Server databases in production environments with full support.

Jira:RHEL-228260

ipa rebased to 4.13.4

The ipa packages, which provide centralized Identity Management (IdM) services for managing users, hosts, authentication, and access policies, have been rebased to upstream version 4.13.4. This version provides important fixes and enhancements, most notably the following:

  • Passwordless authentication methods remain available when a user’s password has expired. Password-based methods still enforce password expiration.
  • The ipa-otpd authentication service no longer crashes during passkey authentication.
  • The ipa-migrate tool skips replication-conflict entries instead of failing while importing them.
  • The ipa-migrate tool migrates Domain Name System (DNS) locations and users' Secure Shell (SSH) public keys.
  • Identity Management (IdM) server installation avoids an approximately two-minute delay.

Jira:RHEL-238684[1]

The ipauser and ipagroup Ansible modules support a new query state for lookups

The ipauser and ipagroup modules in the ansible-freeipa package support a new query state that retrieves information about Identity Management (IdM) users and groups without modifying them. You can control which fields the query returns by using the query_param option, which accepts BASE for the essential fields, ALL for the complete field set, PKEY_ONLY for primary keys only, or a custom list of specific field names. As a result, you can register the output and consume it later in the same playbook to drive conditional tasks, build reports, or audit existing entries.

Jira:RHELDOCS-22299

4.12. SSSD

authselect disables group merging by default

The authselect utility disables group merging by default. Most deployments do not require group merging, and disabling it prevents group lookups from contacting every identity provider to improve system performance.

If your environment requires the system to combine group records from multiple Name Service Switch (NSS) sources, you must enable the feature by running the authselect enable-feature with-group-merging command.

Previously, authselect enabled group merging by default. This forced all group lookups to contact local files, SSSD, and systemd, which caused severe performance degradation under certain conditions.

Jira:RHEL-94650[1]

4.13. The web console

cockpit rebased to version 366

The cockpit packages are rebased to upstream version 366, which provides important bug fixes and enhancements over the previous version. Notable changes include:

  • The web console adds Wi-Fi support to the Networking page, where you can manage wireless interfaces and connections without command-line utilities.
  • When you create a new network interface, the web console no longer activates the interface by default. Instead, the web console redirects you to the detail page for the new interface. This change ensures that you can fully configure the interface, such as a VLAN interface, before you manually activate it.

Jira:RHEL-157464

The MaxConcurrentConnections configuration option is available

With the release of the RHSA-2026:98463 advisory, you can configure MaxConcurrentConnections in the [WebService] section of the /etc/cockpit/cockpit.conf file to restrict concurrent HTTP connections on the web console port. Connection attempts that exceed the specified limit are rejected immediately before the server processes inbound traffic. This helps protect the system against denial-of-service (DoS) and socket exhaustion.

The default limit is 500. Unlike the MaxStartups option, which limits concurrent unauthenticated login attempts, MaxConcurrentConnections drops excess connections at the HTTP layer.

Jira:RHELDOCS-22919[1]

4.14. Red Hat Enterprise Linux System Roles

The timesync_ntp_servers list supports authentication keys

The timesync_ntp_servers list includes a new key parameter that specifies an authentication key for a Network Time Protocol (NTP) server. The key value includes the key ID, an optional type, and the key string, as described in the chrony.conf file documentation. To secure the key, encrypt it by using Ansible Vault. As a result, you can ensure that time synchronization between managed hosts and NTP servers is authenticated.

Jira:RHEL-145210[1]

The podman RHEL system role supports restarting Quadlet services when dependent files or secrets change

With this update, the podman RHEL system role provides two new parameters, restarts and restarts_on, that enable Quadlet services to automatically restart when their file or secret dependencies change. You can use these parameters to manage service restarts:

  • restarts: Add this parameter to a file or secret item to specify which services to restart when that file changes.
  • restarts_on: Add this parameter to a container to specify which files or secrets trigger a restart of the associated service.

    As a result, this enhancement ensures that configuration changes or updated secrets, such as passwords, tokens, or keys, take effect without requiring manual intervention. The Quadlet services restart automatically when the files and secrets they depend on are changed.

Jira:RHEL-145225[1]

sshd supports the GSSAPIAllowS4U2Self and GSSAPIProxyS4U2Services options

With this update, the sshd RHEL system role supports the GSSAPIAllowS4U2Self and GSSAPIProxyS4U2Services configuration options. As a result, you can set the RHEL system role variables to manage Kerberos S4U credential delegation settings in the sshd_config file across managed hosts.

Jira:RHEL-167858[1]

The auditd RHEL system role automates audit logging management

This update introduces a new auditd RHEL system role, which uses Ansible to automate management of the Linux Audit daemon. You can configure daemon settings in /etc/audit/auditd.conf, and deploy persistent audit rules to /etc/audit/rules.d/.

With this system role, you can standardize audit logging across your infrastructure without writing custom playbooks or service workaround scripts. As a result, service reloads and policy updates run safely across managed systems without interrupting management workflows or violating daemon lifecycle constraints.

Jira:RHEL-170879

The trustee_server and trustee_client RHEL system roles are available

RHEL 9.9 introduces the trustee_server and trustee_client RHEL system roles to automate the deployment of Trustee server components and the configuration of Trustee clients for confidential computing.

The trustee_server role uses Podman Quadlets to deploy the following server components:

  • Trustee Key Broker Service (KBS)
  • Attestation Service (AS)
  • Reference Value Provider Service (RVPS)
  • Secret Registration Server, which verifies attestation-backed registration requests and stores disk encryption keys in the Trustee KBS

The trustee_client role configures confidential virtual machines (CVMs) to authenticate against the Trustee server. The role configures the following client components:

  • Attestation Agent, which collects system measurements and generates attestation reports.
  • Confidential Data Hub (CDH), which manages communication with the KBS to retrieve secrets and disk encryption keys.
  • API Server REST, which provides a local interface for confidential workloads to request secrets.

Jira:RHEL-175618[1]

The firewall RHEL system role reloads the firewalld service only if actual changes are detected

With this enhancement, the firewall RHEL system role uses an in-memory backend to apply user-defined changes and compare the resulting configuration to the current configuration. Previously, the role recreated configuration files and reloaded the firewalld service during every execution to determine if the state had changed. This caused unnecessary service reloads in environments where the configuration had not actually been modified. With this update, the role calculates the configuration difference in memory. As a result, this enables correct operation in Ansible check and diff modes to ensure that the firewalld service is only reloaded when actual changes are detected.

Jira:RHEL-176144[1]

crypto-policies automatically detects configuration changes and supports forced policy regeneration

With this enhancement, the crypto-policies RHEL system role uses the update-crypto-policies --check command to verify whether the policy configuration has changed and automatically regenerates the policy if necessary. Additionally, if you modify the policy configuration outside of the system role, you can set the crypto_policies_force_regenerate variable to true to force regeneration.

As a result, you can modify policy files manually on your managed hosts and keep cryptographic policies fully synchronized.

Jira:RHEL-181360[1]

The certificate RHEL system role can manage the system certificate trust store

With this enhancement, you can use the new certificate_trust variable of the certificate RHEL system role to add certificates or to remove them from the system certificate trust store. As a result, you can automate which Certificate Authority (CA) certificates are trusted by RHEL applications that use the system-wide store.

Jira:RHEL-210678[1]

The fapolicyd system role replaces fapolicyd_add_trusted_file with fapolicyd_add_trusted_paths

With this update, the fapolicyd system role introduces the fapolicyd_add_trusted_paths variable, which supports both individual files and non-empty directories. This variable replaces and deprecates fapolicyd_add_trusted_file to eliminate naming ambiguity around supported path types.

Jira:RHEL-219366[1]

4.15. Virtualization

Support for AMD SecureTSC in SEV-SNP guests

With this update, virtual machines (VMs) that run a RHEL 9 guest operating system and are configured with Secure Encrypted Virtualization with Secure Nested Paging (SEV-SNP) can also use the Secure Timestamp Counter (SecureTSC) feature. SecureTSC prevents the hypervisor from altering the guest’s TSC after booting, which secures guest operations that use the Read Time-Stamp Counter (RDTSC) and Read Time-Stamp Counter and Processor ID (RDTSCP) instructions.

Jira:RHEL-10048[1]

4.16. Supportability

The sos upload command supports the Red Hat Customer Portal GraphQL API

The sos utility uses the Red Hat Customer Portal GraphQL API to upload diagnostic archives and attachments to support cases.

With this enhancement, the sos upload and sos report --upload commands interact directly with the updated Customer Portal backend, ensuring reliable and secure data transfer during support case engagement.

Jira:RHEL-282625[1]

You can generate uncompressed sos reports

With this update, you can generate uncompressed sos reports by using the --compression-type=none option. This option uploads core dumps faster and quickly restores hosts to service.

Jira:RHEL-299693

Optimizing sos clean utility performance

With this update, the sos clean utility is optimized for improved performance.

As a result, the improved SOS cleaner ensures faster execution without any regression in sanitization and enhances overall efficiency for end users.

Jira:RHEL-299699

4.17. Containers

The podman system service command supports TLS and mutual TLS (mTLS) encryption and client authentication for TCP sockets

Before this update, the Podman API service running over a TCP socket did not support native TLS encryption or client certificate authentication. As a consequence, securing TCP sockets to satisfy security compliance standards, such as CIS benchmarks, required configuring and maintaining external proxy software, such as HAProxy.

With this update, you can configure TLS and mTLS encryption and authentication directly through the podman system service command without external proxy software. This simplifies system architecture and enables secure remote API communication to security compliance standards.

Jira:RHEL-91221

podman-py supports setting startup health check options during container creation

Before this update, you could configure a startup health check command during container creation only by using the Podman command-line interface (CLI).

With this update, the podman-py library supports setting startup health check parameters when you create a container by using the containers.create() method. As a result, you can define startup health checks in Python automation without relying on the CLI.

For more information, see Container create options

Jira:RHEL-140716[1]

The container tools meta-packages have been updated

The updated Container Tools RPM meta-package, which includes the Podman, Buildah, and Skopeo is available. The buildah package has been updated to version 1.43.2, Skopeo has been updated to version 1.22.2, and Podman has been updated to version 5.8.5. The notable bug fixes and enhancements over the previous version are:

  • Support is removed for running checkpoint images with the podman run command. Before this update, running a checkpoint image (any image with the io.podman.annotations.checkpoint.runtime.name annotation) could disable all sandboxing, including specified sandboxing when the container was created. With this update, podman run no longer accepts checkpoint images because of the different security models of running images and running checkpoints.
  • The podman load and podman volume import commands are hardened against crafted archives. Before this update, importing images that contained crafted layer tarballs or volumes that contained crafted symbolic links could overwrite files on the host. With this update, those import paths no longer authorise that overwrite.
  • The podman quadlet install --replace command correctly truncates the file that it replaces. Before this update, replacing a longer Quadlet file with a shorter one could leave leftover content from the original file. With this update, the replaced file is truncated so that only the new content remains.
  • Containers that are based on a malicious image no longer inherit host environment variables through malformed Env entries. Before this update, a crafted image could leak host environment variables into containers, including the use of the * glob to leak many variables without knowing their exact names. With this update, those malformed Env entries do not leak host environment variables.
  • Podman virtual machines on macOS that use the libkrun provider are no longer shut down unexpectedly by host port-scanning activity that unintentionally commands the VM to power off.
  • The remote Podman client podman save command on Linux succeeds when you use the -f oci-dir or -f docker-dir format options. Before this update, those formats caused the command to fail.

Jira:RHEL-244697

New container images are available

The ubi9/dotnet-110, ubi9/dotnet-110-aspnet and ubi9/dotnet-110-runtime are now available in the Red Hat Container Registry. The notable enhancements for each image are:

  • ubi9/dotnet-110: You can use this container image as a base platform to build and run various .NET 11.0 applications. It includes the .NET 11.0 software development kit (SDK). .NET is a general-purpose development platform with automatic memory management and modern programming languages.
  • ubi9/dotnet-110-aspnet: You can use this container image as a base image to run pre-built, framework-dependent ASP.NET Core applications. It includes the ASP.NET Core 11.0 Runtime.
  • ubi9/dotnet-110-runtime: You can use this container image as a base image to run pre-built, framework-dependent .NET applications. It includes the .NET 11.0 Runtime. To run framework-dependent ASP.NET Core applications, use the ubi9/dotnet-110-aspnet container image instead.
  • rhel-9/gcc-toolset-16-toolchain: The container image provides a base image with essential libraries and tools for building C and C++ applications.

Jira:RHELDOCS-22303[1]

Backend of bootc-image-builder migrated to image-builder-cli

With this update, the bootc-image-builder utility uses image-builder-cli as its backend. This update aligns the tool with upstream releases to deliver faster feature updates and security fixes while maintaining backward compatibility with your existing commands and workflows.

Jira:RHELDOCS-22243[1]

Red Hat logoGithubRedditYoutubeTwitter

Learn

Try, buy, & sell

Communities

About Red Hat

We deliver hardened solutions that make it easier for enterprises to work across platforms and environments, from the core datacenter to the network edge.

Making open source more inclusive

Red Hat is committed to replacing problematic language in our code, documentation, and web properties. For more details, see the Red Hat Blog.

About Red Hat Documentation

Legal Notice

Theme

© 2026 Red Hat
Back to top