|
|
Subscribe / Log in / New account

LWN.net Weekly Edition for October 15, 2020

Welcome to the LWN.net Weekly Edition for October 15, 2020

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)

Python and the infinite

By John Coggeshall
October 13, 2020

A recent proposal on the python-ideas mailing list would add a new way to represent floating-point infinity in the language. Cade Brown suggested the change; he cited a few different reasons for it, including fixing an inconsistency in the way the string representation of infinity is handled in the language. The discussion that followed branched in a few directions, including adding a constant for "not a number" (NaN) and a more general discussion of the inconsistent way that Python handles expressions that evaluate to infinity.

In general, Python handles floating-point numbers, including concepts like infinity, following the standards laid out by IEEE 754. Positive and negative infinity are represented by two specific floating-point values in most architectures. Currently, representing a floating-point infinite value in Python can be done using a couple of different mechanisms. There is the float() function, which can be passed the string "inf" to produce infinity, and there is the inf constant in the math library, which is equivalent to float('inf'). Brown provided several reasons why he believed a new, identical, and built-in constant was necessary. One of his reasons was that he felt that infinity is a "fundamental constant" that should be accessible from Python without having to call a function or require a library import.

To highlight the issue, Brown provided an example using the repr() and eval() functions. The repr() function converts a data structure to a printable string that in many cases can be evaluated back into the original data structure using eval(). Brown noted that, unlike other floating-point values, using eval() on the printable representation of inf results in an exception unless inf has been imported from math:

    >>> eval(repr(float('inf')))
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "<string>", line 1, in <module>
    NameError: name 'inf' is not defined

Brown's post created a mega-thread around how floating-point infinity values should be handled in Python. To some, it wasn't clear why importing inf was a bad solution to Brown's problem. Additionally, Greg Ewing noted that using the eval() function in the way suggested by Brown can be "a serious security problem in some contexts." The eval() function evaluates a string as Python code, which is dangerous if the string contains user-supplied data. Ewing suggested that the safer function to use would be literal_eval() from the ast library, which only evaluates literal values. Using that function would only work, however, if inf and nan were built-in constants.

Christopher Barker agreed, but noted another issue: "there is no way to use literal_eval that gets you an inf (or NaN value). Which is a real, though maybe not important, use case." Later in the thread, Barker further refocused the conversation on the fundamental point that Brown's post was leading to:

What's special is that we have a literal syntax for only a few special fundamental types: floats, ints, strings. (I [think] that's it, yes?), as well as "display" versions of a few core container types: list, dict, etc.

So the limitation here is that floats have a literal, and can have a huge number of values, all of which can be created by a literal, except inf,[-inf], and NaN.

Barker did not think that it was a "critically important" issue, but he did feel that extending the concept of a valid literal for the float type to include inf and nan was useful. He also claimed that it shouldn't require a new keyword. Barker admitted that if a new keyword were the only way to implement Brown's idea, it would be "dead in the water." Ewing suggested a possible implementation using a "special bytecode that looks it up as a name, and if that doesn't work, returns float('inf')," but noted that it was more straightforward and functionally the same to move math.inf and math.nan to __builtins__.

The problem with adding these constants to __builtins__, as Ewing noted, was that Guido van Rossum was not in favor of that idea. To that point, Barker responded by stating that, while Van Rossum has a "very well respected opinion", he is no longer the Benevolent Dictator for Life who could make this decision unilaterally.

Barker clarified that his goal was "to do that little bit more to make Python better support the float special values out of the box." He noted that, while PEP 754 ("IEEE 754 Floating Point Special Values") was rejected due to inactivity, almost all of the suggestions it made had ultimately been implemented, except for a version of the built-in literals for infinity and NaN now being proposed.

Van Rossum responded by expressing his willingness to sponsor a PEP for the Python steering council to consider. While he did not personally agree with the idea, he committed to remaining neutral so that Barker and Brown could receive "a fair hearing" with that body. With Van Rossum's sponsorship support, the duo put together a draft PEP that is now available on GitHub. Reflecting the thread, the PEP proposes "the introduction of built-in variables for floating point 'Infinity' (inf) and 'Not a Number' (nan)." Also included in the draft is an example summarizing the impact of the proposed change:

>>> inf
inf
>>> inf > 1e9
True
>>> eval('inf')
inf
>>> assert inf == eval('inf')
>>> inf == eval(repr(inf))
True
>>> import ast
>>> inf == ast.literal_eval('inf')
True

The discussion that evolved from Brown's post did more than lead to a new PEP; it also sparked an interesting conversation around how Python handles expressions that evaluate to mathematical infinity. Paul Bryan provided a relevant example of some quirks of the IEEE specification, specifically how subtracting infinity from itself results in NaN, but comparing the NaN from that operation doesn't equal math.nan:

>>> math.inf - math.inf
nan
>>> (math.inf - math.inf) == math.nan
False

Steven D'Aprano explained this strange behavior. According to IEEE 754, NaN values are, by definition, never equal to each other. To be otherwise, D'Aprano explained, would result in nonsensical expressions like sqrt(-2) == sqrt(-3) evaluating to True.

The conversation prompted a question from Stephen J. Turnbull, who asked if "base" Python could "create an infinity." Van Rossum had suggested earlier in the thread that you could produce inf from the value 1e1000 "in a pinch". However, Turnbull noted that a value like 1e1000, which cannot be represented in IEEE floating point, is technically an overflow rather than an infinity. While IEEE 754 permits mapping an overflow to infinity, that is not the same thing as the abstract mathematical concept of infinity. In another message, he expanded on this idea:

As Steven [D'Aprano] points out, [1e1000 is] an overflow, and IEEE *but not Python* is clear about that. In fact, none of the actual infinities I've tried (1.0 / 0.0 and math.tan(math.pi / 2.0)) result in values of inf. The former raises ZeroDivisionError and the latter gives the finite value 1.633123935319537e+16.

Turnbull explained that arithmetic involving infinite values only makes sense if it is carefully analyzed in the context of a specific calculation. The problem being that Python is inconsistent on the matter: some expressions should evaluate as the IEEE infinity but do not, some currently evaluate to inf when they are really overflows, and still others raise exceptions. As Turnbull said:

I prefer to think of it as being honest: this isn't infinity, this is overflow — and the way Python treats infs, here be Dragons, all bets are off, "magic is loose in the world", and anything can happen.

Ben Rudiak-Gould provided some examples of Python's inconsistencies when dealing with various mathematical expressions that represent an infinity. Each one should ideally evaluate to inf, but most raised exceptions like ValueError or OverflowError instead; "I get the impression that little planning has gone into this", he added.

Brown agreed that "a look should be taken at the structure of math-based errors and exceptions," adding that "the exceptions make little sense." Since the types of changes required to make Python consistent in this regard would represent a significant backward-compatibility break, it seems unlikely that they will be addressed soon.

As for the PEP, the next step is for Brown and Barker to submit a pull request to the steering council for acceptance, be assigned a PEP number, and bring it up again for further discussion. Before the steering council or its delegate will be able to accept or reject it, though, the PEP will need to be discussed on the python-dev mailing list. Time will tell if Brown's wish to move inf and nan into __builtins__ is accepted, and what, if anything, comes of the inconsistent way that Python handles concepts like infinity throughout the language.

Comments (18 posted)

Further analysis of PyPI typosquatting

By Jake Edge
October 14, 2020

We have looked at the problem of confusingly named packages in repositories such as the Python Package Index (PyPI) before. In general, malicious actors create these packages with names that can be mistaken for those of legitimate packages in the repository in a form of "typosquatting". Since our 2016 article, the problem has not gone away—no surprise—but there has been some recent analysis of it, as well as some efforts to combat it.

On the IQT blog, John Speed Meyers and Bentz Tozer recently posted some analysis they had done to quantify PyPI typosquatting attacks and to categorize them. They started by looking at the examples of actual attacks against PyPI users from 2017 to 2020; they found 40 separate instances over that time span. The criteria used were that the package had a name similar to another in PyPI, contained malware, and was identified and removed from the repository.

They identified two types of package typosquatting: misspelling and confusion. The first type relies on package names that are slightly misspelled, djanga instead of django or urlib3 instead of urllib3. The confusion attacks rely upon changing the order of the "words" in the name (e.g. nmap-python rather than python-nmap), removing or changing separators (e.g. easyinstall vs. easy_install), or otherwise changing the elements of the name (e.g. crypt/crypto, python-sqlite/pysqlite). Of the 40 attacks identified, 18 were of the misspelling variety, while 24 were confusing—two were both, which accounts for the overlap.

The blog post noted that William Bengston had done some research on one type of confusion attack in particular: separator changes. In July 2018, Bengston registered around 1,100 package names on PyPI by eliminating any separators (i.e. - or _) in the names the top 10,000 packages on PyPI. The packages registered would simply cause an error when they were installed; that error would redirect the user to the correct package name.

In a little over two years there have been 530,950 total pip install commands run on 1,131 packages! This does not include any mirrors or internal package registries that have cloned these packages privately. Malicious packages in PyPI have been know to steal credentials stored on the local file system such as SSH credentials in ~/.ssh/, GPG keys, or perhaps AWS credentials stored in ~/.aws/credentials. If these typosquat packages were written with malicious intent and we assume one attempt per install, that would mean 530,950 machines could have been compromised over the two year period.

The IQT researchers found that separator attacks made up a small portion of the typosquatting incidents they looked at, though. So the number of potential systems that have fallen prey to the typosquatting problem is likely far higher. "Separator attacks account for only three of the 26 confusion attacks in this dataset though, suggesting that Bengston’s already frightening estimate of PyPI user susceptibility to typosquatting is a lower bound of overall user susceptibility to typosquatting attacks."

As might be guessed, typosquatters concentrated their efforts on the most popular PyPI packages. The IQT researchers found that 28% of their instances were typosquatting the top 50 most popular PyPI packages and more than half of the attacks (63%) were against the top 500.

Finding typosquatting attacks, or preventing those kinds of packages from being created in the first place, is obviously worth doing. The misspelling attacks are relatively easy to detect using the Levenshtein distance between two names. That distance measures the number of one-character changes that are needed to turn one string into another; the misspellings that the researchers found have a Levenshtein distance of one (15 attacks) or two (3 attacks). While there may be perfectly valid reasons for a package to have a name that is only slightly different than an existing package, it could be used as a reason for administrator scrutiny. The confusion category, on the other hand, generally had distances that were three or more (17 of 24), making them more difficult to (automatically) detect.

Python has made some efforts to help reduce the typosquatting problem. In 2017, code was added to block new PyPI packages with names that are the same as those of standard library modules. Existing PyPI packages that conflict are not being removed—some are backports of newer functionality to older versions of the language, for example—but they are being audited to determine their validity. Some malware checking has also been added to Warehouse, which is the web application behind PyPI.

The researchers also noted several different papers about ways to detect and stop malware from being distributed from package repositories such as PyPI. Other language repositories, npm for JavaScript and RubyGems for Ruby, are also considered in these papers. A team largely from the University of Kansas looked specifically at typosquatting defenses [PDF] for npm and PyPI, while a Georgia Tech team "built a sophisticated anti-malware analysis pipeline that repositories could employ to find malicious software, including typosquatters, hiding in repositories" (paper [PDF]). The amusingly titled "Backstabber’s Knife Collection: A Review of Open Source Software Supply Chain Attacks" [PDF] analyzes nearly 200 malicious packages from npm, RubyGems, and PyPI to try to extract information that can be used to detect new malware based on the characteristics of the existing malicious packages.

There is, of course, a more draconian solution to the problem: connecting packages with the real-life identities of their maintainers. It is the semi-anonymous nature of the repositories that makes these kinds of attacks easy to perform with little risk of personal repercussions for perpetrating them. There are lots of advantages to the free-for-all nature of repositories like PyPI (as well as GitHub and friends), but there are some downsides to it as well. On the other hand, of course, it is hard to imagine that attackers would not find ways around some ID requirement—or some way to pin their attack on an innocent bystander. Finding ways to thwart these attacks without resorting to that kind of policing is important.

Better vetting for packages is another potential solution, but it is not really practical. The number of changes that goes into these repositories is so enormous that it rapidly outpaces the limited bandwidth of administrators. Even large commercial companies are unable to handle this problem—the various app stores have been known to provide malware—so projects like Python cannot even begin to keep up. It would seem that automated efforts are slowly getting somewhat better, but it would be unsurprising to see more instances of malicious typosquatting in PyPI and elsewhere in coming years.

Comments (39 posted)

The ABI status of filesystem formats

By Jonathan Corbet
October 8, 2020
One of the key rules of Linux kernel development is that the ABI between the kernel and user space cannot be broken; any change that breaks previously working programs will, outside of exceptional circumstances, be reverted. The rule seems clear, but there are ambiguities when it comes to determining just what constitutes the kernel ABI; tracepoints are a perennial example of this. A recent discussion has brought another one of those ambiguities to light: the on-disk format of Linux filesystems.

Users reporting kernel regressions will receive a varying amount of sympathy, depending on where the regression is. For normal user-space programs using the system-call API, that sympathy is nearly absolute, and changes that break things will need to be redone. This view of the ABI also extends to the virtual filesystems, such as /proc and sysfs, exported by the kernel. Changes that break things are deemed a little more tolerable when they apply to low-level administrative tools; if there is only one program that is known to use an interface, and that program has been updated, the change may be allowed. On the other hand, nobody will be concerned about changes that break out-of-tree kernel modules; the interface they used is considered to be internal to the kernel and not subject to any stability guarantee.

But those are not the only places where user space interfaces with the kernel. Consider, for example, this regression report from Josh Triplett. It seems that an ext4 filesystem bug fix merged for 5.9-rc2 breaks the mounting of some ext4 filesystems that he works with.

These filesystems are created for some unspecified internal purpose with an unreleased internal tool. They are meant to be read-only, so there will never be any need (or ability) to create new files on them. As a space-saving measure, this tool overlays all of the block and inode bitmaps onto a single block, set to all ones, indicating that all blocks and inodes are already allocated. To indicate that this has been done, this tool marks the filesystem with a special flag (EXT4_FEATURE_RO_COMPAT_SHARED_BLOCKS). This flag is defined by the ext4 tools, but is not used by the kernel in any way. It is placed in the set of read-only compatibility flags, though, meaning that a kernel that sees it in a filesystem will know that said filesystem can be safely mounted, but only in read-only mode.

Until 5.9-rc2, mainline kernels were happy to mount these filesystems. The commit highlighted by Triplett changed that situation by adding some checks to the mount-time ext4 verifier that ensures that the filesystem image is valid. As a result of these new checks, the overlapping bitmaps are detected, the kernel complains, and any attempt to mount the filesystem fails. Something that used to work no longer does — the definition of a regression. Triplett included in his report a small patch that disables the validity check when the EXT4_FEATURE_RO_COMPAT_SHARED_BLOCKS flag is present, rendering his filesystems mountable again.

That change is likely to be merged, but it has not brought great joy to the filesystem developers, who see it as a sign of things going wrong. XFS maintainer Darrick Wong argued that "unofficial" filesystem variants should not be supported:

I disagree; creating undocumented forks of an existing ondisk format (especially one that presents as inconsistent metadata to regular tools) is creating a ton of pain for future users and maintainers when the incompat forks collide with the canonical implementation(s).

Triplett responded that filesystem images should fall within the realm of the kernel ABI:

I was generally under the impression that mounting existing root filesystems fell under the scope of the kernel<->userspace or kernel<->existing-system boundary, as defined by what the kernel accepts and existing userspace has used successfully, and that upgrading the kernel should work with existing userspace and systems. If there's some other rule that applies for filesystems, I'm not aware of that.

Ext4 maintainer Ted Ts'o said that he was not opposed to Triplett's patch, but suggested that further patches to support this tool might receive a chillier reception. He then told the story of the make_ext4fs tool, an independently written ext4 filesystem creator used for years by Android. It created a long list of compatibility and corruption problems, he said, that took years to iron out. Third-party filesystem tools are prone to such problems, he said:

As far as I'm concerned, it's not just about on-disk file system format, it's also about the official user space tools. If you create a file system which the kernel is happy with, but which wasn't created using the official user space tools, file systems are so full of state and permutations of how things should be done that the opportunities for mischief are huge.

Filesystem developers have a certain natural aversion to "mischief", so it is unsurprising that Ts'o would prefer that these outside tools simply not exist. At a minimum, he suggested, future policy should say that filesystem-image regressions would only need to be addressed for images that were created and managed by the designated official tools. He requested that Triplett find a way to get rid of his custom tool.

Triplett disagreed with that policy suggestion, saying that a more reasonable approach would be that any filesystem images that pass the e2fsck checker should be supported. Not all tools that work with the ext4 format should have to live in the e2fsprogs repository; to say otherwise, he added, would be tantamount to saying that the FreeBSD kernel, which has an ext4 filesystem driver, should live in e2fsprogs too. The tool in question here, which Triplett finally described late in the conversation, appears equally unsuited to inclusion in the e2fsprogs repository.

Triplett concluded that message with a restatement of his request:

The *only* thing I'm asking, here, is "don't break things that worked". And after this particular item, I'd be happy to narrow that to "don't break things that e2fsck was previously happy with".

Ts'o's response made it clear that he is uninclined to grant that wish; that would, he said, make it impossible to fix security-related problems related to invalid filesystem images, of which there are many. Many of these invalid images — often generated by fuzzing tools or attackers — pass e2fsck until the problems are found and fixed. Grandfathering in any image that passes e2fsck would thus, he said, require invalid filesystems to be supported forever. He concluded with some suggestions for other ways to solve Triplett's problem and requested that Triplett work more closely with the ext4 developers in the future.

As of this writing, that is where the discussion has stopped. Ts'o's willingness to apply the fix for the immediate problem means that there is no pressing need to resolve the larger issue of regressions involving filesystems; that, in turn, means that the issue is likely to come up again at some point. The kernel ABI is a large and amorphous thing, and many of the boundaries are fuzzy at best. Filesystems are one area where that boundary has not yet been fully explored; somebody is likely to inadvertently end up on the wrong side of it sooner or later.

Comments (34 posted)

NAPI polling in kernel threads

By Jonathan Corbet
October 9, 2020
Systems that manage large amounts of network traffic end up dedicating a significant part of their available CPU time to the network stack itself. Much of this work is done in software-interrupt context, which can be problematic in a number of ways. That may be about to change, though, once this patch series posted by Wei Wang is merged into the mainline.

Once a packet arrives on a network interface, the kernel must usually perform a fair amount of protocol-processing work before the data in that packet can be delivered to the user-space application that is waiting for it. Once upon a time, the network interface would interrupt the CPU when a packet arrived; the kernel would acknowledge the interrupt, then trigger a software interrupt to perform this processing work. The problem with this approach is that, on busy systems, thousands of packets can arrive every second; handling the corresponding thousands of hardware interrupts can run the system into the ground.

The solution to this problem was merged in 2003 in the form of a mechanism that was called, at the time, "new API" or "NAPI". Drivers that support NAPI can disable the packet-reception interrupt most of the time and rely on the network stack to poll for new packets at a frequent interval. Polling may seem inefficient, but on busy systems there will always be new packets by the time the kernel polls for them; the driver can then process all of the waiting packets at once. In this way, one poll can replace dozens of hardware interrupts.

NAPI has evolved considerably since 2003, but one aspect remains the same: it still runs in software-interrupt mode. These interrupts, once queued by the kernel, will be processed at either the next return from a hardware interrupt or the next return from kernel to user mode. They thus run in an essentially random context, stealing time from whatever unrelated process happens to be running at the time. Software interrupts are hard for system administrators to manage and can create surprising latencies if they run for a long time. For this reason, kernel developers have wanted to reduce or eliminate their use for years; they are an old mechanism that is deeply wired into core parts of the kernel, though, and are hard to get rid of.

Wang's patch set (which contains work from Paolo Abeni, Felix Fietkau, and Jakub Kicinski) doesn't eliminate software interrupts, but it is a possible step in that direction. With these patches applied, the kernel can optionally (under administrator control) create a separate kernel thread for each NAPI-enabled network interface. After that, NAPI polling will be done in the context of that thread, rather than in a software interrupt.

The amount of work that needs to be done is essentially unchanged with this patch set, but the change in the way that work is done is significant. Once NAPI polling moves to its own kernel thread, it becomes much more visible and subject to administrator control. A kernel thread can have its priority changed, and it can be bound to a specific set of CPUs; that allows the administrator to adjust how that work is done in relation to the system's user-space workload. Meanwhile, the CPU scheduler will have a better understanding of how much CPU time NAPI polling requires and can avoid overloading the CPUs where it is running. Time spent handling software interrupts, instead, is nearly invisible to the scheduler.

There aren't a lot of benchmark results posted with the patch set; those that are available indicate a possible slight increase in overhead when the threaded mode is used. Users who process packets at high rates tend to fret over every nanosecond, but even they might find little to quibble about if these results hold. Meanwhile, those users should also see more deterministic scheduling for their user-space code, which is also important.

The networking developers seem to be generally in favor of this work; Eric Dumazet indicated a desire to merge it quickly. This feeling is not unanimous, though; Kicinski, in particular, dislikes the kernel-thread implementation. He believes that better performance can be had by using the kernel's workqueue mechanism for the polling rather than threads. Dumazet answered that workqueues would not perform well on "server class platforms" and indicated a lack of desire to wait to see a new workqueue-based implementation at some point in the future.

So it appears that this work will be merged soon; it's late for 5.10, so landing in the 5.11 kernel seems likely. It's worth noting that the threaded mode will remain off by default. Making the best use of it will almost certainly require system tuning to ensure that the NAPI threads are able to run without interfering with the workload; for now, administrators who are unwilling or unable to do that tuning are probably well advised to stick with the default, software-interrupt mode. Software interrupts themselves are still not going away anytime soon, but this work may help in the long-term project of moving away from them.

Comments (15 posted)

Some 5.9 kernel development statistics

By Jonathan Corbet
October 13, 2020
The 5.9 kernel was released on October 11, at the end of a ten-week development cycle — the first release to take more than nine weeks since 5.4 at the end of 2019. While this cycle was not as busy as 5.8, which broke some records, it was still one of the busier ones we have seen in some time, featuring 14,858 non-merge changesets contributed by 1,914 developers. Read on for our traditional look at what those developers were up to while creating the 5.9 release.

Of the 1,914 developers contributing to 5.9, 306 made their first contribution for this release. This is the largest number of new contributors we have seen since 4.12 (which had 334 first-time contributors) was released in 2017 and, indeed, the second-highest number ever seen. All together, the 5.9 contributors added just over 730,000 lines of code and removed nearly 262,000 for a net growth of 468,000 lines of code. The busiest developers this time around were:

Most active 5.9 developers
By changesets
Lee Jones5203.5%
Christoph Hellwig2922.0%
Randy Dunlap2611.8%
Alexander A. Klimov1871.3%
Ben Skeggs1370.9%
Chris Wilson1350.9%
Laurent Pinchart1350.9%
Evan Quan1130.8%
Pierre-Louis Bossart1130.8%
Gustavo A. R. Silva1100.7%
Likun Gao1090.7%
Thomas Zimmermann1050.7%
Thierry Reding1020.7%
Colin Ian King970.7%
Pavel Begunkov960.6%
Kuninori Morimoto950.6%
Andy Shevchenko910.6%
Krzysztof Kozlowski880.6%
Kees Cook830.6%
Edward Cree800.5%
By changed lines
Jerry (Fangzhi) Zuo9295011.2%
Likun Gao778979.4%
Bhawanpreet Lakha287873.5%
Mike Rapoport185312.2%
Edward Cree131461.6%
Ben Skeggs107611.3%
Christoph Hellwig92861.1%
Leo Liu90561.1%
Tzu-En Huang85211.0%
Hans Verkuil84871.0%
Evan Quan84281.0%
Laurent Pinchart64380.8%
Alexander Lobakin61290.7%
Rob Clark59920.7%
Chris Wilson59340.7%
Hyun Kwon58390.7%
Dmitry Osipenko57280.7%
Jesse Brandeburg53350.6%
Leon Romanovsky51340.6%
Jakub Kicinski47740.6%

The largest number of changesets going into 5.9 came from Lee Jones, who contributed many cleanups across the device-driver subsystem. Christoph Hellwig made substantive changes across a number of kernel subsystems; this work includes the removal of set_fs() among many other things. Randy Dunlap removed duplicated words words from files all over the kernel tree, Alexander Klimov converted vast numbers of "HTTP" links to "HTTPS", and Ben Skeggs contributed a lot of improvements to the Nouveau graphics driver.

The "lines contributed" column starts with Jerry (Fangzhi) Zuo, Likun Guo, and Bhawanpreet Lakha, all of whom added more code to the massive amdgpu graphics driver. Zuo only contributed two patches, but one of them was large (and consisted only of definitions of preprocessor symbols). Mike Rapoport removed the unloved unicore32 architecture and Edward Cree did a lot of work on the Solarflare SFC network driver.

Overall, 207 employers supported work on the 5.9 kernel, a number that is consistent with previous releases. The most active employers were:

Most active 5.9 employers
By changesets
(None)13779.3%
Intel13369.0%
Red Hat10066.8%
(Unknown)8956.0%
AMD8485.7%
Linaro8425.7%
Google6624.5%
SUSE5543.7%
(Consultant)5043.4%
IBM4783.2%
Huawei Technologies4713.2%
Facebook3852.6%
Renesas Electronics3232.2%
NXP Semiconductors3132.1%
Mellanox3032.0%
Oracle2451.6%
NVIDIA2211.5%
Arm2071.4%
Code Aurora Forum2031.4%
Texas Instruments1891.3%
By lines changed
AMD24387429.4%
Intel566356.8%
Red Hat393474.8%
IBM356584.3%
(None)302323.7%
Google297153.6%
(Unknown)294213.6%
Mellanox241492.9%
Facebook224102.7%
Linaro192712.3%
(Consultant)181512.2%
NVIDIA179852.2%
Renesas Electronics149741.8%
SUSE144091.7%
Texas Instruments135081.6%
Solarflare Communications131461.6%
Marvell112841.4%
NXP Semiconductors109001.3%
Code Aurora Forum108171.3%
Realtek102601.2%

This is the first time in years that the largest number of changesets came from people who were working on their own time; it seems unlikely to be a change to the long-term trend toward smaller volunteer participation, but one never knows. Otherwise the employer numbers look about the same as they do in most months.

The busiest testers and bug reporters for 5.9 were:

Test and report credits in 5.9
Tested-by
Andrew Bowers717.5%
Aaron Brown384.0%
Nicolas Saenz Julienne282.9%
Arnaldo Carvalho de Melo282.9%
Sedat Dilek242.5%
Stan Johnson212.2%
周正 (Zhou Zheng)181.9%
John Donnelly171.8%
Dmitry Baryshkov161.7%
Alexei Starovoitov161.7%
Reported-by
kernel test robot16917.1%
Syzbot919.2%
Hulk Robot676.8%
Dan Carpenter232.3%
Stephen Rothwell171.7%
Naresh Kamboju161.6%
Randy Dunlap161.6%
Lars-Peter Clausen131.3%
Qian Cai121.2%
Colin Ian King80.8%

Automated testing systems continue to be the most prolific source of bug reports; they were responsible for just over one-third of the total in the 5.9 cycle.

The developers with the most review credits this time around were:

Review credits in 5.9
Rob Herring1953.0%
Alex Deucher1622.5%
David Sterba1312.0%
Lyude Paul1302.0%
Hawking Zhang1211.9%
Christoph Hellwig1071.7%
Florian Fainelli1031.6%
Andy Shevchenko951.5%
Jiri Pirko821.3%
Darrick J. Wong801.2%

A total of 5,235 commits for 5.9 contained Reviewed-by tags; that is 35% of the total, which is up slightly from 5.8.

All told, 5.9 looks like another fairly routine development cycle that is a little busier than the average. Once again, it seems that the ongoing global pandemic has not hurt the pace of Linux kernel development; it might even possibly have encouraged the larger-than-normal number of changes from first-time and volunteer developers. The kernel community is clearly running at full speed as it heads into the 5.10 development cycle.

Comments (2 posted)

A PHP syntax for discardable assignments

By John Coggeshall
October 14, 2020

Recently, John Bafford revived a years-long conversation on expanding the syntax of the PHP foreach statement to include iterating solely over keys. Bafford, who wrote a patch and request for comments (RFC) on the matter back in 2016, hopes to update his work and convince the community to adopt the abbreviated syntax in PHP 8.1. The community took Bafford's general idea and expanded it into other areas of the language.

The PHP foreach statement is designed to iterate over arrays and objects that implement the Traversable interface. PHP arrays are analogous to Python dictionaries. Two varieties of syntax are currently available to foreach: the first extracts the value of each item, while the second extracts both the key and the value:

    $traversable = [
        'A' => 1,
        'B' => 2
    ];

    foreach($traversable as $value) { /* ... */ }

    foreach($traversable as $key => $value) { /* ... */ }

The purpose of Bafford's proposal is to provide an efficient way for the foreach statement to extract only the keys while ignoring the values; he decided on using the void keyword to indicate that the value portion should be discarded:

    foreach($traversable as $key => void) { /* ... */ }

It's not the first time this idea has been suggested; Chris London had a similar proposal back in 2013. At the time, London's suggestion didn't gain much traction, and contributor Nikita Popov characterized the use case for the syntax as "not particularly common." Moreover, as Popov wrote, PHP already provides multiple different ways of addressing this need without adding syntax to the language. One solution is to provide a variable for the value in foreach statements and not use it when only the keys are needed:

    foreach($array as $key => $_) { /* ... */ }

Note that, in the above, $_ is just a variable to PHP without any special meaning; developers, by convention, sometimes use it to signify an "unused" value. Another alternative that was suggested by Popov is to use the array_keys() function to similar effect. Using this approach, a second, integer-indexed array is created from the original array that contains the keys to iterate over, eliminating the need for an unused variable:

    foreach(array_keys($array) as $key) { /* ... */ }

The arguments against the new syntax have not changed significantly from seven years ago; Popov effectively repeated them in response to Bafford's proposal. In his opinion, it added unnecessary complexity to the language, would make foreach "marginally slower," and there are multiple valid alternatives already available to address the problem the RFC looks to solve. Not everyone in the community felt that Popov's alternatives were ideal, however. Dik Takken noted that the first option creates an unused variable, adding that "code inspection currently complains about that, and for good reason, which is annoying." As for using array_keys(), Markus Fischer wrote that this solution isn't ideal, either; the array_keys() function needs to create a new array, which could be a performance issue.

Some felt that Bafford's choice to use void wasn't the best option. Olle Härstedt suggested that the underscore character might be a better alternative to void:

foreach($iterable as $key => _) { ... }

As justification, Härstedt noted that OCaml uses the underscore symbol when the value of an assignment can be discarded. Unfortunately, _() is also an alias to the gettext() function, making it a poor choice for this purpose. Several participants in the thread preferred the keyword null to void, although Bafford was opposed to that suggestion. He argued that, because null is a value in PHP whereas void is a type, void is the better choice. With the RFC still under discussion, what keyword might ultimately be used is undecided.

Disagreements on the specific keyword aside, Takken suggested that the scope of Bafford's proposal was too narrow, writing:

Perhaps it is a good idea to generalize the RFC to the general concept of "using void to intentionally ignore a variable". Maybe pick just one use case for actual implementation and extend later using followup RFCs.

There are at least two areas where this syntax would be beneficial to the language. The first is captured in Bafford's RFC, and the second is when assigning variables from an array as shown in the example below:

    [, , $a] = ['val1', 'val2', 'val3'];

To many programmers, the code above might look more like a syntax error than a valid expression. It is, however, valid PHP code, which assigns "val3" to $a; the seemingly out-of-place commas in the example above indicate that $a should be assigned the third value in the source. Härstedt noted that "anything would be better" than the current comma-only syntax; generalizing Bafford's proposal to include this aspect of PHP certainly clarifies what is happening in such an assignment operation:

    [void, void, $a] = ['val1', 'val2', 'val3'];

Takken's suggestion to generalize the syntax was positively received by Härstedt and others, including PHP 8.0 release manager Sara Golemon, who described both the proposed changes to foreach and the suggested improvements to array-value assignments "great, expressive syntaxes."

Bafford believes his proposal shouldn't hurt performance. In fact, while he was clear that "any performance benefits are secondary" to the syntactical benefits, he did make a case arguing that his proposal would benefit the run-time performance of foreach:

In theory, this should be a general performance win any time one needs to iterate over only the keys of an iterable, because it does not require the use of an O(n) iteration and building of the array that array_keys() would, plus it works on non-array types (such as generators or iterators). It also is more performant than foreach($iterable as $key => $_) {}, because it omits the opcode that instructs the engine to retrieve the value.

While Bafford may be correct that there is a theoretical performance gain, he offered no benchmarks to demonstrate that and it is unlikely to be of much practical value. Longtime project member Stanislav Malyshev explained what he felt was faulty in Bafford's analysis. In Malyshev's opinion, eliminating an opcode to retrieve the value wouldn't move the performance needle in a meaningful way:

My opinion has been and remains, absent new data, that if your code performance hinges on a couple of simple opcodes being there, maybe you'd better implement that part in C, but in most real-life applications it is not and any performance gain you might get from such syntax is microscopic.

As things stand now, Bafford's RFC needs to be updated to capture the substance of the thread and address any outstanding issues raised in it. One of the key issues is whether Bafford will broaden his RFC to a more generalized syntax, or whether he will keep it limited to his original scope. The wider scope appears to have fairly broad support in the community, so it seems likely the RFC will be updated to reflect that. In an email linked above, Bafford summed up where things stand; he also let the community know he would be taking a break from computers "for a few weeks." Since this is all planned for PHP 8.1, there isn't any rush; PHP 8.0 isn't scheduled to be released until November 26.

Comments (10 posted)

Page editor: Jonathan Corbet

Brief items

Security

BleedingTooth: critical kernel Bluetooth vulnerability

Several flaws in the BlueZ kernel Bluetooth stack prior to Linux 5.9 are being reported by Intel and by Google (GHSA-h637-c88j-47wq, GHSA-7mh3-gq28-gfrq, and GHSA-ccx2-w2r4-x649). They are collectively being called "BleedingTooth", and more information will be forthcoming, though there is already a YouTube video demonstrating remote code execution using BleedingTooth.

Comments (28 posted)

Security quotes of the week

The Cellmate chastity lock works by allowing a trusted partner to remotely lock and unlock the chamber over Bluetooth using a mobile app. That app communicates with the lock using an API. But that API was left open and without a password [...] it may require the intervention of a heavy-duty bolt cutter or an angle grinder to free the user.
Zack Whittaker at TechCrunch

We have knowingly and willingly built the architecture of a police state, just so companies can show us ads.
Bruce Schneier

Comments (9 posted)

Kernel development

Kernel release status

The 5.9 kernel was released on October 11; Linus said: "Ok, so I'll be honest - I had hoped for quite a bit fewer changes this last week, but at the same time there doesn't really seem to be anything particularly scary in here. It's just more commits and more lines changed than I would have wished for."

Some of the significant features in this release are: x86 FSGSBASE support, capacity awareness in the deadline scheduler, the close_range() system call, proactive compaction in the memory-management subsystem, the rationalization of kernel-thread priorities, and more. See the KernelNewbies 5.9 page for more details.

Stable updates: 5.8.15, 5.4.71, 4.19.151, 4.14.201, 4.9.239, and 4.4.239 were released on October 14.

Comments (none posted)

Wishing David Miller well

David Miller is the long-time maintainer of the kernel's networking subsystem. On October 10, he wrote this to his Twitter feed: "I had a stroke on Tuesday and have been recovering since please pray for me". We at LWN wish David a fast and complete recovery. (Thanks to Harald Welte for the heads-up).

Comments (8 posted)

Quote of the week

I understand that this situation could be quite frustrating, but we can only expect a memory model to model memory. Its job is to help us understand what can work and what will not work from a memory-ordering perspective, which at best will provide you with the options that you seem to be so dissatisfied with. The memory model is quite incapable of browbeating intransigent human beings into agreeing on which option should be used in a given situation. This last never was a requirement of the LKMM project. Please rest assured that it will remain a non-requirement.
Paul McKenney

Comments (3 posted)

Distributions

Distribution quotes of the week

That is getting to be a fairer comparison. But we still are not comparing only package manager differences. In fact, this comparison is heavily skewed towards how a distribution chooses to package the software. Pacman appears at a disadvantage, because Arch packages all files for the software in a single package, and does not split binaries, libraries, docs, include files, etc into separate packages. That is a distribution decision, and not a package manager decision – all package managers in the comparison list are capable of splitting packages into smaller units. So maybe not apples to oranges, but rather oranges to orange segments? I don’t think I am good at analogies!
Allan McRae

Firstly it’s for designers, so they no longer have to suffer through countless hours of trying to build software themselves, in order to test the latest development versions of some of our core modules (most notably GNOME Shell). Tightening that feedback loop is incredibly valuable for delivering a polished product. After that, it’s for the release team, so it can validate releases before slinging them out the door; for developers and translators, so they can have a complete system to test and debug their changes on; for our downstream distributors and OS vendors, so that they can have a known to be working baseline against which they can compare their own products. Last but not least, it’s for the machines and robots that keep an eye out for regressions.

Enjoy GNOME OS!

Jordan Petridis (Thanks to Paul Wise)

Comments (4 posted)

Development

An open letter to Apache OpenOffice

On the 20th anniversary of the open-sourcing of the OpenOffice.org suite, the LibreOffice project has sent an open letter to the Apache OpenOffice project suggesting that it is time for the latter to recognize that the game is over. "If Apache OpenOffice wants to still maintain its old 4.1 branch from 2014, sure, that’s important for legacy users. But the most responsible thing to do in 2020 is: help new users. Make them aware that there’s a much more modern, up-to-date, professionally supported suite, based on OpenOffice, with many extra features that people need."

Comments (63 posted)

Krita 4.4.0 released

Version 4.4.0 of the Krita painting application has been released. "With a whole slew of new fill layer types, including the really versatile SeExpr based scriptable fill layer type, exciting new options for Krita’s brushes like the gradient map mode for brushes, lightness and gradient modes for brush textures, support for dynamic use of colors in gradients, webm export for animations, new scripting features — and of course, hundreds of bug fixes that make this version of Krita better than ever." See the release notes for details.

Comments (none posted)

LLVM 11.0.0 released

Version 11.0.0 of the LLVM compiler suite is out. Significant change include the addition of a Fortran frontend and a lot more; see the collection of release-note sets in the announcement for details.

Comments (4 posted)

Plasma 5.20 released

Version 5.20 of the Plasma KDE desktop is out. "A massive release, containing improvements to dozens of components, widgets, and the desktop behavior in general. Everyday utilities and tools, such as the Panels, Task Manager, Notifications and System Settings, have all been overhauled to make them more usable, efficient, and friendlier." There are also significant improvements in Plasma's Wayland support.

Comments (3 posted)

Plausible relicenses to AGPL

Plausible, a web-analytics package that was reviewed here in June, has announced a move from the MIT license to the Affero GPL, version 3. "This change makes no difference to any of you who subscribe to Plausible Cloud or who self-host Plausible, but it may upset a few corporations who tried to use our software to directly compete with us without contributing back."

Comments (4 posted)

Development quotes of the week

I suspect the above example of focus/activation requests will ultimately be addressed by a token exchange via Wayland, and the notification spec way of doing things will be implemented alongside it as well, rather than picking one way of doing things. And perhaps that's fine.

But it's worth stopping for a moment and being conscious of what's going on. We would all benefit from some commonly agreed-upon guidelines on where the scopes of Wayland and D-Bus end in our application platform, and where they overlap. Where does the windowing system start and end? Where should new protocols go? We also want to be smart in spec'ing out how the two mediums relate to each other, and making translations from one of the other safe and robust.

Eike Hein

Technologists have failed to listen to non-technologists. In technological circles, there’s a quantitative fallacy that if you can’t do maths on it, you can just ignore it. And so you just incinerate the qualitative elements and do maths on the dubious quantitative residue that remains. This is how you get physicists designing models for reopening American schools – because they completely fail to take on board the possibility that students might engage in, say, drunken eyeball-licking parties, which completely trips up the models.
Cory Doctorow (Thanks to Paul Wise)

Comments (3 posted)

Miscellaneous

The Open Invention Network's expanded Linux System Definition

The Open Invention Network, which offers patent protection for a wide range of open-source software, has expanded its Linux System Definition — the set of software covered by the OIN patent non-aggression agreement. In particular, the new definition includes the exFAT filesystem (once the subject of a lot of patent worries), the KDE Frameworks, the Robot Operating System, and version 10 of the Android Open Source Project.

Full Story (comments: none)

Page editor: Jake Edge

Announcements

Newsletters

Distributions and system administration

Development

Meeting minutes

Calls for Presentations

Call For Presentations - SQLite & Tcl 2020 (Virtual Event)

This year the Tcl conference will be a virtual event called S&T 2020 (SQLite & TCL), to be held on November 10. "The exact timing is subject to change depending on the amount of people who sign up to present a WIP (work in progress) presentation." There is no deadline date given for the CfP.

Full Story (comments: none)

CFP Deadlines: October 15, 2020 to December 14, 2020

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

DeadlineEvent Dates EventLocation
October 25 November 5
November 7
Ohio LinuxFest Online
October 30 November 21
November 22
MiniDebConf - Gaming Edition Online
October 31 February 6
February 7
FOSDEM 2021 Online
November 1 November 14
November 15
Battlemesh v13 online
November 5 November 10 S&T 2020 (SQLite & TCL) Online
November 6 January 23
January 25
linux.conf.au 2021 Online
November 6 November 16
November 22
Guix Days Online
November 6 February 18
February 20
DevConf.CZ Online
November 10 December 3 Live Embedded Event Online
November 11 March 20
March 21
LibrePlanet 2021 Online

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

Upcoming Events

Events: October 15, 2020 to December 14, 2020

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

Date(s)EventLocation
October 13
October 15
Lustre Administrator and Developer Workshop 2020 Online
October 15
October 17
openSUSE LibreOffice Conference Online
October 19
October 20
[Virtual] All Things Open 2020 Virtual
October 19
October 23
EPICS collaboration meeting 2020 Virtual
October 19
October 23
Open Infrastructure Summit Virtual
October 20
October 23
[Canceled] PostgreSQL Conference Europe Berlin, Germany
October 24
October 25
[Cancelled] T-Dose 2020 Geldrop (Eindhoven), Netherlands
October 26
October 29
Open Source Summit Europe online
October 28
October 29
[Canceled] DevOpsDays Berlin 2020 Berlin, Germany
October 28
October 29
eBPF Summit online
October 28
October 30
[Virtual] KVM Forum Virtual
October 29
October 30
[Virtual] Linux Security Summit Europe Virtual
November 5
November 7
Ohio LinuxFest Online
November 7
November 8
OpenFest 2020 online
November 7
November 8
RustFest Global Online
November 10 S&T 2020 (SQLite & TCL) Online
November 12
November 14
Linux App Summit Online
November 14
November 15
Battlemesh v13 online
November 16
November 22
Guix Days Online
November 21
November 22
MiniDebConf - Gaming Edition Online
November 25
November 27
Linux Audio Conference Online
November 28
November 29
EmacsConf 2020 Online
November 28
November 29
MiniDebConf Online Brasil 2020 Online
December 1
December 3
Open Source Firmware Conference online
December 3 Live Embedded Event Online

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

Event Reports

Netdev 0x14: Videos posted

Videos from Netdev 0x14, which was held last August, are available on YouTube and through the schedule.

Full Story (comments: none)

Security updates

Alert summary October 8, 2020 to October 14, 2020

Dist. ID Release Package Date
Debian DLA-2400-1 LTS activemq 2020-10-08
Debian DLA-2404-1 LTS eclipse-wtp 2020-10-10
Debian DLA-2402-1 LTS golang-go.crypto 2020-10-08
Debian DLA-2405-1 LTS httpcomponents-client 2020-10-10
Debian DLA-2406-1 LTS jackson-databind 2020-10-14
Debian DLA-2399-1 LTS packagekit 2020-10-07
Debian DLA-2403-1 LTS rails 2020-10-09
Debian DSA-4771-1 stable spice 2020-10-11
Debian DLA-2401-1 LTS sympa 2020-10-07
Debian DLA-2407-1 LTS tomcat8 2020-10-14
Fedora FEDORA-2020-3a4b8fca5e F31 crun 2020-10-09
Fedora FEDORA-2020-d737c57172 F32 dovecot 2020-10-13
Fedora FEDORA-2020-d53469eceb F31 oniguruma 2020-10-09
Fedora FEDORA-2020-952c499e9d F32 oniguruma 2020-10-09
Fedora FEDORA-2020-94763cb98b F31 php 2020-10-07
Fedora FEDORA-2020-4fe6b116e5 F32 php 2020-10-07
Fedora FEDORA-2020-3a4b8fca5e F31 podman 2020-10-09
Fedora FEDORA-2020-d46fe34349 F31 xen 2020-10-07
Mageia MGASA-2020-0382 7 mariadb 2020-10-13
openSUSE openSUSE-SU-2020:1646-1 grafana 2020-10-10
openSUSE openSUSE-SU-2020:1647-1 kdeconnect-kde 2020-10-10
openSUSE openSUSE-SU-2020:1650-1 kdeconnect-kde 2020-10-10
openSUSE openSUSE-SU-2020:1655-1 15.1 kernel 2020-10-11
openSUSE openSUSE-SU-2020:1652-1 15.1 15.2 nextcloud 2020-10-11
openSUSE openSUSE-SU-2020:1652-1 15.1 15.2 nextcloud 2020-10-11
openSUSE openSUSE-SU-2020:1660-1 15.2 nodejs10 2020-10-12
openSUSE openSUSE-SU-2020:1644-1 15.1 nodejs8 2020-10-10
openSUSE openSUSE-SU-2020:1658-1 15.1 permissions 2020-10-11
openSUSE openSUSE-SU-2020:1664-1 15.2 qemu 2020-10-13
openSUSE openSUSE-SU-2020:1666-1 15.2 tigervnc 2020-10-13
Oracle ELSA-2020-4183 OL6 bind 2020-10-08
Oracle ELSA-2020-4080 OL7 firefox 2020-10-13
Oracle ELSA-2020-4080 OL7 firefox 2020-10-13
Oracle ELSA-2020-4182 OL6 kernel 2020-10-08
Oracle ELSA-2020-5879 OL6 kernel 2020-10-09
Oracle ELSA-2020-5879 OL7 kernel 2020-10-09
Oracle ELSA-2020-5884 OL7 kernel 2020-10-13
Oracle ELSA-2020-5885 OL7 kernel 2020-10-13
Oracle ELSA-2020-5885 OL7 kernel 2020-10-13
Oracle ELSA-2020-5884 OL8 kernel 2020-10-13
Oracle ELSA-2020-4072 OL7 libcroco 2020-10-09
Oracle ELSA-2020-4072 OL7 libcroco 2020-10-08
Oracle ELSA-2020-4076 OL7 nss and nspr 2020-10-09
Oracle ELSA-2020-4076 OL7 nss and nspr 2020-10-08
Oracle ELSA-2020-4079 OL7 qemu-kvm 2020-10-08
Oracle ELSA-2020-4187 OL7 spice and spice-gtk 2020-10-08
Oracle ELSA-2020-4187 OL7 spice and spice-gtk 2020-10-13
Oracle ELSA-2020-4082 OL7 squid 2020-10-09
Oracle ELSA-2020-4082 OL7 squid 2020-10-08
Oracle ELSA-2020-4163 OL7 thunderbird 2020-10-13
Oracle ELSA-2020-4163 OL7 thunderbird 2020-10-13
Red Hat RHSA-2020:4183-01 EL6 bind 2020-10-07
Red Hat RHSA-2020:4235-01 EL6 chromium-browser 2020-10-13
Red Hat RHSA-2020:4251-01 EL6 flash-plugin 2020-10-14
Red Hat RHSA-2020:4182-01 EL6 kernel 2020-10-07
Red Hat RHSA-2020:4236-01 EL7.7 kernel 2020-10-13
Red Hat RHSA-2020:4056-01 EL6 qemu-kvm 2020-10-07
SUSE SUSE-SU-2020:2911-1 OS7 ansible, crowbar-core, crowbar-openstack, grafana, grafana-natel-discrete-panel, openstack-aodh, openstack-barbican, openstack-cinder, openstack-gnocchi, openstack-heat, openstack-ironic, openstack-magnum, openstack-manila, openstack-monasca-agent, openstack-murano, openstack-neutron, openstack-neutron-vpnaas, openstack-nova, openstack-sahara, python-Pillow, rubygem-crowbar-client 2020-10-13
SUSE SUSE-SU-2020:2914-1 SLE15 bind 2020-10-13
SUSE SUSE-SU-2020:2913-1 SLE15 crmsh 2020-10-13
SUSE SUSE-SU-2020:2904-1 SLE12 kernel 2020-10-13
SUSE SUSE-SU-2020:2904-1 SLE12 kernel 2020-10-13
SUSE SUSE-SU-2020:2907-1 SLE12 kernel 2020-10-13
SUSE SUSE-SU-2020:2879-1 SLE15 kernel 2020-10-08
SUSE SUSE-SU-2020:2879-1 SLE15 kernel 2020-10-08
SUSE SUSE-SU-2020:2908-1 SLE15 kernel 2020-10-13
SUSE SUSE-SU-2020:2905-1 SLE15 kernel 2020-10-13
SUSE SUSE-SU-2020:2905-1 SLE15 kernel 2020-10-13
SUSE SUSE-SU-2020:2906-1 SLE15 kernel 2020-10-13
SUSE SUSE-SU-2020:2900-1 OS7 OS8 OS9 SLE12 SES5 libproxy 2020-10-13
SUSE SUSE-SU-2020:2901-1 SLE15 libproxy 2020-10-13
SUSE SUSE-SU-2020:2894-1 SLE12 php5 2020-10-12
SUSE SUSE-SU-2020:2896-1 SLE12 php74 2020-10-13
SUSE SUSE-SU-2020:2877-1 SLE15 qemu 2020-10-07
SUSE SUSE-SU-2020:2899-1 SLE15 rubygem-activesupport-5_1 2020-10-13
SUSE SUSE-SU-2020:2898-1 OS7 OS8 SLE12 SES5 tigervnc 2020-10-13
SUSE SUSE-SU-2020:2881-1 OS9 SLE12 tigervnc 2020-10-09
SUSE SUSE-SU-2020:2882-1 SLE15 tigervnc 2020-10-09
SUSE SUSE-SU-2020:2880-1 SLE15 tigervnc 2020-10-09
Ubuntu USN-4575-1 16.04 dom4j 2020-10-13
Ubuntu USN-4574-1 16.04 golang-github-seccomp-libseccomp-golang 2020-10-07
Ubuntu USN-4576-1 18.04 20.04 linux, linux-aws, linux-aws-5.4, linux-azure, linux-azure-5.4, linux-gcp, linux-gcp-5.4, linux-hwe-5.4, linux-kvm, linux-oracle, linux-oracle-5.4, linux-raspi, linux-raspi-5.4 2020-10-13
Ubuntu USN-4578-1 14.04 16.04 18.04 linux, linux-aws, linux-aws-hwe, linux-azure, linux-azure-4.15, linux-gcp, linux-gcp-4.15, linux-gke-4.15, linux-hwe, linux-kvm, linux-oem, linux-oracle, linux-raspi2, linux-snapdragon 2020-10-13
Ubuntu USN-4579-1 14.04 16.04 linux, linux-aws, linux-kvm, linux-lts-xenial, linux-raspi2, linux-snapdragon 2020-10-13
Ubuntu USN-4580-1 12.04 14.04 linux, linux-lts-trusty 2020-10-13
Ubuntu USN-4577-1 18.04 linux-hwe, linux-gke-5.0, linux-gke-5.3, linux-oem-osp1, linux-raspi2-5.3 2020-10-13
Ubuntu USN-4572-2 14.04 spice 2020-10-07
Full Story (comments: none)

Kernel patches of interest

Kernel releases

Linus Torvalds Linux 5.9 Oct 11
Alexandre Oliva GNU Linux-libre 5.9-gnu Oct 12
Sebastian Andrzej Siewior v5.9-rc8-rt14 Oct 10
Sebastian Andrzej Siewior v5.9-rc8-rt13 Oct 09
Greg Kroah-Hartman Linux 5.8.15 Oct 14
Greg Kroah-Hartman Linux 5.4.71 Oct 14
Steven Rostedt 5.4.70-rt40 Oct 13
Greg Kroah-Hartman Linux 4.19.151 Oct 14
Greg Kroah-Hartman Linux 4.14.201 Oct 14
Greg Kroah-Hartman Linux 4.9.239 Oct 14
Greg Kroah-Hartman Linux 4.4.239 Oct 14
Daniel Wagner 4.4.238-rt208 Oct 12

Architecture-specific

Linus Walleij KASan for Arm Oct 12
Ben Gardon Introduce the TDP MMU Oct 14

Build system

Sami Tolvanen Add support for Clang LTO Oct 09

Core kernel

Development tools

Device drivers

kholk11@gmail.com Add Novatek NT36xxx touchscreen driver Oct 08
Anitha Chrisanthus Add support for KeemBay DRM driver Oct 08
Nicolas Saenz Julienne Raspberry Pi 4 PoE HAT fan support Oct 09
Clément Péron Add Allwinner H3/H5/H6/A64 HDMI audio Oct 11
Loic Poulain net: Add mhi-net driver Oct 09
Viorel Suman (OSS) DAI driver for new XCVR IP Oct 13
sundeep.lkml@gmail.com Support for OcteonTx2 98xx silcion Oct 13

Device-driver infrastructure

Uwe Kleine-König leds: trigger: implement a tty trigger Oct 12
Cristian Marussi SCMI vendor protocols and modularization Oct 14
Douglas Gilbert scatterlist: add new capabilities Oct 16

Documentation

Filesystems and block layer

Memory management

Networking

Security-related

Virtualization and containers

Peter Xu KVM: Dirty ring interface Oct 07
David Hildenbrand virtio-mem: Big Block Mode (BBM) Oct 12
Chenyi Qiang KVM: PKS Virtualization support Oct 14

Page editor: Rebecca Sobol


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