LWN.net Weekly Edition for July 2, 2026
Welcome to the LWN.net Weekly Edition for July 2, 2026
This edition contains the following feature content:
- Xsnow "protestware" in Debian: should distributions allow software with unexpected behavior triggered by a user's locale settings?
- What's coming in Git 2.55: a look at some of the interesting features in the latest Git release.
- Flexible metaprogramming with Rhombus: a new programming language that marries metaprogramming capabilities with a Python-like syntax.
- Hardening the kernel with allocation tokens and bootpatch-SLR: more efforts to make kernel bugs harder to exploit.
- Continued coverage from the 2026 Linux Storage, Filesystem, Memory Management, and BPF Summit:
- Initiating writeback earlier: a discussion on whether to change when writeback is initiated and how that might be done.
- Efficient access to local storage for BPF programs: two approaches to improving performance for BPF programs.
- The rest of the 7.2 merge window: more interesting changes coming to the next kernel release.
- Secure Boot certificate expiration is here: what to know now that the first batch of Secure Boot certificates have expired.
- A look at MinIO alternatives: Ceph and Garage: two S3-compatible object-storage servers for MinIO refugees.
- Reports from OSPM 2026, day three: sessions from the final day of the Power Management and Scheduling in the Linux Kernel (OSPM) Summit.
This week's edition also includes these inner pages:
- Brief items: Brief news items from throughout the community.
- Announcements: Newsletters, conferences, security updates, patches, and more.
Please enjoy this week's edition, and, as always, thank you for supporting LWN.net.
Xsnow "protestware" in Debian
The xsnow application, which generates an animated snowfall effect (and other pleasant diversions) for X11 desktops, does not seem like an obvious channel for political statements. Nevertheless, xsnow's maintainer seems to have included a political protest in the program: an Easter egg that is triggered when the program's language is set to Russia ("ru"). One user has complained that this functionality should be removed from the Debian xsnow package, but Debian does not seem to have any rules that forbid such a feature outright.
The complaint
On June 14, Alexander Ivanov sent a message to Debian's
development list to complain that if a user's language settings were
set to Russian, it would trigger "a disguised visual element
(Ukrainian flags labeled as 'EXTRATREE') with a significantly higher
probability
". The code is found in the src/scenery.c
file beginning on line 326 in xsnow 3.8.3, the version packaged for
Debian 13 ("trixie") and in 3.8.6, which is in unstable:
#ifdef USE_EXTRATREE
if (global.Language && !strcmp(global.Language,"ru") && drand48() < 0.3)
tt = MAXTREETYPE;
if (drand48() < 0.02)
tt = MAXTREETYPE;
#endif
Xsnow is more likely to display Ukrainian flags (src/Pixmaps/extratree.xpm) if the language is set to Russian. Xsnow allows users to pick from one of several languages; when the application was set to English, I did not see any Ukrainian flags but they should pop up about 2% of the time. I did see the expected decorations such as a moon, snow, trees, polar bears, birds, and Santa with his sleigh. After I changed the language setting to Russian, xsnow immediately placed several flags on the desktop along with the other decorations. The screenshot below shows what this looks like on Debian 13.
DFSG violation
Ivanov claimed that the behavior violated the Debian Free
Software Guidelines (DFSG) that are part of the project's Social
Contract. Specifically, he said that the "targeted
behavior
" violated the principles of no discrimination against
persons or groups (DFSG #5) and no discrimination against fields of
endeavor (DFSG #6).
Ivanov had not filed a bug, but was, instead reporting the problem
to "the wider Debian development community
". He said he took
that route because the maintainer of the Debian package, Willem
Vermin, is also the maintainer of the xsnow project and had been the
one to introduce the change in the first place.
Chris Hofstaedtler replied
that Ivanov was mistaken; the DFSG does not require that the
software is non-discriminatory, but that the license for the
software is. "The licenses in use do not appear to violate the
DFSG's points 5 or 6. Please read the DFSG carefully next
time.
" Xsnow is primarily licensed under the GPLv3, though some
files carry other Debian-approved licenses.
Russ Allbery agreed
that the DFSG was not relevant; he also warned that citing the Social
Contract and DFSG "turns the conversation into rules lawyering
without addressing the actual issue
". However, even though xsnow
is DFSG-compliant, he did say that the flag display may be something
Debian does not want in its archives:
I would, in general, say that software that behaves in deceptive ways, which includes hidden behavior changes based on usernames, locales, or other local settings or information that no user would reasonably expect to change behavior in this way is probably not something that we want to have in Debian. It's a very slippery slope and also likely to create a lot of drama to very little benefit.
Ivanov said
that he understood the point that xsnow did not violate the DFSG. But,
he asked, shouldn't its hidden functionality be treated as a bug or
behavior that should be patched out "to restore the application's neutral and
intended functionality for all users equally?
" Bill Allombert suggested
that he open a bug report, since the Debian development list was not
the correct venue for the complaint.
Forecast calls for no xsnow changes
To date, Ivanov has not opened a bug report, and the conversation seems to have run its course. I have emailed Vermin to ask if he was aware of the complaint, and if he would be willing to roll back the Ukrainian flag display if a bug were filed. So far, I have not received a response.
Even though Vermin may not want to change xsnow's behavior, Debian package maintainers have been required to make changes for technical reasons—or have had packages removed from the archive for offensive content. In August 2025, two "offensive" fortune packages were removed ahead of the trixie release following a lengthy discussion. In October 2025, Debian's Technical Committee decided that an upstream systemd change would need to be reverted because the new behavior broke a number of programs that depended on a world-writable /run/lock directory. In each case, there was a fair bit of discussion and deliberation before the maintainers were overridden.
This is not to argue one way or the other whether xsnow's Easter egg should be removed; it is simply worth pointing out that it is not futile to file a bug against a package even if it's likely that the maintainer will disagree. As a project, Debian gives its developers a wide latitude in how they manage their packages, but a packager's decisions can be overridden on the rare occasions when the project deems it necessary. Convincing the project to do so, however, requires the petitioner to put in the work. Merely complaining on the mailing list is unlikely to achieve any results.
What's coming in Git 2.55
The Git v2.55.0-rc2 testing release appeared on June 23, suggesting that the final Git 2.55 release can be expected in the near future. While this Git update lacks radical new features, it does include a number of improvements that regular Git users will appreciate, including commands to easily edit the commit history, more formatting options, fsmonitor support for Linux, and more.The current release, v2.54, added an experimental "git history" command. It is, in many ways, like "git rebase", in that it allows the rewriting of commits in the history, but there are some significant differences, mostly aimed at making rebasing a bit less of a fraught operation. It can work on bare repositories, which may be of use to some people. Perhaps more widely useful is "git history reword", which makes it easy to edit the changelog of a past commit with a single command.
There is one aspect of how "git history" behaves that is worthy of note: unlike "git rebase", it will cause the rebasing of all local branches that descend from the modified commit, not just the current branch. That is likely to be what is wanted most of the time, but it has the potential to generate surprises if one is experimenting with it on a throwaway branch. I have, of course, simply understood that this could happen from my perusing of the source, and would never have actually unintentionally changed an important branch by playing around in this way. The "--update-refs=head" option can be used to restrict the rebase to the current branch only.
Anyway, "git history" is still marked as being experimental, but it is also gaining more features; new to 2.55 is "git history fixup". It can be thought of as a variant of "git history reword" that changes the body of the commit rather than the changelog. If a given commit (let's call it abcdef01) made a change to a file (call it foo.c), but neglected to update a comment, one can always repair the situation later with git rebase. But an alternative is to simply edit foo.c to make the desired change, then:
git add foo.c
git history fixup abcdef01
The indicated commit will be amended with the changes to foo.c, and all branches descending from it will be rebased on top of the new version. The changelog of the affected commit will not be modified unless the "--reedit-message" option is provided. If, however, merge conflicts arise during the rebasing, the command simply aborts.
Other additions include the "git format-rev" command, which reads one or more commit IDs and formats them using a provided "pretty" string. This example from the man page:
git last-modified -- <files> | git format-rev --stdin-mode=text --format=%an
Will print the name of the developer who last modified each of the given files.
The Git "fsmonitor" is a daemon process that watches the current directory and makes a note of changes made there. Various Git subcommands, such as "git status", can query the fsmonitor daemon rather than scanning through the directory for changed files. On systems where filesystem access is slow and repositories are big, using the fsmonitor daemon can significantly speed things up. This feature has been unavailable for Linux systems — until now. As of 2.55, the fsmonitor daemon has a Linux implementation as well.
The "git push" subcommand can now push changes to a "remote group", which is just a list of independent remotes. Groups are defined in the Git configuration file; a command like:
git config remotes.new-remote "remote1 remote2"
Would create a group named new-remote. A subsequent:
git push new-remote
Will push to both remote1 and remote2.
Other changes of note in this release include:
- Git hooks that are set up via the configuration system can now be set up to run in parallel, speeding execution overall.
- More Lisp dialects are understood by the diff generator.
- The "git url-parse" subcommand can be used to split out the components of a URL; this is useful because Git has a number of special additions to the URL format that other URL parsers do not understand.
- The "--max-count-oldest" option to "git rev-list" and "git log" can be used to request the N oldest commits within the specified range.
Beyond that, of course, there have been many performance optimizations, various minor tweaks, and a long list of bug fixes. As of this writing, this release has 486 non-merge commits overall, and appears to have stabilized. The 2.55 release can thus be expected soon, and the Git community will move on to the 2.56 development cycle.
Flexible metaprogramming with Rhombus
Lisp-like languages have historically led the world in metaprogramming and flexibility. While many modern languages have adopted the idea of macros, Lisp-like languages such as Racket have continued pushing the envelope, attempting to make macros as easy as possible to incorporate into everyday programs. On the other hand, Lisp's minimal, parenthesis-based syntax can be hard to adapt to — to the point that Lisp is sometimes said to stand for "Lots of Irritating Silly Parentheses". Rhombus is a new programming language that aims to have the best of both worlds, marrying Racket's metaprogramming capabilities to a simple Python-like syntax and reasonable standard-library defaults.
The project
The language is part of the broader Racket project, which is "rooted in
academia
". Of Rhombus's 43 contributors, the two most active are Matthew
Flatt and Wing Hei Chan, of the University of Utah and the Chinese University of Hong Kong,
respectively. Rhombus is used as a teaching tool at both of their universities the University of Utah; Chan contributes to Rhombus independently, and doesn't actually work in the Chinese University of Hong Kong's computer-science department.
Despite that, the language aims to be more than just an academic
exercise. Development is supported by the
Racket Programming Language
Foundation, which seeks to make Racket and Rhombus suitable for real-world
professional use. Even though the language only
celebrated its 1.0 release on June 22, there is already
a set of tools for the Economancy card game partially written in it,
among other non-academic uses.
The core of Rhombus is available under either the MIT or Apache 2.0 license, although it is built on top of the Racket runtime, which includes LGPL 3.0 code in some dynamic libraries. That reuse of much of Racket's infrastructure means that it already has a large number of usable libraries, and an optimizing compiler. Rhombus programs can be interpreted, compiled to bytecode, or compiled to native machine code.
One place that Rhombus differs from Racket, other than its syntax, is in its choice of default data structures. Lisp-like languages often use singly linked lists as a core data type, which comes with efficiency problems. Rhombus uses lists backed by an immutable tree structure that makes many operations take logarithmic time. Flat, mutable arrays, tree-based maps and sets, and hash-based maps and sets are also available in the standard library.
The syntax
Rhombus's syntax is fairly similar to Python in that it is indentation-based, and uses ":" to indicate the start of an indented block. One slight difference is that Rhombus uses the "|" symbol to separate branches in if expressions and similar contexts. The clearest way to explain is probably with an example (an implementation of the factorial function):
fun factorial(n):
if n <= 1
| 1
| n * factorial(n - 1)
Programmers with a more imperative bent might prefer the version below that uses a for loop. Note the use of an inclusive range, 1..=n rather than the more common exclusive range 1..n.
fun factorial(n):
def mutable p = 1
for (i in 1..=n):
p := p*i
p
By default, variables are immutable, so the mutable binding operator is needed to let the loop alter the value of p. The example can be made shorter, however. Rhombus's for loops support a feature that is uncommon outside of Lisp-like languages: an optional "reducer" that is used to combine the result of each loop into a final value for the loop itself. The math.product reducer multiplies all of the values returned from the loop, allowing one to write:
fun factorial(n):
for math.product (i in 1..=n):
i
This ability means that Rhombus's equivalent of the list comprehensions found in other languages is just a for loop that uses the List reducer to collect results into a list. For loops can also produce maps, sets, or even boolean values using the all or any reducers. In a typical programming language, one might expect this kind of built-in syntax to work for the types provided by the standard library, but not for user-defined types. Rhombus's macros, however, can be used to extend more or less any part of the language, including creating new reducers. Most programs will probably not need to do so, but it is nice to have the option when it would make the program simpler.
Macros
Macros in Rhombus use single quotes to produce syntax objects that represent a fragment of Rhombus code, with "$" used to indicate placeholders. Unlike traditional Lisp-like languages that represent code with lists, Rhombus's syntax objects are their own data type. This lets them carry additional metadata such as line number and position, which in turn lets Rhombus produce helpful error messages, such as stack traces that take macros into account correctly. Syntax objects also carry metadata that controls how names are resolved, giving programmers control over when and how macros capture names from the environment. Both hygienic and non-hygienic macros are possible to write, although hygienic macros are the default.
As an example of a small macro, here is all of the code needed to implement Ruby's postfix if in terms of the built-in when macro:
import:
rhombus/meta open // Needed for defining a macro
expr.macro '$action if $test':
'when $test
| $action'
println("Hi!") if (foo == bar)
In some ways, this kind of syntax object is reminiscent of the approach that TemplateHaskell uses. Unlike TemplateHaskell, however, Rhombus macros can be defined anywhere that a normal function could be, and respond to the grammatical context in which they are used. The example above is a macro that can be used anywhere that an expression is expected. Reducer macros are defined with reducer.macro, and there are similar constructs for macros that customize the handling of imports, pattern matches, and so on.
One might expect that the list of grammatical contexts in which macros can operate to be fixed. That isn't true in Rhombus, which exposes functions for manipulating grammatical contexts to the user. As long as the program uses Rhombus's basic indentation-based syntax, the programmer is free to define their own grammar and kinds of expressions, should they think it necessary.
Other forms of extension
Another example of that kind of flexibility is Rhombus's approach to type checking. Rhombus is, in some sense, not a statically typed language. It can look like it is, though, if one adds type annotations:
fun factorial(n :: Int) :: Int:
def mutable p :: Int = 1
for (i in 1..=n):
p := p*i
p
// Calling factorial("foo") results in an error message:
// factorial: argument does not satisfy annotation
// argument: "foo"
// annotation: Int
Rhombus allows programmers to attach arbitrary static information to expressions, and define rules for how that static information should be inferred, extended, checked, and used to generate machine code. By default, the language treats annotations as part of a gradual type system that infers types as much as possible, and then uses that to provide error messages and generate better machine code. But there is nothing stopping the programmer from attaching their own classes of static information to Rhombus programs. For example, it is possible to define a system of annotations for tracking the flow of sensitive data through a program, or for tracking the asymptotic run-time of a function. Macros can access this static information in order to compile expressions differently depending on the inferred value.
Rhombus's tendency to expose all of the implementation details of the language within the language itself is part of the project's commitment to language-oriented programming. For many tasks, users will have no need to reach for macros; the ordinary tools provided by the language are sufficient for every-day use. For those tasks where Rhombus is not already a good fit, for whatever reason, the language encourages the creation of miniature embedded domain-specific languages, to make expressing the core logic of the problem as simple as possible.
In many languages, a certain amount of boilerplate is necessary, especially for programs that are best described in terms of data structures or relationships that aren't supported as part of the standard library. Rhombus allows programmers to write that boilerplate once, in a macro, and then focus on expressing their program in whatever way makes the most sense to them, even when that requires looking deep into the semantics of loops or the action of the type system. Many such miniature language extensions can coexist within the same program, and the additional metadata attached to syntax objects allows for the creation of generic code formatters and highlighters, jump-to-definition support that handles custom binding macros, and the other conveniences expected of a modern language.
In support of its extensibility, Rhombus has extensive documentation covering all parts of the language, from parsing all of the way through to compilation. Rhombus inherits the Racket community's penchant for thorough documentation, which is a blessing when one needs to investigate the details of some part of the language, but which can be a bit verbose when one just needs a simple overview.
Rhombus's niche
Overall, Rhombus's best features are definitely its extensibility and documentation. In other areas such as compilation speed, speed of execution, package ecosystem, error messages, and so on it is solidly middle-of-the-road: good enough not to get in the way, but not so good that it outshines existing languages that focus on those areas. Rhombus code, even with full type annotations, is unlikely to challenge C or Rust in speed, for example — it typically has performance between JavaScript and Ruby, although the details vary between programs and benchmarking setups.
Where Rhombus is likely to be most useful is in those problem domains that have custom home-grown languages or that are awkward to express with existing approaches. Programmers have always had the ability to write new special-purpose programming languages, but the amount of work that goes into writing a traditional optimizing compiler is enormous. Writing a set of Rhombus macros is much easier, and gives one an existing compiler, existing libraries, usable syntax highlighting, error messages, and editor integration for free, while preserving the ability to customize the operation of the language at the deepest levels, should it prove necessary.
Hardening the kernel with allocation tokens and bootpatch-SLR
There is a lot of work going into eliminating exploitable bugs from the kernel and preventing the addition of new ones. Even if this work is maximally successful, though, there is no chance that the kernel will be free of these bugs anytime soon. Thus, there is also ongoing interest in hardening the kernel to make the existing bugs more difficult to exploit. The upcoming 7.2 kernel release will include a change to how dynamically allocated structures are placed in memory to make them harder to overwrite, while a project to randomize structure layout at boot time has a rather longer timeline.
Memory partitioning with allocation tokens
The kernel's slab allocator handles memory management for small objects. Allocations come from buckets of fixed-size (mostly powers of two) objects, and many types of objects with the same bucket size can be allocated from the same slab. This arrangement allows efficient use of memory, but the intermingling of object types in this way can make the kernel more vulnerable to certain types of exploits. If the kernel can be convinced to overrun an object of a given type, it may end up accessing or corrupting other objects with entirely unrelated types. Additionally, heap-spraying attacks may be used to fill much of the kernel's memory space with known data, which can make other sorts of bugs (such as an erroneous pointer dereference) easier to exploit.
Back in 2023, a set of patches was merged in an attempt to harden the kernel against such attacks; this mechanism works by partitioning the memory used by the slab allocator to satisfy requests. Rather than use one set of slabs to provide (for example) 64-byte memory chunks, the allocator uses sixteen of them. The specific slab used for any given request is chosen randomly, but in such a way that the same slab is always used for allocations made at the same call site. In this way, the ability to fill memory with techniques like heap spraying is much reduced. The ability to overwrite a targeted object with a buffer overflow is also reduced; most object types will be located in distant slabs, and the specific mix of object types in any given slab will differ from one boot to the next.
Partitioning that is randomized in this way makes many attacks harder, but it is a probabilistic defense. It may separate a target object from the vulnerable object most of the time, but it will still put them into the same slab one boot out of sixteen. In multi-system cloud deployments, some systems will certainly end up with an attacker-friendly placement of vulnerable objects. Naturally, security-oriented kernel developers would like to do better than that.
One attempt to do better is type-based slab partitioning, by Marco Elver, which was merged for the 7.2 release. As its name would suggest, it works by separating allocations based on the type of the object being allocated rather than the address of the allocation call site.
To do so, this feature takes advantage of the allocation tokens feature that is available with the Clang 23 compiler. In short, this feature provides a new compiler built-in function, __builtin_infer_alloc_token(), which generates an integer token value from the type(s) of the argument(s) passed into it. That token, in turn, can be used to select the partition from which an object will be allocated. The result is that objects of the same type will always be allocated from the same partition, even if there are several call sites performing the allocations. A structure involved in a vulnerability will always be confined to a single partition, and will always be separated from most other structure types.
As an additional hardening feature, the generation of the token takes into account whether the type(s) in question are structures that contain pointers; the space for tokens representing pointer-containing types is disjoint from the space for all other types. As a result, types that do not contain pointers are kept separate from those that do, making any overrun vulnerabilities with those types harder to exploit for the purpose of overwriting pointers.
The potential downside of this approach is that the mapping from types to partitions is now deterministic and, thus, predictable by attackers. The older, randomized partitioning is still available as a configuration option for those who prefer it. Distributors will have to make a choice, though, regarding which hardening variant (if either) they wish to enable for their users.
Run-time structure-layout randomization
Attackers can benefit from any information they have about how the memory in a given system is laid out. That includes the layout of fields within structures; without that information, targets for attack are harder to locate in a running system. Structures are laid out in the source, and the C standard is fairly clear about how a structure declaration should map to the resulting representation in memory. Attackers will use that information, but may be thrown off if the in-memory layout differs from the source in unpredictable ways.
This not a new idea; the kernel has had support for the "randstruct" GCC plugin, which randomizes the order of fields within structures, for years. Randstruct, though, is a compile-time operation; it rearranges structure fields while the kernel is being built. For a site running a custom kernel, build-time randomization may be sufficient. For kernels shipped by distributors, though, it is not particularly helpful; an attacker can look at the kernel image and know how a structure will be laid out in all systems running that particular kernel.
York Jasper Niebuhr recently showed up with an early-stage patch set, called Bootpatch-SLR, that is meant to address that shortcoming. It performs structure randomization at boot time, meaning that every kernel will have a different layout, and that layout will change every time the system is rebooted. That should make life harder for anybody who is trying to target a specific structure field.
Bootpatch-SLR works by annotating structures to be randomized in the source with a set of special macros; this patch marking up struct task_struct shows how it works. In short, a set of fields to be randomized is annotated with markers like:
struct foo {
spslr_struct_fields_start
/* fields to be randomized go here */
spslr_struct_fields_end
};
These markers turn into special ELF sections that will be included in the resulting kernel binary; they mark not only the fields to rearrange, but also all of the references to those fields. When the kernel boots, it reads those sections, rearranges the indicated structure fields and, by way of a bunch of magic code-patching, updates all of the references to match.
Naturally, there are places where fields cannot be so easily rearranged. Many places in the kernel embed one structure as the first element of a containing structure, then assume that a pointer to the container can be cast to a pointer to the embedded structure. Relocating the embedded structure is likely to produce results that are rather more random than desired. The layout of other structures may be determined by protocol specifications or hardware. Structures that should not be changed at all can simply be left unannotated; others, though, may be able to tolerate the reordering of some fields while others are left untouched. For that case, there is a special marker, __spslr_field_fixed, that can be used to mark fields that need to keep their declared position within the structure.
This idea is appealing; once fully implemented, it could significantly increase the resistance of existing kernels to attack. That is a rather distant goal at the moment, though. Among other things, Bootpatch-SLR is implemented as a GCC plugin, and the long-term plan is to remove support for these plugins from the kernel's build system. An attempt to add a new one now is unlikely to be successful. There are a number of other details that need to be worked out as well; several of them are described in the "known issues" section of the extensive online documentation for Bootpatch-SLR.
Time will tell whether Bootpatch-SLR will reach a point where it can be merged into the mainline kernel; history is full of bright ideas and interesting prototypes that never reached that point. If it does get there, though, the security benefits could be significant.
Initiating writeback earlier
Writeback is the process of ensuring that dirty pages or folios in the page cache are flushed to the disk, so that changes to those files are made persistent. In a filesystem-track session at the 2026 Linux Storage, Filesystem, Memory Management, and BPF Summit, Jeff Layton wanted to discuss whether the writeback operation should be initiated earlier than it is today. The consensus seemed to be that it should be done earlier, but the path toward making that happen was less clear.
Background
In the last few months, Layton began, some new ioctl() commands were added to the debugfs interface for the NFS server (NFSD) that provided the ability to perform "dontcache" I/O (related to RWF_DONTCACHE, which was RWF_UNCACHED originally) and direct I/O (O_DIRECT). The controls were added in debugfs to give developers a chance to try various things before settling on a final interface. Mike Snitzer did most of the work on that, Layton said. The debugfs interface that was eventually added was somewhat different than what was proposed.
Various experiments were run with the new I/O
modes to try to quantify which workloads would benefit from them. One
thing became clear quickly: dontcache "was pretty awful for writes, at
least under NFSD
". There are a number of reasons for that, but the
main one is that NFS clients send lots of writes in parallel, which end up
being written by multiple threads in the server; that did not fit well
with that implementation of dontcache for NFSD.
He has some patches in
flight that fix the performance problem for RWF_DONTCACHE users; he thanked Jan Kara, Christoph Hellwig, and
Ritesh Harjani "who helped me beat that into shape
". Since the
summit, those patches
have been merged for 7.2. One of the
characteristics of dontcache is that it immediately submits writes to the
device, which was one of the problems encountered by NFSD; all of the
threads woke up and submitted I/O, which
caused them to queue waiting to be able to submit. The fix puts the data
into the page cache until writeback completes, and
moves the writeback operation to the flusher threads; that
mode now performs better than direct I/O in
many cases, Layton said.
That work started him thinking about doing writeback earlier in general.
The number of dirty pages that accumulate is much lower after his fixes,
which led him to a question: "are we waiting too long to kick off writes
in regular buffered I/O?
" Writeback is
initiated for buffered I/O when the
memory-management subsystem decides that the number of dirty pages is too
high; it is also initiated periodically. But "modern memory sizes are
huge
", so the default dirty limits used are out of date; he thought
they had not been updated for 20 years or more. That is really a separate
problem and one that administrators "can tune around
", but it may
make sense to look at changing the defaults.
He wondered if relying on memory management to decide when to do writeback was really the right approach. Maybe the filesystem layer should be more proactive; some calculation based on the backing store and number of dirty pages bound for it could be used to determine when to initiate writeback. The Linux philosophy is that free memory is wasted memory, which is why the page cache, for example, exists, but it is also true that unused disk bandwidth is wasted.
He suggested having a per-superblock dirty limit that was a lot lower than
what memory management would normally use. Starting writeback earlier
"would help keep us out of the weeds as far as dirty pages go
".
Outside of the session, Kara had pointed out a potential problem: there are
workloads that create lots of temporary files and then delete them. Those
files are typically deleted before they get written today, so starting
writeback earlier might cause them to be written unnecessarily. A lot of
that kind of work is done on tmpfs these days, Layton thinks, so maybe the
problem is less critical. Kara had suggested skipping writeback for inodes
that have no directory entries (dentries), which might be a way to avoid
much of the problem as well.
Discussion
Layton said that he was just putting those ideas out for discussion; he did
not have any fixed views on where to go with them. "Any thoughts?
"
Ted Ts'o said that he had some ideas, but that they might be somewhat contradictory. He wondered how important it was for the kernel to save battery power by not spinning up disks frequently; he noted that there are few laptops with those kinds of disks anymore so maybe laptop mode is a thing of the past. (It turns out that laptop mode was removed for the 7.0 kernel.)
There are also some kinds of files
"where a certain amount of delay is good
" because it allows the
application to finish writing the file, which helps if the filesystem is
doing delayed allocation. So maybe files that are open and still being
written to should be deferred for writeback for a time. There are lots of
policy questions that would need to be resolved for something like that,
however.
Another idea, Ts'o said, might be to try to write at 50% of the
backing-device bandwidth, if that can be calculated, to try to ensure that
there is headroom so that fsync()
latency is reasonably low. One could imagine an auto-tuning process that
reserved more headroom for fsync()-heavy workloads. As he noted,
some of his ideas "are in tension with one another
", so he would
prefer that the heuristics used are automatic. Relying on humans to change
various parameters is not a good strategy: it "never happens
".
Layton noted that reserving too much backing-device bandwidth for writes
might leave too little for reads, so that is another piece of the puzzle.
Boris Burkov said that he had encountered a problem on a
huge-memory system that accumulated lots of dirty pages; "it piled up
writeback until it was enormous and the resulting writeback was bad
".
On March 2, he tried a change that set lower fixed dirty limits, but had to
back it all out the next day "because it broke everything
", he said
to laughter. He was not suggesting that changing the default was a bad
idea, because the default is also bad, "but you're going to break something
".
Kara asked what specific problem was encountered with the lower limits. Burkov said that it was a system which downloaded and installed packages; its performance regressed after the limits were changed. Kara suggested this might be the temporary-file problem he had raised with Layton earlier; maybe the installation process was using lots of temporary files that would not actually be written with higher limits.
Chuck Lever raised "a converse problem
" related to NFSD. There are situations
where the NFS clients are sending so many writes that NFSD simply cannot
keep up "and there doesn't seem to be an effective pushback from the
server to the clients
". There are some ways to slow things down with
NFSv4 or by adjusting the TCP window, but he thinks there needs to be a way
for the virtual filesystem (VFS) layer to slow down writers. Neil Brown
had told Lever that there already was a mechanism to do that, but that
maybe it was not working correctly. "This room is full of experts who
can tell me I'm wrong, go ahead
", Lever said with a grin.
Kara said that he "was kind of right
" because the feedback mechanism
is geared toward local filesystems where the resources available for writes
are bounded by the producer sharing the system with the writeback
mechanism. For NFS, though, the number of writes that clients can send is
only limited by memory. There are mechanisms to throttle writers when too
much data is being written, but it is apparently broken for NFS.
"Back-pressure from the server does not propagate properly
" to the
client. A fast-moving conversation between Kara, Layton, and Lever seemed
to conclude that there are ways to provide the back-pressure.
Lever asked if there was any way to observe the back-pressure and resulting slowdown. Kara said that there wasn't but that it could be built; he had some suggestions on what kinds of information could be exported to help with that.
Ts'o said that there is decades of research on ways to predict
the lifetime of files based on their name and other attributes, which might be
useful for determining files that should have their writeback delayed. That
would be a heuristic that either requires a decision from a system administrator,
"which will never happen
", or some kind of automatic determination
possibly based on some of the research. It will be important to have some
observability into that process as well, he said, "because debugging
this is going to require us understanding which of our mysterious
heuristics triggered—correctly or not so correctly
".
Christian Brauner was concerned that any kind of automatic heuristic
configuration in the kernel "that fits all kinds of workloads that
exist, is just doomed to fail
". He pointed to various control-group
parameters that allowed the kernel "to make this user space's
problem
" and not have to come up with something that will cover
everyone's needs. He thinks the mechanisms used by control groups and
systemd provide a good model for how various problems like writeback limits
should be handled. On the other hand, "we have fadvise(),
though no one uses it
", Ts'o said to knowing laughter.
Lever asked Layton for more information about why the original dontcache approach for NFSD did not perform well. The basic problem is that immediately performing the write from the thread that receives the client request blocks the thread until the write completes, Layton said. By moving that work to the flusher thread, the server thread can continue to handle requests while the writeback is happening in the flusher.
Lever also wondered how the page-cache entry was dropped once the writeback is completed, since that is what RWF_DONTCACHE is meant to do. There is a folio flag, PG_dropbehind, that tracks whether to keep the folio in the cache after its writeback completes, Layton said. The only real differences between RWF_DONTCACHE writes and buffered writes are the setting of that bit and initiating writeback as soon as possible for RWF_DONTCACHE.
After another minute or two of discussion on some other quick topics, the session ran out of time and concluded.
Efficient access to local storage for BPF programs
When a BPF program is used to filter or redirect packets in the networking subsystem, the program will often want to associate data with each packet as it moves through the kernel. The kernel's local BPF storage API, which associates extra data with some kernel objects, provides a way to do that. (See also the BPF map types that end in STORAGE.) Amery Hung and Jakub Sitnicki led two sessions at the 2026 Linux Storage, Filesystem, Memory-Management, and BPF Summit about how to make accesses to local storage data more efficient. Hung spoke about general performance problems related to locking, while Sitnicki examined the use of local storage in the networking subsystem in particular.
There is a feature that Hung has been working on for the past eight months, using local storage to enable faster communication between the kernel and user space. This talk was not about that feature, because in the course of working on it, Hung noticed that the BPF self tests sometimes failed due to contention on the lock that protects local storage from deadlocks. Such contention can cause reading from or writing to local storage to fail, which is an obvious source of problems.
Local storage is protected by two locks: a normal lock used to protect against concurrent accesses, and a per-CPU lock that exists to prevent deadlock. The latter lock is needed because a BPF program could potentially be attached to tracepoints that are triggered when the local storage is accessed. Without a per-CPU lock to make sure that the same CPU doesn't try to acquire the main lock twice, it would be possible for a BPF program attached to one of those tracepoints to attempt to access the local storage itself, and deadlock the kernel. In order to prevent that, the kfuncs that BPF uses to access local storage were made fallible, and the per-CPU lock ensures they return an error if two BPF programs try to access the local storage at the same time.
That is more conservative than necessary, however, because it means that two unrelated BPF programs could block each other's accesses even though there is no possibility of deadlock. To solve this problem, Hung would like to replace the main lock with a resilient queued spinlock (rqspinlock), a kind of lock that Kumar Kartikeya Dwivedi and Alexei Starovoitov developed to report deadlocks at run time. Since the main lock would prevent deadlocks, the per-CPU lock could be eliminated. With care, this approach could be used to fail the BPF operation only when there is an actual risk of a deadlock occurring.
But it is not as simple as just changing the type of lock used, Hung said. That is sufficient for most code paths, but there are some infallible operations that need to take the same lock, and rqspinlock can't handle that. For example, freeing a kernel data structure that has local storage should not fail just because the lock is contended. It's hard to make things fail gracefully.
Hung tried replacing some of the relevant allocations and deallocations with kmalloc_nolock(), but that did not work well either. The problem is that there are two allocators that can be used for local storage: the BPF allocator and the slab allocator. Using one or the other alone isn't acceptable for performance reasons; the BPF developers went through a lot of pain to decouple things so that either can be used.
At the end of the day, Hung gave up on solving the problem gracefully, and introduced an infallible freeing operation for local storage that leaks 176 bytes in the worst case. With a mostly working approach, the next step was to benchmark the change. A microbenchmark that created local storage allocations and then freed them in a loop saw a 1.5% increase in throughput after removing the per-CPU lock on x86_64. Arm systems didn't have a measurable performance difference. Microbenchmarks don't tell the whole story, however, since real-world performance is sensitive to the conditions of the rest of the system.
The change also unlocks some other potential performance improvements, including switching some uses of the slab allocator to be able to use sheaves, which gives a 5.1% speedup on another microbenchmark. One audience member asked whether Hung had any idea why there would be such a big performance difference between the two allocators. Hung wasn't sure — cache usage on x86 increased, that just didn't cause a performance regression.
The next steps are somewhat unclear; there remains some additional complexity around managing the lifetime of local storage objects, Hung said. Some kinds of kernel objects don't always fully initialize their local storage, which can result in kernel panics. Starovoitov had previously suggested using kernel object pointers as keys in a more general-purpose map, as an alternative to local storage, which was a potentially interesting solution.
Hung developed another benchmark comparing this approach (using hash tables 50,000 buckets in size) to the existing local storage implementation, and saw a speedup, but the BPF developers in attendance were skeptical. One audience member remarked that in their experience, smaller hash tables are faster and bigger hash tables are slower; a proper benchmark should test multiple sizes. Hung pointed out that rhashtable uses a dynamic number of buckets, and wondered how that would effect things.
Sitnicki said that on the systems he works with, local storage is used with around one million concurrent connections, a number that was met with some surprise. Hung agreed that the benchmarks probably needed to be extended. Another part of that is that different metrics matter for different kinds of kernel objects; local storage for sk_buff structures should be optimized for creation speed, etc., Hung said.
In the future, socket-local storage can also be optimized further by removing the need for dynamic allocations at all. The verifier may be able to do "helper fixups" to make it even faster, a claim on which Hung did not elaborate. At that point, the session devolved into an discussion of how, exactly, local storage performance ought to be benchmarked for different uses.
Metadata storage for packets
The next day, Sitnicki led a follow-up session dealing with storing metadata in
sk_buff structures (SKBs) — a topic that had
been discussed in 2025 as well.
It is "not local storage, exactly, but the topic should feel
familiar.
" BPF programs often need to store labels, timestamps, or other
small amounts of data on packets, he said. His first and second attempts at
enabling this were to expose the existing storage for express data path (XDP) and SKB
metadata to BPF programs; that wasn't workable because that metadata can only be
accessed from XDP and traffic control (TC) contexts, and not from the upper layers of the
networking stack.
Letting that metadata persist would require the networking subsystem to commit to a layout for it, which the networking maintainers do not wish to do. John Fastabend questioned why the networking folks would be so adamant about that. Was the problem that they wanted the metadata to be the same across different hardware, he asked. Sitnicki didn't think that was the problem — one can allocate space for metadata from XDP and later consume it in TC, regardless of hardware.
Sitnicki has considered a few alternatives; for example, an SKB extension could be used to hold a pointer to local storage. That would cause three allocations per packet, though, which is not really acceptable. Another alternative would be to have an SKB extension specifically for BPF metadata. The extension could even be located in the same allocation as the SKB. This would mean one allocation per packet, and fewer indirections to access the data. On the other hand, it requires buy-in from the networking maintainers, results in bigger SKBs, and that memory cost must be paid for even if it isn't used. Sitnicki intended to run that option by the networking maintainers at the Netdev conference in July.
Starovoitov suggested having a boot flag to set the size of the metadata; that way people who don't enable the boot flag don't see any memory overhead, and the people who do enable the boot flag presumably have some idea what they're doing. Andrii Nakryiko asked why Sitnicki wanted to locate the metadata next to the SKB in the first place, especially since accessing it would still cause a cache miss in practice. He suggested adding a separate hashmap for metadata and using that. Sitnicki agreed that that was a second possible alternative.
Daniel Borkmann asked Sitnicki to elaborate on the difference between making the existing SKB metadata accessible at higher levels of the networking stack, and adding BPF-specific metadata in an SKB extension. The two approaches would effectively both put metadata alongside the SKB. Sitnicki agreed that was the case, and that he would be fine with either alternative. The difference is that the approach using an SKB extension would have a pointer indirection, even if it's just one allocation. That's more flexible, because for packets that don't need metadata, it could be left out, which would save memory.
Using an SKB extension does introduce some new challenges, however. For one thing, it affects how SKBs should be cloned, since the extension needs to be copied as well — which is not how SKB extensions work currently. The existing SKB extensions are only copied when activating a new extension, Sitnicki said. Also, some SKB extensions are hard to compile out if they are not needed; IPSec support always requires having space for an SKB extension used by IPSec hardware offload, for example.
Starovoitov wasn't sure why all of the SKB extensions needed to live in a single
allocation alongside the SKB. Sitnicki explained that that is just how SKB
extensions are implemented. Any approach that tries to add a separate mechanism
just for BPF is going to be refused by the networking maintainers, because they
have been trying to make SKB extensions "not suck
" for a long time. They
want any improvements in this area to work with the existing code.
There is another problem to consider, though. Even if some memory is set aside for BPF metadata, how can the memory be divvied up between BPF programs that all want to store things there? One option would be to just configure each BPF program that an administrator intends to run to have its own range. Another option would be to allocate space in the metadata dynamically, so that BPF programs can declare how much metadata they need and then the kernel can transparently provide access to it. The second one is a nicer user experience, but more complicated to implement. There was some discussion about the pros and cons of each approach that failed to reach a consensus.
An alternative, Sitnicki said, would be to use a pointer to the SKB as a key in an existing BPF hashmap. That sounds like a good solution, but picking the correct size for the hashmap is a tricky problem. Maybe rhashtables, which are resizeable, are the right answer, but that needs to be tested under real-world load. Using a hashmap also moves the responsibility for cleaning up the metadata when the SKB is freed onto the BPF program. Hooking into a tracepoint to detect when an SKB is freed does have some overhead, which needs to be considered as part of the cost of the approach.
Starovoitov questioned why the BPF program that acts as the final consumer for the metadata couldn't do the cleanup, avoiding the overhead of a tracepoint. SKBs can disappear at many different points in the networking stack, Sitnicki explained. If a packet with metadata is dropped, that metadata needs to be cleaned up somehow. Starovoitov suggested putting a single bit in the SKB to indicate whether it has metadata, and then call the tracepoint conditionally, so that there is only a performance overhead for packets that have metadata and that are dropped before they can be cleaned up.
Nakryiko and Starovoitov encouraged Sitnicki to nail down the specific proportion of packets that need metadata, the size of the metadata, and the overall number of packets needed for his use case before deciding on a design. All of these things can affect what the best solution will look like, and it's better to be specific rather than attempting to design a general mechanism that may not even gain any other users. At that point, the discussion broke down into speculation about the impacts of different designs, and the session ran out of time.
The rest of the 7.2 merge window
Linus Torvalds released 7.2-rc1 and closed the 7.2 merge window on June 28; by that time, 13,412 non-merge commits had found their way into the mainline. That makes this the busiest merge window since the 6.7 development cycle in 2024 (15,418 commits, including 2,800 for the entire bcachefs development history). Just under half of those commits arrived after LWN's summary of the first half of the merge window was written. As usual, the commits in the latter part of the merge window were more heavily focused on fixes, but there were still a lot of new features and significant changes merged as well.Some of the most interesting changes merged include:
Core kernel
- The ongoing work to improve the kernel's swap subsystem (previously
discussed in this article and this article) continues with the merging
of this
series unifying much of the code dealing with anonymous and
shared-memory folios and reducing the memory usage of the swap
subsystem itself. "
The static metadata overhead is now close to zero, and workload performance is slightly improved
". See our LSFMM+BPF 2026 coverage for more information on this work. - The khugepaged kernel thread can now create multi-size transparent huge pages (mTHPs) automatically. See this article for details on this work.
- A separate option to create transparent huge pages in the page cache for read-only files — a workaround for filesystems that do not support large folios natively — has been removed. This change may slow performance for some filesystems until they gain large-folio support.
Filesystems and block I/O
- The default block size for NFS transfers has increased to 4MB on systems with at least 16GB of RAM.
- The SMB filesystem server has gained support for files that are stored in compressed format; it also now implements compression for data sent (or received) over the network.
- The newly reinvigorated NTFS filesystem has been hardened against many types of on-disk metadata corruption and is now able to handle Windows-native symbolic links.
- The fscache backend for the EROFS filesystem, which was merged for 5.19, has been deprecated for the last two years; it has now been removed.
- The Ceph filesystem has gained the ability to reset clients manually. This feature is rigorously undocumented, but the patch series contained an informative cover letter that was not preserved when the series was applied.
Hardware support
- Clock: Canaan Kendryte K230 clocks, Qualcomm IPQ9650 global clock controllers, Qualcomm Hawi TCSR clock controllers, Qualcomm X1P42100 video clock controllers, and Qualcomm X1P42100 camera clock controllers.
- GPIO and pin control: Qualcomm IPQ9650 pin controllers, Qualcomm Nord pin controllers, Qualcomm SM6350 LPASS LPI pin controllers, Qualcomm Shikra pin controllers, Aspeed G7 SoC pin controllers, NVIDIA Tegra238 and Tegra264 pin controllers, and UltraRISC DP1000 SoC pin controllers.
- Industrial I/O: Analog Devices AD5706R digital-to-analog converters, MEMSIC MMC5983 3-axis magnetic sensors, Broadcom APDS9999 ALS, RGB, and proximity sensors, Analog Devices AD4691 analog-to-digital converters, and Vishay VEML3328 RGBCIR light sensors.
- Input: Rakk gaming peripherals, OneXPlayer handheld controllers, and Wacom W9000-series pen-abled touchscreens.
- Media: AMD ISP4 image signal processors, AVMatrix HWS PCIe image-capture devices, and Intel CVS CSI-2 bridges.
- Miscellaneous: Renesas R-Car multi-functional interfaces, NVIDIA Tegra114 external memory controllers, Verisilicon I/O memory-management units, TI LP5860 LED controllers, Samsung S2M series RGB and flash/torch LEDs, Maxim MAX25014 controllers, Microsoft Surface RT batteries, Samsung S2M series PMIC battery chargers, AMD Promontory 21 xHCI temperature sensors, Qualcomm SHIKRA, HAWI, and Nord interconnect providers, Qualcomm Hamoa/Glymur reference-device embedded controllers, Dell DW5826e PLDR reset controllers, and UltraRISC PCIe host controllers.
- Networking: Virtio CAN interfaces.
- PHY: Axiado eMMC PHYs, Mobileye EyeQ5 Ethernet PHYs, EcoNet PCIe PHYs, TI DS125DF111 2-Channel retimers, Freescale Layerscape Lynx 10G SerDes PHYs, and NXP TJA1145 CAN transceiver PHYs.
- USB: Cadence USBSSP USB device controllers and devices supporting the USB4STREAM protocol.
Miscellaneous
- The perf tool has, as usual, received a long list of improvements; see this merge commit for details.
Security-related
- The integrity measurement architecture (IMA) has gained the ability to stage measurement data outside of the kernel, thus freeing (possibly large amounts of) kernel memory. See Documentation/security/IMA-export-delete.rst for more information.
- The Landlock security module now has the ability to control the use of UDP sockets; this documentation commit shows what has changed. It is also now possible to suppress logging for some Landlock denials, this commit contains some more information.
- After six years of effort, the strncpy() implementation has been removed from the kernel; according to this merge commit, this effort required 362 commits from 70 contributors. This commit lists the alternatives in use by the kernel now.
- One notable thing that was not merged is the Hornet Linux
security module, which was intended to provide an additional level of
security around the loading of BPF programs. This module was rejected by the BPF developers in 2025,
but was reworked
in an attempt to satisfy the objections that had kept it out
previously. That effort was not successful, though, and, prior to the
beginning of the merge window, Torvalds let
it be known that he would not be accepting a pull request
containing that code.
Where things go from here is not clear; Blaise Boscaccy and other developers in this area clearly feel that Hornet provides security guarantees that are not present with the in-kernel solution. Danial Borkmann has posted an alternative implementation that, he hoped, might constitute an acceptable compromise. That work is in an early state, though, and is not likely to go upstream in the near future.
Virtualization and containers
- The KVM subsystem has gained support for Intel's "mode-based execution control" (MBEC) and AMD's "guest-mode execution trap" features, both of which give better control over execute permissions in guests. Among other things, this feature greatly reduces the number of times that guests must trap back into the host for permission-related operations. See this MBEC patch series (which was substantially reworked before inclusion) and this merge commit for more information.
- There are no new KVM features for the Arm architecture this time
around; from the KVM
pull request: "
This is a bit of an odd merge window on the KVM/arm64 front. There is absolutely no new feature in the pull request. It is purely fixes, because it is simply becoming too hard to review new stuff when so many AI-fueled fixes hit the list
".
Internal kernel changes
- The kernel build system has gained the ability to create a software bill of materials (SBOM) using the SPDX information that has been added to the kernel's source files. Only the files that are actually compiled under the current configuration are considered, so the SBOM is specific to the built kernel. The relevant command is "make sbom"; see Documentation/tools/sbom/sbom.rst for more information.
The 7.2 merge window removed 195 exported symbols and added 380 others; there were also 32 new kfuncs added. See this page for the full list.
Finally, the 7.2 merge window included contributions from 2,138 contributors, which is almost certainly a merge-window record. It is only the last three development cycles that have seen that many contributors for the entire cycle. Of the 7.2 merge-window contributors, 404 were first-timers. There were 706 commits (about 5% of the total) containing Assisted-by tags. It would seem that the LLM-fueled flood of kernel patches is showing no signs of slowing down.
Now all of those changes need to be stabilized for the 7.2 release, which is most likely to happen on August 16.
Secure Boot certificate expiration is here
Linux users who have Secure Boot enabled on their systems rely on certificates issued by Microsoft to verify the software used to boot a system is trusted by the user. One of those certificates expired recently, but that will not cause systems that are able to boot to stop doing so. There are situations where the expiration may cause problems, however, and the window for relying on existing signed binaries is shorter than it might appear. Users and administrators will want to stay on top of these changes. Over the last year, part of my job at Microsoft has been to work on this problem. LWN wrote about the certificate expiration in July 2025, and this article follows up with where we are now.
How Linux boots under Secure Boot
UEFI Secure Boot requires firmware to refuse to execute boot code that has not been signed by a certificate in the firmware's trust database. The majority of computing hardware capable of Secure Boot is manufactured to meet Microsoft guidelines that include loading the Microsoft UEFI certificates into the firmware trust database for use as trust anchors.
Microsoft does not sign the GRUB bootloader. Instead, it signs the shim binary, which is the first-stage bootloader that then loads the distribution's own bootloader (typically GRUB), which then validates and loads the kernel.
From shim onward, the chain of trust runs through the distribution's own infrastructure. Distributions manage their own signing keys and can publish updates to GRUB and the kernel without involving Microsoft. Shim is designed to change infrequently, so that Microsoft's signing role does not become part of distribution-release or security-update processes, except in situations where shim itself needs to be signed.
The code for shim is open source. The community runs a shim-review process that serves as the primary gate to signing. A distributor, such as Debian or Red Hat, creates an issue in the GitHub repository that includes the shim.efi binary to be signed, the build logs, and additional information to review a request for a signature. After the community approves a submission, then the distributor may request the signature; Microsoft then verifies the submitter's relationship to the distribution, runs its own checks, and applies the cryptographic signature. This arrangement lets the community manage review without running signing infrastructure or requesting all of the firmware vendors to include their certificates. Part of my job has been to bridge the communication between the shim-review community and the team at Microsoft that signs the shim binary during this transition.
The Microsoft Corporation UEFI CA 2011 certificate expired on June 26, 2026 (or June 27, depending on time zone). It is being replaced by the Microsoft UEFI CA 2023 certificate, which does not expire until 2038. This will not cause existing systems (e.g., those that have booted successfully before the expiration) to stop booting; however, a system can fail to boot if it does not have the new certificate in its trust store and receives a new shim (via a system upgrade or new installation) that is signed with that certificate.
Note that there are multiple 2011 certificates used as trust anchors for various trust paths. As a family, the certificates begin expiring in June with the Windows Secure Boot certificates expiring last, in October. For Linux, the certificate that matters is the one that expired on June 26.
How expiration impacts Linux
Firmware is generally designed to ignore certificate expiration when
evaluating whether a signature is valid. The UEFI
specification's image-validation process bases the trust decision on whether
the image's signing certificate is present in the authorized database
(db) and absent from the forbidden database (dbx). It
does not check a certificate's validity period. The intermediate certificates
used to sign UEFI binaries have already expired without
consequence. Any shim that is signed with the 2011 certificate
will continue to work as it did before, barring a bug in a system's
specific firmware implementation.
In October 2025, Microsoft began returning two signed binaries for each shim submission. One is signed with the 2011 certificate, and the other one is signed with the 2023 certificate. That overlap ended with the certificate expiration. Future submissions can only receive the 2023 signature, leaving distributors to decide whether to ship a dual-signed shim while they still can, or to move directly to a 2023-only shim. The latter choice is safe only for systems whose firmware already trusts the 2023 certificate.
The focus of this article is on shim, however, option ROMs—UEFI binaries that are loaded into peripherals such as graphics cards and executed during the preboot phase—have a similar exposure.
Forced update
The UEFI boot environment has attracted increasing security scrutiny. Vulnerabilities are occasionally discovered in shim, GRUB, and other boot-chain components just like other software. If a vulnerability is discovered in shim itself that requires a code change and a new binary, that new binary can only be signed with the 2023 certificate.
Therefore, the practical window for relying on the old 2011-signed shim is the time between now and the next security vulnerability or distribution release that forces a shim respin. Matthew Garrett has argued that the transition is less urgent than some descriptions suggest: in many cases, a system could boot older media, update its trust database, and then install or boot newer media. That path exists, but it is not sufficient for every environment. Systems with strict uptime requirements, restricted boot-media policies, or remote-only access may not have that option.
For most users running a maintained distribution on maintained hardware or a maintained virtualization layer, the distribution will manage this transition. The Linux Vendor Firmware Service (LVFS) and fwupd provide a mechanism for delivering firmware updates, including Secure Boot trust-database updates.
The systems that need attention are those where that path does not work: hardware where the vendor no longer supports the model or has stopped publishing LVFS updates, and virtual machines provisioned before cloud or virtualization providers enrolled with the 2023 certificate that have not received subsequent firmware updates. For those systems, mokutil can report whether the 2023 certificate is enrolled, and tools such as pesign or sbverify can show which certificate signed an installed shim. See this post for information on upgrading.
LVFS maintains its own compatibility data and can target updates to specific hardware configurations. Microsoft has published a dataset of device configurations where the 2023 certificate update has been confirmed to apply successfully, derived from Windows fleet telemetry and made available for Linux distributions and other non-Windows operating systems to use.
That compatibility work matters because forced trust database updates are not safe on all hardware. Forced updates have left some machines unbootable. On certain hardware, recovery requires physical access, and in some cases we have observed that systems were permanently damaged.
The distribution and the compute vendor are the best sources of current status and guidance. The shim-review community is not a support channel for individual systems, and Microsoft can only assist with its own compute platforms and operating systems.
Overall, the result is less an immediate, deadline-driven outage and more of a preventative-maintenance problem; system administrators need to take action to avoid running into a situation where a system may eventually stop booting, but the certificate expiry does not automatically mean systems will no longer boot the instant the certificate expired.
The systems most likely to have trouble are not the newest or most carefully managed systems; they are the ones stranded outside the normal firmware-update machinery when a future shim update becomes necessary.
A look at MinIO alternatives: Ceph and Garage
MinIO is a popular object-storage server that offered compatibility with the Amazon Simple Storage Service (S3) API. In December 2025, the company behind the project (also named MinIO) announced that the project was in maintenance mode and would not accept new changes; it was archived completely in February 2026. MinIO users have been hunting for alternatives since then, but the array of choices can be baffling. While many other projects aim to fill the space, their strengths and areas of focus tend to vary. Two of the alternatives—Ceph and Garage—are particularly compelling, and both offer solid S3 compatibility.
MinIO did not state its reasons for retiring the project, but it has a proprietary project with similar features that it recommended in place of the now-defunct project. The company has continued to publish vulnerability information that details security problems that affect the last version of MinIO, at least through April of this year, but it is no longer supplying updates to the open-source project.
Most users of MinIO have moved on to other projects that remain on open-source licenses. Ruohang Feng is maintaining a MinIO fork called Silo, but he has indicated that his plans are limited to bugs and security fixes; new feature development is not in scope. Its most recent release was on June 18, 2026.
Core Requirements
Object-store applications like MinIO offer a way to provide S3 capabilities while self-hosting the underlying infrastructure. That is a must for air-gapped systems which cannot rely on external hardware and management, but it is also beneficial for users who want to avoid proprietary services. However, without the global infrastructure that backs most commercial services, high availability can be difficult to achieve in smaller environments. Fortunately, many projects, such as MinIO, have built fault tolerance into their design from the start.
Ease of setup, modest hardware requirements, and S3 API support are fundamental requirements. MinIO became a popular way to provide object storage for environments that operate independently of cloud services but still rely on object-storage availability, often appearing as an add-on service in Kubernetes distributions like MicroK8s.
The S3 API enjoys widespread adoption due to its object-storage capabilities across a variety of use cases. S3 facilitates file-based use cases across many services via HTTP by implementing filesystem reads with GetObject calls and writes with PutObject calls.
For example, S3 storage is used with many Kubernetes environments to provide container image storage and shared storage for container volumes. Its usefulness isn't limited to container workloads, of course: object storage is often used for static web site hosting, backing storage for caching strategies, and more.
The distributed nature of MinIO servers helped lend it resilience in the case of disk or host failures. Fault tolerance is provided by either replication-based strategies across deployments (in which multiple copies of data are retained in separate clusters) or more advanced capabilities based on erasure encoding to more optimally use available space with parity checking within a cluster to reconstruct missing data.
MinIO's untimely retirement means that users need a new alternative, but what to choose? Resilience is often just as important as S3-compatibility to safeguard against data loss. However, solutions that are prohibitively complex or difficult to operate while meeting these requirements can be self-defeating for administrators looking for self-hosted options. Ensuring that deployments remain manageable is therefore important.
The quality of a project's S3 API implementation is one of the most important features to evaluate, but it is not the only consideration. Implementations must also support compatible authentication via a recognized signing method. The current standard is AWS Signature Version 4; Version 2 is deprecated, but some older clients may rely on it. Version 3 was never widely used or supported.
While nearly all object-storage solutions support basic operations like GetObject and PutObject, other features are worth evaluating in the context of individual needs. For example, object lifecycle rules that control whether an object may be deleted after a period of time may not be supported by every S3 alternative. Similarly, server-side object encryption (SSE) might be supported, but there are a number of different modes for SSE, such as user-provided keys included with each request versus server-managed keys.
While the S3 API tends to slowly add features over time, existing endpoints seldom change. Clients can usually rely on established APIs working indefinitely and new APIs appearing rarely. The S3 API user guide describes ongoing changes. Downstream projects like Ceph or Garage most often work by broadening compatibility with new capabilities as endpoints are added. Most libraries and command-line utilities that interact with S3 can accept other object-store endpoints with minimal configuration changes.
Ceph
Ceph is a stable and long-lived project with healthy governance. It is now stewarded by the Ceph Foundation, which is under the Linux Foundation. Its source is hosted on GitHub under a mix of open-source licenses, the most common being LGPL 2.1. Ceph is also one of the most longstanding S3-compatible solutions with many years of development history and stable financial support on record.
Support for Ceph was merged into the mainline Linux kernel back in 2010. Development remains steady with the latest release, 20.2.1, announced in April 2026. Ceph's distinguishing characteristic, in contrast to MinIO or Garage, is its capability for massive scale rather than smaller deployments.
The S3 object-storage API is only one interface to Ceph's storage capabilities: the Ceph Object Gateway built on top of librados provides the S3-compatibility layer, but Ceph's storage abstractions are exposed through other methods as well: Ceph has a POSIX-compliant filesystem (CephFS), and its block devices are used by other open-source projects like QEMU and libvirt to provide backing storage for virtual machines.
Distributed operation is native to Ceph's architecture to offer better fault tolerance and scalability. Ceph clusters operations into small, logical components that can be scaled independently depending on architectural needs. This lends Ceph significant flexibility at the cost of some operational complexity: ceph-osd daemons manage actual storage operations, ceph-mgr daemons coordinate cluster operations and management, ceph-rgw (the RADOS Gateway) provides the actual S3 API, and so on. For large deployments with dedicated teams, these tradeoffs may make sense: if a bottleneck arises in a subsystem's critical path, it can be scaled independently without impacting other systems.
Multiple Ceph monitors form a Paxos quorum, or majority consensus, to ensure consistency and coordinate cluster activity. The ceph-mon utility helps to manage the provisioning process with a reliance on knowledge of initial bootstrapping membership that is typical during initial setup for algorithms like Paxos. Tooling like ceph-deploy can help simplify the initial provisioning process.
As with other clustered services that rely on quorum-based reconciliation, Ceph monitors should run with an odd number of voting members to avoid split-brain situations. Three ceph-mon instances permit the loss of one member without degraded operations, while five allow two members to go offline, and so on. One ceph-mgr is active at any given time, and general guidance is to run one instance per ceph-mon daemon to accept potential failover duties. Other daemons are scaled alongside hardware: ceph-osd usually corresponds to one hardware storage device. Although Ceph can run as a single node, its default mode of operation is better suited for multiple hosts.
System hardware requirements are nuanced: because Ceph supports clusters of potentially large scale, requisite resources are a function of the overall amount of desired effective storage. Components like ceph-mds (metadata servers) can function with as little as 1GB of memory but nodes that function with ceph-mon and ceph-mgr roles may perform well with 64GB but requirements move upward to 128G when ceph-osd (storage daemon) count begins to exceed hundreds of instances. While some of these numbers may seem daunting, Ceph is designed to function capably at these sorts of scales.
Ceph's RADOS Gateway provides a mature S3-compatible API: it supports bucket lifecycles, encryption, and other concepts native to the S3 ecosystem. Administrators reliant on the most S3-like API available will likely find its implementation appealing, especially when coupled with operational tools like access-control lists for buckets (to fine-tune permissions) and bucket notifications (to react to bucket object activity). The project maintains a list that outlines compatibility with the S3 API, including support for both version 4 and version 2 signing.
Garage
At the other end of the longevity spectrum, Garage is a comparatively young AGPL-licensed project; it was started in 2020 by Deuxfleurs, a non-profit hosting company. The project is hosted on independent Forgejo infrastructure.
Written in Rust, Garage foregoes a large feature catalog in favor of a focused goal: distributed, fault-tolerant object storage (without any traditional filesystem or block device drivers.) The latest stable release at the time of writing was version 2.3.0 in April 2026. While relatively new, Garage is positioned as a middle ground between Ceph's non-trivial deployment architecture and simpler projects that lack distributed fault tolerance.
Garage runs homogeneous services and relies on concepts like conflict-free replicated data types (CRDTs) to reconcile consistency drift in the case of events like network partitions. Like delegating consensus to an external protocol such as Paxos, the primitives in play are often sound, but implementations may lack the operational track record drawn from years of practical use. For smaller environments or home labs with one administrator, radically simple configurations that still offer reliability guarantees are attractive.
Forming a Garage cluster is less involved than configuring Ceph Monitors: running nodes yield their identifiers and addresses with the "garage node id" command, after which peers negotiate connections with "garage node connect $node_id" given the target node ID. This allows for a degree of elasticity to Garage deployments, although operators should bear in mind that internal quorums are still consulted for some operations (its design documents refer to Amazon's Dynamo paper). Keeping a majority of Garage nodes online therefore remains important for overall cluster stability.
Garage encapsulates all of its functionality in a single daemon, making it well-suited for smaller or resource-constrained environments. Deployment topology usually follows one daemon that is capable of managing multiple physical disks to present to the overall cluster, per host. However, for large networks with frequent disk maintenance, singular ceph-osd daemons may be a more logical choice that does not require interrupting a singular process managing both cluster membership and storage devices. System requirements are notably minimal with support targeted at CPUs released within the past 10 years and a minimum of 1GB of memory.
The Garage S3-compatibility page is straightforward and maintains comparison tables against other S3 API implementations. While the project is evolving quickly, Garage's API support remains a smaller subset of the overall S3 API. In particular, some missing capabilities such as object versioning (e.g. PutBucketVersioning to implicitly create backup copies of objects) may be baseline requirements, and only version 4 authentication signatures are supported. Ceph offers broader S3 API support, but the operational cost may be worth simplicity tradeoffs that Garage can provide with more manageable requirements.
Despite MinIO's departure from the open-source landscape, alternatives offer mature implementations that can provide significant features without sacrificing many of S3's native capabilities. Ceph and Garage are capable replacements for in-house, self-hosted environments.
Development practices, particularly as they relate to use of large language
models (LLMs), have also become a prominent question when considering project
maintenance. The Ceph project is still debating its policy with regard to LLMs,
but seems
to be converging on something similar to the Linux kernel AI
contribution policy. Garage recently merged a policy
on contributions authored by LLMs and other coding assistants; it allows
LLM-usage for "some tedious code generation tasks
", but largely forbids
their usage for documentation, writing bug reports, or writing most code to be
submitted to the project. While the Garage repository has no commits on record either
authored or co-authored by LLMs, Ceph's commit history includes code
increasingly co-authored by Claude, ChatGPT, and Gemini.
Anecdotally, my experience moving from MinIO to Garage has been positive and without negative surprises. Cluster formation is easy, recovering from hardware failures is reliable, and its API has been compatible with all of my use cases. Garage is well-suited for my home lab, and other small-scale operators can likely benefit from multiple servers for failover without the mental burden of orchestrating relatively more complex deployments. In the case of both MinIO and Garage, my clusters have undergone rolling updates and the occasional dead disk while remaining operational.
Real-world experience
Total usable storage is a relatively simple calculation in the case of both Ceph and Garage. Without any replication configuration, either solution presents one logical view into all pooled devices: for example, three 1TB disks appear as 3TB of usable space. Replicating with a factor of two reserves one copy of managed data, which halves available space to 1.5TB. Ceph's ability to erasure code volumes offers even better capacity through the use of parity calculation and would offer roughly 2TB of usable space this in this imaginary scenario. My own Garage infrastructure spans six hosts across ten total physical disks.
Garage has yet to fail catastrophically, while I had been forced to rebuild my MinIO cluster on at least one occasion due to irreconcilable cluster problems. Overall I would characterize Garage as simpler to operate and easier to use than MinIO. Use cases differ, though, and large-but-capable solutions like Ceph are almost certainly better suited for environments with stricter needs, closer S3 API parity, or stronger stability guarantees.
Reports from OSPM 2026, day three
The Power Management and Scheduling in the Linux Kernel Summit, which still goes by the historical acronym OSPM, was held in Cambridge, UK, in mid-April. As has become traditional, the presenters at that event have since written summaries of their sessions, and this work has kindly been made available to LWN for publication. The third day's sessions covered a wide range of topics, including GPU affinity, profile-guided scheduling, paravirtualization scheduling, quality of service, and more.(See also: coverage from day 1 and day 2).
GPU-aware auto-affinitization with sched_ext — Andrea Righi and Balbir Singh
On systems with multiple GPUs and multiple NUMA nodes, CPU-to-GPU locality often becomes the dominant performance factor for AI and accelerator-heavy workloads. A task whose CPU threads run on one NUMA node while it drives a GPU attached to another pays a real cost on every transfer between the CPU and the GPU. Today, users work around this manually with numactl pinning and by disabling NUMA balancing, but this amounts to ad-hoc static partitioning and depends on the user knowing the system's topology. This talk described an experimental sched_ext-based approach that tries to do this automatically.
A prototype has been implemented in the scx_cosmos scheduler. A small user-space component, written in Rust, queries NVIDIA's NVML library to track per-task GPU memory and compute utilization. When both metrics exceed a threshold, the task is considered to be actively using a specific GPU, and an entry is added to a BPF map mapping the task to its preferred NUMA node. The BPF scheduler then consults this map during task rescheduling, migrating the task toward CPUs that are local to the GPU it is actively using.
Results on a four-GPU NVIDIA GB200 system running a RegNet image-processing workload were encouraging. The default fair scheduler reached around 56 frames per second (fps), while manual numactl pinning to the correct node pushed that to about 77fps. Scx_cosmos with GPU auto-affinitization slightly exceeded even manual pinning, reaching up to 80fps. The small extra gain came from a useful side effect: only the tasks actually touching the GPU were migrated, leaving auxiliary tasks free to spread across the other nodes and avoid overloading the CPUs that are local to the GPUs.
Several caveats remain. Migrating a task closer to its GPU does not move the memory it has already allocated, so accesses can remain remote unless NUMA balancing or an explicit numactl call follows. Multi-threaded workloads with shared state may be hurt by migrating only the GPU-active thread. And aggressive packing onto a single NUMA node can conflict with the scheduler's load balancer. Some of these can be addressed in user space (signalling numactl from the BPF side once a migration is decided, for example). For the rest, Peter Zijlstra suggested a much simpler kernel-side option: a per-task knob that fixes the preferred NUMA node and disables NUMA-balancing scans, which would generalize cleanly beyond GPUs to network interfaces, storage, and other devices.
A recurring theme in the discussion was that statistical inference from utilization counters is fundamentally post-facto: by the time the scheduler concludes that a task is using a specific GPU, the misplacement has already cost performance. The clear next step is to obtain hints from the user-space framework managing the device, CUDA being the obvious example, so that placement decisions can be made before the workload starts. Such hints can also be two-way: the kernel side can validate them against observed behavior and report back when a user-space framework is asking for something nonsensical.
The talk closed with several speculative directions: device-aware fairness would extend vruntime-style accounting beyond CPU time to also capture GPU (and more generally device) utilization, so that a task burning GPU cycles without much CPU usage does not appear "light" to the scheduler. Periodic GPU workloads, such as graphics frames, look like natural candidates for deadline-based scheduling. Embedded and mobile use cases bring thermal coordination between CPU and GPU into scope. And virtualization, with pass-through devices and paravirtualized scheduling, opens an entirely separate problem space that the sched_ext prototype has not yet touched. The unifying observation is that as accelerators become the primary consumers of CPU work, the scheduler needs a richer view of where devices live and what tasks are doing with them; sched_ext is a convenient place to experiment with that view.
Video: GPU-Aware Auto-Affinitization with sched_ext - Andrea Righi, Balbir Singh (OSPM26)
Profile-guided CPU scheduling — Kumar Kartikeya Dwivedi
This talk was centered around the premise that CPU schedulers often make workload-sensitive decisions with limited workload-specific information, leading to poor system efficiency. Scheduler heuristics, such as cache-aware placement or migration-cost heuristics, can work well for one workload but fail to generalize. The core problem is that the scheduler usually does not know whether threads share data, whether request phases have distinct locality, how much scheduling latency a task can tolerate, or how quickly useful cache state decays after a task stops running.
The proposed direction in this talk was profile-guided scheduling: collect offline and online signals about workload behavior, then use those profiles to parameterize scheduling decisions. The talk focuses on cache locality for illustrative purposes.
The main prototype shared in the talk augments a sched_ext scheduler, scx_layered, with a profiling tool that samples memory accesses with perf, clusters threads by similarity of accessed physical addresses, and feeds the resulting groups into the scheduler. Run-time classification avoids unstable identifiers like process or thread IDs and, instead, uses thread names plus application-provided metadata such as request phase or request type.
A central mechanism used to ensure locality is "soft partitioning": dynamically sized, topology-aware CPU sets for groups of threads that appear to share data. Unlike hard partitioning, these partitions can adapt to load and preserve work conservation within and across the soft partition. The scheduler assigns cache domains, especially L3/LLC domains, to groups while resizing allocations based on observed demand.
The main case study is Meta's web-serving backend running HHVM. The workload is sensitive to scheduling behavior, including work conservation, involuntary context switches, and cache locality. On multi-CCX AMD systems, the approach separates CPU-heavy worker threads, I/O threads, and management jobs on the machine, then uses locality-derived grouping and request-phase metadata to guide placement.
The evaluation shows about 3-4% throughput improvement over the scx_layered baseline, 5-8% lower average latency, 6-7% fewer L3 misses, and 2-3% better IPC. It also provides roughly 7% better throughput than EEVDF. Dwivedi noted that a 1% gain is already considered significant for this service, so these results are practically relevant for the evaluated workload.
Several technical insights were presented. First, average utilization at 100ms-1s granularity is often the wrong signal for partition sizing; tail utilization at finer time granularity better captures bursts and avoids undersized partitions. Second, locality decisions are load-dependent. At low load, taking any idle CPU is usually better than waiting for cache affinity to achieve better results. Near saturation, it may be worth waiting briefly for a CPU in the previous cache domain if the expected locality benefit exceeds the scheduling delay. Third, request phases can have distinct locality and latency importance, so separating early latency-critical request work into its own soft partition can reduce latency. However, these phase partitions should collapse again into a single soft partition without distinction once the system exceeds its service-level objective and maximizing bandwidth is the primary goal.
The future-work section of the talk focused on highlighting unresolved questions around temporal locality and cache decay. The current approach identifies spatial sharing, but not how long cached data remains useful or how likely a task is to reuse it. Dwivedi raised questions about whether miss rate, hit rate, reuse distance, memory-access samples, or run-time perturbation experiments are the right signals. L1 and L2 locality appeared hard to exploit robustly, while L3 looked more promising because useful locality persists longer relative to scheduler decision time.
The audience discussion explored these open problems in more detail. Questions focused on whether hit rate is a better signal than miss rate for temporal reuse, whether isolation experiments translate to production, whether page faults are too expensive for run-time profiling (yes), whether L2 accesses might better characterize pressure on L3, and whether hard memory/cache partitioning would be preferable. Other suggestions included using reuse-distance analysis from richer offline traces, deliberately perturbing scheduling to measure workload sensitivity, and using stack traces or program phases to improve persistent thread identity across runs.
Overall, the talk presented profile-guided scheduling as a way to make scheduler heuristics depend on measured workload behavior rather than fixed assumptions. The key idea is to learn when locality matters, which threads should be grouped or separated, and when the latency/throughput tradeoff changes with load.
Video: Profile-Guided CPU Scheduling — Kumar Kartikeya Dwivedi
A scheduler scorecard — Steven Rostedt
The idea behind the scheduler scorecard is to rate the characteristics of the scheduler and not to add just another benchmark. For example, Rostedt brought up the characteristic of how often a scheduler migrates a task. On some architectures, migration can be expensive, but if a system has a large L3 cache that is shared among several CPUs, the cost of migration may be minimal. A benchmark for the same scheduler on two different system configurations can show drastically different results; one may show the scheduler with a high performance rate and on the other system, it would be very slow. He brought up other characteristics, such as how often a task is blocked, CPU-frequency changes, etc.
Rostedt stated that benchmarks may show how well a scheduler behaves on a particular setup but do not explain why it behaved that way. After running a benchmark on a workload, one can guess why one scheduler algorithm worked better than another but, without seeing what the scheduler actually does, that guess may be wrong. Having a scorecard that shows the characteristics of a scheduler can help determine exactly why the scheduler performed the way it did.
To support the scheduler scorecard concept, Rostedt has written has a small utility that measures various metrics. It is based on his library libtraceeval which, he stated, is not quite ready for prime time as he is not comfortable with the current API. This utility records how long each CPU is idle rather than running a task, For each process, it reports the maximum, minimum, average, and standard deviation of the time spent running on the CPU, time spent being preempted (another task is running when the task is on the run queue), wakeup latency (time spent between being woken up until it runs on the CPU), time a task was blocked (it is in the TASK_UNINTERRUPTIBLE state), and the time a task was sleeping (it is in the TASK_INTERRUPTIBLE state). It also shows the count of times the task was in each of those states. It then shows the same metrics for each of the process's specific threads. For the process, it also shows how many times the process migrated.
A real-world example of benchmark confusion came about when a member of the Pixel team tried out PREEMPT_RT and ran benchmarks on it. They used Geekbench 6 to do the benchmark; PREEMPT_RT performed 13% worse than a kernel without PREEMPT_RT enabled. A record of trace-cmd was executed on the Pixel device while running Geekbench 6 with and without PREEMPT_RT; Rostedt then used his utility on the trace.dat files produced by trace-cmd. It showed that the PREEMPT_RT run had the tasks preempted more often and for longer than without realtime, which is expected due to the way PREEMPT_RT works. This also caused tasks to be scheduled in and out much more often. The wakeup latency was pretty much the same.
One of the biggest differences was that, with PREEMPT_RT, the tasks were blocked for a much longer time than without it. This is expected, as in PREEMPT_RT, spinlocks are converted to mutexes; a task would block on contention on a realtime kernel but would not block in non-realtime as it would simply spin. The utility showed the impact of spinlocks being converted to mutexes for this particular benchmark. With further analysis, the impact of contention with the converted spinlocks was proven to be the culprit of the performance degradation in the benchmark.
Rostedt then brought up questions to the audience about what else could be recorded. He gave a list, including CPU-frequency changes, NUMA mappings, cache misses, and wakeup chains (recording what tasks wake up other tasks). There are changes to ftrace to record perf events like cache misses into the trace buffer so that the cache-miss count can be displayed at every scheduler switch. But the interface for this is not ready to be submitted upstream. Juri Lelli brought up the use of timerlat. Rostedt stated that it could also be incorporated and is not mutually exclusive to the tracing he is working on. The trace is still required to keep track of hundreds or thousands of threads, which would not be something to do inside the kernel. Rostedt also mentioned the ability to do the analysis offline and not depend on the kernel performing all of the calculations.
The session ended with various discussions about overhead of the utility, what events can be used, and other various enhancements that can be made to the tracing subsystem.
Video: Scheduler score card - Steven Rostedt (OSPM26)
Paravirtualized scheduling: a framework for better CPU usage — Shrikanth Hegde and lya Leoshkevich
The discussion started with a brief description of problem that occurs in virtualized environments with multiple virtual machines (VMs), where there is an overcommitment of CPU resources and high CPU utilization in many VMs simultaneously. Due to this overcommitment, the host cannot meet the CPU requirements, leading to vCPU preemptions, which can have a high performance cost.
A quick glance at the proposed solution was provided and discussed. The idea is simple: "steal time" — the amount of time a runnable vCPU waits for the physical CPU to become available — is a well-known metric in the VM world that indicates CPU contention. When the guest detects high steal time, it reduces its vCPU request by using fewer vCPUs. This means the workload is dynamically adjusted to use a limited set of CPUs instead of all available ones.
The lack of existing methods to fully fix the issue was discussed, followed by implementation details. A new CPU state called cpu_preferred was introduced, and its design constructs and advantages were reviewed. The talk also covered the s390 perspective of integrating this work with existing mechanisms like HiperDispatch and warning track interrupts.
Performance numbers across PowerPC, s390, and x86 systems were presented, showing significant gains in real-life workloads and microbenchmarks without major regressions. The challenges regarding upstreaming this work were then discussed. There was a general consensus among the audience that this approach is viable, and patches will be reviewed. Suggestions regarding implementation were provided, which the authors will consider for subsequent versions to be sent out soon.
Current version: https://lore.kernel.org/all/20260407191950.643549-1-sshegde@linux.ibm.com/
Video: Paravirtualized scheduling: a framework for better CPU usage — Shrikanth Hegde and lya Leoshkevich
Platform QoS — Ionela Voinescu
The talk presented an RFC for integrating platform-specific resource prioritization into the Linux quality-of-service (QoS) subsystem, focusing on ACPI CPPC resource-priority registers and SCMI QoS. The main problem described was that firmware already makes platform-specific decisions about how power or thermal headroom is distributed, but Linux has limited ability to indicate which CPUs or domains are most important for the active workload.
ACPI CPPC resource prioritization provides per-logical-CPU priority controls for resources such as processor boost, processor throttle, cache access, and memory bandwidth. These priorities allow the operating system to indicate, for example, which CPUs should receive boost preferentially, or which CPUs should be throttled later under constrained conditions. SCMI QoS provides a similar mechanism through SCMI performance domains, with support for boost and throttle prioritization using either relative priorities or weights. Unlike CPPC, SCMI QoS is domain-based and does not cover cache or memory-bandwidth prioritization, which are expected to be handled through mechanisms such as resctrl.
The discussion points were mainly around the shape of the Linux interface. One option is an administrator-oriented interface, similar in spirit to resctrl, where privileged software configures priorities explicitly. This is more suitable for server-oriented use cases with pinned workloads and relatively stable policies. Another option is a more dynamic scheduler or task-driven model, where priorities are inferred from existing kernel signals such as control groups, uclamp, or future task attributes. This may be more suitable for edge use cases, but only if firmware transport and reaction latency are sufficiently low.
A key point raised in the discussion was that the interface should be motivated by concrete use cases rather than by the existence of new firmware controls. The clearest example discussed was a power or thermally constrained mobile-gaming scenario, where the system may need to protect the CPU running the main game thread from throttling, or direct available boost budget toward it.
There was broad agreement that cache and memory-bandwidth prioritization should not duplicate existing mechanisms such as resctrl. The more relevant gap is boost and throttle prioritization, where cpufreq can request performance levels but cannot express which CPU should receive opportunistic boost or be throttled last.
The main outcome of the discussion was that there is not yet enough justification for a rich, scheduler-facing, per-task interface. A scheduler-integrated model may still be relevant in the future, but it would require concrete use cases, clear semantics, and evidence that firmware can react quickly enough for task-following behavior to be useful. The current viable direction is therefore a simpler privileged user-space interface. This could either be an independent ABI for boost and throttle prioritization, or an extension to resctrl.
Video Platform QoS — Ionela Voinescu
A latency-focused QoS framework backend for kernel devices — Lukasz Luba and Chris Redpath
This talk presented an early proposal for a latency-focused quality-of-service framework aimed at improving coordination between kernel-managed devices such as CPUs, caches, memory, and interconnects. The motivation stems from the observation that modern systems rely on multiple governors, drivers, and firmware components independently inferring workload requirements and making performance decisions, often based on incomplete information and without awareness of the actions taken elsewhere in the system.
The speakers argued that many workloads ultimately care about latency rather than specific resource settings such as frequencies or performance states. Today, mechanisms such as scheduler-utilization signals, utilization clamping, cpufreq governors, and firmware-managed policies attempt to translate workload behavior into performance decisions, but much of the original intent can be lost as requests propagate through the stack. As a result, different devices may react inconsistently or redundantly to the same workload.
The proposed framework would treat latency as a first-class concept and provide a common mechanism for propagating latency requirements to registered devices. Rather than each subsystem independently attempting to infer application needs, devices could receive a more explicit representation of workload requirements and coordinate their responses. This could help avoid situations where CPUs, memory controllers, caches, and interconnects make separate policy decisions that are individually reasonable but collectively suboptimal.
A significant part of the discussion focused on how such a framework could coexist with existing kernel infrastructure. Participants explored the relationship with utilization-based scheduling signals, uclamp, operating performance points (OPPs), cpufreq, and firmware-controlled performance management. Questions were raised about the proper level of abstraction, how latency requirements should be represented, and whether the effort should be limited to backend infrastructure or eventually provide a frontend interface through which applications and middleware could express QoS requirements directly.
The audience generally agreed that current systems suffer from fragmented policy decisions and that preserving workload intent across subsystem boundaries is an important challenge. At the same time, several open questions remain regarding the exact interfaces, ownership of policy decisions, and integration with existing kernel mechanisms. The session concluded as a design discussion rather than a concrete implementation proposal, with future work to be focused on refining the architecture, identifying practical use cases, and evaluating whether coordinated latency propagation can provide measurable improvements in responsiveness and energy efficiency.
Video: Latency-focused QoS framework backend for kernel devices - Lukasz Luba and Chris Redpath (OSPM26)
Improving the SCHED_DEADLINE wakeup rule in presence of micro-sleeps — Tommaso Cucinotta and Luca Abeni
Cucinotta shared his progress (Abeni was not present) on refining the deadline scheduler (SCHED_DEADLINE) wakeup behavior for tasks that undergo brief suspension phases. The core of the presentation addressed a known edge case within the "revised wakeup rule" of the Linux constant bandwidth server (CBS) implementation, which triggers when a task resumes execution before the end of its current reservation window.The issue manifests during "micro-sleeps": situations where a deadline task suspends for a negligible duration while still possessing a substantial portion of its run-time budget. The current CBS logic may respond by aggressively truncating the task's remaining budget to maintain the bandwidth ratio. Although this behavior upholds the theoretical isolation properties of the scheduler, Cucinotta argued that it is often overly pessimistic for real-world applications.
A simple scenario was presented to illustrate the problem: two deadline tasks competing for a single CPU. If the second task performs a momentary sleep shortly after it begins its work, the scheduler might slash its budget even though, had the task remained active, it would have finished its execution without causing any additional system interference. Consequently, a minor suspension results in an unwarranted penalty that reduces the work the task can actually complete.
The proposed solution involves an adjustment to the wakeup logic. Rather than strictly following the budget reduction mandated by the revised CBS rule, the scheduler would evaluate two alternatives — including the run time the task would have held had it never suspended — and select the maximum safe value. This approach aims to uphold temporal isolation while preventing the unnecessary loss of budget during transient inactivity.
Attendees questioned whether this optimization remains mathematically sound within the CBS framework. Cucinotta maintained that the refined rule preserves existing isolation guarantees while aligning more closely with practical user expectations. Attendees explored various execution paths and edge cases, particularly focusing on configurations where task deadlines do not match their periods, as these are the most sensitive to wakeup-rule variations.
This led to a broader exploration of the interface between applications and the deadline-scheduler policy. The discussion covered the fundamental semantics of run time, deadline, and period, as well as the alignment of reservation windows. Several participants sought clarification on how software can better anticipate the scheduler's internal decisions and the nuances of task resumption compared to application-level timing requirements.
A specific question was aimed at clarifying whether the revised wakeup rule that keeps the deadline but reduces the run time would be always better than the traditional CBS wakeup rule that resets the parameters to maximum run time and deadline one period apart. The traditional behavior is still useful because it provides SCHED_DEADLINE with a self-synchronizing ability: waking up a tiny bit before the programmed deadline, which is a common situation if the application uses its own timer or wakes up in response to external stimuli, causes a SCHED_DEADLINE task to start afresh with reset parameters, and this is what the user mostly expects.
Using the revised rule in such a case would force the task to keep its absolute deadline, slashing the remaining budget and quite likely causing a forced throttling of the task until its former deadline, causing an unexpected delay and de-synchronization of the task due to the in-kernel time accounting not matching the one used in user-space. Eventually, Cucinotta argued that an end user might want to choose among the two behaviors, so this could be done properly by adding another flag to the sched_setattr() API to explicitly request the revised rule (in the current API, you can force use of the revised wakeup rule by setting "period = deadline + 1ns", which seems a weird way to request that).
Then, the thread of the conversation revisited the need for better user-space observability. The authors discussed an earlier proposal to expose a task's current absolute deadline and instantaneous budget through an enhanced sched_getattr() system call. Current procfs entries were described as inadequate because they lack realtime updates and use internal kernel timestamps, whereas the new interface would provide actionable data that developers can correlate with their own timing logic.
The session also reviewed several advanced features of the subsystem, such as bandwidth reclamation via the GRUB flag, notifications for run-time overruns, and the constraints surrounding the creation of new deadline processes. These points were raised by audience members interested in the practicalities of deploying and debugging deadline-scheduled workloads in production environments.
The consensus among the attendees was that the current wakeup rule is indeed too conservative for workloads characterized by micro-sleeps. The proposed modification was viewed as a targeted usability fix that improves the experience for developers without altering the fundamental semantics of the CBS algorithm.
Moving forward, the authors plan to validate the new rule against a wider array of workloads and edge cases while continuing the review process on the mailing lists. The evaluation of new user-space interfaces remains a priority, reflecting a sustained interest in making the deadline scheduler more transparent and easier to integrate into complex application stacks while keeping its strong temporal guarantees intact.
Video: Improving the SCHED_DEADLINE wake-up rule in presence of micro-sleeps - Tommaso Cucinotta (OSPM26)
Brief items
Security
The "Akrites" vulnerability-mitigation project launches
The Linux Foundation, in a letter co-signed by a large range of organizations and companies, has announced the launch of "Akrites", a project to fast-track vulnerability fixes into projects.
As Akrites works upstream to fix projects at the source, we commit to support downstream efforts to secure critical infrastructure before it can be exploited. When patches are released to the public, adversaries are able to utilize AI to rapidly reverse engineer the underlying vulnerabilities, develop exploits, and launch attacks. The success of our efforts therefore will be measured in patch deployment, not publication. We will partner with critical infrastructure owners and operators, civil society efforts, and governments as they increase coordination to achieve these goals.Confidentiality is non-negotiable: An undisclosed flaw in a widely deployed package is, in effect, a weapon, and the program is built first to prevent leaks. Fixes flow back into each project's own home, working with the maintainers. The engineering resources and other capabilities provided by Akrites participants contribute to this effort. Additionally, when a critical package has no one maintaining it, Akrites will stand as the maintainer of last resort so a fix can still reach everyone in a timely fashion. We will also align with government efforts so that public and private defenders move together, rather than in a disjointed fashion.
Security quote of the week
— Christine Lemmer-WebberThe fediverse and decentralized social networks in general are a counter-point to centralization. The thing is, when working on decentralized tech, I always believed it was important because we had serious risks from centralization, surveillance, etc from governments and corporations, potentially co-conspiring. But what I hadn't anticipated is that as things became more centralized, the will to fight for the internet as something in the public interest too would evaporate.
When I have conversations with family members and friends who haven't yet thought much about the age verification and similar bills and their consequences, they've said "well, someone has to hold corporations like Meta" responsible. To which I say, "but what about all the smaller, non-corporate parts of the internet?" To which, many people are surprised, because they've simply forgotten about those things.
When the internet and computing becomes five corporations to most people, they begin to treat it as the concerns of reigning in five corporations.
Kernel development
Kernel release status
The current development kernel is 7.2-rc1, released on June 28. Linus said: "So two weeks have passed, and the merge window is closed. Things look reasonably normal for this release (knock wood)."
This release has seen 13,412 non-merge changesets from 2,138 developers, 404 of whom were first-time kernel contributors. The release history looks like:
RC Date Commits v7.2-rc1 2026-06-28 14395 14395
See the LWN KSDB v7.2 page for a lot more details.
Stable updates: 7.1.2, 7.0.14, and 6.18.37 were released on June 27. Note that 7.0.14 is the end of the 7.0.x series.
Quotes of the week
The kernel is a memory manager first, a scheduler second, all else is commentary.— H. Peter Anvin
Some filesystem people might have things to say about that. But increasingly the kernel is just the runtime for eBPF programs ;-)— Matthew Wilcox
I consider Reviewed-by to be stronger than Acked-by. I suspect the latter sometimes means "cool changelog!".— Andrew Morton
Distributions
Mageia 10 released
Mageia 10 has been released with the 6.18 Linux kernel, DNF 5.4.0, RPM 4.20.1, and an increase in hardware requirements for x86 32-bit systems; users now need a CPU with SSE2 features. See the release notes for a full list of updates, and the errata page for known problems.
Distributions quote of the week
— Willem Vermin in response to a bug report about xsnow's behaviorI still believe that the scenery surprises are not harmful, but I also take in consideration:
- many people are worried about xsnow's behavior
- some people are spending time on this issue, e.g. I noticed that Slackware distributes a patched version
- the surprise is causing much more of a stir than intended
So I will create a new version of xsnow, without the offending surprises [...]
Development
Git 2.55.0 released
Git maintainer Junio Hamano has announced Git 2.55.0, which has non-merge commits from 100 people; 33 of those are first-time contributors to the project. LWN recently covered some of the noteworthy changes in 2.55, including new features for the experimental "git history" command, addition of the Git fsmonitor daemon for Linux systems, and more.
Open source maintainership in the age of AI (Kubernetes blog)
The Kubernetes project has published a blog post explaining its AI policy:
The main problem is that AI has made generating code fast but there has been very little improvement in maintaining code bases. In this post, we will highlight the ways the Kubernetes community is adapting to the world of AI assisted coding.
The first step of this journey was to develop an AI policy. This seems mundane and bureaucratic but there were many PRs that derailed into discussions around AI usage. The AI policy helps steer the conversation around the project's stance on AI and provides a clear signal to contributors on how to use these tools responsibly.
Of note, the project requires disclosure when AI tools have been used to assist in the creation of a contribution but forbids the use of listing AI as a co-author or including "assisted-by" or "co-developed" trailers to attribute work to an LLM tool.
Podman 6.0 released
Version 6.0.0 of the Podman container-management tool has been released. Notable new features include the ability to set multiple static IP addresses for containers, improvements in network isolation that make Podman more compatible with Docker, changes to the way Quadlet commands function, many new options for many existing podman commands, and a rewrite of Podman's configuration file handling. There are many breaking changes; see the release notes for a full list of all new features, changes, and bug fixes.
Lots of stories about systemd v261
Lennart Poettering has posted a list of Mastodon posts about the changes in the systemd v261 release. The Mastodon format makes the reading harder, but there is a lot of useful information there.Development quote of the week
I started out slightly optimistic about CRA [Cyber Resilience Act] being an avenue for companies to (financially) support the projects they rely on, but as I personally see a complete lack of interest in this from companies even though I can sell it to them and we're approaching the date CRA goes live for real, I can only conclude that the money for CRA compliance will, as usual, end up in some middle mens' pockets. Not in the open source projects'.— Daniel Stenberg
Miscellaneous
Creative Commons founders' fireside chat (Creative Commons blog)
Dee Harris has published a summary of the recent "fireside chat" featuring Creative Commons founders Hal Abelson, Lawrence (Larry) Lessig, Molly Van Houweling, and Glenn Otis Brown. The chat was to mark the 25th anniversary of Creative Commons and included a look back at its history as well as a look at the landscape today:
Twenty-five years ago, a small group of people made a bet. They believed that if you gave creators a simple set of tools and licenses in language that a lawyer, a machine, and a human could all read, millions of people might choose to share their work with the world instead of locking it down.
The video of the chat is available on YouTube.
Page editor: Daroc Alden
Announcements
Newsletters
Kernel development
Distributions and system administration
Development
Meeting minutes
Calls for Presentations
CFP Deadlines: July 2, 2026 to August 31, 2026
The following listing of CFP deadlines is taken from the LWN.net CFP Calendar.
| Deadline | Event Dates | Event | Location |
|---|---|---|---|
| July 3 | September 28 September 30 |
X.Org Developers Conference | Toronto, Canada |
| July 14 | September 17 September 18 |
Git Merge | Lisbon, Portugal |
| July 15 | July 15 July 22 |
BornHack 2026 | Funen, Denmark |
| July 31 | October 14 October 17 |
PyCon South Africa | Cape Town, South Africa |
| July 31 | October 1 October 2 |
embedded Linux for Safe and Secure Applications | Göttingen, Germany |
| August 1 | September 28 October 1 |
Alpine Linux Persistence and Storage Summit | Lizumerhütte, Tyrol, Austria |
| August 1 | August 25 August 30 |
MiniDebConf and MiniDebCamp Winterthur 2026 | Winterthur, Switzerland |
If the CFP deadline for your event does not appear here, please tell us about it.
Upcoming Events
Events: July 2, 2026 to August 31, 2026
The following event listing is taken from the LWN.net Calendar.
| Date(s) | Event | Location |
|---|---|---|
| July 13 July 19 |
DebCamp 26 | Santa Fe, Argentina |
| July 13 July 16 |
Netdev | Rome, Italy |
| July 13 July 19 |
EuroPython | Kraków, Poland |
| July 15 July 22 |
BornHack 2026 | Funen, Denmark |
| July 16 July 19 |
Electromagnetic Field | Eastnor, UK |
| July 18 | AlmaLinux Day: Los Angeles | Los Angeles, CA, US |
| July 20 July 25 |
DebConf 26 | Santa Fe, Argentina |
| August 6 August 9 |
FOSSY 2026 | Vancouver, Canada |
| August 8 August 9 |
UbuCon Asia 2026 @ COSCUP | Taipei, Taiwan |
| August 11 August 12 |
Open Source Summit Korea | Seoul, South Korea |
| August 25 August 30 |
MiniDebConf and MiniDebCamp Winterthur 2026 | Winterthur, Switzerland |
If your event does not appear here, please tell us about it.
Security updates
Alert summary June 25, 2026 to July 1, 2026
| Dist. | ID | Release | Package | Date |
|---|---|---|---|---|
| AlmaLinux | ALSA-2026:29195 | 10 | buildah | 2026-06-25 |
| AlmaLinux | ALSA-2026:29455 | 9 | buildah | 2026-06-25 |
| AlmaLinux | ALSA-2026:29703 | 9 | containernetworking-plugins | 2026-06-29 |
| AlmaLinux | ALSA-2026:33124 | 10 | coreutils | 2026-06-30 |
| AlmaLinux | ALSA-2026:28911 | 9 | coreutils | 2026-06-25 |
| AlmaLinux | ALSA-2026:28998 | 8 | evince | 2026-06-25 |
| AlmaLinux | ALSA-2026:33412 | 10 | galera and mariadb11.8 | 2026-06-30 |
| AlmaLinux | ALSA-2026:33502 | 10 | giflib | 2026-07-01 |
| AlmaLinux | ALSA-2026:30855 | 10 | git-lfs | 2026-06-30 |
| AlmaLinux | ALSA-2026:30853 | 8 | git-lfs | 2026-06-29 |
| AlmaLinux | ALSA-2026:30854 | 9 | git-lfs | 2026-06-30 |
| AlmaLinux | ALSA-2026:33092 | 10 | glibc | 2026-06-30 |
| AlmaLinux | ALSA-2026:33126 | 8 | glibc | 2026-06-30 |
| AlmaLinux | ALSA-2026:33226 | 9 | glibc | 2026-06-30 |
| AlmaLinux | ALSA-2026:20597 | 9 | glibc | 2026-06-30 |
| AlmaLinux | ALSA-2026:29980 | 10 | golang | 2026-06-27 |
| AlmaLinux | ALSA-2026:29981 | 9 | golang | 2026-06-29 |
| AlmaLinux | ALSA-2026:34109 | 10 | httpd | 2026-07-01 |
| AlmaLinux | ALSA-2026:30129 | 10 | kernel | 2026-06-27 |
| AlmaLinux | ALSA-2026:27288 | 10 | kernel | 2026-06-26 |
| AlmaLinux | ALSA-2026:30848 | 9 | kernel | 2026-06-30 |
| AlmaLinux | ALSA-2026:28233 | 10 | libpng | 2026-06-24 |
| AlmaLinux | ALSA-2026:29898 | 8 | libpng | 2026-06-26 |
| AlmaLinux | ALSA-2026:28255 | 9 | libpng | 2026-06-25 |
| AlmaLinux | ALSA-2026:28244 | 9 | libpng15 | 2026-06-26 |
| AlmaLinux | ALSA-2026:28922 | 8 | libreoffice | 2026-06-25 |
| AlmaLinux | ALSA-2026:28236 | 10 | libsolv | 2026-06-24 |
| AlmaLinux | ALSA-2026:28235 | 10 | libtasn1 | 2026-06-24 |
| AlmaLinux | ALSA-2026:28253 | 9 | libtasn1 | 2026-06-25 |
| AlmaLinux | ALSA-2026:28234 | 10 | libxml2 | 2026-06-24 |
| AlmaLinux | ALSA-2026:28254 | 9 | libxml2 | 2026-06-25 |
| AlmaLinux | ALSA-2026:28584 | 10 | libxslt | 2026-06-24 |
| AlmaLinux | ALSA-2026:28243 | 9 | libxslt | 2026-06-25 |
| AlmaLinux | ALSA-2026:33093 | 10 | mariadb10.11 | 2026-06-30 |
| AlmaLinux | ALSA-2026:30845 | 10 | mod_md | 2026-06-30 |
| AlmaLinux | ALSA-2026:30844 | 9 | mod_md | 2026-06-30 |
| AlmaLinux | ALSA-2026:29874 | 10 | nginx | 2026-06-26 |
| AlmaLinux | ALSA-2026:28973 | 9 | nginx | 2026-06-25 |
| AlmaLinux | ALSA-2026:28921 | 8 | nginx:1.24 | 2026-06-25 |
| AlmaLinux | ALSA-2026:28212 | 9 | nginx:1.24 | 2026-06-25 |
| AlmaLinux | ALSA-2026:29151 | 9 | nginx:1.26 | 2026-06-25 |
| AlmaLinux | ALSA-2026:28256 | 9 | opencryptoki | 2026-06-26 |
| AlmaLinux | ALSA-2026:30857 | 10 | perl-Archive-Tar | 2026-06-30 |
| AlmaLinux | ALSA-2026:30852 | 8 | perl-Archive-Tar | 2026-06-29 |
| AlmaLinux | ALSA-2026:30856 | 9 | perl-Archive-Tar | 2026-06-30 |
| AlmaLinux | ALSA-2026:30860 | 10 | perl-IO-Compress | 2026-06-30 |
| AlmaLinux | ALSA-2026:30858 | 8 | perl-IO-Compress | 2026-06-29 |
| AlmaLinux | ALSA-2026:30859 | 9 | perl-IO-Compress | 2026-06-29 |
| AlmaLinux | ALSA-2026:30851 | 8 | perl:5.32 | 2026-06-30 |
| AlmaLinux | ALSA-2026:28999 | 8 | postgresql:12 | 2026-06-25 |
| AlmaLinux | ALSA-2026:28158 | 9 | python-urllib3 | 2026-06-25 |
| AlmaLinux | ALSA-2026:32992 | 8 | python3.12-urllib3 | 2026-06-29 |
| AlmaLinux | ALSA-2026:28159 | 9 | python3.12-urllib3 | 2026-06-25 |
| AlmaLinux | ALSA-2026:28581 | 10 | python3.14 | 2026-06-24 |
| AlmaLinux | ALSA-2026:28247 | 9 | python3.14 | 2026-06-25 |
| AlmaLinux | ALSA-2026:28157 | 9 | python3.14-urllib3 | 2026-06-25 |
| AlmaLinux | ALSA-2026:33731 | 10 | rrdtool | 2026-07-01 |
| AlmaLinux | ALSA-2026:33565 | 10 | ruby | 2026-07-01 |
| AlmaLinux | ALSA-2026:33540 | 10 | ruby4.0 | 2026-07-01 |
| AlmaLinux | ALSA-2026:29702 | 9 | runc | 2026-06-29 |
| AlmaLinux | ALSA-2026:29035 | 10 | skopeo | 2026-06-25 |
| AlmaLinux | ALSA-2026:30846 | 10 | thunderbird | 2026-06-30 |
| AlmaLinux | ALSA-2026:33445 | 8 | thunderbird | 2026-06-30 |
| AlmaLinux | ALSA-2026:29940 | 9 | thunderbird | 2026-06-26 |
| AlmaLinux | ALSA-2026:28923 | 8 | tigervnc | 2026-06-25 |
| AlmaLinux | ALSA-2026:19342 | 9 | tigervnc | 2026-06-24 |
| AlmaLinux | ALSA-2026:29844 | 9 | tigervnc | 2026-06-29 |
| AlmaLinux | ALSA-2026:26323 | 9 | tomcat | 2026-06-25 |
| AlmaLinux | ALSA-2026:28210 | 10 | vim | 2026-06-24 |
| AlmaLinux | ALSA-2026:28209 | 9 | vim | 2026-06-25 |
| Debian | DLA-4654-1 | LTS | chromium | 2026-06-27 |
| Debian | DSA-6364-1 | stable | chromium | 2026-06-25 |
| Debian | DLA-4645-1 | LTS | cloud-init | 2026-06-24 |
| Debian | DLA-4659-1 | LTS | debian-security-support | 2026-06-30 |
| Debian | DSA-6367-1 | stable | dnsdist | 2026-06-25 |
| Debian | DLA-4652-1 | LTS | gdcm | 2026-06-26 |
| Debian | DLA-4650-1 | LTS | giflib | 2026-06-26 |
| Debian | DSA-6370-1 | stable | incus | 2026-06-26 |
| Debian | DLA-4649-1 | LTS | libdbi-perl | 2026-06-26 |
| Debian | DLA-4655-1 | LTS | libhtml-parser-perl | 2026-06-28 |
| Debian | DLA-4658-1 | LTS | librabbitmq | 2026-06-30 |
| Debian | DSA-6365-1 | stable | libssh2 | 2026-06-25 |
| Debian | DLA-4648-1 | LTS | libtext-csv-xs-perl | 2026-06-25 |
| Debian | DSA-6373-1 | stable | lxd | 2026-06-28 |
| Debian | DLA-4660-1 | LTS | nginx | 2026-06-30 |
| Debian | DSA-6374-1 | stable | nginx | 2026-06-30 |
| Debian | DLA-4653-1 | LTS | openvpn | 2026-06-27 |
| Debian | DSA-6369-1 | stable | pdns-recursor | 2026-06-25 |
| Debian | DSA-6368-1 | stable | pdns | 2026-06-25 |
| Debian | DLA-4646-1 | LTS | postgresql-13 | 2026-06-24 |
| Debian | DLA-4651-1 | LTS | python-urllib3 | 2026-06-26 |
| Debian | DLA-4657-1 | LTS | sogo | 2026-06-29 |
| Debian | DSA-6366-1 | stable | sogo | 2026-06-25 |
| Debian | DLA-4656-1 | LTS | tor | 2026-06-28 |
| Debian | DSA-6372-1 | stable | tor | 2026-06-28 |
| Debian | DSA-6370-1 | stable | xorg-server | 2026-06-27 |
| Debian | DLA-4647-1 | LTS | yelp | 2026-06-25 |
| Fedora | FEDORA-2026-ddd87cb1db | F43 | chromium | 2026-06-28 |
| Fedora | FEDORA-2026-7f29bc3622 | F43 | chromium | 2026-07-01 |
| Fedora | FEDORA-2026-148601cd51 | F44 | chromium | 2026-06-29 |
| Fedora | FEDORA-2026-504709cab7 | F44 | chromium | 2026-06-27 |
| Fedora | FEDORA-2026-7f36ec4c65 | F43 | collectd | 2026-07-01 |
| Fedora | FEDORA-2026-1a714d39b0 | F43 | docker-buildkit | 2026-06-27 |
| Fedora | FEDORA-2026-1e00728616 | F44 | docker-buildkit | 2026-06-27 |
| Fedora | FEDORA-2026-3cca6f41d4 | F43 | docker-buildx | 2026-06-27 |
| Fedora | FEDORA-2026-105f7df940 | F44 | docker-buildx | 2026-06-27 |
| Fedora | FEDORA-2026-a424c1061e | F43 | dotnet10.0 | 2026-06-28 |
| Fedora | FEDORA-2026-dec081126f | F44 | dotnet10.0 | 2026-06-28 |
| Fedora | FEDORA-2026-2f80369c73 | F43 | dotnet8.0 | 2026-06-28 |
| Fedora | FEDORA-2026-041785a779 | F44 | dotnet8.0 | 2026-06-28 |
| Fedora | FEDORA-2026-2954cd11bd | F43 | dotnet9.0 | 2026-06-28 |
| Fedora | FEDORA-2026-0dce096c13 | F44 | dotnet9.0 | 2026-06-28 |
| Fedora | FEDORA-2026-08bb036c3e | F43 | goose | 2026-06-25 |
| Fedora | FEDORA-2026-00021c7c91 | F44 | goose | 2026-06-25 |
| Fedora | FEDORA-2026-37947358ea | F43 | httpd | 2026-06-25 |
| Fedora | FEDORA-2026-45b342f7c1 | F43 | krita | 2026-06-28 |
| Fedora | FEDORA-2026-3bb1c72ffd | F44 | krita | 2026-06-28 |
| Fedora | FEDORA-2026-b33ba1aa06 | F43 | ldns | 2026-06-27 |
| Fedora | FEDORA-2026-454722e3d8 | F43 | librabbitmq | 2026-06-26 |
| Fedora | FEDORA-2026-ca858b3ed8 | F44 | libssh2 | 2026-06-29 |
| Fedora | FEDORA-2026-79d9e34e36 | F44 | liferea | 2026-06-27 |
| Fedora | FEDORA-2026-d7d472853a | F43 | lighttpd | 2026-06-27 |
| Fedora | FEDORA-2026-1907dd9339 | F44 | lighttpd | 2026-06-27 |
| Fedora | FEDORA-2026-7726bdbcf1 | F44 | maradns | 2026-07-01 |
| Fedora | FEDORA-2026-efc64a64ec | F43 | mariadb10.11 | 2026-06-29 |
| Fedora | FEDORA-2026-3fdd0e930d | F44 | mariadb11.8 | 2026-06-29 |
| Fedora | FEDORA-2026-0feb6e4967 | F43 | moby-engine | 2026-06-28 |
| Fedora | FEDORA-2026-d8e03bae55 | F44 | moby-engine | 2026-06-28 |
| Fedora | FEDORA-2026-9d7328702e | F43 | nginx | 2026-06-27 |
| Fedora | FEDORA-2026-b8e751787c | F44 | nginx | 2026-06-27 |
| Fedora | FEDORA-2026-9d7328702e | F43 | nginx-mod-brotli | 2026-06-27 |
| Fedora | FEDORA-2026-b8e751787c | F44 | nginx-mod-brotli | 2026-06-27 |
| Fedora | FEDORA-2026-9d7328702e | F43 | nginx-mod-fancyindex | 2026-06-27 |
| Fedora | FEDORA-2026-b8e751787c | F44 | nginx-mod-fancyindex | 2026-06-27 |
| Fedora | FEDORA-2026-9d7328702e | F43 | nginx-mod-headers-more | 2026-06-27 |
| Fedora | FEDORA-2026-b8e751787c | F44 | nginx-mod-headers-more | 2026-06-27 |
| Fedora | FEDORA-2026-b8e751787c | F44 | nginx-mod-js-challenge | 2026-06-27 |
| Fedora | FEDORA-2026-9d7328702e | F43 | nginx-mod-modsecurity | 2026-06-27 |
| Fedora | FEDORA-2026-b8e751787c | F44 | nginx-mod-modsecurity | 2026-06-27 |
| Fedora | FEDORA-2026-9d7328702e | F43 | nginx-mod-naxsi | 2026-06-27 |
| Fedora | FEDORA-2026-b8e751787c | F44 | nginx-mod-naxsi | 2026-06-27 |
| Fedora | FEDORA-2026-9d7328702e | F43 | nginx-mod-vts | 2026-06-27 |
| Fedora | FEDORA-2026-b8e751787c | F44 | nginx-mod-vts | 2026-06-27 |
| Fedora | FEDORA-2026-da7e499416 | F43 | openbao | 2026-06-27 |
| Fedora | FEDORA-2026-84ff0044db | F44 | openbao | 2026-06-27 |
| Fedora | FEDORA-2026-6a4bfb1309 | F43 | pacemaker | 2026-06-27 |
| Fedora | FEDORA-2026-2c31df81dc | F44 | pacemaker | 2026-06-27 |
| Fedora | FEDORA-2026-7ecfdcf0e3 | F44 | perl-Compress-Raw-Bzip2 | 2026-06-26 |
| Fedora | FEDORA-2026-d74dd170ab | F43 | perl-DBI | 2026-06-30 |
| Fedora | FEDORA-2026-134fcb8549 | F44 | perl-DBI | 2026-06-26 |
| Fedora | FEDORA-2026-7ecfdcf0e3 | F44 | perl-IO-Compress | 2026-06-26 |
| Fedora | FEDORA-2026-7df6c5acad | F43 | perl-Socket | 2026-06-30 |
| Fedora | FEDORA-2026-91d6cb99f7 | F44 | perl-Socket | 2026-06-26 |
| Fedora | FEDORA-2026-5938be3b09 | F43 | pgadmin4 | 2026-06-28 |
| Fedora | FEDORA-2026-c248414214 | F44 | pgadmin4 | 2026-06-28 |
| Fedora | FEDORA-2026-ac94948c8a | F43 | podman-tui | 2026-06-29 |
| Fedora | FEDORA-2026-c55ec73fe2 | F44 | podman-tui | 2026-06-29 |
| Fedora | FEDORA-2026-460749ef95 | F43 | prometheus-podman-exporter | 2026-06-29 |
| Fedora | FEDORA-2026-3c6643b33a | F44 | prometheus-podman-exporter | 2026-06-29 |
| Fedora | FEDORA-2026-2c5cde060d | F44 | python-django-allauth | 2026-06-26 |
| Fedora | FEDORA-2026-1d2c7eaa2f | F43 | python-django-haystack | 2026-07-01 |
| Fedora | FEDORA-2026-3e10194134 | F44 | python-django-haystack | 2026-07-01 |
| Fedora | FEDORA-2026-9536c7cb79 | F43 | python-jupyter-server | 2026-06-27 |
| Fedora | FEDORA-2026-31e6b85f4e | F43 | python-jupytext | 2026-07-01 |
| Fedora | FEDORA-2026-db770b7d7a | F44 | python-jupytext | 2026-07-01 |
| Fedora | FEDORA-2026-c52d83db89 | F43 | python-mistune | 2026-06-28 |
| Fedora | FEDORA-2026-3b027683d8 | F44 | python-mistune | 2026-06-28 |
| Fedora | FEDORA-2026-c2b475c5f1 | F43 | python-postorius | 2026-06-27 |
| Fedora | FEDORA-2026-ef34f94241 | F44 | python-postorius | 2026-06-27 |
| Fedora | FEDORA-2026-ade10efd88 | F43 | python-pydantic-settings | 2026-06-29 |
| Fedora | FEDORA-2026-6b7571be30 | F44 | python-pydantic-settings | 2026-06-28 |
| Fedora | FEDORA-2026-b17b2a984a | F43 | python3-docs | 2026-06-28 |
| Fedora | FEDORA-2026-b17b2a984a | F43 | python3.14 | 2026-06-28 |
| Fedora | FEDORA-2026-a04e445b3f | F43 | rsync | 2026-06-26 |
| Fedora | FEDORA-2026-67a9805962 | F43 | strongswan | 2026-06-25 |
| Fedora | FEDORA-2026-cda0c20ce0 | F44 | thunderbird | 2026-06-27 |
| Fedora | FEDORA-2026-ad10afa9cd | F43 | tigervnc | 2026-06-27 |
| Fedora | FEDORA-2026-77f1ca9c8f | F43 | tinyproxy | 2026-06-27 |
| Fedora | FEDORA-2026-efbe094630 | F44 | tinyproxy | 2026-06-27 |
| Fedora | FEDORA-2026-a7ff7017ee | F43 | util-linux | 2026-06-27 |
| Fedora | FEDORA-2026-7f36ec4c65 | F43 | varnish | 2026-07-01 |
| Fedora | FEDORA-2026-7f36ec4c65 | F43 | varnish-modules | 2026-07-01 |
| Fedora | FEDORA-2026-7f36ec4c65 | F43 | vmod-querystring | 2026-07-01 |
| Mageia | MGASA-2026-0233 | 9 | krb5 | 2026-06-27 |
| Mageia | MGASA-2026-0232 | 9 | nats-server | 2026-06-25 |
| Oracle | ELSA-2026-25222 | OL9 | .NET 10.0 | 2026-06-24 |
| Oracle | ELSA-2026-21297 | OL9 | .NET 10.0 | 2026-06-26 |
| Oracle | ELSA-2026-25220 | OL9 | .NET 8.0 | 2026-06-24 |
| Oracle | ELSA-2026-21293 | OL9 | .NET 8.0 | 2026-06-26 |
| Oracle | ELSA-2026-25221 | OL9 | .NET 9.0 | 2026-06-24 |
| Oracle | ELSA-2026-21296 | OL9 | .NET 9.0 | 2026-06-26 |
| Oracle | ELSA-2026-26455 | OL9 | 389-ds-base | 2026-06-25 |
| Oracle | ELSA-2026-24367 | OL9 | bind | 2026-06-26 |
| Oracle | ELSA-2026-24368 | OL9 | bind9.18 | 2026-06-24 |
| Oracle | ELSA-2026-29455 | OL9 | buildah | 2026-06-25 |
| Oracle | ELSA-2026-21468 | OL9 | cockpit | 2026-06-24 |
| Oracle | ELSA-2026-22313 | OL9 | compat-openssl11 | 2026-06-24 |
| Oracle | ELSA-2026-29703 | OL9 | containernetworking-plugins | 2026-06-25 |
| Oracle | ELSA-2026-28911 | OL9 | coreutils | 2026-06-25 |
| Oracle | ELSA-2026-19373 | OL9 | dnsmasq | 2026-06-24 |
| Oracle | ELSA-2026-19364 | OL9 | dovecot | 2026-06-24 |
| Oracle | ELSA-2026-26533 | OL9 | dracut | 2026-06-26 |
| Oracle | ELSA-2026-28998 | OL8 | evince | 2026-06-24 |
| Oracle | ELSA-2026-27819 | OL9 | evince | 2026-06-25 |
| Oracle | ELSA-2026-23230 | OL9 | expat | 2026-06-24 |
| Oracle | ELSA-2026-26206 | OL9 | fence-agents | 2026-06-25 |
| Oracle | ELSA-2026-19355 | OL9 | fence-agents | 2026-06-26 |
| Oracle | ELSA-2026-24983 | OL7 | firefox | 2026-07-01 |
| Oracle | ELSA-2026-26551 | OL7 | firefox | 2026-07-01 |
| Oracle | ELSA-2026-27734 | OL9 | firefox | 2026-06-26 |
| Oracle | ELSA-2026-19370 | OL9 | firefox | 2026-06-30 |
| Oracle | ELSA-2026-21378 | OL9 | firefox | 2026-06-30 |
| Oracle | ELSA-2026-20574 | OL9 | firefox | 2026-06-30 |
| Oracle | ELSA-2026-21755 | OL9 | flatpak | 2026-06-24 |
| Oracle | ELSA-2026-19358 | OL9 | freerdp | 2026-06-24 |
| Oracle | ELSA-2026-19349 | OL9 | freerdp | 2026-06-29 |
| Oracle | ELSA-2026-24371 | OL9 | frr | 2026-06-26 |
| Oracle | ELSA-2026-24370 | OL9 | frr10 | 2026-06-26 |
| Oracle | ELSA-2026-19367 | OL9 | giflib | 2026-06-25 |
| Oracle | ELSA-2026-19362 | OL9 | gimp | 2026-06-24 |
| Oracle | ELSA-2026-30853 | OL8 | git-lfs | 2026-06-30 |
| Oracle | ELSA-2026-19350 | OL9 | git-lfs | 2026-06-25 |
| Oracle | ELSA-2026-30854 | OL9 | git-lfs | 2026-07-01 |
| Oracle | ELSA-2026-19361 | OL9 | glib2 | 2026-06-26 |
| Oracle | ELSA-2026-20597 | OL9 | glibc | 2026-06-26 |
| Oracle | ELSA-2026-20612 | OL9 | gnutls | 2026-06-26 |
| Oracle | ELSA-2026-22121 | OL9 | golang | 2026-06-24 |
| Oracle | ELSA-2026-29981 | OL9 | golang | 2026-06-26 |
| Oracle | ELSA-2026-19352 | OL9 | grafana | 2026-06-24 |
| Oracle | ELSA-2026-19351 | OL9 | grafana-pcp | 2026-06-24 |
| Oracle | ELSA-2026-26297 | OL9 | hplip | 2026-06-25 |
| Oracle | ELSA-2026-21391 | OL9 | httpd | 2026-06-24 |
| Oracle | ELSA-2026-20568 | OL9 | jmc | 2026-06-24 |
| Oracle | ELSA-2026-19365 | OL9 | jq | 2026-06-24 |
| Oracle | ELSA-2026-50353 | OL7 | kernel | 2026-07-01 |
| Oracle | ELSA-2026-27811 | OL8 | kernel | 2026-06-24 |
| Oracle | ELSA-2026-50353 | OL8 | kernel | 2026-07-01 |
| Oracle | ELSA-2026-50353 | OL8 | kernel | 2026-07-01 |
| Oracle | ELSA-2026-50352 | OL8 | kernel | 2026-07-01 |
| Oracle | ELSA-2026-27789 | OL9 | kernel | 2026-06-26 |
| Oracle | ELSA-2026-50352 | OL9 | kernel | 2026-07-01 |
| Oracle | ELSA-2026-24381 | OL9 | kernel | 2026-07-01 |
| Oracle | ELSA-2026-25217 | OL9 | kernel | 2026-07-01 |
| Oracle | ELSA-2026-50352 | OL9 | kernel | 2026-07-01 |
| Oracle | ELSA-2026-50351 | OL9 | kernel | 2026-07-01 |
| Oracle | ELSA-2026-19357 | OL9 | krb5 | 2026-06-25 |
| Oracle | ELSA-2026-19346 | OL9 | libcap | 2026-06-25 |
| Oracle | ELSA-2026-22553 | OL9 | libexif | 2026-06-25 |
| Oracle | ELSA-2026-29898 | OL8 | libpng | 2026-06-26 |
| Oracle | ELSA-2026-28255 | OL9 | libpng | 2026-06-26 |
| Oracle | ELSA-2026-28244 | OL9 | libpng15 | 2026-06-26 |
| Oracle | ELSA-2026-28922 | OL8 | libreoffice | 2026-06-26 |
| Oracle | ELSA-2026-19610 | OL9 | libsndfile | 2026-06-24 |
| Oracle | ELSA-2026-24722 | OL7 | libsoup | 2026-06-30 |
| Oracle | ELSA-2026-19356 | OL9 | libsoup | 2026-06-24 |
| Oracle | ELSA-2026-28253 | OL9 | libtasn1 | 2026-06-25 |
| Oracle | ELSA-2026-19363 | OL9 | libtiff | 2026-06-24 |
| Oracle | ELSA-2026-22420 | OL7 | libxml2 | 2026-06-30 |
| Oracle | ELSA-2026-28254 | OL9 | libxml2 | 2026-06-26 |
| Oracle | ELSA-2026-28243 | OL9 | libxslt | 2026-06-26 |
| Oracle | ELSA-2026-27862 | OL9 | memcached | 2026-06-25 |
| Oracle | ELSA-2026-25057 | OL9 | mod_http2 | 2026-06-24 |
| Oracle | ELSA-2026-22551 | OL9 | mod_http2 | 2026-06-26 |
| Oracle | ELSA-2026-30844 | OL9 | mod_md | 2026-06-30 |
| Oracle | ELSA-2026-23332 | OL9 | mysql | 2026-06-29 |
| Oracle | ELSA-2026-25919 | OL8 | mysql:8.0 | 2026-06-24 |
| Oracle | ELSA-2026-25052 | OL9 | mysql:8.4 | 2026-06-26 |
| Oracle | ELSA-2026-19374 | OL9 | nginx | 2026-06-24 |
| Oracle | ELSA-2026-28921 | OL8 | nginx:1.24 | 2026-06-24 |
| Oracle | ELSA-2026-19371 | OL9 | nginx:1.24 | 2026-06-24 |
| Oracle | ELSA-2026-28212 | OL9 | nginx:1.24 | 2026-07-01 |
| Oracle | ELSA-2026-19372 | OL9 | nginx:1.26 | 2026-06-26 |
| Oracle | ELSA-2026-29151 | OL9 | nginx:1.26 | 2026-06-26 |
| Oracle | ELSA-2026-28256 | OL9 | opencryptoki | 2026-06-25 |
| Oracle | ELSA-2026-19359 | OL9 | openexr | 2026-06-24 |
| Oracle | ELSA-2026-25239 | OL9 | openssl | 2026-06-26 |
| Oracle | ELSA-2026-22312 | OL9 | openssl | 2026-07-01 |
| Oracle | ELSA-2026-30852 | OL8 | perl-Archive-Tar | 2026-06-30 |
| Oracle | ELSA-2026-30856 | OL9 | perl-Archive-Tar | 2026-07-01 |
| Oracle | ELSA-2026-30858 | OL8 | perl-IO-Compress | 2026-06-30 |
| Oracle | ELSA-2026-30859 | OL9 | perl-IO-Compress | 2026-07-01 |
| Oracle | ELSA-2026-22143 | OL9 | php:8.2 | 2026-06-24 |
| Oracle | ELSA-2026-22142 | OL9 | php:8.3 | 2026-06-26 |
| Oracle | ELSA-2026-26447 | OL9 | podman | 2026-06-25 |
| Oracle | ELSA-2026-26445 | OL9 | podman | 2026-06-26 |
| Oracle | ELSA-2026-18722 | OL9 | podman | 2026-06-26 |
| Oracle | ELSA-2026-25058 | OL9 | poppler | 2026-06-24 |
| Oracle | ELSA-2026-26205 | OL9 | postfix | 2026-06-25 |
| Oracle | ELSA-2026-22304 | OL9 | postgresql-jdbc | 2026-06-26 |
| Oracle | ELSA-2026-28999 | OL8 | postgresql:12 | 2026-06-25 |
| Oracle | ELSA-2026-28208 | OL8 | postgresql:13 | 2026-06-25 |
| Oracle | ELSA-2026-28037 | OL9 | postgresql:15 | 2026-06-25 |
| Oracle | ELSA-2026-26203 | OL9 | postgresql:16 | 2026-06-25 |
| Oracle | ELSA-2026-50324 | OL9 | pyOpenSSL | 2026-06-24 |
| Oracle | ELSA-2026-19589 | OL7 | python | 2026-06-30 |
| Oracle | ELSA-2026-19366 | OL9 | python-markdown | 2026-06-24 |
| Oracle | ELSA-2026-28158 | OL9 | python-urllib3 | 2026-06-25 |
| Oracle | ELSA-2026-32992 | OL8 | python3.12-urllib3 | 2026-06-30 |
| Oracle | ELSA-2026-28159 | OL9 | python3.12-urllib3 | 2026-06-25 |
| Oracle | ELSA-2026-28247 | OL9 | python3.14 | 2026-06-26 |
| Oracle | ELSA-2026-28157 | OL9 | python3.14-urllib3 | 2026-06-25 |
| Oracle | ELSA-2026-18693 | OL9 | python3.9 | 2026-06-25 |
| Oracle | ELSA-2026-23229 | OL9 | redis | 2026-06-26 |
| Oracle | ELSA-2026-25219 | OL9 | redis:7 | 2026-06-24 |
| Oracle | ELSA-2026-26410 | OL9 | rsync | 2026-06-26 |
| Oracle | ELSA-2026-19368 | OL9 | rsync | 2026-06-30 |
| Oracle | ELSA-2026-29702 | OL9 | runc | 2026-06-25 |
| Oracle | ELSA-2026-25049 | OL9 | samba | 2026-06-24 |
| Oracle | ELSA-2026-28074 | OL9 | skopeo | 2026-06-25 |
| Oracle | ELSA-2026-21381 | OL9 | thunderbird | 2026-06-24 |
| Oracle | ELSA-2026-29940 | OL9 | thunderbird | 2026-06-26 |
| Oracle | ELSA-2026-19348 | OL9 | thunderbird | 2026-06-29 |
| Oracle | ELSA-2026-28923 | OL8 | tigervnc | 2026-06-24 |
| Oracle | ELSA-2026-19342 | OL9 | tigervnc | 2026-06-25 |
| Oracle | ELSA-2026-29844 | OL9 | tigervnc | 2026-06-25 |
| Oracle | ELSA-2026-26323 | OL9 | tomcat | 2026-06-26 |
| Oracle | ELSA-2026-18916 | OL9 | tomcat | 2026-06-30 |
| Oracle | ELSA-2026-50351 | uek-kernel | 2026-07-01 | |
| Oracle | ELSA-2026-24369 | OL9 | unbound | 2026-06-24 |
| Oracle | ELSA-2026-25925 | OL9 | valkey | 2026-06-26 |
| Oracle | ELSA-2026-28553 | OL8 | vim | 2026-06-24 |
| Oracle | ELSA-2026-28209 | OL9 | vim | 2026-06-25 |
| Oracle | ELSA-2026-22717 | OL9 | vim | 2026-06-26 |
| Oracle | ELSA-2026-25927 | OL9 | webkit2gtk3 | 2026-06-25 |
| Oracle | ELSA-2026-26610 | OL9 | xorg-x11-server | 2026-06-25 |
| Oracle | ELSA-2026-19343 | OL9 | xorg-x11-server | 2026-06-30 |
| Oracle | ELSA-2026-26590 | OL9 | xorg-x11-server-Xwayland | 2026-06-25 |
| Oracle | ELSA-2026-19344 | OL9 | xorg-x11-server-Xwayland | 2026-06-29 |
| Red Hat | RHSA-2026:33722-01 | EL8 | container-tools:rhel8 | 2026-07-01 |
| Red Hat | RHSA-2026:29898-01 | EL8 | libpng | 2026-06-25 |
| Red Hat | RHSA-2026:29900-01 | EL8.8 | libpng | 2026-06-25 |
| Red Hat | RHSA-2026:29022-01 | EL8.4 | libpng12 | 2026-06-25 |
| Red Hat | RHSA-2026:29018-01 | EL8.8 | libpng12 | 2026-06-25 |
| Red Hat | RHSA-2026:29021-01 | EL8.4 | libpng15 | 2026-06-25 |
| Red Hat | RHSA-2026:29019-01 | EL8.6 | libpng15 | 2026-06-25 |
| Red Hat | RHSA-2026:29016-01 | EL8.8 | libpng15 | 2026-06-25 |
| Red Hat | RHSA-2026:32991-01 | EL9.4 | osbuild-composer | 2026-06-29 |
| SUSE | openSUSE-SU-2026:21011-1 | oS16.0 | 389-ds | 2026-06-30 |
| SUSE | SUSE-SU-2026:2696-1 | SLE15 oS15.4 | 7zip | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21038-1 | oS16.0 | 7zip | 2026-06-30 |
| SUSE | SUSE-SU-2026:2625-1 | SLE15 oS15.6 | GraphicsMagick | 2026-06-24 |
| SUSE | openSUSE-SU-2026:11115-1 | TW | GraphicsMagick | 2026-06-27 |
| SUSE | openSUSE-SU-2026:11127-1 | TW | ImageMagick | 2026-06-28 |
| SUSE | openSUSE-SU-2026:11104-1 | TW | NetworkManager-applet-openvpn | 2026-06-26 |
| SUSE | openSUSE-SU-2026:11128-1 | TW | agama-web-ui | 2026-06-28 |
| SUSE | SUSE-SU-2026:22291-1 | SLE-m6.2 | alsa | 2026-06-29 |
| SUSE | openSUSE-SU-2026:21075-1 | oS16.0 | alsa | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21013-1 | oS16.0 | amazon-ecs-init | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21079-1 | oS16.0 | amazon-ssm-agent | 2026-06-30 |
| SUSE | SUSE-SU-2026:2680-1 | SLE15 oS15.4 | ansible-core | 2026-06-29 |
| SUSE | openSUSE-SU-2026:21097-1 | oS16.0 | ansible-core | 2026-06-30 |
| SUSE | SUSE-SU-2026:2642-1 | SLE15 | apache-commons-configuration2, apache-commons-text | 2026-06-26 |
| SUSE | SUSE-SU-2026:2641-1 | SLE12 | apache2 | 2026-06-26 |
| SUSE | SUSE-SU-2026:2717-1 | SLE12 | apache2 | 2026-07-01 |
| SUSE | SUSE-SU-2026:2686-1 | SLE15 oS15.4 | apache2 | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21115-1 | oS16.0 | apache2 | 2026-06-30 |
| SUSE | SUSE-SU-2026:2609-1 | SLE15 oS15.6 | apptainer | 2026-06-24 |
| SUSE | openSUSE-SU-2026:11106-1 | TW | asn1c | 2026-06-26 |
| SUSE | openSUSE-SU-2026:11129-1 | TW | assimp-devel | 2026-06-28 |
| SUSE | openSUSE-SU-2026:0223-1 | osB15 | assimp | 2026-06-29 |
| SUSE | openSUSE-SU-2026:21152-1 | oS16.0 | atril | 2026-06-30 |
| SUSE | SUSE-SU-2026:22258-1 | SLE-m6.2 | avahi | 2026-06-29 |
| SUSE | openSUSE-SU-2026:21014-1 | oS16.0 | avahi | 2026-06-30 |
| SUSE | SUSE-SU-2026:2643-1 | MP4.3 SLE15 | aws-iam-authenticator | 2026-06-26 |
| SUSE | SUSE-SU-2026:2673-1 | SLE15 | bind | 2026-06-29 |
| SUSE | SUSE-SU-2026:2616-1 | SLE15 SLE5.5 SLE-m5.5 oS15.5 | bind | 2026-06-24 |
| SUSE | SUSE-SU-2026:2617-1 | SLE15 oS15.4 | bind | 2026-06-24 |
| SUSE | SUSE-SU-2026:2676-1 | SLE15 oS15.6 | bind | 2026-06-29 |
| SUSE | openSUSE-SU-2026:21123-1 | oS16.0 | bind | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21149-1 | oS16.0 | bitcoin | 2026-06-30 |
| SUSE | SUSE-SU-2026:2706-1 | SLE15 oS15.4 | buildah | 2026-06-30 |
| SUSE | openSUSE-SU-2026:11130-1 | TW | calibre | 2026-06-28 |
| SUSE | openSUSE-SU-2026:21062-1 | oS16.0 | capnproto | 2026-06-30 |
| SUSE | openSUSE-SU-2026:11139-1 | TW | chromedriver | 2026-06-29 |
| SUSE | openSUSE-SU-2026:21135-1 | oS16.0 | chromium | 2026-06-30 |
| SUSE | SUSE-SU-2026:2700-1 | SLE12 | cifs-utils | 2026-06-30 |
| SUSE | SUSE-SU-2026:2699-1 | SLE15 SLE5.3 SLE5.4 SLE5.5 SLE-m5.3 SLE-m5.4 SLE-m5.5 oS15.4 | cifs-utils | 2026-06-30 |
| SUSE | SUSE-SU-2026:0906-2 | SLE15 | clamav | 2026-06-26 |
| SUSE | SUSE-SU-2026:2640-1 | SLE12 | containerd | 2026-06-26 |
| SUSE | SUSE-SU-2026:2639-1 | SLE15 SLE5.3 SLE5.4 SLE5.5 SLE-m5.3 SLE-m5.4 SLE-m5.5 | containerd | 2026-06-26 |
| SUSE | openSUSE-SU-2026:11121-1 | TW | corepack24 | 2026-06-27 |
| SUSE | openSUSE-SU-2026:21036-1 | oS16.0 | cosign | 2026-06-30 |
| SUSE | SUSE-SU-2026:22247-1 | SLE-m6.1 | crun | 2026-06-25 |
| SUSE | SUSE-SU-2026:2703-1 | SLE12 | curl | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21084-1 | oS16.0 | distribution | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21015-1 | oS16.0 | dnsdist | 2026-06-30 |
| SUSE | SUSE-SU-2026:22285-1 | SLE-m6.2 | docker | 2026-06-29 |
| SUSE | SUSE-SU-2026:2692-1 | SLE15 SLE5.3 SLE5.4 SLE5.5 SLE-m5.3 SLE-m5.4 SLE-m5.5 | docker | 2026-06-30 |
| SUSE | SUSE-SU-2026:2645-1 | SLE12 | dovecot22 | 2026-06-26 |
| SUSE | openSUSE-SU-2026:21109-1 | oS16.0 | dovecot24 | 2026-06-30 |
| SUSE | SUSE-SU-2026:22273-1 | SLE-m6.2 | dracut | 2026-06-29 |
| SUSE | openSUSE-SU-2026:21054-1 | oS16.0 | dracut | 2026-06-30 |
| SUSE | SUSE-SU-2026:2704-1 | oS15.4 | exiv2-0_26 | 2026-06-30 |
| SUSE | SUSE-SU-2026:2663-1 | SLE12 | exiv2 | 2026-06-26 |
| SUSE | openSUSE-SU-2026:21043-1 | oS16.0 | firefox | 2026-06-30 |
| SUSE | SUSE-SU-2026:22263-1 | SLE-m6.2 | firewalld | 2026-06-29 |
| SUSE | openSUSE-SU-2026:21032-1 | oS16.0 | firewalld | 2026-06-30 |
| SUSE | SUSE-SU-2026:22243-1 | SLE-m6.0 | freeipmi | 2026-06-25 |
| SUSE | SUSE-SU-2026:22246-1 | SLE-m6.1 | freeipmi | 2026-06-25 |
| SUSE | SUSE-SU-2026:2679-1 | SLE12 | freeipmi | 2026-06-29 |
| SUSE | openSUSE-SU-2026:21088-1 | oS16.0 | freeipmi | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21116-1 | oS16.0 | freerdp | 2026-06-30 |
| SUSE | SUSE-SU-2026:2644-1 | SLE15 oS15.3 | frr | 2026-06-26 |
| SUSE | openSUSE-SU-2026:11083-1 | TW | ghc-crypton-x509-store | 2026-06-24 |
| SUSE | openSUSE-SU-2026:11084-1 | TW | ghc-crypton-x509-system | 2026-06-24 |
| SUSE | SUSE-SU-2026:2667-1 | SLE12 | giflib | 2026-06-26 |
| SUSE | SUSE-SU-2026:2666-1 | SLE15 | giflib | 2026-06-26 |
| SUSE | openSUSE-SU-2026:21076-1 | oS16.0 | giflib | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21171-1 | oS16.0 | gimp | 2026-06-30 |
| SUSE | openSUSE-SU-2026:11122-1 | TW | glances-common | 2026-06-28 |
| SUSE | openSUSE-SU-2026:21143-1 | oS16.0 | gleam | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21130-1 | oS16.0 | glib-networking | 2026-06-30 |
| SUSE | openSUSE-SU-2026:11140-1 | TW | glibc | 2026-06-29 |
| SUSE | openSUSE-SU-2026:21134-1 | oS16.0 | glycin-loaders | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21136-1 | oS16.0 | golang-github-prometheus-alertmanager | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21157-1 | oS16.0 | golang-github-prometheus-alertmanager | 2026-06-30 |
| SUSE | SUSE-SU-2026:2682-1 | MP4.3 SLE15 | google-cloud-sap-agent | 2026-06-29 |
| SUSE | SUSE-SU-2026:2683-1 | SLE12 | google-cloud-sap-agent | 2026-06-29 |
| SUSE | openSUSE-SU-2026:21010-1 | oS16.0 | google-cloud-sap-agent | 2026-06-30 |
| SUSE | SUSE-SU-2026:2612-1 | MP4.3 SLE15 SLE5.5 SLE-m5.5 | google-guest-agent | 2026-06-24 |
| SUSE | openSUSE-SU-2026:21069-1 | oS16.0 | google-guest-agent | 2026-06-30 |
| SUSE | SUSE-SU-2026:2611-1 | MP4.3 SLE15 SLE5.5 SLE-m5.5 | google-osconfig-agent | 2026-06-24 |
| SUSE | SUSE-SU-2026:22242-1 | SLE-m6.0 | google-osconfig-agent | 2026-06-25 |
| SUSE | SUSE-SU-2026:22249-1 | SLE-m6.1 | google-osconfig-agent | 2026-06-25 |
| SUSE | SUSE-SU-2026:2665-1 | SLE12 | google-osconfig-agent | 2026-06-26 |
| SUSE | openSUSE-SU-2026:21124-1 | oS16.0 | graphite2 | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21004-1 | oS16.0 | gsasl | 2026-06-30 |
| SUSE | openSUSE-SU-2026:11088-1 | TW | gstreamer-plugins-bad | 2026-06-24 |
| SUSE | openSUSE-SU-2026:11114-1 | TW | gvim | 2026-06-27 |
| SUSE | openSUSE-SU-2026:11089-1 | TW | hamlib | 2026-06-24 |
| SUSE | openSUSE-SU-2026:21155-1 | oS16.0 | hamlib | 2026-06-30 |
| SUSE | SUSE-SU-2026:2651-1 | MP4.3 SLE15 SLE5.3 SLE5.4 SLE5.5 SLE-m5.3 SLE-m5.4 SLE-m5.5 oS15.4 | haproxy | 2026-06-26 |
| SUSE | SUSE-SU-2026:2652-1 | SLE15 oS15.6 | haproxy | 2026-06-26 |
| SUSE | openSUSE-SU-2026:20994-1 | oS16.0 | helm | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21111-1 | oS16.0 | himmelblau | 2026-06-30 |
| SUSE | openSUSE-SU-2026:11131-1 | TW | hydra | 2026-06-28 |
| SUSE | openSUSE-SU-2026:21108-1 | oS16.0 | ignition | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21071-1 | oS16.0 | imagemagick | 2026-06-30 |
| SUSE | SUSE-SU-2026:2620-1 | SLE5.3 SLE5.4 SLE5.5 SLE-m5.3 SLE-m5.4 SLE-m5.5 oS15.4 | iproute2 | 2026-06-24 |
| SUSE | openSUSE-SU-2026:11141-1 | TW | istioctl | 2026-06-29 |
| SUSE | openSUSE-SU-2026:11132-1 | TW | jackson-databind | 2026-06-29 |
| SUSE | SUSE-SU-2026:2624-1 | SLE12 | java-1_8_0-openjdk | 2026-06-24 |
| SUSE | openSUSE-SU-2026:11133-1 | TW | jq | 2026-06-29 |
| SUSE | openSUSE-SU-2026:11138-1 | TW | jupyter-jupyterlab-templates | 2026-06-29 |
| SUSE | openSUSE-SU-2026:11123-1 | TW | jupyter-nbclassic | 2026-06-28 |
| SUSE | SUSE-SU-2026:2638-1 | MP4.3 SLE15 SLE5.3 SLE5.4 SLE-m5.3 SLE-m5.4 oS15.4 | kernel | 2026-06-26 |
| SUSE | SUSE-SU-2026:2631-1 | SLE15 SLE5.3 SLE5.4 SLE-m5.3 SLE-m5.4 | kernel | 2026-06-25 |
| SUSE | SUSE-SU-2026:2630-1 | SLE15 SLE5.5 SLE-m5.5 oS15.5 | kernel | 2026-06-25 |
| SUSE | SUSE-SU-2026:2658-1 | SLE15 SLE5.5 SLE-m5.5 oS15.5 | kernel | 2026-06-26 |
| SUSE | SUSE-SU-2026:2632-1 | SLE15 oS15.6 | kernel | 2026-06-25 |
| SUSE | openSUSE-SU-2026:21025-1 | oS16.0 | keylime | 2026-06-30 |
| SUSE | SUSE-SU-2026:22255-1 | SLE-m6.2 | krb5 | 2026-06-29 |
| SUSE | openSUSE-SU-2026:21021-1 | oS16.0 | krb5 | 2026-06-30 |
| SUSE | openSUSE-SU-2026:11091-1 | TW | kubevirt1 | 2026-06-24 |
| SUSE | openSUSE-SU-2026:21093-1 | oS16.0 | ldns | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21061-1 | oS16.0 | libaom | 2026-06-30 |
| SUSE | SUSE-SU-2026:22241-1 | SLE-m6.0 | libarchive | 2026-06-25 |
| SUSE | SUSE-SU-2026:22248-1 | SLE-m6.1 | libarchive | 2026-06-25 |
| SUSE | openSUSE-SU-2026:21101-1 | oS16.0 | libcaca | 2026-06-30 |
| SUSE | SUSE-SU-2026:22270-1 | SLE-m6.2 | libgcrypt | 2026-06-29 |
| SUSE | openSUSE-SU-2026:21047-1 | oS16.0 | libgcrypt | 2026-06-30 |
| SUSE | SUSE-SU-2026:2622-1 | SLE15 | libheif | 2026-06-24 |
| SUSE | SUSE-SU-2026:2681-1 | oS15.4 | libheif | 2026-06-29 |
| SUSE | openSUSE-SU-2026:21091-1 | oS16.0 | libinput | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21100-1 | oS16.0 | libjxl | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21055-1 | oS16.0 | libnfs | 2026-06-30 |
| SUSE | openSUSE-SU-2026:11094-1 | TW | libnilfs3 | 2026-06-25 |
| SUSE | openSUSE-SU-2026:11146-1 | TW | libonnxruntime1 | 2026-06-30 |
| SUSE | openSUSE-SU-2026:11096-1 | TW | libopenbabel8 | 2026-06-25 |
| SUSE | SUSE-SU-2026:2619-1 | SLE12 | libpng15 | 2026-06-24 |
| SUSE | openSUSE-SU-2026:11134-1 | TW | libslirp-devel | 2026-06-29 |
| SUSE | SUSE-SU-2026:2674-1 | MP4.3 SLE15 SLE5.3 SLE5.4 SLE-m5.3 SLE-m5.4 oS15.4 | libsolv, libzypp, zypper | 2026-06-29 |
| SUSE | SUSE-SU-2026:2702-1 | SLE12 | libsoup | 2026-06-30 |
| SUSE | SUSE-SU-2026:2669-1 | oS15.4 | libsoup | 2026-06-29 |
| SUSE | SUSE-SU-2026:2654-1 | SLE15 oS15.6 | libsoup2 | 2026-06-26 |
| SUSE | SUSE-SU-2026:2670-1 | SLE5.3 SLE5.4 SLE5.5 SLE-m5.3 SLE-m5.4 SLE-m5.5 oS15.4 | libsoup2 | 2026-06-29 |
| SUSE | openSUSE-SU-2026:11109-1 | TW | libssh2-1 | 2026-06-26 |
| SUSE | SUSE-SU-2026:22284-1 | SLE-m6.2 | libssh2_org | 2026-06-29 |
| SUSE | openSUSE-SU-2026:21057-1 | oS16.0 | libssh2_org | 2026-06-30 |
| SUSE | openSUSE-SU-2026:11092-1 | TW | libtar | 2026-06-25 |
| SUSE | openSUSE-SU-2026:21118-1 | oS16.0 | libvncserver | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21113-1 | oS16.0 | libyang | 2026-06-30 |
| SUSE | SUSE-SU-2026:2628-1 | SLE12 | libzypp | 2026-06-25 |
| SUSE | openSUSE-SU-2026:21146-1 | oS16.0 | lldpd | 2026-06-30 |
| SUSE | openSUSE-SU-2026:11135-1 | TW | logback | 2026-06-29 |
| SUSE | openSUSE-SU-2026:21074-1 | oS16.0 | loupe | 2026-06-30 |
| SUSE | openSUSE-SU-2026:11093-1 | TW | lrzip | 2026-06-25 |
| SUSE | openSUSE-SU-2026:21145-1 | oS16.0 | mbedtls-2 | 2026-06-30 |
| SUSE | openSUSE-SU-2026:0213-1 | osB15 | mbedtls-2 | 2026-06-25 |
| SUSE | openSUSE-SU-2026:21144-1 | oS16.0 | mbedtls | 2026-06-30 |
| SUSE | openSUSE-SU-2026:0214-1 | osB15 | mbedtls | 2026-06-25 |
| SUSE | openSUSE-SU-2026:21120-1 | oS16.0 | mcphost | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21114-1 | oS16.0 | mozjs128 | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21016-1 | oS16.0 | mutt | 2026-06-30 |
| SUSE | openSUSE-SU-2026:11120-1 | TW | nano | 2026-06-27 |
| SUSE | openSUSE-SU-2026:21166-1 | oS16.0 | nano | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21107-1 | oS16.0 | nginx | 2026-06-30 |
| SUSE | SUSE-SU-2026:2695-1 | SLE15 | nodejs22 | 2026-06-30 |
| SUSE | SUSE-SU-2026:2647-1 | SLE15 oS15.6 | nodejs22 | 2026-06-26 |
| SUSE | SUSE-SU-2026:2633-1 | SLE15 | nodejs24 | 2026-06-25 |
| SUSE | openSUSE-SU-2026:11136-1 | TW | ocaml | 2026-06-29 |
| SUSE | openSUSE-SU-2026:11095-1 | TW | ofono | 2026-06-25 |
| SUSE | openSUSE-SU-2026:21154-1 | oS16.0 | ofono | 2026-06-30 |
| SUSE | SUSE-SU-2026:22293-1 | SLE-m6.2 | openCryptoki | 2026-06-29 |
| SUSE | SUSE-SU-2026:2685-1 | SLE12 | openCryptoki | 2026-06-29 |
| SUSE | openSUSE-SU-2026:0220-1 | osB15 | openbabel | 2026-06-28 |
| SUSE | openSUSE-SU-2026:21059-1 | oS16.0 | opencryptoki | 2026-06-30 |
| SUSE | SUSE-SU-2026:2678-1 | SLE12 | opensc | 2026-06-29 |
| SUSE | SUSE-SU-2026:2657-1 | SLE15 SLE5.3 SLE5.4 SLE5.5 SLE-m5.3 SLE-m5.4 SLE-m5.5 oS15.4 | opensc | 2026-06-26 |
| SUSE | SUSE-SU-2026:2697-1 | SLE15 oS15.6 | opensc | 2026-06-30 |
| SUSE | SUSE-SU-2026:22268-1 | SLE-m6.2 | openssh | 2026-06-29 |
| SUSE | openSUSE-SU-2026:21044-1 | oS16.0 | openssh | 2026-06-30 |
| SUSE | SUSE-SU-2026:2614-1 | SLE15 SLE5.3 SLE5.4 SLE-m5.3 SLE-m5.4 oS15.4 | openssl-1_1 | 2026-06-24 |
| SUSE | SUSE-SU-2026:22251-1 | SLE-m6.2 | openssl-3 | 2026-06-29 |
| SUSE | SUSE-SU-2026:2648-1 | SLE15 | openssl-3 | 2026-06-26 |
| SUSE | openSUSE-SU-2026:21005-1 | oS16.0 | openssl-3 | 2026-06-30 |
| SUSE | SUSE-SU-2026:2701-1 | SLE15 oS15.5 | pacemaker | 2026-06-30 |
| SUSE | SUSE-SU-2026:2716-1 | SLE15 oS15.6 | pacemaker | 2026-07-01 |
| SUSE | openSUSE-SU-2026:11111-1 | TW | pacemaker | 2026-06-26 |
| SUSE | openSUSE-SU-2026:21106-1 | oS16.0 | papers | 2026-06-30 |
| SUSE | SUSE-SU-2026:2709-1 | SLE12 | perl-Config-IniFiles | 2026-06-30 |
| SUSE | SUSE-SU-2026:2710-1 | SLE15 | perl-Config-IniFiles | 2026-06-30 |
| SUSE | SUSE-SU-2026:22257-1 | SLE-m6.2 | perl-DBI | 2026-06-29 |
| SUSE | openSUSE-SU-2026:0217-1 | osB15 | perl-Net-Dropbox-API | 2026-06-26 |
| SUSE | openSUSE-SU-2026:21142-1 | oS16.0 | perl-compress-raw-zlib | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21012-1 | oS16.0 | perl-config-inifiles | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21140-1 | oS16.0 | perl-cpanel-json-xs | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21137-1 | oS16.0 | perl-crypt-passwdmd5 | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21029-1 | oS16.0 | perl-dbi | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21126-1 | oS16.0 | perl-html-parser | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21119-1 | oS16.0 | perl-http-daemon | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21045-1 | oS16.0 | perl-libwww-perl | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21125-1 | oS16.0 | perl-protocol-http2 | 2026-06-30 |
| SUSE | SUSE-SU-2026:2636-1 | SLE15 SES7.1 oS15.3 | podman | 2026-06-25 |
| SUSE | SUSE-SU-2026:2693-1 | SLE15 SLE5.3 SLE5.4 SLE-m5.3 SLE-m5.4 oS15.4 | podman | 2026-06-30 |
| SUSE | SUSE-SU-2026:2715-1 | SLE15 SLE5.5 SLE-m5.5 oS15.5 | podman | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21020-1 | oS16.0 | postfix | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21102-1 | oS16.0 | postgresql14 | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21103-1 | oS16.0 | postgresql15 | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21104-1 | oS16.0 | postgresql16 | 2026-06-30 |
| SUSE | SUSE-SU-2026:2664-1 | SLE12 | python, python-base, python-doc | 2026-06-26 |
| SUSE | SUSE-SU-2026:2626-1 | MP4.3 SLE15 oS15.4 | python-PyJWT | 2026-06-25 |
| SUSE | SUSE-SU-2026:22238-1 | SLE-m6.0 | python-PyJWT | 2026-06-25 |
| SUSE | SUSE-SU-2026:2627-1 | SLE15 SLE5.5 SLE-m5.5 | python-PyJWT | 2026-06-25 |
| SUSE | openSUSE-SU-2026:21098-1 | oS16.0 | python-aiohttp | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21169-1 | oS16.0 | python-biopython | 2026-06-30 |
| SUSE | openSUSE-SU-2026:0215-1 | osB15 | python-biopython | 2026-06-25 |
| SUSE | SUSE-SU-2026:22254-1 | SLE-m6.2 | python-click | 2026-06-29 |
| SUSE | openSUSE-SU-2026:21017-1 | oS16.0 | python-click | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21078-1 | oS16.0 | python-ecdsa | 2026-06-30 |
| SUSE | SUSE-SU-2026:22271-1 | SLE-m6.2 | python-idna | 2026-06-29 |
| SUSE | openSUSE-SU-2026:21048-1 | oS16.0 | python-idna | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21063-1 | oS16.0 | python-markdown, python-joblib, | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21127-1 | oS16.0 | python-paramiko | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21161-1 | oS16.0 | python-pdm | 2026-06-30 |
| SUSE | SUSE-SU-2026:2634-1 | MP4.3 SLE15 oS15.4 | python-pip | 2026-06-25 |
| SUSE | openSUSE-SU-2026:20993-1 | oS16.0 | python-pip | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21159-1 | oS16.0 | python-py7zr | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21173-1 | oS16.0 | python-pydata-sphinx-theme | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21095-1 | oS16.0 | python-pyjwt | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21066-1 | oS16.0 | python-python-multipart | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21053-1 | oS16.0 | python-starlette | 2026-06-30 |
| SUSE | SUSE-SU-2026:22286-1 | SLE-m6.2 | python-tornado6 | 2026-06-29 |
| SUSE | openSUSE-SU-2026:21067-1 | oS16.0 | python-tornado6 | 2026-06-30 |
| SUSE | openSUSE-SU-2026:11097-1 | TW | python311-aiohttp | 2026-06-25 |
| SUSE | openSUSE-SU-2026:11137-1 | TW | python311-jupyter-ydoc | 2026-06-29 |
| SUSE | openSUSE-SU-2026:11098-1 | TW | python311-nltk | 2026-06-25 |
| SUSE | openSUSE-SU-2026:11124-1 | TW | python311-pdm | 2026-06-28 |
| SUSE | openSUSE-SU-2026:11112-1 | TW | python311-py7zr | 2026-06-27 |
| SUSE | openSUSE-SU-2026:11113-1 | TW | python311-pypdf | 2026-06-27 |
| SUSE | openSUSE-SU-2026:11099-1 | TW | python311-python-multipart | 2026-06-25 |
| SUSE | openSUSE-SU-2026:11100-1 | TW | python312 | 2026-06-25 |
| SUSE | openSUSE-SU-2026:11101-1 | TW | python315 | 2026-06-25 |
| SUSE | SUSE-SU-2026:2655-1 | SLE12 | python36 | 2026-06-26 |
| SUSE | SUSE-SU-2026:22259-1 | SLE-m6.2 | rpcbind | 2026-06-29 |
| SUSE | openSUSE-SU-2026:21019-1 | oS16.0 | rpcbind | 2026-06-30 |
| SUSE | SUSE-SU-2026:22256-1 | SLE-m6.2 | sed | 2026-06-29 |
| SUSE | openSUSE-SU-2026:21024-1 | oS16.0 | sed | 2026-06-30 |
| SUSE | SUSE-SU-2026:22266-1 | SLE-m6.2 | sg3_utils | 2026-06-29 |
| SUSE | SUSE-SU-2026:2689-1 | SLE12 | sg3_utils | 2026-06-30 |
| SUSE | SUSE-SU-2026:2687-1 | SLE15 | sg3_utils | 2026-06-30 |
| SUSE | SUSE-SU-2026:2691-1 | SLE15 SLE5.3 SLE5.4 SLE5.5 SLE-m5.3 SLE-m5.4 SLE-m5.5 oS15.4 | sg3_utils | 2026-06-30 |
| SUSE | SUSE-SU-2026:2690-1 | SLE15 oS15.3 | sg3_utils | 2026-06-30 |
| SUSE | SUSE-SU-2026:2688-1 | SLE15 oS15.6 | sg3_utils | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21040-1 | oS16.0 | sg3_utils | 2026-06-30 |
| SUSE | openSUSE-SU-2026:11151-1 | TW | socat | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21090-1 | oS16.0 | sqlite3 | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21092-1 | oS16.0 | strongswan | 2026-06-30 |
| SUSE | SUSE-SU-2026:22289-1 | SLE-m6.2 | tar | 2026-06-29 |
| SUSE | SUSE-SU-2026:2615-1 | SLE12 | tar | 2026-06-24 |
| SUSE | SUSE-SU-2026:2714-1 | SLE15 SLE5.3 SLE5.4 SLE5.5 SLE-m5.3 SLE-m5.4 SLE-m5.5 | tar | 2026-06-30 |
| SUSE | openSUSE-SU-2026:11125-1 | TW | tar | 2026-06-28 |
| SUSE | openSUSE-SU-2026:21070-1 | oS16.0 | tar | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21168-1 | oS16.0 | thunderbird | 2026-06-30 |
| SUSE | SUSE-SU-2026:2675-1 | SLE15 | tomcat | 2026-06-29 |
| SUSE | openSUSE-SU-2026:21117-1 | oS16.0 | tomcat | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21122-1 | oS16.0 | tomcat10 | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21121-1 | oS16.0 | tomcat11 | 2026-06-30 |
| SUSE | SUSE-SU-2026:2713-1 | SLE12 | tracker | 2026-06-30 |
| SUSE | openSUSE-SU-2026:11102-1 | TW | trivy | 2026-06-26 |
| SUSE | openSUSE-SU-2026:21072-1 | oS16.0 | trivy | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21083-1 | oS16.0 | unbound | 2026-06-30 |
| SUSE | SUSE-SU-2026:22260-1 | SLE-m6.2 | util-linux | 2026-06-29 |
| SUSE | SUSE-SU-2026:2653-1 | SLE5.3 SLE5.4 SLE-m5.3 SLE-m5.4 oS15.4 | util-linux | 2026-06-26 |
| SUSE | openSUSE-SU-2026:21151-1 | oS16.0 | warewulf4 | 2026-06-30 |
| SUSE | SUSE-SU-2026:2623-1 | SLE12 | webkit2gtk3 | 2026-06-24 |
| SUSE | openSUSE-SU-2026:21129-1 | oS16.0 | webkit2gtk3 | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21153-1 | oS16.0 | xar | 2026-06-30 |
| SUSE | SUSE-SU-2026:2712-1 | SLE15 oS15.6 | xdg-desktop-portal | 2026-06-30 |
| SUSE | SUSE-SU-2026:2668-1 | SLE12 | xen | 2026-06-29 |
| SUSE | SUSE-SU-2026:2613-1 | SLE15 SLE5.3 SLE5.4 SLE-m5.3 SLE-m5.4 oS15.4 | xen | 2026-06-24 |
| SUSE | openSUSE-SU-2026:0221-1 | osB15 | xtrabackup | 2026-06-29 |
| SUSE | openSUSE-SU-2026:21112-1 | oS16.0 | xwayland | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21163-1 | oS16.0 | yt-dlp | 2026-06-30 |
| SUSE | openSUSE-SU-2026:21096-1 | oS16.0 | zypper, libzypp, libsolv | 2026-06-30 |
| Ubuntu | USN-8474-1 | 16.04 18.04 20.04 22.04 24.04 26.04 | NSD | 2026-06-25 |
| Ubuntu | USN-8475-1 | 24.04 25.10 | amd64-microcode | 2026-06-25 |
| Ubuntu | USN-8471-1 | 16.04 18.04 20.04 22.04 24.04 26.04 | containerd | 2026-06-25 |
| Ubuntu | USN-8472-1 | 20.04 22.04 24.04 25.10 26.04 | containerd-app | 2026-06-25 |
| Ubuntu | USN-8473-1 | 25.10 26.04 | containerd-stable | 2026-06-25 |
| Ubuntu | USN-8470-1 | 22.04 24.04 25.10 26.04 | cpp-httplib | 2026-06-25 |
| Ubuntu | USN-8487-1 | 14.04 16.04 18.04 20.04 22.04 24.04 25.10 26.04 | curl | 2026-07-01 |
| Ubuntu | USN-8469-1 | 20.04 22.04 24.04 26.04 | ffmpeg | 2026-06-24 |
| Ubuntu | USN-8483-1 | 22.04 24.04 25.10 26.04 | hplip | 2026-06-30 |
| Ubuntu | USN-8468-1 | 14.04 16.04 18.04 20.04 22.04 24.04 | imagemagick | 2026-06-25 |
| Ubuntu | USN-8466-1 | 14.04 16.04 18.04 20.04 22.04 24.04 25.10 26.04 | libdbi-perl | 2026-06-24 |
| Ubuntu | USN-8484-1 | 22.04 24.04 25.10 26.04 | libgd-perl | 2026-06-30 |
| Ubuntu | USN-8479-1 | 25.10 26.04 | libheif | 2026-06-29 |
| Ubuntu | USN-8486-1 | 24.04 25.10 26.04 | libssh2 | 2026-06-30 |
| Ubuntu | USN-8485-1 | 25.10 26.04 | libyang | 2026-06-30 |
| Ubuntu | USN-8465-1 | 22.04 24.04 26.04 | mina2 | 2026-06-25 |
| Ubuntu | USN-8452-1 | 18.04 20.04 22.04 24.04 | node-pbkdf2 | 2026-06-25 |
| Ubuntu | USN-8481-1 | 22.04 24.04 25.10 26.04 | nss | 2026-06-29 |
| Ubuntu | USN-8467-1 | 14.04 16.04 18.04 20.04 | perl | 2026-06-24 |
| Ubuntu | USN-8412-3 | 20.04 | qemu | 2026-06-29 |
| Ubuntu | USN-8482-1 | 26.04 | roundcube | 2026-06-30 |
| Ubuntu | USN-8478-1 | 20.04 22.04 24.04 26.04 | ruby2.7, ruby3.0, ruby3.2, ruby3.3 | 2026-06-30 |
| Ubuntu | USN-8480-1 | 22.04 24.04 25.10 26.04 | sqlite3 | 2026-06-29 |
| Ubuntu | USN-8477-1 | 14.04 16.04 18.04 20.04 22.04 24.04 26.04 | tar | 2026-06-30 |
| Ubuntu | USN-8476-1 | 18.04 20.04 22.04 24.04 25.10 | xrdp | 2026-06-25 |
Kernel patches of interest
Kernel releases
Architecture-specific
Build system
Core kernel
Development tools
Device drivers
Device-driver infrastructure
Filesystems and block layer
Memory management
Networking
Security-related
Virtualization and containers
Miscellaneous
Page editor: Joe Brockmeier
