|
|
Subscribe / Log in / New account

LWN.net Weekly Edition for April 29, 2021

Welcome to the LWN.net Weekly Edition for April 29, 2021

This edition contains the following feature content:

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.

Comments (none posted)

Rethinking Fedora's compiler policy

By Jonathan Corbet
April 28, 2021
Now that the Fedora 34 release is out the door, the Fedora project is turning its attention to Fedora 35, which is currently scheduled for release on October 26. One of the changes under consideration for Fedora 35 is this proposal allowing maintainers to choose whether to build their packages with GCC or Clang. This policy change may give maintainers some welcome flexibility, but it has not proved entirely popular in the Fedora community.

It is a longstanding practice for distributors to pick a specific toolchain to be used to build the full set of packages. Mixing compilers and linkers always presents the possibility of incompatibilities leading to subtle bugs, which is the sort of outcome distributors tend to go out of their way to avoid. Adhering to that practice, Fedora has long used GCC as its compiler of choice — a practice dating back to the time when there were no other compilers to use in any case.

Some packagers prefer LLVM

Over the years, though, the LLVM compiler suite and its Clang C compiler have grown in capability and become more popular. There are some programs that will not build with anything else at this point. For such programs, Fedora allows Clang to be used; for everything else, though, Fedora's policy requires building with GCC. This, according to the change proposal, creates unneeded difficulties for Fedora maintainers:

Upstream, the Firefox project builds primarily with Clang/LLVM. Yet we force the Fedora package owner to find and fix issues building with GCC then either carry those custom fixes forward in Fedora or negotiate with upstream to get those changes upstreamed. While this process can be helpful in finding non-portable code, this is ultimately a poor use of the packager's time.

The new proposed policy states that maintainers could use a non-default compiler for their package if they have a "valid technical reason" to do so. Beyond avoiding the above-mentioned Firefox problem, this change, it is argued, will enable the use of the compiler that yields the best result for any given package, thus improving the user experience overall. Beyond that, building with the compiler an upstream project uses for its own development and testing is, perhaps, less likely to tickle compiler-related bugs.

The real motivation behind this proposal, though, might be found in places like this RHEL bug report. The Ruby language has a just-in-time (JIT) compilation feature, and users would like to take advantage of it. But, due to GCC, when built as a position-independent executable, being incompatible with pre-compiled headers, JIT compilation fails with an unhelpful error message. There are various ways that this problem could be addressed; the morbidly curious can find them in the bug report. The conclusion, though, is that none of the options for making this feature work with GCC are deemed acceptable. If, however, LLVM were used, the problem would go away. Thus, unsurprisingly, the Ruby developers would like the freedom to use LLVM when building the Ruby package.

Questioning the change

The first question to arise in this posting of the proposal (it has actually been under discussion for nearly a year) was: who decides what's a "valid technical reason"? Will there be some sort of committee review? The consensus would appear to be that maintainers will be trusted to make the best decisions for their packages. The current version of the proposal differs from the original, which said maintainers should use the compiler that is preferred by the upstream project they are building.

The first posting of the new compiler policy (targeted at Fedora 33) drew a number of complaints, many of which resurfaced this time around. Neal Gompa described it as "an excuse to avoid doing the right thing and leveraging the toolchain that offers the highest quality code generation" and said that, at a minimum, the justifications for this change needed to be spelled out more clearly. Jakub Jelinek (a GCC developer) argued that subtle ABI incompatibilities still exist between the two compilers, and that mixing them increases the chance of introducing difficult bugs.

Mark Wielaard worried about the extra workload for developers of other parts of the toolchain:

For the packages I work on, elfutils, valgrind, debugedit, etc. we have enough trouble keeping up with gcc versions, new flags, optimizations, etc. I don't think we will have time to debug issues because packages are now also built with another compiler. Leaving the system as a whole in a worse state because of it.

Kevin Kofler argued that the best compiler overall should be used for the entire distribution — and that GCC is the best compiler for now.

A few participants, including Wielaard (linked above) and Florian Weimer, pointed out that even if Fedora adopts Clang when building projects that prefer it, the Fedora build will still differ in many ways, including the specific compiler version, the compilation flags used, and the setup of the system as a whole. The end result may well not be a better-tested build environment than was had using the default compiler.

Compiler diversity

One other concern mentioned by Jelinek in the above-linked message merits a mention. He agrees that competition between toolchains is good for everybody involved. While this proposal, on its surface, would appear to facilitate this competition by allowing the best compiler to be used everywhere, he says, the end result is more likely to be an increase in the number of packages that can only be built with LLVM. Upstream projects, especially those dominated by a single large company, often do not have portability across compilers as one of their important objectives. If distributors do not insist on that portability, it may well go away.

This would appear to be a valid concern. The growth of the Chrome-only web shows how this sort of capture can take place. GCC's slow rate of progress in the years before LLVM took off, and the acceleration of development since, highlight the value of this sort of competition. A return to a single-compiler world is not in anybody's interest.

Distributors, being the organizations that wield compilers for the benefit of vast numbers of users, are an obvious place to try to draw a line against a compiler monopoly. Whether distribution policies are the best way to promote compiler diversity is a different question, though. There may come a point where the pain of building with an out-of-favor compiler becomes more than people are willing to deal with, especially in volunteer-driven distributions. The apparent imminent end to Java support in Fedora shows what can happen when the work gets too overwhelming. Burning out package maintainers in the name of portability does not seem like a good way to achieve that goal.

The outcome of this particular change proposal is unclear at this point. Even if it is not adopted this time around, though, it seems likely that the pressure to make that sort of change will only increase in the future. Unless the forces that are driving projects to only support one compiler are somehow reduced, the cost of going against the stream will only grow.

Comments (34 posted)

Toward signed BPF programs

By Jonathan Corbet
April 22, 2021
The kernel's BPF virtual machine is versatile; it is possible to load BPF programs into the kernel to carry out a large (and growing) set of tasks. The growing body of BPF code can reasonably be thought of as kernel code in its own right. But, while the kernel can check signatures on loadable modules and prevent the loading of modules that are not properly signed, there is no such mechanism for BPF programs; any sufficiently privileged process can load any program that will pass the verifier. One might think that adding this checking for BPF would be straightforward, but that subsystem has some unique characteristics that make things more challenging than one might expect. There may be a solution in the works, though; fittingly, it works by loading yet another BPF program.

Loadable kernel modules are stored as executable images in the ELF format. When one is loaded, the kernel parses that format and does the work needed to enable the module to run within the kernel; this work includes allocating memory for variables, performing relocations, resolving symbols, and more. All of the necessary information exists within the ELF file. Applying a signature to that file is simply a matter of checksumming the relevant sections and signing the result.

BPF programs have similar needs, but the organization of the requisite information is a bit more, for lack of a better word, messy. The code itself is compiled as an executable section that is then linked into a loader program that runs in user space and invokes the bpf() system call to load the BPF program into memory. But BPF programs, too, need to have data areas allocated in the form of BPF maps, and they need relocations (of a sort) applied to be able to cope with different structure layouts on different systems. The necessary maps are "declared" as special ELF sections in the loader program; the libbpf library finds those sections and turns them into more bpf() calls. The BPF program itself is then modified (before loading into the kernel) so that it can find its maps when it runs.

This structure poses a challenge for anybody wanting to implement signed BPF programs. The maps are a part of the program itself; if they are not established as intended, a BPF program might misbehave in interesting ways. But the kernel has no way to enforce any specific map configuration, and thus cannot ensure that a signed BPF program has been properly set up. Additionally, the need to modify the BPF program itself will break signature verification; after all, modifications to BPF programs are just the sort of thing this mechanism is expected to prevent. So, somehow, the kernel has to take a more active role in the loading of BPF programs.

In-kernel BPF loading

The old-timers among us will remember that, once upon a time, the kernel's module loader lived in user space. Moving it into the kernel was one of many causes of extended pain during the 2.5 development cycle; 20 years later, some developers still hold a grudge against Rusty Russell for that experience. But those problems are long past and the in-kernel loader has long since ceased to create problems. So one might logically expect that moving the user-space BPF loader into the kernel would be a sensible approach to take.

According to Alexei Starovoitov in the cover letter to a new patch set, that approach has been tried in a couple of forms and "discarded after months of work". Evidently an attempt was made to move libbpf into the kernel; it is not entirely surprising that this complex body of code did not fit comfortably there. Another idea was to create a new executable file format that contained, in essence, a series of system calls needed to set up a specific BPF program.

The problems that were encountered while implementing that second approach are not spelled out. But the third approach, found in Starovoitov's patch set, can be thought of as a variant on that idea. Rather than have the kernel step through a series of system calls, though, user space loads a special BPF program that does that work instead.

Specifically, the patch set creates yet another type of BPF program — one that exists to execute system calls. This program will run in the context of the process that runs it, and will be limited to a small set of system calls; only bpf() and close() are allowed in the proposed patch set. This program will be expected to make the necessary set of bpf() calls to load and set up the BPF program that the user really wants to run.

The generation of this "loader program" is done by watching what libbpf does to load the BPF program of interest and capturing each of the resulting bpf() calls. Those calls are then collected to generate the loader program, which will reproduce that work, from within the kernel, at the right time. So the kernel is, indeed, stepping through a canned series of system calls to load the program; it's just that this series is formatted as a BPF program in its own right.

The problem of patching the BPF program to find its maps is addressed in the usual way: adding another layer of indirection. An array of file descriptors is set up, and the BPF program references maps by way of that array. When the program is loaded, this array can be populated with the actual file descriptors corresponding to the necessary maps.

Next steps

As Starovoitov noted in the cover letter, this work is not yet a complete solution to the problem; it is a first step to show the direction that this work is taking. A big remaining piece is the offset relocations needed for BPF programs to access structure fields in a configuration-independent way. These relocations, too, require changing the BPF program text, so the solution may not be entirely trivial; more indirection-based schemes run the risk of imposing more of a performance cost than some users may want to pay.

There is also, of course, the little matter of signing BPF programs and checking those signatures; this problem is not addressed in this patch set either. There is a brief mention of putting together a skeleton that would allow BPF programs to be packaged into a kernel module; if that were done, then the existing system for checking module signatures could be used for BPF programs as well.

At a first glance, the BPF loader looks like a bit of a convoluted solution to the problem. It is worth noting, though, that this mechanism is not all that far removed from what happens in user space, where running a program usually involves launching ld.so to assemble the required pieces for that program to run. So there are well-established precedents to this sort of solution. Whether this design will make it into the mainline kernel is yet to be seen, though; this work is young and has not yet seen much review.

Comments (3 posted)

Avoiding unintended connection failures with SO_REUSEPORT

By Jonathan Corbet
April 23, 2021
Many of us think that we operate busy web servers; LWN's server, for example, sweats hard when keeping up with the comment stream that accompanies any article mentioning the Rust programming language. But some organizations run truly busy servers and have to take some extraordinary measures to keep up with levels of traffic that even language advocates cannot create. The SO_REUSEPORT socket option is one of many features that have been added to the network stack to help these use cases. SO_REUSEPORT suffers from an implementation problem that can cause connections to fail, though. Kuniyuki Iwashima has posted a patch set addressing this problem, but there is some doubt as to whether it takes the right approach.

In normal usage, only one process is allowed to bind to any given TCP port to accept incoming connections. On busy systems, that process can become a bottleneck, even if all it does is pass accepted connections off to other processes for handling. The SO_REUSEPORT socket option, which was added to the 3.9 kernel in 2013, was meant to address that bottleneck. This option allows multiple processes to accept connections on the same port; whenever a connection request comes in, the kernel will pick one of the listening processes as the recipient. Systems using SO_REUSEPORT can dispense with the dispatcher process, improving scalability overall.

SO_REUSEPORT does its work when the initial SYN packet (the connection request) is received; at that time, a provisional new socket is created and assigned to one of the listening processes. The new connection will first wait for the handshake to complete, after which it will sit in a queue until the selected process calls accept() to accept the connection and begin the session. On busy servers, there may be a fair number of connections awaiting acceptance; the maximum length of that queue is specified with the listen() system call.

When SO_REUSEPORT misbehaves

Most of the time, SO_REUSEPORT works just as intended, but that can change when one of the listening processes exits. If a process quits with open network connections, those connections will be closed — not a surprising result. But the kernel will also "close" (by resetting) any incoming connections that are still in the accept queue. In the absence of SO_REUSEPORT this behavior makes sense; if the (single) listening process goes away, there is no longer anybody who can accept those connections.

If SO_REUSEPORT is being used, and if there are multiple listening processes, incoming connections do not necessarily have to be closed in this way. There are, after all, other processes running that would happily handle those connections. But once the kernel has committed an incoming connection to a specific process, it will not change its mind later; either that connection will be accepted by the chosen process, or it will be closed.

There are a number of reasons why a listening process might exit on a busy system. Perhaps it simply crashed. But, more likely, the server is being restarted to effect a configuration change or to switch to a new certificate. Such restarts can be phased across a pool of server processes so that they don't all exit at once; that should allow incoming connections to be handled without any apparent interruption of service. But when the above-described behavior comes into the picture, users can be turned away, which tends to have an unpleasant effect on their mood. The depressive effect on the operator of the site, who may have just lost the opportunity to learn that the would-be user is in the market for a new pair of socks, can be even worse.

There are ways around this problem, such as using a BPF program to steer incoming connections away from a server process that is about to exit, then being sure that it drains any queued connections before it bows out. But Iwashima makes the point that there is a better way: when a process exits, just take all of the queued incoming connections and reassign them to a different process for handling. After all, there is no state yet associated with an unaccepted request; one process can handle it just as well as another, and moving it will avoid causing the request to fail.

Migrating the accept queue

Getting there requires an eleven-part patch set, though. The first step is to add a new sysctl knob (net.ipv4.tcp_migrate_req; there does not appear to be an IPv6 version) controlling whether incoming connections should be moved to a new listener if the one they were assigned to exits. By default, this new behavior is disabled to avoid interfering with deployments where other arrangements have been made.

Actually migrating incoming connections away from an exiting server process is a bit more complicated than one might think because the "accept queue" is a bit more complicated than has been discussed so far. Remember that TCP connections go through a three-way handshake before being established: the connection is initiated with a SYN packet, the server side responds with SYN+ACK, and the initiator completes the connection with an ACK packet. That entire process must complete before an incoming connection can be given to a server process via accept().

Fully established connections — those that have completed the three-way handshake but which have not yet been accepted — are relatively easy to move to a new server process; they are just shunted from one queue to another. Connections that are still in the handshake are more complicated, though. They can only be moved at specific points during the sequence; when the handshake completes being the most obvious such point. It is also possible to move a connection when the SYN+ACK is retransmitted, should that be necessary. Either way, the remains of the old server process's socket structure must stay around for long enough to finish the handshake; that adds a certain amount of complexity.

One remaining question is: how is the new recipient for the connection chosen? Normally, the kernel will use the same algorithm it uses to pick a recipient in the first place, which is essentially a round-robin approach. But there will surely be users who know better and who want to be able to redirect these connections more explicitly. For those users there is, inevitably, a new BPF program type (BPF_PROG_TYPE_SK_REUSEPORT) that can be used to make decisions on where to reroute these connections.

Unacceptable?

As of this writing, the only comment on Iwashima's patch set comes from Eric Dumazet, who questioned whether it is the right approach. Since SO_REUSEPORT was added, he said, the TCP accept code has been reworked to run locklessly, which should address much of the scalability problem that SO_REUSEPORT was added to mitigate in the first place. Thus, he said, it might be better for applications to go back to a single-listener mode, perhaps helped by a new form of accept() that would allow incoming connections to be quickly directed to server processes.

That, of course, is a rather different development direction than Iwashima has taken so far and is thus unlikely to be welcome news. One could argue that, while a new accept() call might be a more pleasing solution to the overall problem, there should still be a place for a patch series making an existing kernel feature work without occasionally killing incoming connections. So it's not clear how this will play out; stay tuned.

Comments (36 posted)

Preventing information leaks from ext4 filesystems

By Jonathan Corbet
April 27, 2021
A filesystem's role is to store information and retrieve it in its original form on request. But filesystems are also expected to prevent the retrieval of information by people who should not see it. That requirement extends to data that has been deleted; users expect that data to be truly gone and will not welcome its reappearance in surprising places. Some work being done with ext4 shows the kind of measures that are required to live up to that expectation.

In early April, Leah Rumancik posted a two-patch series making a couple of small changes to the ext4 filesystem implementation. The first of those caused the filesystem to, after a file is deleted, overwrite the space (on disk) where that file's name was stored. In response to a question about why this was needed, ext4 maintainer Ted Ts'o explained that it was meant to deal with the case where users were storing personally identifiable information (PII) in the names of files. When a file of that nature is removed, the user would like to be sure that the PII is no longer stored on the disk; that means wiping out the file names as well.

Dave Chinner quickly objected to this explanation. The real problem, he argued, is that users are storing PII as clear text; wiping directory entries is not a real solution to that problem:

This sounds more and more like "Don't encode PII in clear text anywhere" is a best practice that should be enforced with a big hammer. Filenames get everywhere and there's no easy way to prevent that because path lookups can be done by anyone in the kernel. This so much sounds like you're starting a game of whack-a-mole that can never be won.

From a security perspective, this is just bad design. Storing PII in clear text filenames pretty much guarantees that the PII will leak because it can't be scrubbed/contained within application controlled boundaries. Trying to contain the spread of filenames within random kernel subsystems sounds like a fool's errand to me, especially given how few kernel developers will even know that filenames are considered sensitive information from a security perspective...

The problem with that approach, as Ts'o explained, is that the people involved may not even know what their "legacy workloads" are doing in this regard. Rather than risk the possibility of exposing PII that nobody even knew was there, he said, it is better to simply clear the file names.

Of course, if a file's name constitutes PII, its contents are likely to be interesting as well. It is possible, though expensive, to overwrite the data in files when they are deleted. An alternative, on modern storage devices at least, is to use the FITRIM ioctl() command to tell the drive to discard the data. Even if this operation does not physically erase that data, it should make the data inaccessible afterward. For this reason (and others), administrators who are concerned about the persistence of deleted data tend to arrange for FITRIM operations to be run regularly.

There is one little remaining issue, though, for the truly paranoid. Ext4, like many contemporary filesystems, uses journaling to ensure that the filesystem remains consistent even if the system is interrupted at an inopportune time. To implement that sort of robustness, metadata written to ext4 filesystems is also written to the journal (and file data can optionally be written there too), so the possibility exists that the journal will contain PII even after all traces of it have been removed from the rest of the filesystem. A bad actor who gains access to the disk could harvest that data from the journal, even though it had already been deleted from the filesystem.

To address this problem, Rumancik's second patch adds a new ioctl() command, called FS_IOC_CHKPT_JRNL, that forces the journal to be flushed out to persistent storage. There is an optional flag, CHKPT_JRNL_DISCARD, which causes the filesystem to run the equivalent of a FITRIM operation on the journal itself once the flush is complete. That ensures that no PII remains in the journal itself.

Chinner (in the same email linked above) suggested that this behavior should be an option on the FITRIM operation rather than a separate command — before noting that FITRIM has no "flags" field and, thus, cannot be extended. Perhaps, he suggested, it is time for a separate fstrim() system call that could also trim the journal on request. A separate system call would also, by default, make the functionality available to all filesystems rather than being an ext4-specific feature.

The two patches together are intended to help administrators ensure that data that has been deleted from a filesystem truly disappears. It looks like they will be taking separate paths into the kernel from here, though. Rumancik recently posted a new version of the file-name overwrite patch on its own, and Ts'o subsequently applied it. The journal side of the problem, Ts'o said, is going to require some more discussion. Eventually, though, one can expect solutions to both problems to find their way into the kernel. That will help prevent the accidental disclosure of sensitive information from ext4 filesystems, even if the user is storing it in ill-advised ways.

Comments (61 posted)

Some 5.12 development statistics

By Jonathan Corbet
April 26, 2021
By the time the 5.12 kernel was finally released, some 13,015 non-merge changesets had been pulled into the mainline repository for this development cycle. That makes 5.12 the slowest development cycle since 5.6, which was released at the end of March 2020. Still, there was plenty of work done for 5.12. Read on for our traditional look at where that work came from and how it got into the kernel.

Patches were contributed to 5.12 by 1,873 developers, 262 of whom were first-time contributors; those are typical numbers, especially given the (relatively) small size of this cycle. The most active 5.12 developers were:

Most active 5.12 developers
By changesets
Lee Jones 2562.0%
Chris Wilson 1671.3%
Pavel Begunkov 1581.2%
Vladimir Oltean 1200.9%
Christoph Hellwig 1170.9%
Jens Axboe 1130.9%
Arnd Bergmann 1090.8%
Andy Shevchenko 940.7%
Ben Skeggs 910.7%
Paul E. McKenney 850.7%
Zheng Yongjun 810.6%
Ard Biesheuvel 770.6%
Dan Carpenter 750.6%
Hans de Goede 700.5%
Alexandre Belloni 690.5%
Geert Uytterhoeven 650.5%
Sean Christopherson 640.5%
Jiri Olsa 610.5%
Chuck Lever 600.5%
Colin Ian King 590.5%
By changed lines
Arnd Bergmann 652779.4%
Po-Hao Huang 217233.1%
Viresh Kumar 167822.4%
Maximilian Luz 145202.1%
Andy Shevchenko 131601.9%
Pawel Laszczak 106051.5%
Ard Biesheuvel 98371.4%
Sean Wang 93921.4%
Chris Wilson 92551.3%
Damien Le Moal 89491.3%
Vladimir Oltean 79481.1%
Hannes Reinecke 78541.1%
Srujana Challa 77861.1%
Thomas Zimmermann 69831.0%
Bjorn Andersson 69781.0%
Lorenzo Bianconi 62820.9%
Srinivas Kandagatla 61000.9%
Paul Kocialkowski 60500.9%
Yevgeny Kliteynik 59670.9%
Rob Herring 58700.8%

As with 5.11, Lee Jones was the most active changeset contributor this time around; he continues to work to fix compiler and docs-build warnings throughout the tree. Chris Wilson worked on the Intel i915 graphics driver. Pavel Begunkov worked mostly within the io_uring subsystem, Vladimir Oltean made a lot of improvements within the networking subsystem, and Christoph Hellwig continues to clean up the code in (mostly) the block layer and filesystems.

Arnd Bergmann deleted support for a number of obsolete architectures and their associated drivers, reaching the top of the "lines changed" column by virtue of the amount of code removed. Po-Hao Huang contributed eight patches, mostly updating some machine-generated tables. Viresh Kumar removed support for the old, unused "oprofile" profiling mechanism, Maximilian Luz added support for Microsoft Surface devices, and Andy Shevchenko removed some unneeded Intel driver code.

Report, test, and review credits

The kernel community depends heavily on contributions beyond just code; that includes those who report problems, and those who test and review code. Kernel developers try to credit these contributions through the addition of tags to the relevant patches. The most active credited reporters of bugs fixed in 5.12 were:

Most active 5.12 bug reporters
kernel test robot 18416.1%
Syzbot1119.7%
Abaci Robot 1079.4%
Dan Carpenter 443.9%
Hulk Robot 413.6%
Stephen Rothwell 282.5%
Randy Dunlap 191.7%
Kent Overstreet 121.1%
Guenter Roeck 111.0%
TOTE Robot 111.0%
Colin Ian King 90.8%
Andrii Nakryiko 80.7%
Juan Vazquez 70.6%
Arnd Bergmann 60.5%

Here we see the increasing presence of automated testing systems, which are finding bugs before (one hopes) they affect users.

The most active testers and reviewers this time around were:

Test and review credits in 5.12
Tested-by
Daniel Wheeler 677.1%
Tony Brelinski 626.6%
Matt Merhar 333.5%
Nicolas Chauvet 323.4%
Peter Geis 313.3%
Arnaldo Carvalho de Melo 293.1%
Dmitry Osipenko 262.8%
Wolfram Sang 212.2%
Karthik B S 192.0%
Marek Szyprowski 161.7%
Sean Nyekjaer 161.7%
Boqun Feng 151.6%
Reviewed-by
Christoph Hellwig 2203.6%
Rob Herring 1462.4%
Laurent Pinchart 1322.2%
David Sterba 1212.0%
Florian Fainelli 1091.8%
Lyude Paul 911.5%
Linus Walleij 871.4%
Josef Bacik 821.4%
Andrew Lunn 791.3%
Hans de Goede 701.2%
Darrick J. Wong 691.1%
Chris Wilson 641.1%

The top folks in the Tested-by column appear to be routinely testing patches from their work colleagues — something that is probably much more widely done without applying tags to that effect. Matt Merhar, Nicolas Chauvet, and Peter Geis have almost the same number of credits, which is not a coincidence: all three tend to show as having tested the same patches, almost all from a single author (example). The Reviewed-by column is more diverse, with a mix of active maintainers and others who clearly put a lot of time into the review task.

Employer support

Work on 5.12 was supported by 211 employers that we were able to identify; that is a small decrease from previous releases but is in line with the lower patch volume in general. The most active companies this time were:

Most active 5.12 employers
By changesets
Intel142510.9%
(Unknown)10127.8%
Red Hat8726.7%
Linaro8686.7%
Google7525.8%
Huawei Technologies5254.0%
Facebook4773.7%
(None)4753.6%
AMD4033.1%
NVIDIA4023.1%
IBM3722.9%
SUSE3582.8%
(Consultant)3332.6%
Oracle3062.4%
Renesas Electronics2521.9%
Arm2481.9%
NXP Semiconductors2371.8%
Pengutronix1911.5%
MediaTek1731.3%
Alibaba1701.3%
By lines changed
Linaro12069417.4%
Intel8005611.5%
Red Hat382495.5%
Google291084.2%
(Unknown)289764.2%
NVIDIA287664.1%
(None)262983.8%
Realtek225723.3%
SUSE203882.9%
MediaTek198722.9%
Arm160632.3%
Marvell154002.2%
AMD147532.1%
Pengutronix137442.0%
Western Digital128271.8%
Facebook118851.7%
Code Aurora Forum117681.7%
NXP Semiconductors116691.7%
IBM107991.6%
Texas Instruments107441.5%

Unsurprisingly, these numbers look a lot like what we saw for 5.11 — and numerous kernels before that. The biggest change is the result of the flurry of code-removal patches coming from Linaro, which ended up at the top of the "lines changed" column as a result.

The path into the mainline

[Patch-flow graph] While Linus Torvalds is ultimately responsible for pulling all of the patches discussed here into the mainline, he handles few of them directly; by far the bulk of all patches going into the kernel go through at least one subsystem maintainer's repository. The path taken by patches can draw an interesting picture of how our community actually works; how closely does it match the hierarchical model that is often used to describe the kernel community?

An email message typically passes through a number of servers between sender and recipient; each server normally adds a "Received" header marking that passage. Git commits, instead, are immutable and accumulate no such markings from the repositories through which they pass. What does happen, though, is the addition of merge commits when a set of commits from one repository is pulled into another. At least, that happens most of the time. Some projects suffer from a sort of merge phobia; they require rebasing and fast-forward merges that do not leave any signs in the history. The kernel does not suffer from this particular syndrome, though, so most pulls do result in the creation of a merge commit.

Git will, when creating this commit, put the beginnings of a message in the changelog that includes the tree from which the commits are being merged. Assuming the maintainer leaves that information in place, this message makes it possible to recreate the path taken by those commits; happily, almost all kernel maintainers leave that information in place.

The merge commit also contains information about the GPG key (if any) that was used to sign the tag at the head of the set of commits to pull. This, too, is useful information. In theory, all pull requests should include signed tags as a way of ensuring that the associated commits were actually marked, by a recognized kernel maintainer, for merging into the mainline. In practice, not all maintainers have bothered to sign their commits in this way. Torvalds does not insist on signatures for pulls from trees hosted on kernel.org, but does generally require them for repositories stored anywhere else.

The treeplot program, part of the gitdm suite of ugly data-mining hacks, can collect all of this information and turn it into a graph. The result of this work for the 5.12 kernel can be seen on the right; clicking on that image and displaying the result in a large window should yield something that is actually legible. Rectangles indicate repositories, and arrows show the flow of commits between them; the number next to each arrow indicates how many commits took that path during the 5.12 cycle. Black indicates the use of signed tags, red shows their absence.

The shape of this graph has changed slowly over the years; it is still quite flat with a large number of repositories being pulled directly into the mainline by Torvalds, but we are seeing more going through mid-level maintainers as well. A number of the larger subsystems — networking, graphics, and Arm systems, for example — feed patches through multiple layers of maintainers. The largest stream of commits into the mainline continues to pass through the networking repositories, which were the source of over 2,400 commits going into 5.12.

The networking repositories are also the largest source of commits that are not protected with a signed tag; this situation has persisted for some years. All told, though, of the 126 repositories that fed commits into 5.12, all but 15 were using signed tags, a significant increase from past years. It is somewhat ironic that one of the remaining trees eschewing cryptographic signatures is the crypto tree.

While Torvalds requires signed tags for pulls from sites like GitHub, it can be seen that some other maintainers do not. There are, as a result, a few unsigned pulls from public hosting sites that are making it into the mainline kernel by way of an intermediate maintainer.

In the end, though, the picture that emerges from all of the above is a community that, for all of its difficulties, still manages to incorporate large numbers of changes in a reliable and predictable way. There are few projects out there that can sustain the scale of the kernel community and produce a stable and usable result. As of this writing, there are 13,677 changesets queued in linux-next, most of which will be destined for 5.13, so the process seems unlikely to slow down anytime soon.

Update: the employer numbers have been adjusted slightly since the initial publication of this article in response to a report from Leon Romanovsky.

Comments (none posted)

Page editor: Jonathan Corbet

Brief items

Security

Quote of the week

The integrity and trust of the entire software industry has sharply declined due to cryptocurrency. It sets up perverse incentives for new projects, where developers are no longer trying to convince you to use their software because it’s good, but because they think that if they can convince you it will make them rich. I’ve had to develop a special radar for reading product pages now: a mounting feeling of dread as a promising technology is introduced while I inevitably arrive at the buried lede: it’s more crypto bullshit.
Drew DeVault

Comments (54 posted)

Kernel development

Kernel release status

The 5.12 kernel is out, released on April 25. Quoth Linus: "Thanks to everybody who made last week very calm indeed, which just makes me feel much happier about the final 5.12 release."

Headline features in 5.12 include the removal of a number of obsolete, (mostly) 32-bit Arm subarchitectures, atomic instructions for BPF, conditional file lookups with LOOKUP_CACHED, support for zoned block devices in the Btrfs filesystem, threaded NAPI polling in the network stack, filesystem ID mapping, support for building the kernel with Clang link-time optimization, the KFENCE kernel-debugging tool, and more. See the LWN merge-window summaries (part 1, part 2) and the (in-progress) KernelNewbies 5.12 page for more information.

Stable updates: 5.11.17, 5.10.33, 5.4.115, 4.19.189, 4.14.232, 4.9.268, and 4.4.268 were released on April 28.

Comments (none posted)

A statement on the UMN mess

Speaking for the Linux Foundation Technical Advisory Board, Kees Cook has posted a brief statement on the controversy over patches submitted from the University of Minnesota.

The LF Technical Advisory Board is taking a look at the history of UMN's contributions and their associated research projects. At present, it seems the vast majority of patches have been in good faith, but we're continuing to review the work. Several public conversations have already started around our expectations of contributors.

Stay tuned for more.

Full Story (comments: 69)

A letter from the UMN researchers

The University of Minnesota researchers who have stirred up the kernel community with various types of bad patches have sent an open letter to the linux-kernel list. "This current incident has caused a great deal of anger in the Linux community toward us, the research group, and the University of Minnesota. We apologize unconditionally for what we now recognize was a breach of the shared trust in the open source community and seek forgiveness for our missteps."

Comments (36 posted)

"Full disclosure" from the University of Minnesota

The researchers at the University of Minnesota have posted a description of the work they did [PDF] as part of their "hypocrite commits" project. It includes a list of the buggy commits they posted and how they were handled.
In the following we will show two parts: (1) the message log of our disclosure of the findings to the community, and (2) the patches we submitted. By showing the details of the patches and the exchange of messages, we wish to help the community to confirm that the buggy patches were "stopped" during message exchanges and not merged into the actual Linux code. No other interactions with the Linux Kernel team has involved intentional deception or intentionally misleading or bad patches. This misguided behavior on our part was limited to the patches described and clarified in this document.

Amusingly, one of their attempts to submit a buggy commit was, itself, buggy, yielding a valid change overall.

Comments (17 posted)

An Interview With Linus Torvalds: Linux and Git (Tag1)

The Tag1 Consulting site has posted an interview with Linus Torvalds.

So I think the GPLv2 is pretty much the perfect balance of "everybody works under the same rules", and still requires that people give back to the community ("tit-for-tat"). And everybody knows that all the other people involved are bound by the same rules, so it's all very equitable and fair.

Of course, another part of that is that you also get out what you put in. Sure, you can try to "coast" on the project and be just a user, and that's ok. But if you do that, you also have no control over the project. That can be perfectly fine too, if you really just need a basic operating system, and Linux already does everything you want. But if you have special requirements, the only way to really affect the project is to participate.

Comments (23 posted)

Quote of the week

If the result of the exercise is that a typical device driver will contain more unsafe code than not, then device drivers are not a good starting point for Rust in the Linux kernel. In that case I would recommend that Rust start at a point where there is a lot of abstract code that is prone to the kind of problems that Rust is trying to solve. My intuition would be such things as network protocols. But I may be wrong.
Linus Walleij

Comments (2 posted)

Distributions

Fedora Linux 34 released

The Fedora 34 release is now available. "This release features GNOME 40, the next step in focused, distraction-free computing. GNOME 40 brings improvements to navigation whether you use a trackpad, a keyboard, or a mouse. The app grid and settings have been redesigned to make interaction more intuitive." LWN recently reviewed the Fedora 34 Workstation release.

Comments (none posted)

Ubuntu 21.04 released

The Ubuntu 21.04 distribution release is available. "Today, Canonical released Ubuntu 21.04 with native Microsoft Active Directory integration, Wayland graphics by default, and a Flutter application development SDK. Separately, Canonical and Microsoft announced performance optimization and joint support for Microsoft SQL Server on Ubuntu."

Comments (20 posted)

Yocto Project 3.3 (hardknott-25.0.0) released

Yocto Project, a system to build embedded Linux distributions, released version 3.3 "Hardknott". In this version all OE-Core recipes build reproducibly regardless of host distro/build location except golang recipes and ruby's docs package. There are many more new features, upgrades, and bug fixes. The release notes have more details.

Full Story (comments: 4)

Development

GCC 11.1 released

Version 11.1 of the GCC compiler suite is out. "This release switches the default debugging format to DWARF 5 on most targets and switches the default C++ language version to -std=gnu++17. It makes great progress in the C++20 language support, both on the compiler and library sides, adds experimental C++23 support, some C2X enhancements, various optimization enhancements and bug fixes, several new hardware enablement changes and enhancements to the compiler back-ends and many other changes."

Full Story (comments: 1)

Development quotes of the week

We welcome the participation of researchers of all kinds in the Julia community. However, please remember that open source developmnent is a social process and that the participants on the other side of any interaction are (obviously) humans. If you are doing research *on the community or its processes*, you are likely performing Human Subject Research (HSR) and are expected to abide by the highest standards of ethics and professional practice. Meeting this expectation is your responsibility.
The Julia language's amended code of conduct

Anyway. The moral of all of this is that sometimes history works out such that you write some software that a huge number of people run without any idea of who you are, and also that this can happen without you having any [...] idea what you're doing.
Matthew Garrett

Comments (none posted)

Miscellaneous

Computer security world in mourning over death of Dan Kaminsky (The Register)

The Register reports on the death of security researcher Dan Kaminsky. "Though Kaminsky rose to fame in 2008 for identifying a critical design weakness in the internet's infrastructure – and worked in secret with software developers to mitigate the issue before it could be easily exploited – he had worked behind the scenes in the infosec world for at least the past two decades."

Comments (2 posted)

Page editor: Jake Edge

Announcements

Newsletters

Distributions and system administration

Development

Meeting minutes

Calls for Presentations

EuroPython 2021: Call for Proposals Open

EuroPython 2021 will take place July 26-August 1 online. "We're looking for proposals on all aspects of Python from novice to advanced level, including but not limited to: applications, frameworks, Data Science, internals or topics which you're excited about, your experiences with Python and its ecosystem and creative or artistic things you've done with Python." The call for proposals closes May 9.

Full Story (comments: none)

CFP Deadlines: April 29, 2021 to June 28, 2021

The following listing of CFP deadlines is taken from the LWN.net CFP Calendar.

DeadlineEvent Dates EventLocation
April 30 October 17
October 19
All Things Open Raleigh, NC, and virtual
April 30 June 3 Live Embedded Event Online
May 2 June 18
June 25
Akademy 2021 Online
May 4 June 18
June 20
openSUSE conference online
May 12 June 1
June 30
Ceph Month June Virtual
May 15 September 15
September 17
International Workshop on OpenMP Bristol, UK
May 16 July 28
July 30
EuroPython 2021 Online
May 22 September 17
September 20
PyCon India 2021 Online
May 26 September 16
September 19
EuroBSDCon 2021 online
June 10 July 19
July 23
Netdev 0x15 Main Conference Online
June 13 September 27
September 29
OSPOCon Seattle, WA, and online
June 13 September 27
September 30
Open Source Summit + Embedded Linux Conference Seattle, WA, and online
June 13 September 28
September 30
Qt Developer Conference [POSTPONED] Berlin, Germany
June 14 September 13
September 14
OpenMP Developer Conference Bristol, UK
June 20 August 22
August 29
DebConf Online
June 20 October 11
October 12
Open Networking & Edge Summit + Kubernetes on Edge Day Virtual

If the CFP deadline for your event does not appear here, please tell us about it.

Upcoming Events

Netdev 0x15 going virtual

The Netdev conference will be held July 20-23. There was hope that an in-person event in San Francisco, CA would be possible, but the NetDev Society board has decided that the Netdev 0x15 will be fully virtual. The decision was based on this evaluation [PDF] conducted by the IETF.

Full Story (comments: none)

GNOME Foundation announces GUADEC Keynote speakers

The GNOME conference, GUADEC 2021, will take place July 21-25 online. "Our keynote speakers for this year are Hong Phuc Dang and Shauna Gordon-McKeon. Hong Phuc Dang chairs the annual FOSSASIA Summit and organizes Open Tech Summits in countries from Vietnam, India, China, and Sri Lanka, to Germany. She is the board member of the Open Source Business Alliance Europe and also serves as Vice President of the Open Source Initiative. Shauna Gordon-McKeon is a writer, programmer and community organizer who focuses on the intersection of technology and governance. She co-organizes the Washington DC chapter of the Tech Workers Coalition. She serves on the board of Tech Inquiry and is an advisor to Metagov."

Full Story (comments: none)

Events: April 29, 2021 to June 28, 2021

The following event listing is taken from the LWN.net Calendar.

Date(s)EventLocation
May 2
May 3
PyCon Israel 2021 Online
May 4
May 6
sambaXP 2021 Online
May 13
May 15
Linux App Summit online
May 14
May 15
PyCon US 2021 Online
May 25
May 26
Yocto Project Virtual Summit 2021 Online
June 1
June 30
Ceph Month June Virtual
June 3 Live Embedded Event Online
June 15
June 16
stackconf online 2021 Online
June 18
June 20
openSUSE conference online
June 18
June 25
Akademy 2021 Online
June 22
June 23
Postgres Vision 2020 online
June 23 Linaro and Arm CCA Tech Event Online
June 24
June 25
Build Meetup 2021 Virtual

If your event does not appear here, please tell us about it.

Security updates

Alert summary April 22, 2021 to April 28, 2021

Dist. ID Release Package Date
Debian DSA-4906-1 stable chromium 2021-04-27
Debian DLA-2637-1 LTS drupal7 2021-04-23
Debian DLA-2633-1 LTS firefox-esr 2021-04-23
Debian DLA-2644-1 LTS gst-libav1.0 2021-04-27
Debian DSA-4901-1 stable gst-libav1.0 2021-04-24
Debian DLA-2642-1 LTS gst-plugins-bad1.0 2021-04-27
Debian DSA-4902-1 stable gst-plugins-bad1.0 2021-04-24
Debian DLA-2641-1 LTS gst-plugins-base1.0 2021-04-27
Debian DSA-4903-1 stable gst-plugins-base1.0 2021-04-24
Debian DLA-2640-1 LTS gst-plugins-good1.0 2021-04-26
Debian DSA-4900-1 stable gst-plugins-good1.0 2021-04-24
Debian DLA-2643-1 LTS gst-plugins-ugly1.0 2021-04-27
Debian DSA-4904-1 stable gst-plugins-ugly1.0 2021-04-24
Debian DLA-2638-1 LTS jackson-databind 2021-04-25
Debian DLA-2635-1 LTS libspring-java 2021-04-23
Debian DLA-2639-1 LTS opendmarc 2021-04-25
Debian DSA-4899-1 stable openjdk-11 2021-04-23
Debian DLA-2634-1 LTS openjdk-8 2021-04-23
Debian DLA-2636-1 LTS pjproject 2021-04-23
Debian DSA-4905-1 stable shibboleth-sp 2021-04-27
Debian DLA-2632-1 LTS thunderbird 2021-04-22
Debian DSA-4897-1 stable thunderbird 2021-04-22
Debian DSA-4896-1 stable wordpress 2021-04-22
Debian DSA-4898-1 stable wpa 2021-04-22
Fedora FEDORA-2021-ec00da7faa F33 buildah 2021-04-24
Fedora FEDORA-2021-e29c1ee892 F34 ceph 2021-04-27
Fedora FEDORA-2021-ec00da7faa F33 containers-common 2021-04-24
Fedora FEDORA-2021-ec00da7faa F33 crun 2021-04-24
Fedora FEDORA-2021-26a293c72b F32 curl 2021-04-21
Fedora FEDORA-2021-d8b1386945 F32 firefox 2021-04-26
Fedora FEDORA-2021-5ed46601f6 F33 firefox 2021-04-21
Fedora FEDORA-2021-6eb9bbbf0c F33 java-11-openjdk 2021-04-24
Fedora FEDORA-2021-8cd093f639 F32 kernel 2021-04-27
Fedora FEDORA-2021-e6b4847979 F33 kernel 2021-04-27
Fedora FEDORA-2021-8cd093f639 F32 kernel-headers 2021-04-27
Fedora FEDORA-2021-e6b4847979 F33 kernel-headers 2021-04-27
Fedora FEDORA-2021-8cd093f639 F32 kernel-tools 2021-04-27
Fedora FEDORA-2021-e6b4847979 F33 kernel-tools 2021-04-27
Fedora FEDORA-2021-f4223b6684 F33 mediawiki 2021-04-21
Fedora FEDORA-2021-9bd201dd4d F33 mingw-binutils 2021-04-21
Fedora FEDORA-2021-1ffffa0251 F33 nextcloud-client 2021-04-24
Fedora FEDORA-2021-242ef81244 F33 openvpn 2021-04-24
Fedora FEDORA-2021-186bca5b58 F33 os-autoinst 2021-04-21
Fedora FEDORA-2021-ec00da7faa F33 podman 2021-04-24
Fedora FEDORA-2021-b6b6093b3a F32 python3-docs 2021-04-23
Fedora FEDORA-2021-067c9deff1 F33 python3-docs 2021-04-23
Fedora FEDORA-2021-067c9deff1 F33 python3.9 2021-04-23
Fedora FEDORA-2021-eadfc56b95 F33 rpm-ostree 2021-04-21
Fedora FEDORA-2021-ec00da7faa F33 runc 2021-04-24
Fedora FEDORA-2021-d7f74f0250 F32 rust 2021-04-27
Fedora FEDORA-2021-b1ba54add6 F33 rust 2021-04-27
Fedora FEDORA-2021-5aaebdae8e F33 salt 2021-04-28
Fedora FEDORA-2021-f7b4c97879 F32 xorg-x11-server 2021-04-24
Mageia MGASA-2021-0195 7 connman 2021-04-24
Mageia MGASA-2021-0196 7, 8 krb5-appl 2021-04-24
Mageia MGASA-2021-0197 7, 8 virtualbox 2021-04-24
openSUSE openSUSE-SU-2021:0606-1 15.2 ImageMagick 2021-04-23
openSUSE openSUSE-SU-2021:0605-1 15.2 apache-commons-io 2021-04-23
openSUSE openSUSE-SU-2021:0621-1 15.2 firefox 2021-04-26
openSUSE openSUSE-SU-2021:0595-1 15 irssi 2021-04-23
openSUSE openSUSE-SU-2021:0620-1 jhead 2021-04-26
openSUSE openSUSE-SU-2021:0594-1 15.2 jhead 2021-04-23
openSUSE openSUSE-SU-2021:0619-1 15.2 libdwarf 2021-04-26
openSUSE openSUSE-SU-2021:0618-1 15.2 nim 2021-04-26
openSUSE openSUSE-SU-2021:0601-1 15.2 nodejs-underscore 2021-04-23
openSUSE openSUSE-SU-2021:0592-1 15.2 opera 2021-04-22
openSUSE openSUSE-SU-2021:0597-1 15 python-django-registration 2021-04-23
openSUSE openSUSE-SU-2021:0600-1 15.2 qemu 2021-04-23
openSUSE openSUSE-SU-2021:0607-1 15.2 ruby2.5 2021-04-24
openSUSE openSUSE-SU-2021:0598-1 15.2 shim 2021-04-23
openSUSE openSUSE-SU-2021:0602-1 15.2 sudo 2021-04-23
Oracle ELSA-2021-1363 OL7 firefox 2021-04-26
Oracle ELSA-2021-1363 OL7 firefox 2021-04-27
Oracle ELSA-2021-1360 OL8 firefox 2021-04-27
Oracle ELSA-2021-1301 OL8 java-1.8.0-openjdk 2021-04-21
Oracle ELSA-2021-1307 OL8 java-11-openjdk 2021-04-21
Oracle ELSA-2021-1242 OL8 mariadb:10.3 and mariadb-devel:10.3 2021-04-27
Oracle ELSA-2021-1350 OL7 thunderbird 2021-04-27
Oracle ELSA-2021-1353 OL8 thunderbird 2021-04-27
Oracle ELSA-2021-1354 OL7 xstream 2021-04-26
Oracle ELSA-2021-1354 OL7 xstream 2021-04-27
Red Hat RHSA-2021:1407-01 EL7 etcd 2021-04-27
Red Hat RHSA-2021:1363-01 EL7 firefox 2021-04-26
Red Hat RHSA-2021:1360-01 EL8 firefox 2021-04-26
Red Hat RHSA-2021:1362-01 EL8.1 firefox 2021-04-26
Red Hat RHSA-2021:1361-01 EL8.2 firefox 2021-04-26
Red Hat RHSA-2021:1373-01 EL7.3 kernel 2021-04-27
Red Hat RHSA-2021:1376-01 EL7.6 kernel 2021-04-27
Red Hat RHSA-2021:1379-01 EL7 kernel-alt 2021-04-27
Red Hat RHSA-2021:1377-01 EL7.6 kpatch-patch 2021-04-27
Red Hat RHSA-2021:1384-01 EL7 nss 2021-04-27
Red Hat RHSA-2021:1389-01 EL7 openldap 2021-04-27
Red Hat RHSA-2021:1350-01 EL7 thunderbird 2021-04-26
Red Hat RHSA-2021:1353-01 EL8 thunderbird 2021-04-26
Red Hat RHSA-2021:1351-01 EL8.1 thunderbird 2021-04-26
Red Hat RHSA-2021:1352-01 EL8.2 thunderbird 2021-04-26
Red Hat RHSA-2021:1354-01 EL7 xstream 2021-04-26
Scientific Linux SLSA-2021:1363-1 SL7 firefox 2021-04-26
Scientific Linux SLSA-2021:1384-1 SL7 nss 2021-04-27
Scientific Linux SLSA-2021:1389-1 SL7 openldap 2021-04-27
Scientific Linux SLSA-2021:1350-1 SL7 thunderbird 2021-04-26
Scientific Linux SLSA-2021:1354-1 SL7 xstream 2021-04-26
SUSE SUSE-SU-2021:1315-1 SLE12 apache-commons-io 2021-04-26
SUSE SUSE-SU-2021:14707-1 SLE11 curl 2021-04-28
SUSE SUSE-SU-2021:1396-1 SLE12 curl 2021-04-28
SUSE SUSE-SU-2021:1325-1 OS8 OS9 SLE12 firefox 2021-04-27
SUSE SUSE-SU-2021:1307-1 SLE15 firefox 2021-04-23
SUSE SUSE-SU-2021:1401-1 OS8 OS9 SLE12 gdm 2021-04-28
SUSE SUSE-SU-2021:1314-1 SLE12 java-11-openjdk 2021-04-26
SUSE SUSE-SU-2021:1301-1 SLE15 kernel 2021-04-21
SUSE SUSE-SU-2021:14706-1 SLE11 kvm 2021-04-23
SUSE SUSE-SU-2021:1399-1 OS8 OS9 SLE12 libnettle 2021-04-28
SUSE SUSE-SU-2021:1310-1 SLE15 librsvg 2021-04-23
SUSE SUSE-SU-2021:1292-1 SLE15 pcp 2021-04-21
SUSE SUSE-SU-2021:1313-1 SLE15 python-aiohttp 2021-04-26
SUSE SUSE-SU-2021:1305-1 SLE12 qemu 2021-04-22
SUSE SUSE-SU-2021:14705-1 SLE11 tomcat6 2021-04-21
Ubuntu USN-4924-1 16.04 dnsmasq 2021-04-22
Ubuntu USN-4927-1 16.04 18.04 20.04 20.10 file-roller 2021-04-26
Ubuntu USN-4926-1 16.04 18.04 20.04 20.10 firefox 2021-04-26
Ubuntu USN-4916-2 14.04 16.04 18.04 20.04 linux, linux-aws, linux-gke-5.3, linux-hwe, linux-kvm, linux-lts-xenial, linux-oem-5.6, linux-raspi2-5.3, linux-snapdragon 2021-04-21
Ubuntu USN-4892-1 16.04 18.04 20.04 20.10 openjdk-8, openjdk-lts 2021-04-27
Ubuntu USN-4922-2 20.04 ruby2.7 2021-04-26
Ubuntu USN-4925-1 20.04 shibboleth-sp 2021-04-22
Ubuntu USN-4913-2 21.04 underscore 2021-04-28
Full Story (comments: none)

Kernel patches of interest

Kernel releases

Linus Torvalds Linux 5.12 Apr 25
Greg Kroah-Hartman Linux 5.11.17 Apr 28
Greg Kroah-Hartman Linux 5.10.33 Apr 28
Greg Kroah-Hartman Linux 5.4.115 Apr 28
Greg Kroah-Hartman Linux 4.19.189 Apr 28
Greg Kroah-Hartman Linux 4.14.232 Apr 28
Greg Kroah-Hartman Linux 4.9.268 Apr 28
Greg Kroah-Hartman Linux 4.4.268 Apr 28

Architecture-specific

Core kernel

legion@kernel.org Count rlimits in each user namespace Apr 22
Peter Zijlstra sched: Core Scheduling Apr 22
Srikar Dronamraju sched/fair: wake_affine improvements Apr 22
André Almeida Add futex2 syscalls Apr 27
Beata Michalska Rework CPU capacity asymmetry detection Apr 28
Liam Howlett Introducing the Maple Tree Apr 28

Development tools

Daniel Bristot de Oliveira hwlat improvements and osnoise/timerlat tracers Apr 23

Device drivers

Benjamin Gaignard IOMMU: Add driver for rk356x Apr 22
Saeed Mahameed mlx5 External sub function controller Apr 21
Sai Krishna Potthuri Add ZynqMP pinctrl driver Apr 22
Liam Beguin add support for the lmk04832 Apr 22
Kevin Tang Add Unisoc's drm kms module Apr 25
Manivannan Sadhasivam Add support for PCIe PHY in SDX55 Apr 27
Oleksij Rempel mainline ti tsc2046 adc driver Apr 28
Radu Pirea (NXP OSS) Add PTP support for TJA1103 Apr 28
Lizhi Hou XRT Alveo driver overview Apr 27
Douglas Gilbert sg: add v4 interface, request sharing Apr 27
Matthias Kaehlcke USB: misc: Add onboard_usb_hub driver Apr 28

Device-driver infrastructure

Harry Wentland A drm_plane API to support HDR planes Apr 26
Claire Chang Restricted DMA Apr 22
Hsin-Yi Wang add power control in i2c Apr 27
Tomi Valkeinen v4l: subdev internal routing Apr 27

Filesystems and block layer

Memory management

Networking

dlinkin@nvidia.com devlink: rate objects API Apr 21
Kumar Kartikeya Dwivedi Add TC-BPF API Apr 23
Kuniyuki Iwashima Socket migration for SO_REUSEPORT. Apr 27

Security-related

Mickaël Salaün Landlock LSM Apr 22

Virtualization and containers

Kuppuswamy Sathyanarayanan Add TDX Guest Support Apr 26

Miscellaneous

Nick Terrell Update to zstd-1.4.10 Apr 26

Page editor: Rebecca Sobol


Copyright © 2021, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds