|
|
Log in / Subscribe / Register

LWN.net Weekly Edition for July 3, 2014

Community support for free hardware

By Jonathan Corbet
July 2, 2014
The developers behind the "Vivaldi" tablet and the "Improv" development board have confirmed what observers have suspected for a while: these projects are dead and the devices will never be built. This failure has been cast as a failure for open hardware in general, which it might be. But open hardware does not appear to be an entirely lost cause, even if it is harder to bring into existence than open software.

The "Spark" tablet (later renamed "Vivaldi") was first announced at the beginning of 2012; it was meant to be a fully open device that would be "designed by and usable by us on our terms". By 2014 standards the specifications and price (€200) look a bit dated, but they were not totally out of line at the time. The software stack was to be based on the Mer distribution and the Plasma Active interface. Behind it all would be an application distribution environment that would encourage free software while allowing developers to monetize their work. By all appearances, it was set to be an interesting device.

Improv followed toward the end of 2013. It was a reasonably well-equipped development board that, once again, would run Mer. The schematics were licensed under the GPL, and the anticipated profits were destined to support community resources like the Mer open build service. Interested people were encouraged to order without delay, because "we expect the first lot to sell out quickly".

Your editor, who duly put in an order for an Improv board, recently received an email saying that this board would never arrive. Instead, the developers would be making a partial refund of the cost of the board ($52 of the $75 original cost, as it turns out). In the end, there were not enough orders to cover the cost of making that first lot of boards, so the whole project has been canceled. The message also relayed the unsurprising news that the Vivaldi project, which had long been stalled and silent, would also be wound down. The project appears to have failed completely, at considerable cost to its backers.

Why might this be? According to the above-mentioned email:

The Free software community does not seem ready at this point to make a concerted stand on the pressing issue of hardware freedom [...] In addition, we did not do a good enough job of communicating. We continue to believe that free and open hardware is one of the critical issues of today.

Free and open hardware is indeed important, but it is worthwhile to consider "free" and "open" independently. Open hardware is fully documented and unlocked; users have the ability to put their own software onto it if they so desire. Free hardware has all of that; in addition, the designs (including, preferably, the files used as input to the manufacturing process) are made available under a free license, allowing others to modify or extend the design.

There can be little doubt of the value of open hardware. The ability to understand what the hardware does and to change how it is used (by changing its operating software) brings a great deal of freedom to users. It allows that hardware to be used in settings and for purposes that its designers could never have envisioned. One might argue that open hardware will not exist if users are unwilling to put their money where their interests are and buy that hardware. It is also worth noting that much hardware that was not intended to open tends to be forced open by determined users. The apparent ease with which much closed hardware can be jailbroken might serve to reduce the demand for truly open hardware somewhat.

That said, there are, in fact, some signs that this demand does indeed exist. The success of Arduino, or of other development boards similar to Improv, is one case in point. Google's "Nexus" program offers hardware that, while not being quite as open as we might like, is far better than what many of us would have expected just a few years ago; customers are willing to pay the substantial cost premium to buy Nexus devices rather than use the "$0" devices from carriers. The Open Compute Project has drawn substantial industry support and has published a number of open hardware designs. So the interest is certainly there.

There is, perhaps, less interest in free hardware — hardware with designs published under a free license. Free hardware might be just as important as free software, but there is a crucial difference: almost anybody with basic skills can take advantage of the freedoms offered by free software. One might "fork" a free hardware design, but, for most of us, the ability to realize any changes to that design in real hardware is beyond reach. Perhaps, someday, it will be easy to render designs into working hardware in small quantities for a reasonable cost, but that day is not here yet. Until that day comes, it should not be surprising that the issue of hardware freedom tends to get an apathetic reaction. It just doesn't seem as relevant to many in our community as software freedom does.

Meanwhile, given that there does seem to be a market for open hardware, why is it that projects like Vivaldi and Improv struggle? It is probably a simple issue of money. Creating an interesting piece of hardware, getting it built, and selling it to users is a cash-intensive business. A handful of free software developers attempting such a project funded from their savings and using a personal weblog as the primary marketing channel will probably have a hard time. Serious funding does not guarantee success — well funded products from established manufacturers fail regularly — and a lack of that funding does not guarantee failure. But, while a new software project can be started with almost no budget at all, trying to create a new piece of hardware on a shoestring budget is sailing against the wind.

So the failure of Improv and Vivaldi is not necessarily a failure on the part of the community to support an important principle. It is probably better described as yet another startup company with some interesting ideas that never quite managed to take off. Eventually somebody will likely succeed with a fully free hardware project — as Arduino has done — and they may well benefit from some of the groundwork that was done by the developers behind Improv and Vivaldi. But they will have to succeed as a business, and not just as a piece of interesting hardware design.

Comments (15 posted)

The demise of Freecode

By Nathan Willis
July 2, 2014

Many long-time members of the free software community were surprised on June 18 to see the sudden announcement, seemingly without warning signs, that Freecode.com had discontinued operations. The site, which between 1997 and 2011 operated under the name Freshmeat.net, served as an index of free and open-source software projects and provided a steady news feed composed of the aggregated release announcements of thousands of indexed projects.

The shutdown notice makes it clear that the index will remain up and accessible for future reference, which has its benefits, but the news feed has been discontinued and no new updates will be made to existing entries:

The Freecode site has been moved to a static state effective June 18, 2014 due to low traffic levels and so that folks will focus on more useful endeavors than site upkeep.

The site contents have been retained in this static state as a continued path to access the linked software, much of which is on self-hosted servers and would be difficult to find otherwise.

It is perhaps easy to forget how different the FOSS landscape looked in 1997. Certainly it was smaller, and it was also less connected. RSS was not created until 1999, and, naturally, took some time to rise in popularity and become a common method to publish news of any sort, release announcements included. Consequently, Freshmeat's ability to stay on top of releases from a wide variety of FOSS projects filled an important niche—and was certainly more convenient than subscribing to dozens or hundreds of mailing lists.

So, too, did Freshmeat's core index, which provided a searchable, categorized database of open-source projects, including the canonical home page for each project, basic information (such as the languages used and the platforms the project was created to run on), and a history of its previous releases. If today it sounds hard to believe that Freshmeat predated the advent of RSS, it is arguably more difficult to grasp that Freshmeat predated, at least by a small margin, the rise of Google.

Google's novel approach to indexing web content eventually made it relatively reliable to find the real home page for a software project of interest, but prior to Google PageRank, the other major search engine companies still relied largely on human-moderated indexes. Thus, they served as gatekeepers, and new sites had a very different path to follow from obscurity to fame. For a niche like free software, a dedicated index was far more accurate than a general-purpose portal like Yahoo's.

But Google did come along, and with it the way that people searched for and kept track of free software projects changed. At the same time, how and where those projects maintained their presence on the web has changed many times over as well. Whereas in the 1990s, SourceForge.net was one of the only (if not the only) hosting sites dedicated to open source software projects, today there are many more options, including Google Code, GitHub, Gitorious, and a wide range of self-hosting packages for popular web frameworks—in addition, of course, to the umbrella projects like GNU that host a large portion of the community's free software still.

One might think that the dispersal of project hosting services would serve to make a dedicated index like Freshmeat more valuable, but there were other forces at work at the same time that had the opposite effect. Package management for Linux distributions changed with the creation of Apt, yum, and related tools; users could increasingly rely on their Linux distribution to not only provide installable packages of relative freshness, but for the distribution's package index to serve as its own, ad-hoc index of the available packages themselves. And there are clearly far more ways to get the word out about a new release than there were in the late 1990s, perhaps more effectively. It may even be faster to spread the news via social media than to push an announcement out to a mailing list's subscribers.

Regardless of how the technical playing field has changed, though (and as everyone knows, it continues to change, arguably faster than ever), Freshmeat also had to function as a profitable business in order keep operating. Perhaps no one will ever know whether business calculations played a significant part in the decision to stop updating the site, but Freshmeat did change hands several times over the course of its lifespan. Dice.com acquired the site (at that point, renamed to Freecode) in 2012, after a lengthy tenure at Geeknet, the company that was formerly the corporate parent of SourceForge, Slashdot, and quite a few other related FOSS properties.

It is certainly possible that Dice.com simply did not know what to do with the site, or that its staff found the arrangement unsatisfactory. In his personal retrospective after the shutdown, longtime co-maintainer Jeff Covey noted that founder Patrick Lenz had left a year ago, after having been moved over to SourceForge operations for the preceding 18 months. Covey himself had been laid off in 2010, he said, brought back as a contractor, then voluntarily quit for personal reasons about three weeks before the shutdown. One of the other two remaining maintainers also left at the same time.

Covey notes with some regret that the departures seem to have precipitated the shutdown, which came as a surprise to him:

I’m quite sorry about how abruptly things came to an end. At least one new staff member had trained to replace me and Ray and was awaiting his paperwork to join the company, and learned that he wouldn’t be getting it when the site locked him out and the “Closed” banner appeared across the top. I’ve seen several people lament that they’ve lost personal data like their list of favorite projects. I really regret this. It would have been handled so much more responsibly in Patrick’s day.

I especially regret that Patrick wasn’t included in the decision and that a more tasteful ending couldn’t have been arranged. The latest owners are just the custodians of a legacy built on years of work by a lot of good people. freshmeat has a hard-earned history we can all take pride in. It deserved a more dignified end than just flipping off the lights.

Certainly that series of events suggests that the decision for the shutdown had at least something to do with the interest level of its owners, rather than, say, friction with the maintainers. Nevertheless, people will inevitably speculate as to whether the root cause of the shutdown was a business issue or the many changes in the way that free software is deployed and discussed online over the past 17 years.

Has the FOSS community itself already moved on? That is difficult to assess quantitatively, at least from the outside. Certainly some people still feel that Freecode or a site like it is an important resource. On June 21, Eric S. Raymond posted a blog entry proposing a replacement site be created. He cites Freecode's independence from Linux distributions and project-hosting services, as well as its searchable index of project metadata, as vital features. Some of the same functionality is provided in other places, such as Ohloh, he notes, but none replicate the essential indexing and release-news features.

Time will tell if Raymond's proposal bears fruit; it certainly spawned a lengthy and detailed discussion among commenters. But even a full, functional replacement will only be a recreation of the now-gone original—and will, no doubt, have to cope with the same set of challenges as that original. Coping with them and delivering a valuable service for as long as Freshmeat/Freecode did would be a tall order to fill.

Comments (8 posted)

Where does the RHEL 7 source code live?

By Jake Edge
July 2, 2014

When the much-anticipated Red Hat Enterprise Linux (RHEL) 7 release was made on June 10, it started the process for various RHEL-rebuild distributions to get their new releases out. Previously, the starting point had been source RPM (SRPM) files that Red Hat used to release. Things have changed a bit this time, which caused some initial consternation among some rebuild developers, but it eventually turned out that it would not to be too difficult to get what is needed from the new Git-based repository.

The expected location for the SRPMS directory for RHEL 7 just has a README file that points to git.centos.org/project/rpms and the Red Hat Customer Portal as locations for the source code. The latter is, as its name would imply, only available to Red Hat customers. That means that all of the other rebuilds need to pick up the source code from a CentOS repository, which seems a little strange—at least at first.

One of the big changes between the release of RHEL 6 and that of RHEL 7 is that CentOS, arguably the leading RHEL-rebuild distribution, joined Red Hat. That would seem to put it in the pole position for creating a RHEL 7 rebuild, but CentOS won't have any real advantages over the others. It will be using exactly the same RHEL code as all of the other distributions. Beyond that, there is a firewall between RHEL and CentOS developers. In addition, CentOS is developing and building CentOS 7 fully in the open, so anyone interested can follow along in the mailing list and Git repositories.

The README led to queries on the centos-devel mailing list (from Morten Stevens and Connie Sieh) wondering about the change in format and location for the RHEL 7 source code. The biggest concern was how to get unmodified source code that corresponds to the RHEL 7 packages and how to verify that the code had not been modified along the way. Previously, the SRPMs that were signed with Red Hat's key would suffice, but those are only available to customers through the portal now—though they may eventually "leak" since most simply contain free software.

The terse message in the README file seemingly did not go far enough to alleviate concerns about exactly what source was stored in the Git repositories. In addition to the mailing list threads, a bug was filed over the lack of SRPMs, but it was quickly closed as NOTABUG. The comment on the closing did, however, seem to clear up any confusion about the origin of the code in the CentOS Git repository—Red Hat put the source code from RHEL 7 there as a starting point for CentOS and anyone else.

Getting Red-Hat-signed SRPMs is still possible for customers, but for non-customers looking for signed SRPMs, CentOS will be providing its SRPMs once it completes the CentOS 7 development process. Those will only minimally differ from RHEL 7, mostly just removing the Red Hat branding, so they make for a better starting point for a rebuild distribution. It is certainly different than what was available before, but not necessarily worse.

It is also possible to generate SRPMs that correspond to the original RHEL 7 code from the Git repository, though those SRPMs won't be signed. There are a number of scripts hosted in the centos-git-common repository that will help perform various tasks using the Git repositories. For example, pointing into_srpm.sh at a commit or branch of interest will use the .spec file found there to create an SRPM. One can also use show_possible_srpms.sh to list the SRPMs that can be built from a particular repository; the -r option will restrict the list to those that come from the Red Hat RHEL 7 commits. There is also information on the CentOS wiki on how to work with the myriad repositories at Git.CentOS.Org.

There are concerns expressed in the bug and mailing list threads about ensuring the authenticity of the code retrieved, but Git, coupled with SSL/TLS, should be enough to alleviate that concern. Using the tools to recreate the SRPMs from the Red Hat commits to the repository, all of which is done over HTTPS (i.e. SSL/TLS), should be safe. Rebuilding the SRPMs, rather than just downloading them, may make it a little more difficult, but it does not fundamentally change what the RHEL rebuilds can get. And having the code available in Git provides an API to do things that would not have been possible with the simple "directory full of SRPMs" approach used previously. As Chris St. Pierre put it: "You no longer have to diff the ftp 'ls' output -- there are actual machine-consumable feeds and APIs to use."

There is clearly some trepidation among the non-CentOS consumers of RHEL source code, as evidenced by the thread and bug comments. But the biggest issue, in the end, seems to be more confusion than anything else. While Red Hat did mention this change in a FAQ about the CentOS merger, it probably could have done a lot more to publicize—and explain—the change. In the final analysis, it may seem a little odd to get RHEL source code from a CentOS repository, but it shouldn't pose any real barrier to anyone getting their work done.

Comments (12 posted)

Page editor: Jonathan Corbet

Security

The WebCrypto API

By Nathan Willis
July 2, 2014

The World Wide Web Consortium (W3C) is developing a JavaScript API that encompasses a number of useful cryptographic operations for use in situations ranging from signature verification to end-to-end data encryption. Called the Web Cryptography API (or WebCrypto for short), the standard is currently at "Last Call" working draft status with the Web Cryptography Working Group. There are a few lingering issues that may still result in some changes before the API advances to the next stage in the W3C recommendation process, but WebCrypto also faces fundamental criticisms; for instance, that it does not specify those elements on which users actually need standardization—namely, algorithms. And there is always the concern that such an API is risky because the security functions it offers may be inherently untrustable in precisely those scenarios where they are most needed.

The most recent draft of WebCrypto is available in raw form from the W3C version control system. This version reflects some changes since the Last Call was was made on March 25. The Last Call resulted in a number of new issues being created; at this point the working group appears to be aiming at resolving all of those by the middle of July.

The WebCrypto draft begins by setting out its anticipated use cases, most of which are standard web application concerns: client-to-server authentication, sending and storing encrypted files (including those encrypted by the server and those encrypted on the client side), plus making and checking digital signatures. These standard operations are the type of functions that web applications already implement, but with each implementor reinventing the wheel in its own JavaScript code. If browsers offer key generation, signature checking, and data encryption, the thinking goes, there will less duplication of effort and (hopefully) higher-quality code.

Derived from its basic use cases, the draft defines four main APIs and an algorithm dictionary that, together, address the essential cryptographic primitives needed by those use cases. The APIs are RandomSource, which exposes a cryptographically strong pseudorandom number generator (PRNG); CryptoKey, which is an abstraction covering various types of cryptographic keys (including public, private, and shared secret keys, of a variety of algorithms); SubtleCrypto, which is the low-level API for accessing functionality like encryption, decryption, key generation, hash generation, and verification; and WorkerCrypto, which is the interface for Web Worker background scripts. A higher-level Crypto API is also defined, which wraps together SubtleCrypto and RandomSource. The Algorithm dictionary stores the list of supported algorithms available in the browser for various functions.

From an interface standpoint, tracking the keys on the system is a relatively straightforward affair. Each public/private key pair, for instance, is represented by a pair of CryptoKey objects and an entry in the CryptoKeyPair dictionary indicating that the two go together. The specification allows each key to be designated for certain operations (e.g., encryption, decryption, signatures, verification). There is also a boolean attribute, extractable, that allows the user agent to designate that the key's raw material may be exported (for example, to back up the key elsewhere, perhaps even offline).

In contrast, the SubtleCrypto interface occupies the larger portion of the specification, encompassing a dozen operations. But even these "low-level" cryptographic methods ultimately fall back on the underlying algorithms for meaning; after all, calling the digest() method to check the integrity of a block of data is risky if one specifies a broken hash function (like SHA-1) as a parameter. Therein lies the source of many of the complaints about WebCrypto: the working group is explicitly not setting out to recommend a set of safe, reliable algorithms to use. Rather, it is attempting to define an API for calling and working with those algorithms.

As a result, WebCrypto includes a sizable list of algorithm descriptions, but none of them are mandatory to implement. Worse yet, according to some critics, the specification does not provide implementors with guidelines as to what options and parameters are safe to use. There are, for instance, known practical attacks [PDF] against some older algorithms such as RSA PKCS#1 v1.5. WebCrypto includes RSA PKCS#1 v1.5 in its list of supported algorithms, even including a basic mapping of the algorithm onto WebCrypto's methods and attributes.

Several working group members also expressed dissatisfaction at the absence of some newer algorithms, such as Daniel J. Bernstein's Curve25519. But WebCrypto co-editor Ryan Sleevi argues that the specification's role should be limited to describing the functionality that is already available in web browsers, rather than blessing algorithms that, while mathematically desirable, have yet to be implemented.

Curve25519, he notes, is not something that a web application developer can count on being available:

All of the implementations have, at present, deferred crypto to the appropriate library.

As noted, the cryptographic libraries of two major implementors are presently tied to major OS releases. The two cryptographic libraries in use by the other implementors (NSS and OpenSSL) equally lack implementations of Curve25519.

There is no specification of Curve25519. The IETF has made talks of it, but has yet to actually make headway. It is simply "The code speaks for itself". While there are many implementations of Curve25519, for different platforms, they are all based on the same djb initial code and still re-use aspects of it.

Of course, deciding on a suite of recommended cryptographic algorithms would be a difficult task for any standards body, since it is difficult to agree on what constitutes "safe" algorithms and parameters. For instance, when the Edward Snowden leaks demonstrated that the Dual_EC_DRBG PRNG from the National Institute of Standards and Technology (NIST) had been compromised with an NSA backdoor, some felt that other NIST recommendations, such as its elliptic curves, were surely compromised as well. But that has yet to be proven.

At present, the working group seems ready to compromise on the Curve25519 issue by drafting a complementary specification that describes Curve25519 (as well as another option promoted by Microsoft, known as the "MSR" curves) that could later be merged into an update to WebCrypto. That approach would allow the current WebCrypto specification to continue its progress through the W3C recommendation process.

There are, however, also lingering criticisms of WebCrypto that take issue with a more fundamental facet of the specification: the fact that it describes cryptography that will ultimately be implemented in JavaScript. As Tony Arcieri put it in a blog post, "the convenience of the web stems from the fact it’s a frictionless application delivery platform. Unfortunately, it does not rely on a comprehensive cryptographically secure signature system to determine content is authentic, but instead just trusts whatever is sitting around on the server at the time you access it."

In other words, web-based cryptography should not be trusted to protect the user's interests. It may be useful for web application developers, but the browser is not a trustworthy execution environment for end-to-end encryption of users' secrets. While there are valid uses for WebCrypto, Arcieri says, he fears that it will also be used to implement applications that ostensibly protect the user's data. For instance, he notes the possibility of secure-storage services akin to MEGA, which advertise features like cryptographically secure cloud storage, but are in actuality susceptible to multiple attack vectors.

One might answer Arcieri's charge by pointing out that services like MEGA exist already, and that existing services simply implement their own encryption stack rather than relying on a standard, hopefully well-vetted API. But the underlying concern remains: application code that is delivered to the browser over the web should not be treated with the same level of trust as locally installed and verified packages. A web application that uses the WebCrypto APIs may indeed be free from man-in-the-middle attackers; the risk is simply that the user cannot know one way or other for certain. Regardless of the algorithms employed, that lack of verification places an upper bound on how much trust should be extended.

[Thanks to Paul Wise.]

Comments (none posted)

Brief items

Security quotes of the week

The backlash, in this case, seems tied directly to the sense that Facebook manipulated people—used them as guinea pigs—without their knowledge, and in a setting where that kind of manipulation feels intimate. There's also a contextual question. People may understand by now that their News Feed appears differently based on what they click—this is how targeted advertising works—but the idea that Facebook is altering what you see to find out if it can make you feel happy or sad seems in some ways cruel.
— Adrienne LaFrance on Facebook's "mood study"

I dumped my Facebook account years ago after barely using it, because I got tired of having to be vigilant about my privacy settings every time they tweaked the site (and they tweak the site a lot). When I teach a privacy course, Facebook is one of the obvious examples of an online world that makes privacy control extremely difficult. I tell my students and anyone else who will listen, if you’re going to use Facebook, set your privacy options to maximum and hope for the best.
— Sunita A Parikh

The Guardian has no form of appeal against parts of its journalism being made all but impossible for most of Europe's 368 million to find. The strange aspect of the ruling is all the content is still there: if you click the links in this article, you can read all the "disappeared" stories on this site. No one has suggested the stories weren't true, fair or accurate. But still they are made hard for anyone to find.
— James Ball complains about the effect of the EU's "right to be forgotten"

Comments (5 posted)

Decades-Old Vulnerability Threatens 'Internet Of Things' (Dark Reading)

Dark Reading writes about a newly-discovered bug that has existed for 20 years in multiple LZO compression implementations. "Patches for the integer overflow bug, which allows an attacker to cripple systems running the so-called Lempel-Ziv-Oberhumer (LZO) code with denial-of-service type attacks as well as remote code execution, were issued the past few days for the Linux kernel, as well as for various open-source media libraries. LZO handles high-speed compression and decompression of IP network traffic and files, typically images, in embedded systems. 'The most popular use is in image data, decompressing photos taken, raw images taken from a camera or video stream,' says Don Bailey, mobile and embedded systems security expert with Lab Mouse Security, who discovered the vulnerability while manually auditing the code."

Comments (17 posted)

New vulnerabilities

asterisk: multiple vulnerabilities

Package(s):asterisk CVE #(s):CVE-2014-4046 CVE-2014-4047
Created:June 27, 2014 Updated:September 19, 2014
Description:

From the CVE entries:

Asterisk Open Source 11.x before 11.10.1 and 12.x before 12.3.1 and Certified Asterisk 11.6 before 11.6-cert3 allows remote authenticated Manager users to execute arbitrary shell commands via a MixMonitor action. (CVE-2014-4046)

Asterisk Open Source 1.8.x before 1.8.28.1, 11.x before 11.10.1, and 12.x before 12.3.1 and Certified Asterisk 1.8.15 before 1.8.15-cert6 and 11.6 before 11.6-cert3 allows remote attackers to cause a denial of service (connection consumption) via a large number of (1) inactive or (2) incomplete HTTP connections. (CVE-2014-4047)

Alerts:
Debian-LTS DLA-455-1 asterisk 2016-05-03
Fedora FEDORA-2014-7570 asterisk 2014-09-19
Fedora FEDORA-2014-7551 asterisk 2014-09-19
Mageia MGASA-2014-0300 asterisk 2014-07-26
Mandriva MDVSA-2014:138 asterisk 2014-07-11
Gentoo 201406-25 asterisk 2014-06-25

Comments (none posted)

freerdp: two vulnerabilities

Package(s):freerdp CVE #(s):CVE-2014-0250 CVE-2014-0791
Created:July 1, 2014 Updated:September 28, 2016
Description: From the CVE entry:

Integer overflow in the license_read_scope_list function in libfreerdp/core/license.c in FreeRDP through 1.0.2 allows remote RDP servers to cause a denial of service (application crash) or possibly have unspecified other impact via a large ScopeCount value in a Scope List in a Server License Request packet. (CVE-2014-0791)

From the openSUSE advisory:

Integer overflows in memory allocations in client/X11/xf_graphics.c (CVE-2014-0250)

Alerts:
openSUSE openSUSE-SU-2016:2400-1 freerdp 2016-09-27
openSUSE openSUSE-SU-2016:2402-1 freerdp 2016-09-27
Mandriva MDVSA-2015:171 freerdp 2015-03-30
Gentoo 201412-18 freerdp 2014-12-13
Mageia MGASA-2014-0287 freerdp 2014-07-09
openSUSE openSUSE-SU-2014:0862-1 freerdp 2014-07-01

Comments (none posted)

kdelibs: information disclosure

Package(s):kdelibs CVE #(s):CVE-2014-3494
Created:July 1, 2014 Updated:July 7, 2014
Description: From the KDE advisory:

The POP3 kioslave used by kmail will accept invalid certificates without presenting a dialog to the user due a bug that leads to an inability to display the dialog combined with an error in the way the result is checked.

This flaw allows an active attacker to perform MITM attacks against the ioslave which could result in the leakage of sensitive data such as the authentication details and the contents of emails.

Alerts:
openSUSE openSUSE-SU-2015:0573-1 kdebase4-runtime, 2015-03-23
Mageia MGASA-2014-0432 kde4 2014-10-29
Fedora FEDORA-2014-7572 kdelibs 2014-07-06
Fedora FEDORA-2014-7579 kdelibs 2014-07-01

Comments (none posted)

kernel: multiple vulnerabilities

Package(s):kernel CVE #(s):CVE-2014-4508 CVE-2014-4667 CVE-2014-4608 CVE-2014-4611
Created:June 30, 2014 Updated:August 12, 2014
Description: From the Red Hat bugzilla:

[CVE-2014-4508]: Linux kernel built with the system-call auditing support(CONFIG_AUDITSYSCALL) for 32-bit platforms is vulnerable to a crash caused by erroneous handling of bad system call numerals. It occurs during syscall(2) calls, if system-call auditing is enabled on the system.

An unprivileged user/process could use this flaw to crash the system kernel resulting in DoS.

[CVE-2014-4667]: For a TCP-style socket, while processing the COOKIE_ECHO chunk in sctp_sf_do_5_1D_ce(), after it has passed a series of sanity check, a new association would be created in sctp_unpack_cookie(), but afterwards, some processing maybe failed, and sctp_association_free() will be called to free the previously allocated association, in sctp_association_free(), sk_ack_backlog value is decremented for this socket, since the initial value for sk_ack_backlog is 0, after the decrement, it will be 65535, a wrap-around problem happens, and if we want to establish new associations afterward in the same socket, ABORT would be triggered since sctp deem the accept queue as full.

A remote attacker can block further connection to the particular sctp server socket by sending a specially crafted sctp packet.

[CVE-2014-4608]: An integer overflow can occur when processing any variant of a "literal run" in the lzo1x_decompress_safe function. Each of these three locations is subject to an integer overflow when processing zero bytes.

This exposes the code that copies literals to memory corruption. An interesting side effect of the vulnerable code is that the value of 'op' can point to a region of memory just before the start of 'out'.

It should be noted that on 64bit architectures, the overflow is still possible, but impractical. An overflow would require so much input data that an attack would obviously be infeasible even on modern computers.

[CVE-2014-4611]: Don A. Bailey of Lab Mouse Security reported an integer overflow issue in various implementations of LZO (Lempel–Ziv–Oberhumer) and LZ4 compression algorithms. The issue is in the handling of "literal runs" during decompression, and can lead to application crash and, possibly, code execution.

This bug is for LZ4 and LZ4 copy embedded in the Linux kernel (as of version 3.11).

This issue can not be triggered on 64bit systems today, as it would require input of the size that is beyond capabilities of modern computers. On 32bit systems, this can only affect applications using sufficiently large decompression blocks (16mb+).

Alerts:
SUSE SUSE-SU-2015:0812-1 kernel 2015-04-30
SUSE SUSE-SU-2015:0736-1 Real Time Linux Kernel 2015-04-20
SUSE SUSE-SU-2015:0581-1 kernel 2015-03-24
openSUSE openSUSE-SU-2015:0566-1 kernel 2015-03-21
SUSE SUSE-SU-2015:0481-1 kernel 2015-03-11
Mageia MGASA-2015-0077 kernel-rt 2015-02-19
Oracle ELSA-2015-0290 kernel 2015-03-12
Red Hat RHSA-2015:0062-01 kernel 2015-01-21
SUSE SUSE-SU-2014:1695-2 Linux kernel 2015-01-14
SUSE SUSE-SU-2014:1695-1 kernel 2014-12-23
SUSE SUSE-SU-2014:1693-1 kernel 2014-12-23
SUSE SUSE-SU-2014:1693-2 kernel 2014-12-24
openSUSE openSUSE-SU-2014:1669-1 kernel 2014-12-19
openSUSE openSUSE-SU-2014:1677-1 kernel 2014-12-21
Ubuntu USN-2418-1 linux-ti-omap4 2014-11-24
Ubuntu USN-2419-1 linux-lts-trusty 2014-11-24
Ubuntu USN-2421-1 kernel 2014-11-24
Ubuntu USN-2420-1 kernel 2014-11-24
Ubuntu USN-2417-1 kernel 2014-11-24
Ubuntu USN-2416-1 EC2 kernel 2014-11-24
Scientific Linux SLSA-2014:1392-1 kernel 2014-11-03
SUSE SUSE-SU-2014:1316-1 Linux kernel 2014-10-22
SUSE SUSE-SU-2014:1319-1 Linux kernel 2014-10-23
CentOS 2014:X011 kernel 2014-10-01
openSUSE openSUSE-SU-2014:1246-1 kernel 2014-09-28
SUSE SUSE-SU-2014:1138-1 kernel 2014-09-16
Scientific Linux SLSA-2014:1167-1 kernel 2014-09-09
Oracle ELSA-2014-1167 kernel 2014-09-09
CentOS CESA-2014:1167 kernel 2014-09-09
Red Hat RHSA-2014:1167-01 kernel 2014-09-09
Ubuntu USN-2335-1 linux-ti-omap4 2014-09-02
Ubuntu USN-2336-1 linux-lts-trusty 2014-09-02
Ubuntu USN-2332-1 kernel 2014-09-02
Ubuntu USN-2334-1 kernel 2014-09-02
Ubuntu USN-2337-1 kernel 2014-09-02
Ubuntu USN-2333-1 EC2 kernel 2014-09-02
Oracle ELSA-2014-1392 kernel 2014-10-21
Mageia MGASA-2014-0332 kernel-vserver 2014-08-18
Mageia MGASA-2014-0337 kernel-tmb 2014-08-18
Mageia MGASA-2014-0331 kernel-tmb 2014-08-18
Mageia MGASA-2014-0336 kernel-linus 2014-08-18
Mageia MGASA-2014-0330 kernel-linus 2014-08-18
Oracle ELSA-2014-3067 kernel 2014-08-11
Oracle ELSA-2014-3067 kernel 2014-08-11
Oracle ELSA-2014-3068 kernel 2014-08-11
Oracle ELSA-2014-3068 kernel 2014-08-11
Oracle ELSA-2014-3069 kernel 2014-08-11
Oracle ELSA-2014-3069 kernel 2014-08-11
openSUSE openSUSE-SU-2014:0985-1 kernel 2014-08-11
Mageia MGASA-2014-0318 kernel 2014-08-05
Mageia MGASA-2014-0321 eet 2014-08-06
openSUSE openSUSE-SU-2014:0957-1 kernel 2014-08-01
Oracle ELSA-2014-1023 kernel 2014-08-06
Mandriva MDVSA-2014:155 kernel 2014-08-07
CentOS CESA-2014:1023 kernel 2014-08-06
Red Hat RHSA-2014:1023-01 kernel 2014-08-06
Mageia MGASA-2014-0316 kernel 2014-08-05
Red Hat RHSA-2014:1392-01 kernel 2014-10-14
Debian DSA-2992-1 kernel 2014-07-29
Fedora FEDORA-2014-8487 kernel 2014-07-25
Red Hat RHSA-2014:0913-01 kernel-rt 2014-07-22
openSUSE openSUSE-SU-2014:0924-1 eet 2014-07-21
Ubuntu USN-2284-1 linux-ti-omap4 2014-07-16
Ubuntu USN-2288-1 linux-lts-trusty 2014-07-16
Ubuntu USN-2287-1 linux-lts-saucy 2014-07-16
Ubuntu USN-2286-1 linux-lts-raring 2014-07-16
Ubuntu USN-2285-1 linux-lts-quantal 2014-07-16
Ubuntu USN-2282-1 kernel 2014-07-16
Ubuntu USN-2283-1 kernel 2014-07-16
Ubuntu USN-2289-1 kernel 2014-07-16
Ubuntu USN-2290-1 kernel 2014-07-16
Ubuntu USN-2281-1 EC2 kernel 2014-07-16
SUSE SUSE-SU-2014:0908-1 Linux kernel 2014-07-17
SUSE SUSE-SU-2014:0909-1 Linux kernel 2014-07-17
SUSE SUSE-SU-2014:0910-1 Linux kernel 2014-07-17
SUSE SUSE-SU-2014:0911-1 Linux kernel 2014-07-17
SUSE SUSE-SU-2014:0912-1 Linux kernel 2014-07-17
Fedora FEDORA-2014-7863 kernel 2014-06-30

Comments (none posted)

libemail-address-perl: denial of service

Package(s):libemail-address-perl CVE #(s):CVE-2014-0477
Created:June 30, 2014 Updated:October 28, 2014
Description: From the Debian advisory:

Bastian Blank reported a denial of service vulnerability in Email::Address, a Perl module for RFC 2822 address parsing and creation. Email::Address::parse used significant time on parsing empty quoted strings. A remote attacker able to supply specifically crafted input to an application using Email::Address for parsing, could use this flaw to mount a denial of service attack against the application.

Alerts:
openSUSE openSUSE-SU-2014:1328-1 perl-Email-Address 2014-10-28
Mandriva MDVSA-2014:192 perl-Email-Address 2014-10-01
Mageia MGASA-2014-0389 perl-Email-Address 2014-09-26
Fedora FEDORA-2014-7613 perl-Email-Address 2014-09-26
Fedora FEDORA-2014-7610 perl-Email-Address 2014-09-26
Debian DSA-2969-1 libemail-address-perl 2014-06-27

Comments (none posted)

novell-qtgui, novell-ui-base: privilege escalation

Package(s):novell-qtgui, novell-ui-base CVE #(s):CVE-2014-0595
Created:June 26, 2014 Updated:July 2, 2014
Description: From the Novell bugzilla entry:

/opt/novell/ncl/bin/nwrights in Novell Client for Linux in Novell Open Enterprise Server (OES) 11 Linux SP2 does not properly manage a certain array, which allows local users to obtain the S permission in opportunistic circumstances by leveraging the granting of the F permission by an administrator.

Alerts:
SUSE SUSE-SU-2014:0847-1 novell-qtgui, novell-ui-base 2014-06-26

Comments (none posted)

openfire: multiple vulnerabilities

Package(s):openfire CVE #(s):CVE-2009-1595 CVE-2009-1596 CVE-2014-2741
Created:July 1, 2014 Updated:July 2, 2014
Description: From the CVE entries:

The jabber:iq:auth implementation in IQAuthHandler.java in Ignite Realtime Openfire before 3.6.4 allows remote authenticated users to change the passwords of arbitrary accounts via a modified username element in a passwd_change action. (CVE-2009-1595)

Ignite Realtime Openfire before 3.6.5 does not properly implement the register.password (aka canChangePassword) console configuration setting, which allows remote authenticated users to bypass intended policy and change their own passwords via a passwd_change IQ packet. (CVE-2009-1596)

nio/XMLLightweightParser.java in Ignite Realtime Openfire before 3.9.2 does not properly restrict the processing of compressed XML elements, which allows remote attackers to cause a denial of service (resource consumption) via a crafted XMPP stream, aka an "xmppbomb" attack. (CVE-2014-2741)

Alerts:
Gentoo 201406-35 openfire 2014-06-30

Comments (none posted)

openstack-keystone: privilege escalation

Package(s):openstack-keystone CVE #(s):CVE-2014-3476
Created:June 26, 2014 Updated:July 31, 2014
Description: From the Novell bugzilla entry:

OpenStack Identity (Keystone) before 2013.2.4, 2014.1 before 2014.1.2, and Juno before Juno-2 does not properly handle chained delegation, which allows remote authenticated users to gain privileges by leveraging a (1) trust or (2) OAuth token with impersonation enabled to create a new token with additional roles.

Alerts:
Ubuntu USN-2324-1 keystone 2014-08-21
Red Hat RHSA-2014:0994-01 openstack-keystone 2014-07-31
SUSE SUSE-SU-2014:0848-1 openstack-keystone 2014-06-26

Comments (none posted)

openstack-neutron: denial of service

Package(s):openstack-neutron CVE #(s):CVE-2014-4167
Created:June 26, 2014 Updated:July 2, 2014
Description: From the Red Hat bugzilla entry:

Thiago Martins from Hewlett Packard reported a vulnerability in Neutron L3-agent. By creating an IPv6 private subnet attached to a L3 router, an authenticated user may break the L3-agent, preventing further floating IPv4 addresses from being attached for the entire cloud. Note: removal of the faulty network can not be done using the API and must be cleaned at the database level. Only Neutron setups using IPv6 and L3-agent are affected.

Alerts:
Red Hat RHSA-2014:0899-01 openstack-neutron 2014-07-17
Ubuntu USN-2255-1 neutron 2014-06-25
Fedora FEDORA-2014-7446 openstack-neutron 2014-06-26

Comments (none posted)

php: multiple vulnerabilities

Package(s):php CVE #(s):CVE-2014-3981 CVE-2014-0207 CVE-2014-3478 CVE-2014-3479 CVE-2014-3480 CVE-2014-3487 CVE-2014-3515
Created:June 30, 2014 Updated:September 11, 2014
Description: From the Fedora advisory:

Insecure temporary file use in the configure script. (CVE-2014-3981)

fileinfo: cdf_read_short_sector insufficient boundary check. (CVE-2014-0207)

fileinfo: mconvert incorrect handling of truncated pascal string size. (CVE-2014-3478)

fileinfo: cdf_check_stream_offset insufficient boundary check. (CVE-2014-3479)

fileinfo: cdf_count_chain insufficient boundary check. (CVE-2014-3480)

fileinfo: cdf_read_property_info insufficient boundary check. (CVE-2014-3487)

unserialize() SPL ArrayObject / SPLObjectStorage Type Confusion. (CVE-2014-3515)

Alerts:
SUSE SUSE-SU-2016:1638-1 php53 2016-06-21
Scientific Linux SLSA-2015:2155-7 file 2015-12-21
Oracle ELSA-2015-2155 file 2015-11-23
Red Hat RHSA-2015:2155-07 file 2015-11-19
Oracle ELSA-2015-1135 php 2015-06-23
Mandriva MDVSA-2015:080 php 2015-03-28
Debian-LTS DLA-145-1 php5 2015-01-31
Scientific Linux SLSA-2014:1606-2 file 2014-11-03
Red Hat RHSA-2014:1766-01 php55-php 2014-10-30
Red Hat RHSA-2014:1765-01 php54-php 2014-10-30
Oracle ELSA-2014-1327 php 2014-09-30
CentOS CESA-2014:1327 php 2014-09-30
Red Hat RHSA-2014:1327-01 php 2014-09-30
openSUSE openSUSE-SU-2014:1236-1 php5 2014-09-28
Red Hat RHSA-2014:1606-02 file 2014-10-14
Debian DSA-3021-2 file 2014-09-10
Debian DSA-3021-1 file 2014-09-09
Gentoo 201408-11 php 2014-08-29
Oracle ELSA-2014-1606 file 2014-10-16
Scientific Linux SLSA-2014:1012-1 php53 and php 2014-08-06
CentOS CESA-2014:1013 php 2014-08-06
CentOS CESA-2014:1012 php53 2014-08-06
Oracle ELSA-2014-1013 php 2014-08-06
Oracle ELSA-2014-1012 php53 2014-08-06
Oracle ELSA-2014-1012 php53 2014-08-06
CentOS CESA-2014:1012 php53 2014-08-06
Red Hat RHSA-2014:1012-01 php53 2014-08-06
openSUSE openSUSE-SU-2014:0925-1 php 2014-07-21
Ubuntu USN-2278-1 file 2014-07-15
Slackware SSA:2014-192-01 php 2014-07-11
Ubuntu USN-2276-1 php5 2014-07-09
Mandriva MDVSA-2014:130 php 2014-07-09
Mandriva MDVSA-2014:131 file 2014-07-09
Mageia MGASA-2014-0284 php 2014-07-09
Mageia MGASA-2014-0283 php 2014-07-09
Debian DSA-2974-1 php5 2014-07-08
Fedora FEDORA-2014-7782 php 2014-07-08
Mageia MGASA-2014-0282 file 2014-07-04
Fedora FEDORA-2014-7992 file 2014-07-05
Red Hat RHSA-2014:1013-01 php 2014-08-06
Fedora FEDORA-2014-7765 php 2014-06-30

Comments (none posted)

phpmyadmin: cross-site scripting

Package(s):phpmyadmin CVE #(s):CVE-2014-4349
Created:June 27, 2014 Updated:July 30, 2014
Description:

From the Mageia advisory:

In phpMyAdmin before 4.1.14, it is possible to trigger an XSS when hiding or unhiding a crafted table name in the navigation, due to unescaped HTML output in the navigation items hiding feature. Note that this vulnerability can only be triggered by someone who logged in to phpMyAdmin, as the usual token protection prevents non-logged-in users from accessing the required form.

Alerts:
openSUSE openSUSE-SU-2014:1069-1 phpMyAdmin 2014-08-28
Fedora FEDORA-2014-8577 phpMyAdmin 2014-07-30
Fedora FEDORA-2014-8581 phpMyAdmin 2014-07-30
Mandriva MDVSA-2014:126 phpmyadmin 2014-07-08
Mageia MGASA-2014-0275 phpmyadmin 2014-06-27

Comments (none posted)

python: information disclosure

Package(s):python CVE #(s):CVE-2014-4616
Created:June 30, 2014 Updated:July 24, 2014
Description: From the python bug report:

Python 2 and 3 are susceptible to arbitrary process memory reading by a user or adversary due to a bug in the _json module caused by insufficient bounds checking.

The sole prerequisites of this attack are that the attacker is able to control or influence the two parameters of the default scanstring function: the string to be decoded and the index.

Alerts:
Scientific Linux SLSA-2015:2101-1 python 2015-12-21
Oracle ELSA-2015-2101 python 2015-11-23
Red Hat RHSA-2015:2101-01 python 2015-11-19
Ubuntu USN-2653-1 python2.7, python3.2, python3.4 2015-06-25
Red Hat RHSA-2015:1064-01 python27 2015-06-04
Mandriva MDVSA-2015:076 python3 2015-03-27
Mandriva MDVSA-2015:075 python 2015-03-27
Gentoo 201503-10 python 2015-03-18
Fedora FEDORA-2014-14257 python3 2014-11-13
Fedora FEDORA-2014-14245 python3 2014-11-09
openSUSE openSUSE-SU-2014:1734-1 python 2014-12-31
Fedora FEDORA-2014-7716 python-simplejson 2014-07-23
Fedora FEDORA-2014-7715 python-simplejson 2014-06-27
Fedora FEDORA-2014-8035 python3 2014-07-17
Fedora FEDORA-2014-7772 python 2014-07-17
openSUSE openSUSE-SU-2014:0890-1 python 2014-07-12
Mandriva MDVSA-2014:135 python 2014-07-10
Mageia MGASA-2014-0286 python-simplejson 2014-07-09
Mageia MGASA-2014-0285 python 2014-07-09
Fedora FEDORA-2014-7800 python 2014-06-30

Comments (none posted)

python-simplejson: information disclosure

Package(s):python-simplejson CVE #(s):
Created:June 27, 2014 Updated:July 23, 2014
Description:

From the bug report:

Python 2 and 3 are susceptible to arbitrary process memory reading by a user or adversary due to a bug in the _json module caused by insufficient bounds checking.

The sole prerequisites of this attack are that the attacker is able to control or influence the two parameters of the default scanstring function: the string to be decoded and the index.

The bug is caused by allowing the user to supply a negative index value. The index value is then used directly as an index to an array in the C code; internally the address of the array and its index are added to each other in order to yield the address of the value that is desired. However, by supplying a negative index value and adding this to the address of the array, the processor's register value wraps around and the calculated value will point to a position in memory which isn't within the bounds of the supplied string, causing the function to access other parts of the process memory.

Alerts: (No alerts in the database for this vulnerability)

Comments (none posted)

sos: password disclosure

Package(s):sos CVE #(s):CVE-2014-0246
Created:June 27, 2014 Updated:July 2, 2014
Description:

From the Red Hat bug report:

When using a GRUB bootloader password, the md5 hash of said password was collected and stored in the resulting archive of debugging information when running sosreport. An attacker able to access the archive could use this flaw to obtain the GRUB bootloader password.

Alerts:
Fedora FEDORA-2014-7490 sos 2014-06-27
Fedora FEDORA-2014-7479 sos 2014-06-27

Comments (none posted)

swift: cross-site scripting

Package(s):swift CVE #(s):CVE-2014-3497
Created:June 26, 2014 Updated:July 25, 2014
Description: From the Ubuntu advisory:

John Dickinson discovered that Swift did not properly quote the WWW-Authenticate header value. If a user were tricked into navigating to a malicious Swift URL, an attacker could conduct cross-site scripting attacks. With cross-site scripting vulnerabilities, if a user were tricked into viewing server output during a crafted server request, a remote attacker could exploit this to modify the contents, or steal confidential data, within the same domain.

Alerts:
Red Hat RHSA-2014:0941-01 openstack-swift 2014-07-24
Ubuntu USN-2256-1 swift 2014-06-25

Comments (none posted)

wireshark: code execution

Package(s):wireshark CVE #(s):CVE-2014-4174
Created:June 30, 2014 Updated:July 2, 2014
Description: From the CVE entry:

wiretap/libpcap.c in the libpcap file parser in Wireshark 1.10.x before 1.10.4 allows remote attackers to execute arbitrary code or cause a denial of service (memory corruption and application crash) via a crafted packet-trace file that includes a large packet.

Alerts:
Gentoo 201406-33 wireshark 2014-06-29

Comments (none posted)

zabbix: local file inclusion

Package(s):zabbix CVE #(s):CVE-2014-3005
Created:June 30, 2014 Updated:October 29, 2014
Description: From the Zabbix bug report:

zabbix frontend support xml data import feature,and server-side use DOMDocument to parse xml.DOMDocument also parse the external dtd in default.So attacker can use a crafted xml to read arbitrary local files and send http request use zabbix server as a proxy.

Alerts:
Mageia MGASA-2014-0433 zabbix 2014-10-29
Fedora FEDORA-2014-7603 zabbix 2014-06-30
Fedora FEDORA-2014-7594 zabbix 2014-06-30

Comments (none posted)

Page editor: Jake Edge

Kernel development

Brief items

Kernel release status

The current development kernel is 3.16-rc3, released on June 29.

Stable updates: 3.15.2, 3.14.9, 3.10.45, and 3.4.95 were released on June 26, followed by 3.15.3, 3.14.10, 3.10.46, and 3.4.96 on June 30.

Comments (none posted)

Quote of the week

Yep, the world cup helps a lot with tedious debugging work.
— Borislav Petkov

Comments (none posted)

Kernel development news

Capsicum for Linux

By Jonathan Corbet
July 2, 2014
Capsicum is a process sandboxing framework that was originally developed for FreeBSD; it was covered here in early 2012. The beginnings of Capsicum support for Linux have now been posted by David Drysdale for review; that provides a good opportunity to look at how this mechanism might fit into the Linux kernel. This work might be a hard sell in the kernel community, but Capsicum might just provide a sufficiently useful set of features to make the trouble worthwhile.

Capsicum is built around a concept called "capabilities," which, naturally enough, is entirely different from Linux capabilities (and from POSIX capabilities as well). In the Capsicum world, capabilities are attached to file descriptors to regulate which operations can be performed on those descriptors. So, for example, a file descriptor can only be read if the CAP_READ capability is present. Access to lseek() is controlled by CAP_SEEK, memory mapping has a set of capabilities (CAP_MMAP_W to create a writable mapping, for example), truncation is controlled by CAP_FTRUNCATE, and so on. There are two special capabilities for ioctl() and fcntl() that restrict those calls to specific subcommands.

By default, open file descriptors are unrestricted. The normal mode of operation is that a process will apply restrictions to itself using the new cap_rights_limit() system call:

    int cap_rights_limit(unsigned int fd, struct cap_rights *new_rights,
    			 unsigned int new_fcntls, int nioctls, unsigned int *new_ioctls);

After this call, operations on fd will be limited to those listed in new_rights. If those rights include CAP_FCNTL, then new_fcntls limits the set of fcntl() commands available. Similarly, if the capabilities on the file descriptor include CAP_IOCTL, the new_ioctls array (of length nioctls) provides the set of allowed ioctl() commands. Multiple calls to cap_rights_limit() can be made for the same file descriptor, but those calls can only remove capabilities, never add them.

There is also a cap_rights_get() call to query the set of capabilities attached to a given file descriptor.

Needless to say, restrictions on file descriptors are of limited value if the constrained process can simply open new descriptors on the same objects. To prevent that from happening, Capsicum implements a "capability mode" entered via cap_enter(). Once that mode has been entered, access to most global namespaces is curtailed, preventing the opening of new files. A process can still open a file with openat() if it has a directory file descriptor (and, of course, the relevant capabilities are present). Such files are constrained to be underneath that directory, though — use of absolute pathnames or "../" is not allowed.

(As an aside, the "can only open files below this directory" functionality was deemed to be sufficiently useful that David pulled it out into a separate patch and made it available independently of Capsicum. This patch adds a new O_BENEATH_ONLY flag for calls like openat(). Once a directory has been opened with this option, the resulting file descriptor can only be used to open files that exist below that directory in the filesystem hierarchy.)

That said, the patch set as posted does not provide an implementation of cap_enter(). Also missing is the entire "process capabilities" mechanism, which represents specific processes as file descriptors so that the relevant system calls (wait(), kill(), etc.) can be controlled. The patch set is described as being "part 1," so, one assumes, the remaining pieces will come later.

Within the kernel, system call implementations typically start by converting passed-in file descriptors to struct file with calls to fdget(). This is the point where David decided to apply the capability checks. When file descriptors are restricted with Capsicum, the normal file structure is replaced by a wrapper structure containing the rights information. Every fdget() call in the kernel (there are about 100 of them) must be replaced with a call to:

    struct file *fdgetr(unsigned int fd, int caps ...);

Where caps is a variable-length list of capabilities that must be present for the operation to succeed. Callers must also be changed to deal with an "error pointer" return value; fdget() in current kernels can return NULL but not a specific error value. The result is that the patch set is somewhat invasive; that may be a cause of resistance should the patch set reach a point where it is being seriously proposed for inclusion.

The patch set currently works by creating a pair of new Linux security module (LSM) hooks to do the actual capability checks. David wonders, though, whether that is the right approach, since Capsicum is not a complete security module. If the kernel implemented stacked security modules, perhaps Capsicum could be run in this mode alongside another, more complete module. But stacking does not look like it will be supported in the kernel anytime soon. So Capsicum may well be better off implemented outside of the LSM framework.

There is another question that is worth considering here. The kernel's secure computing (seccomp) subsystem allows the loading of programs (written for the BPF virtual machine) that can, in theory, implement all of the restrictions found in Capsicum, especially if the recently proposed BPF changes are merged. It might not be easy, but it should be possible. Somebody is bound to ask whether the kernel needs another sandbox-creation mechanism with similar capabilities.

In general, the addition of new security-related subsystems can be a hard sell; many developers see little value for a lot of cost in these subsystems. But there is value in the ability to reduce the damage that can be done by a compromised process, and FreeBSD's use of Capsicum means that some applications have already had the necessary code added. Adding the same API to Linux would allow that work to be reused. So Capsicum seems worth considering, even if it will likely have some obstacles to overcome before merging is a possibility.

Comments (none posted)

Extending extended BPF

By Jonathan Corbet
July 2, 2014
The Berkeley Packet Filter, or BPF, is a special-purpose virtual machine that was originally developed to support applications that wanted to quickly filter packets out of a stream. Over the years, its use in Linux has grown; back in May, LWN characterized BPF as "the universal in-kernel virtual machine." Development on BPF continues; a new patch set adds some interesting capabilities and demonstrates some of what developer Alexei Starovoitov has in mind for this subsystem.

The first thing this patch series does is to move the BPF interpreter out of the networking subsystem. BPF can already be used with non-networking parts of the kernel, and the plans are for such uses to grow over time. So the BPF support code will move into a new subdirectory (kernel/bpf) and be maintained independently from the networking code.

Over the past few development cycles, Alexei has introduced a variant of BPF called "extended BPF" (eBPF) which adds a number of capabilities and performance improvements. Thus far, though, eBPF has only been used within the kernel itself; the existing BPF users load "classic" BPF programs into the kernel which are then translated to eBPF prior to execution. With this patch series, though, eBPF will be made available for direct use from user space. Among other things, that means that the eBPF instruction set will, once users pick it up, become difficult to change. There has been relatively little review of the instruction-set changes so far; anybody who has an interest in how this (significant) addition to the kernel's user-space ABI is defined might want to take a close look in the near future.

Loading programs

The patch series adds a new system call named, simply, bpf(); it is a multiplexor for a range of different operations. Alexei also supplies a wrapper library to present those operations as a set of independent functions. Multiplexed system calls have not always been popular with reviewers in the past; if that pattern holds, we may see the multiplexed interface taken out and the various functions implemented directly as separate system calls.

So, for example, user space can load an eBPF program into the kernel with a call to:

    int bpf(BPF_PROG_LOAD, int prog_id, enum bpf_prog_type type, struct nlattr *prog,
            int len);

Or, using the wrapper function:

    int bpf_prog_load(int prog_id, enum bpf_prog_type prog_type, 
                      struct sock_filter_int *insns, int prog_len, const char *license);

In either case, prog_id is a number used to identify the program; these numbers exist in a single, global namespace. There is currently only one possible value (BPF_PROT_TYPE_UNSPEC) possible for type. In the actual system call, the BPF program is found in prog; the networking roots of BPF show here, where a netlink attribute is used to hold the code. The length of the attribute array is passed in len. The wrapper, instead, hides the nlattr structure, but exposes a struct sock_filter_int structure (which will likely be renamed in the future) to hold the program. The license parameter will be discussed below.

Naturally, adding the ability to run programs within the kernel brings up a number of interesting security issues. So it not surprising that the biggest part of the patch set is a "verifier" that attempts to ensure that eBPF programs cannot harm the running system. The verifier simulates the execution of the program, looking for problematic behavior. Should something suspect turn up, the program will not be loaded.

The verifier looks for a number of things. It tracks the state of every eBPF register and will not allow their values to be read if they have not been set. To the extent possible, the type of the value stored in each register is also tracked. Load and store instructions can only operate with registers containing the right type of data (a "context" pointer, for example), and all operations are bounds-checked. The verifier also disallows any program containing loops, thus ensuring that all programs will terminate.

In this patch set, the CAP_SYS_ADMIN capability is required to use any of the bpf() system call functions. That restriction may limit interesting future uses of eBPF, but there are a number of potential issues (such as the single global ID namespace and resource use limits) that would have to be dealt with before that restriction could be lifted.

Licensing issues

The bpf_prog_load() wrapper also has a license parameter; the value passed there is stored in the nlattr array prior to the bpf() call. It is used to provide a string specifying the license that applies to the eBPF program to be loaded; if that license is not GPL-compatible, the kernel will refuse to load the program. This behavior already appears to be somewhat controversial; reviewers noted that full-blown kernel modules can be loaded (albeit with reduced access) without a GPL-compatible license declaration. It strikes some of them as strange to apply stricter rules to eBPF programs. In response, Alexei has said that future revisions might move to a module-like scheme where any program can be loaded but access to some functions might be restricted to GPL-compatible programs.

There could be some interesting implications from this type of restriction. BPF programs are often generated by other programs; the original BPF, after all, was meant to be emitted by the tcpdump tool. One might well wonder what the "source" of such a program actually is. If the Chromium browser generates an eBPF script to define a sandbox for a plugin module, which parts of Chromium, if any, are part of the source for that script? One can imagine that the discussion of this issue could go on for a long time indeed.

Maps

The other significant addition in this patch set is "maps." A map is a simple key/value data store that can be shared between user space and eBPF scripts and is persistent within the kernel. As an example of their use, consider this simple program included with the patch set. It creates a map with two entries, indexed by IP protocol type; an eBPF script then inspects passing packets and increments the appropriate entry for each. The program in user space can then query those entries to get a sense for what kind of traffic is passing through the system.

Maps can only be created or deleted from user space; eBPF programs do not have that capability. Maps are created and deleted with:

    int bpf_create_map(int map_id, int key_size, int value_size, int max_entries);
    int bpf_delete_map(int map_id);

As with program IDs, the namespace for the map_id is shared across the entire system; there is no mechanism to specify which maps a given eBPF (or user-space) program may access. To store values into and retrieve values from maps, user space can call:

    int bpf_update_elem(int map_id, void *key, void *value);
    int bpf_lookup_elem(int map_id, void *key, void *value);
    int bpf_delete_elem(int map_id, void *key);
    int bpf_get_next_key(int map_id, void *key, void *next_key);

Once again, these are the wrapper functions; the actual operations are done with the bpf() system call. On the eBPF side, access to maps is provided with a set of external functions. Interestingly, each place where use of eBPF programs is enabled (see below) must explicitly set up access to the map functions; this access is not provided to eBPF programs by default. Maps, in the end, function both as a persistent data store for eBPF programs and a means for communication with user space.

Running eBPF programs

There is one operation that is conspicuous by its absence in the discussion thus far: the ability to actually run an eBPF program. There is little point in running an eBPF program on demand from user space; there is not much that it could do that couldn't be more easily accomplished directly. Instead, eBPF programs are meant to respond to events within the kernel.

One common event, of course, is the receipt of a packet from the net. The patch set adds a new form of access to the socket filtering mechanism, allowing a program to directly attach an eBPF program to an open socket:

    setsockopt(sock, SOL_SOCKET, SO_ATTACH_FILTER_EBPF, &prog_id, sizeof(prog_id));

Here, prog_id must be the ID number of a program previously loaded into the kernel with the bpf() system call.

eBPF programs can also be attached to tracepoints; such a program will be run every time that the tracepoint fires. This attachment is done by writing the string "bpf_ID" to the appropriate filter file in the tracing debugfs filesystem; once again, ID is the ID number of a loaded eBPF program. Missing, thus far, is a way to use eBPF directly with the secure computing (seccomp) mechanism; one assumes that will follow at some point.

All told, this patch set represents a significant addition to the BPF virtual machine. It is also a large addition to the kernel's user-space ABI; that suggests that it needs a rather higher level of review than it has seen so far. Once that review happens, the shape of the patch set may well change from what has been described here. But there seems to be little disagreement that the kernel can benefit from a more capable virtual machine that can be used in a number of contexts. So, sooner or later, some version of these patches will probably go in.

Comments (6 posted)

Control groups, part 1: On the history of process grouping

July 1, 2014

This article was contributed by Neil Brown


Control groups

While it may not be the most controversial feature ever added to Linux, there is little difficulty in finding mailing lists or Internet forums containing heated arguments about the merits of control groups — or even downright denials that the feature has any merit at all. Being bereft of a personal agenda on the matter or any deep understanding of the issues, I find it very hard to choose a side in these debates, which seriously lessens the enjoyment I can receive from them. As synthesizing a deep understanding is, I find, much more noble than synthesizing a personal agenda, and as having a discerning audience is an excellent motivation for thorough research, these articles are intended to help me and, hopefully, other readers to develop the deep understanding necessary to truly enjoy an informed debate on Linux control groups, which are also known as "cgroups".

To gain this understanding we will need both a broad perspective and some detailed analysis. The first two articles in this series will try to provide some perspective by first exploring the history of Unix to see what questions it raises about process groups, and then looking at hierarchies, both within and without the Unix family, to give us some yardsticks to measure the hierarchical aspects of cgroups.

Subsequent articles will then delve into the nitty gritty details of cgroups and its various control subsystems and attempt to relate what we find to the questions and metrics the broader perspective gave us.

Sixth Edition Unix

Unix has some history with process groupings and, more significantly, some evolution. Observing this change can help us to see important details. While it would be nice to start at the very beginning, a more practical starting point is the Sixth Edition of Unix, known hereafter as "V6 Unix".

V6 Unix dates from the mid-1970s and was the first edition to get much exposure outside of Bell Labs. It supports two different groupings of processes, though to justify that we should first clarify what we mean by "a grouping of processes".

As in number theory, not every set is a group. The set of processes with a prime identifying number, for example, is certainly a set. However there is no mechanism in Unix (then or now) to distinguish these processes in any way from those with composite ID numbers. The remaining set of processes, with neither a prime nor a composite ID number, does have a distinctive behavior. As it contains only PID 1, though, it is hardly worth considering as a group.

A number-theoretic group includes an operation that operates on members of the group with particular rules for what an "operation" is. For process groups, we will accept a much more vague concept and a different role for an "operation", but still there must be some operation within Unix which can affect, or be affected by, a particular process group.

A less facetious set than the "prime PID" set would be the set of processes owned by a given user ID (or "UID"). We won't consider this to be a group in V6 Unix because while there are operations (e.g. kill) that will affect processes in one group differently from processes in another group, there is no way to interact with the group as a whole.

The first set that really forms a meaningful group is the set of children of some given process. The only operation in V6 Unix which recognizes this group is the wait() system call and it can only detect if the group is empty or not empty. If wait() returns with error ECHILD, then the group is empty. If it returns without an error, or doesn't return, then the set wasn't empty when the call was made (though it might be empty when the call completes).

The same operation could be interpreted as applying to the set of descendants of the given process — that is, the children and any children of those children, etc. ECHILD is returned if and only if this set is empty too. This group has a significantly different behavior, though. In the group of children, a process cannot escape the group except by exiting. In the group of descendants, a process can escape, if it is not an immediate child, when any ancestor of it exits.

Whether the ability to escape is a valuable property of groups or not depends, somewhat, on use-cases and expectations. In V6 Unix, the descendants of PID 1 (that set with a unity ID number) cannot escape but descendants of any other process can. This remained the case for variants of Unix and into Linux until Linux 3.4, when the PR_SET_CHILD_SUBREAPER option for prctl() was added. This allows a process to declare its group of descendant processes as closed so processes cannot escape. If any descendant dies, then all its children are inherited by the process which set this option.

The other, possibly more interesting, process grouping present in V6 Unix is determined by the p_ttyp field in the process structure (defined in proc.h), which is described as the "controlling tty". Whenever a process opens a "tty" device (see dhopen() in dh.c), which would be a serial data connection to a teletype or similar terminal, then if this field is not already set, it will be set to point to the newly opened device. The field is also inherited over a fork() or exec(), so once a process gained a controlling tty, that would continue to apply to the process and all of its future descendants.

One effect of p_ttyp is that any I/O to /dev/tty will go to the controlling tty, but this doesn't really qualify as a "group" operation, as it affects individual processes separately. The "group" operations for controlling ttys involve the delivery of signals (see signal() in sig.c). If a DEL or FS (control-\) character is typed on a tty, then the signal SIGINT or SIGQIT is sent to all processes in the group that have that tty as their controlling tty. Similarly if a disconnect event is detected (like a modem hanging up), a SIGHUP is sent to the same group of processes. Signals can also be sent with the kill() system call. An attempt to send a signal to PID 0 will send it to every process with the same controlling tty as the sending process.

It is quite reasonable to think of this grouping as a prototype of cgroups. It is clearly about the grouping of processes and clearly about controlling those processes — though only through sending a signal. These groups are created automatically, based on behavior, and are permanent — once in a group, the process cannot escape. It appears that they were not perfect, though. The next edition brought changes.

Seventh Edition Unix

While V6 Unix supported process groups, it did not use that terminology. V7 Unix did, and had a richer concept of group. The p_ttyp field still exists, though its role was restricted to managing /dev/tty access. It was renamed to u_ttyp and moved to struct user (user.h) — a structure that could be swapped out to disk with the rest of the process. struct proc (proc.h) instead had a new p_pgrp field to manage process groups. It was set on the first open() of a tty and used for delivering SIGINT, SIGQUIT (which has now gained a 'U'), and SIGHUP, and for delivering signals sent to PID 0. But V7 also brought more flexibility.

The key change was that process groups now had an independent identity and an independent name — independent of the tty, at least. When a process without a controlling tty first opened a tty, a new process group would be created with an ID number matching the process ID number of that process. Though the ID was copied, it really was a new ID for a new object. The group can continue to exist even if the original process exits. Any remaining children will keep the group active and prevent the ID number from being reused, either as a process-group ID or as a process ID.

One consequence of this is that if you log off a tty and log back on again, you get a new process group, and the t_pgrp field in the struct tty structure will be changed. Unlike the situation in V6 Unix, a signal sent to a process group will never go to a process from a previous login on the same tty.

Another consequence is that process groups could be used for more than just ttys. Seventh Edition Unix had a "multiplexor driver" (mpxchan in mx1.c and mx2.c) which, though short-lived, still leaves a legacy in the current stat() manual page:

3000   S_IFMPC         030000   multiplexed character special (V7)
[...]
7000   S_IFMPB         070000   multiplexed block special (V7)

The multiplexor worked a little bit like a socket interface and allowed different processes to connect to each other. An interface was available to form a separate process group for several interconnecting processes, so the master could send a signal to all other members of the group.

V7 Unix process groups were still closed, with processes generally unable to leave them. mpxchan does appear to allow a process to leave its original process group to join a group for a multiplexed channel, but it isn't clear that this was an intended consequence.

Fourth Berkeley Software Distribution

It is a bit of a large jump from V7 to 4BSD, having at least Unix 32v and 3BSD in the meantime. But this is, to some extent, a personal journey and 4.3BSD was the next release that I used.

In 4BSD, we find that a lot has happened with process groups. In 4.3BSD, the set of processes with the same UID has become a group, in that a signal can be sent to all processes in that set (see kill() in kern_sig.c). Sending a signal to a PID of -1 will deliver it to all processes with the same UID as the sending process (though, if sent from a privileged process, the signal will be sent to every process regardless of UID). More significant is that by 4.4BSD there was now a limited hierarchical structure to process groups.

One of the many innovations in the Berkeley versions of Unix was "job control". A "job" here refers to one or more processes working together on a particular task. Unix already had the ability to put some jobs in the "background", but it was implemented in a fairly ad hoc manner. Such processes would be told to ignore any signals from the user (SIGINT and SIGQUIT would both be set to SIG_IGN before starting the process) and the shell would simply not wait for those processes to finish. This mostly worked well, but once a job was in the background, it had to stay there. Also, if such a process wrote to the terminal, its output could get mingled with output from foreground processes, resulting in a mess.

With BSD "job control", each job is placed into its own process group and the shell can tell the terminal to change its idea of which is the current foreground job (and so would receive signals and input and could generate output), and which jobs are in the background so they should be isolated.

The pre-existing concept that process groups were essentially per-login was still important, if only to provide a degree of compatibility with "System V" Unix, a separate path of development from AT&T. In 4.4BSD, these per-login process groups were re-introduced as "sessions". Each process (proc.h) was (potentially) a member of a process group. Each process group was a member of a session. Each terminal (tty.h) had a foreground process group, t_pgrp, and a controlling session, t_session.

Sessions were, and are, much like the V7 Unix process groups, though there are differences. One is that it is not possible to send a signal to all processes in a given session: that functionality only works for process groups, which are now per-job. Another is that a process can leave its session and create a new one by simply calling the setsid() system call.

Either of these are sufficient to frustrate the task of killing all processes at logout — as local policy required in student labs a long time ago in a career far away. A frustration which was, at the time, unfixable due to a dependence on closed-source kernels.

On a modern, windowed desktop, these sessions and process groups are still present, but don't mean quite what they once meant. It is fairly easy to see how session IDs and process-group IDs are assigned by displaying the sess and pgrp fields with ps, as follows:

    ps -axgo comm,sess,pgrp

There is no longer a well defined process grouping for a login session. Instead, each terminal window gets its own session, as do various other applications if they were written to request one. Each job started from the shell prompt still gets its own process group, but there is much less need to start and stop these jobs — rather than suspending the currently running job in one terminal window, it is just as easy to pop up another window and run some new command there.

To properly represent the groupings of processes relevant for a modern desktop, we really need a deeper hierarchy. One level would represent the login sessions, one would represent the applications running in those sessions, and one could be used for jobs within an application. The sessions and process groups that Linux inherits from 4.4BSD can give us only two of those levels. Maybe we can look to cgroups for the third.

Issues

Reflecting on these changes and experiences with process groups, there are a number of issues that may be worth considering when trying to form an opinion on the more modern form of cgroups:

  • Names for groups: In V6 Unix the only name was that of the associated resource: a tty. This changed to be an ID number in the same namespace as process ID numbers. In retrospect this sharing of namespaces might seem a little clumsy, though it was clearly convenient. As the kernel was solely responsible for allocating names (another noteworthy feature), any clumsiness remained safely inside that kernel.

  • Overlapping uses. The same mechanism was originally used to guide both the delivery of signals and the processing of I/O to /dev/tty. These were quickly separated since they are clearly related, but are not identical.

  • Should a process be able to escape its containing group? We have seen a progression in the answer to this, from "no" to "yes". Having the flexibility can be useful in some cases, but having control can be useful in others. Being able to enter a different job under the same session is easy to defend. Being able to create a new session is not so obviously useful for an unprivileged process.

  • What role does a hierarchy play? Process groups have only gained even a limited hierarchy toward the end of their development. Is this important? How can it be used?

That last point, hierarchy, certainly is important. A lot of the recent changes in cgroups, and a significant part of the disagreements, relate to hierarchy. While the history of process groups has given us a glimpse of hierarchy it is not enough to develop any real understanding. For that we will need to look elsewhere. In the next installment we will examine a few different "elsewheres" to develop a perspective on hierarchy that we will then take to the inner details of cgroups to see if the former can help us to better understand the latter.

Comments (13 posted)

Patches and updates

Kernel trees

Linus Torvalds Linux 3.16-rc3 ?
Greg KH Linux 3.15.3 ?
Greg KH Linux 3.15.2 ?
Greg KH Linux 3.14.10 ?
Greg KH Linux 3.14.9 ?
Jiri Slaby Linux 3.12.23 ?
Luis Henriques Linux 3.11.10.12 ?
Greg KH Linux 3.10.46 ?
Greg KH Linux 3.10.45 ?
Kamal Mostafa Linux 3.8.13.26 ?
Kamal Mostafa Linux 3.8.13.25 ?
Greg KH Linux 3.4.96 ?
Greg KH Linux 3.4.95 ?

Architecture-specific

Core kernel code

Development tools

Device drivers

Device driver infrastructure

Filesystems and block I/O

Memory management

Networking

Security-related

Virtualization and containers

Daniel Kiper xen: Add EFI support ?

Miscellaneous

Page editor: Jonathan Corbet

Distributions

Fedora and DNF

July 2, 2014

This article was contributed by Adam Saunders

Fedora has relied on the Yum package manager since its inception, but that won't last much longer. Last month, the Fedora Engineering Steering Committee (FESCo) approved using the DNF package manager by default for Fedora 22. Since I am a Fedora user who mostly manages the installation, updating, and removal of software through Yum on the command line, this upcoming drastic change (albeit one coming nearly a year from now) piqued my interest. With the current version of DNF available in Fedora 20, I decided to investigate DNF to see how well it could replace Yum as default package manager, and how the recent 0.5.2 release and Core DNF Plugins stable release compared to the state of DNF when LWN last looked in on it this past January.

While it was originally released for testing purposes in January 2013 for Fedora 18, DNF development began in 2011. It started a couple of years after Red Hat employee Aleš Kozumplík's work on the Anaconda system installer led him to discover a number of technical quirks with the interaction between the installer and Yum. DNF, which famously doesn't stand for anything, offers a cleaner code base than Yum: in particular, it has an API in the process of stabilizing that will allow developers to write Python plugins to extend its functionality. DNF relies upon two libraries for dependency resolution: hawkey, which provides a Python and C API to libsolv, a library developed by openSUSE for use with its zypper package manager. Libsolv uses a Boolean satisfiability-solving algorithm to resolve dependencies.

When the issue of replacing Yum with DNF came up at the FESCo meeting on June 18, the committee members debated the merits of DNF. The IRC transcript reveals conflicting ideas about how to deal with naming issues; Fedora Project Leader Matthew Miller suggested DNF should be renamed as Yum for Fedora 22, while others debated the merits of users facing a "nag script" to stop using Yum, or automatically running the transaction through DNF when users try to run Yum transactions in Fedora 22. After about 40 minutes of lively discussion, FESCo voted unanimously in favor of using DNF as the default package manger for Fedora 22. However, deciding the details of its implementation, including naming issues, was put off for future meetings.

Controversy about DNF as default dates back to at least this past January, when Harald Reindl raised concerns about missing functionality and system-breaking behavior. Following FESCo's decision, Reindl again raised concerns that some transactions will offer to uninstall core parts of the operating system when certain dependencies are removed. This can include systemd, RPM itself, or the running kernel. That issue is being addressed: Kozumplík suggested the issue could be addressed through a plugin that checks for "protected" packages.

The newly stable Core Plugins package, which is an official project to provide a set of extended functionality to DNF that began in late 2013, offers welcome utility; this will likely go some way toward addressing past complaints of missing features. For example, dnf builddep foo will install needed dependencies based on descriptions in a .spec or .src.rpm file. Users will also welcome the copr plugin, which simplifies managing Copr repositories; Copr provides a system for building unofficial third-party packages for Fedora users, similar to Ubuntu's Personal Package Archive (PPA) feature. Another, non-interactive plugin, generate-completion-cache, speeds up performance by producing data to accelerate command-line completion.

Speed is definitely the most visible improvement for end users familiar with Yum. It was surprising to see how fast DNF resolved dependencies on Fedora 20. For example, DNF resolved dependencies for installing VirtualBox in about 0.5 seconds, while Yum took 2.9 seconds to do so. This speed is probably thanks to libsolv, which will also likely benefit from shared development between the Fedora and openSUSE communities. This speedup alone can be enough to convince one to dnf install foo rather than yum install foo going forward.

DNF's behavior does, of course, differ from Yum, in ways which may surprise veteran Fedora users. For example, DNF doesn't save aborted transactions, while Yum automatically generates a .yumtx file which can be run with yum load-transaction /tmp/filename.yumtx. One of the bigger surprises comes from dnf update, which has completely different output from yum update: it lacks dependency processing information. This is also not a bug, since printing those details would be quite lengthy, as it is with Yum.

The DNF documentation also criticizes the dependency output behavior in Yum for potentially bewildering users if an update turns out to be a sizable transaction. This is not a particularly convincing rationale to me; most users who would be confused by printed dependency resolution output are probably using a graphical front-end like GNOME Software for package management. For those interested in knowing which packages are tied to particular dependencies, the absence of this output may be frustrating, although one can include "-v" with one's transactions to see that output.

DNF and Yum also have different policies for when to schedule metadata updates. This has confused some users in the past. The DNF developers prefer longer periods between metadata updates, largely for resource efficiency; forcing DNF to run a metadata update for a particular transaction can be done by running dnf clean all to clean out the existing metadata before the transaction.

DNF is promising, which probably explains why FESCo approved the still-in-development project for future inclusion as default in Fedora. Its dependency resolution speed makes Yum seem sluggish. That alone may be enough for longtime Yum users to incorporate DNF as part of their package management rhythm. However, certain issues (particularly potential system-breaking through dnf remove foo) have also kept me using Yum, mostly for uninstallation transactions. While DNF does have a number of remaining problems to fix and bugs to squash, the development team does appear to be on top of those issues. I expect that DNF will be a positive (if not universally embraced) change to Fedora's package management system when Fedora 22 is released.

Comments (12 posted)

Brief items

Distribution quote of the week

The problems that distros were trying to solve a decade ago largely are seen as not only solved, but kind of boring.
-- Matthew Miller by way of Linux.com

Comments (none posted)

Distribution News

Red Hat Enterprise Linux

Red Hat Enterprise Linux 6.3 Extended Update Support Retirement Notice

Red Hat has retired Red Hat Enterprise Linux 6.3 Extended Update Support as of June 30.

Full Story (comments: none)

Ubuntu family

Ubuntu 14.10 (Utopic Unicorn) alpha-1 released

Some flavors of Ubuntu have released alpha builds of the 14.10 release. This alpha features images for Kubuntu, Lubuntu, Ubuntu GNOME, Ubuntu Kylin, and Ubuntu Cloud.

Full Story (comments: none)

Newsletters and articles of interest

Page editor: Rebecca Sobol

Development

Combating fragmentation in automotive Linux

By Nathan Willis
July 2, 2014

ALS 2014

Day one of the 2014 Automotive Linux Summit (ALS) in Tokyo concluded with a panel discussion that took aim squarely at one of the well-known but rarely discussed challenges of Linux adoption in the industry: preventing fragmentation. In particular, the automotive Linux marketplace has seen the formation of multiple industry consortia and alliances in recent years, and those groups seem to have overlapping—if not outright competing—goals. Representatives from two of the largest such groups, the GENIVI Alliance and Automotive Grade Linux, sat down for the panel session to discuss how they see their projects co-existing and to announce the beginning of some formal collaboration on software development projects.

The panel included Rudolf Streif from the Linux Foundation (which serves as host of the AGL project), Dan Cauchy from AGL, Dean Mars from GENIVI, and Hisao Munakata from AGL-and-GENIVI-member Renesas. The moderator was automotive industry analyst Roger Lanctot, who started off the session by commenting on how the various industry groups perceive their work in relation to Google's announcement the previous week that it was making a concerted push to enter the automotive software market.

[Roger Lanctot at ALS 2014]

Google is "an uninvited guest in our industry," Lanctot said, and one that has a very different idea of what collaboration means. The Google strategy is to offer its partners what it thinks is "an offer you can't refuse" in the style of The Godfather, he said: it has hundreds of millions of dollars of marketing opportunities to offer in exchange for full access to customers' data. And it also wants automakers to hand total control over the user interface and system-level components to Google, he added, who seems to be planning to deploy Android in car head units just as it has in handsets and tablets.

But the terms of that offer are not, Lanctot thinks, likely to gain much traction. Automakers have strict system-level requirements that they know Android cannot meet, he said—including fast boot time, low power consumption, privacy protection, and integration with unique data services (such as traffic information). He also commented that automakers have always sought to differentiate their products from each other's through customizing the user interface, which makes Google's "one UI fits all" approach a non-starter.

But the most fundamental problem, he said, is that Google seems to be saying that it can impose a single regime on the automotive software industry and, thus, prevent fragmentation. The industry itself prefers to avoid fragmentation by forming collaborative alliances—and the number of companies who participate in GENIVI and AGL dwarfs the number who have agreed to work with Google.

Of course, that still leaves open the fact that GENIVI and AGL have similar (though not identical) goals, which could lead to fragmentation on its own. Lanctot asked the panelists to explain how the two projects differ and are alike. His own assessment, he said, is that GENIVI wants to create a set of packages that carmakers can add to their own Linux distributions, whereas AGL wants to build a full Linux distribution of its own.

The panel more or less concurred with that assessment; Cauchy (who commented that before he worked with AGL he had been in charge of compliance efforts at GENIVI) contended that both approaches are needed. Some OEMs will always prefer to build more of their system in-house, after all. Mars noted that the origins of the organizations were quite different as well. GENIVI is an industry alliance created with the concept of member companies sharing assets, while AGL was envisioned as a "do everything in the open" collaborative project. Where they overlap, he said, GENIVI has started to open up its assets, but it still defaults to working within the confines of its own program.

[Rudolf Streif at ALS 2014]

Lanctot asked Streif whether or not these different approaches would create friction. Streif's answer was that the distinction was mainly one of communication styles, not opposing views of end products. He has worked on a large number of embedded Linux projects over the years, he said, and everyone knows that creating a product is a lot of work. AGL wants to create a baseline that you can "download and use" right away, he said, which is something that has become more difficult to do in recent years as embedded Linux distributions have grown. But he compared AGL to Debian or Fedora: anyone can download and use them as-is, but that does not prohibit the possibility of commercial vendors like Red Hat and Canonical building businesses on top of them.

The collaboration between AGL and GENIVI will begin in earnest with the Media Manager project. Media Manager is a component for providing access to multimedia files on connected consumer electronics devices (e.g., phones and tablets) to applications running on the car's in-vehicle infotainment (IVI) head unit. The goal is to enable any media player application to browse, search, and play back content (including access to metadata like artist information and remaining play time) found on a connected device, regardless of the device specifics.

As the panel indicated, however, they do not intend for Media Manager to be a one-shot collaboration. GENIVI has had a head start of several years, and is already shipping in several BMW vehicles. AGL has only recently set out to create formal specification documents, but those specifications will standardize aspects of AGL's "preview" software releases, which have long included GENIVI software components. Streif pointed out that automotive, like every vertical market, struggles with Not Invented Here (NIH) syndrome, but he said that Linux inevitably overcomes NIH. Munakata concurred on that point; he said that it was important to note that AGL was only launched the same day that GENIVI was releasing its first software projects. Nevertheless, history indicates that "going it alone" can never match the speed and development power of a collaborative project.

[Hisao Munakata at ALS 2014]

The panel touched on several other interesting topics, such as the impact that Tesla Motors has had. The panelists agreed that its disruptive effect is highly beneficial, as, for example, its radically different IVI design demonstrates that new things are possible, whereas other carmakers have often just used Linux to re-implement the same systems that they have been shipping in cars for 20 years. They also discussed when US automakers will get on board with automotive Linux collaborations, predicting that it will be soon, since many of them are already exploring Linux individually. In response to an audience question, the panel commented on the value of building IVI systems that consumers can customize and modify themselves; all agreed that it is valuable, and said OEMs are supportive of it.

Historically, how GENIVI, AGL, and other automotive Linux efforts interrelate has been a subject of some confusion; the fact that GENIVI and AGL are committed to working together on projects moving forward may not simplify matters, but it undoubtedly makes it clear that the various players involved are all working toward the same goal.

[The author would like to thank The Linux Foundation for travel assistance to attend ALS 2014.]

Comments (none posted)

Brief items

Quotes of the week

Today I got an email about a "new transifex live" feature that was so exciting it was apparently patent pending. I got this email because I'm a "member of the open source community", apparently. What a way to thank the FOSS community!
— Chris Webber

Comments (none posted)

PyOpenGL 3.1.0 available

PyOpenGL 3.1.0 has been released. Python 2.5 support has been dropped, experimental support for GLES and EGL has been added, and there have been several additional changes—such as "better isolation and pervasive lazy-loading behaviour to prevent loading unused libraries (e.g. GLUT in non-GLUT contexts or GLES in OpenGL contexts)" and more automated generation of wrappers.

Full Story (comments: none)

Kcov v19 available

Version 19 of the code-coverage collection utility kcov has been released. Most notable in this new release is support for analyzing bash and sh shell scripts.

Comments (none posted)

Newsletters and articles

Development newsletters from the past week

Comments (none posted)

Where KDE is going - Part 1 (KDE.news)

Over at KDE.news, Jos Poortvliet has a look at where KDE is today and where it is going in the future. It is part one of a "mini series". This piece looks at the community, Plasma, Frameworks, design, and applications, while the next will cover governance and how the community has been changing. "Experiences in the world of mobile and web applications have shown that users are far more likely to start using features and appreciate small batches instead of large dumps. Short release cycles can bring bug fixes and improvements to our users much faster. On the other hand, most users of KDE software access their software and updates through the downstream distributions which are on slower release cycles even though they have repositories for updated software. [Therefore] this is a discussion which needs to include the distributions as much as the upstream developers."

Comments (none posted)

Where KDE is going - Part 2 (KDE.news)

Jos Poortvliet continues his coverage of the KDE community's present and future. This segment looks at KDE governance and the role of KDE e.V. and the Community Working Group. "In the last 8 years or so, KDE e.V. has been the major driver behind increasing the number of developer sprints and has created the Fiduciary Licensing Agreement which allows it to re-license KDE code when needed, while protecting developers’ interests. The Code of Conduct originated with KDE e.V., as did our Community Working Group which helps deal with communication issues in the community."

Comments (21 posted)

Day: In praise of Jim Hall

At his blog, Allan Day points GNOME users and developers to some new usability research about GNOME 3.10 and 3.12 conducted by Jim Hall, a graduate student at the University of Minnesota. Day has started filing a number of bug reports based on Hall's findings, including problems with Nautilus bookmarking and confusion over the purpose of the GNOME Software application. The full data set is not yet available online, but Hall is scheduled to present it at GUADEC in July.

Comments (39 posted)

Page editor: Nathan Willis

Announcements

Articles of interest

Free Software Supporter - Issue 75, June 2014

The June edition of the Free Software Foundation's newsletter covers Reset the Net day and the Email Self-Defense guide, the Tor Challenge, a US Supreme Court patent decision, Intel's Active Management Technology, Replicant at the 15th Libre Software Meeting, and several other topics.

Full Story (comments: none)

Nelson: The new 501(c)(3) and the future of free software in the United States

Jim Nelson looks at why the Yorba Foundation was denied 501(c)(3) tax-exempt status, and what that means for other free software projects. "Last year there was a bit of a dust-up—a scandal to some, a distraction to others, depending on their politics—when many right-wing nonprofit organizations in the United States began complaining they were being unfairly targeted by the IRS. Media inquiries determined IRS examiners were given “BOLOs” (Be On The Lookout) for certain keywords in 501(c) applications, including “Open Source Software”." (Thanks to Paul Wise)

Comments (19 posted)

Calls for Presentations

Embedded Linux Conference Europe - Call for Participation

Embedded Linux Conference Europe will take place October 13-15, 2014 in Düsseldorf, Germany. The call for participation closes July 11. "Presentations should be of a technical nature, covering topics related to use of Linux in embedded systems. Topics related to consumer electronics are particularly encouraged, but any proposals about Linux that are of general relevance to most embedded developers are welcome."

Full Story (comments: none)

CFP Deadlines: July 3, 2014 to September 1, 2014

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

DeadlineEvent Dates EventLocation
July 4 October 31
November 2
Free Society Conference and Nordic Summit Gothenburg, Sweden
July 5 November 7
November 9
Jesień Linuksowa Szczyrk, Poland
July 7 August 23
August 31
Debian Conference 2014 Portland, OR, USA
July 11 October 13
October 15
CloudOpen Europe Düsseldorf, Germany
July 11 October 13
October 15
Embedded Linux Conference Europe Düsseldorf, Germany
July 11 October 13
October 15
LinuxCon Europe Düsseldorf, Germany
July 11 October 15
October 17
Linux Plumbers Conference Düsseldorf, Germany
July 14 August 15
August 17
GNU Hackers' Meeting 2014 Munich, Germany
July 15 October 24
October 25
Firebird Conference 2014 Prague, Czech Republic
July 20 January 12
January 16
linux.conf.au 2015 Auckland, New Zealand
July 21 October 21
October 24
PostgreSQL Conference Europe 2014 Madrid, Spain
July 24 October 6
October 8
Qt Developer Days 2014 Europe Berlin, Germany
July 24 October 24
October 26
Ohio LinuxFest 2014 Columbus, Ohio, USA
July 25 September 22
September 23
Lustre Administrators and Developers workshop Reims, France
July 27 October 14
October 16
KVM Forum 2014 Düsseldorf, Germany
July 27 October 24
October 25
Seattle GNU/Linux Conference Seattle, WA, USA
July 30 October 16
October 17
GStreamer Conference Düsseldorf, Germany
July 31 October 23
October 24
Free Software and Open Source Symposium Toronto, Canada
August 1 August 4 CentOS Dojo Cologne, Germany Cologne, Germany
August 15 September 25
September 26
Kernel Recipes Paris, France
August 15 August 25 CentOS Dojo Paris, France Paris, France
August 15 November 3
November 5
Qt Developer Days 2014 NA San Francisco, CA, USA
August 15 October 20
October 21
Tizen Developer Summit Shanghai Shanghai, China
August 18 October 18
October 19
openSUSE.Asia Summit Beijing, China
August 22 October 3
October 5
PyTexas 2014 College Station, TX, USA
August 31 October 13 Tracing Summit 2014 Düsseldorf, Germany
August 31 October 25
October 26
T-DOSE 2014 Eindhoven, Netherlands

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

Upcoming Events

Events: July 3, 2014 to September 1, 2014

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

Date(s)EventLocation
July 5
July 11
Libre Software Meeting Montpellier, France
July 5
July 6
Tails HackFest 2014 Paris, France
July 6
July 12
SciPy 2014 Austin, Texas, USA
July 8 CHAR(14) near Milton Keynes, UK
July 9 PGDay UK near Milton Keynes, UK
July 14
July 16
2014 Ottawa Linux Symposium Ottawa, Canada
July 18
July 20
GNU Tools Cauldron 2014 Cambridge, England, UK
July 19
July 20
Conference for Open Source Coders, Users and Promoters Taipei, Taiwan
July 20
July 24
OSCON 2014 Portland, OR, USA
July 21
July 27
EuroPython 2014 Berlin, Germany
July 26
August 1
Gnome Users and Developers Annual Conference Strasbourg, France
August 1
August 3
PyCon Australia Brisbane, Australia
August 4 CentOS Dojo Cologne, Germany Cologne, Germany
August 6
August 9
Flock Prague, Czech Republic
August 9 Fosscon 2014 Philadelphia, PA, USA
August 15
August 17
GNU Hackers' Meeting 2014 Munich, Germany
August 18
August 19
Linux Security Summit 2014 Chicago, IL, USA
August 18
August 20
Linux Kernel Summit Chicago, IL, USA
August 18 7th Workshop on Cyber Security Experimentation and Test San Diego, CA, USA
August 18
August 19
Xen Developer Summit North America Chicago, IL, USA
August 19 2014 USENIX Summit on Hot Topics in Security San Diego, CA, USA
August 20
August 22
USENIX Security '14 San Diego, CA, USA
August 20
August 22
LinuxCon North America Chicago, IL, USA
August 20
August 22
CloudOpen North America Chicago, IL, USA
August 22
August 23
BarcampGR Grand Rapids, MI, USA
August 23
August 31
Debian Conference 2014 Portland, OR, USA
August 23
August 24
Free and Open Source Software Conference St. Augustin (near Bonn), Germany
August 25 CentOS Dojo Paris, France Paris, France
August 26
August 31
ownCloud Contributor Conference and Hackathon Berlin, Germany
August 27
August 30
LaKademy 2014 São Paulo, Brazil

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

Page editor: Rebecca Sobol


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