LWN.net Logo

LWN.net Weekly Edition for May 15, 2008

Debian, OpenSSL, and a lack of cooperation

By Jake Edge
May 14, 2008

A rather nasty security hole in the Debian OpenSSL package has generated a lot of interest—along with a fair amount of controversy—amongst Linux users. The bug has been lurking for up to two years in Debian and other distributions, like Ubuntu, based on it. There are a number of lessons to be learned here about distributions and projects working together or, as in this case, failing to work together.

Back in April 2006, a Debian user reported a problem using the OpenSSL library with valgrind, a tool that can check programs for memory access problems. It was reporting that OpenSSL was using uninitialized memory in parts of the random number generator (RNG) code. Using memory before it is initialized to a known value is a well known way to create hard-to-find bugs, so it is not surprising that the valgrind report caused some consternation.

Debian hacker Kurt Roeckx tracked the problem down to what he thought were two offending lines of code and posted a question on the openssl-dev mailing list:

What I currently see as best option is to actually comment out those 2 lines of code. But I have no idea what effect this really has on the RNG. The only effect I see is that the pool might receive less entropy. But on the other hand, I'm not even sure how much entropy some unitialised data has.

What do you people think about removing those 2 lines of code?

There were few responses, but they were not opposed to removing the lines, including one from Ulf Möeller using an openssl.org email address: "If it helps with debugging, I'm in favor of removing them." Unfortunately, as was discovered recently, removing one of the two lines was harmless, the other essentially crippled the RNG so that OpenSSL-generated cryptographic keys were easy to predict. (For more technical details on the bug and what should be done to respond to it, see our article on this week's Security page.)

It turns out, at least according to OpenSSL core team member Ben Laurie, that openssl-dev is not for discussing development of OpenSSL. That may be true in practice, but the OpenSSL support web page describes it as: "Discussions on development of the OpenSSL library. Not for application development questions!" In addition, the address suggested by Laurie (openssl-team-AT-openssl.org) does not appear in any of the OpenSSL documentation or web pages. If it wasn't the right place, it would seem that the OpenSSL developers could have provided a helpful pointer to the right address, but that did not occur.

It probably was not clear that Roeckx was asking the questions in an official Debian capacity, nor that he was planning to change the Debian package based on the answer to his questions. As Laurie rightly points out, he should have submitted a patch, proposing that it be accepted into the upstream OpenSSL codebase. That probably would have garnered more attention, even if it was only posted to openssl-dev. It seems very unlikely that the patch in question would have ever made it into an OpenSSL release.

It is in the best interests of everyone, distributions, projects, and users, for changes made downstream to make their way back upstream. In order for that to work, there must be a commitment by downstream entities—typically distributions, but sometimes users—to push their changes upstream. By the same token, projects must actively encourage that kind of activity by helping patch proposals and proposers along. First and foremost, of course, it must be absolutely clear where such communications should take place.

Another recently reported security vulnerability also came about because of a lack of cooperation between the project and distributions. It is vital, especially for core system security packages like OpenSSH and OpenSSL, that upstream and downstream work very closely together. Any changes made in these packages need to be scrutinized carefully by the project team before being released as part of a distribution's package. It is one thing to let some kind of ill-advised patch be made to a game or even an office application package that many use; SSH and SSL form the basis for many of the tools used to protect systems from attackers, so they need to be held to a higher standard.

Another of Laurie's points, which also bears out the need for a higher standard, is the timing of the check-in to a public repository when compared to that of the advisory. Any alert attacker could have made very good use of the five or six day head start, they could have gotten by monitoring the repository, to exploit the vulnerability. While it is certainly possible that some of malicious intent already knew about the flaw, though no exploits have been reported, alerting potential attackers to this kind of hole well in advance of alerting the vulnerable users is unbelievably bad security protocol.

This is the kind of problem that could have been handled quickly and quietly by all concerned. All affected distributions—though it might be difficult to list all of the Debian-derived distributions out there—could have been contacted so that the advisory and updates to affected packages could have been coordinated. One of these days, one of these problems is going to give Linux a security black eye unless the community can do a better job of working together.

Comments (16 posted)

Release synchronization

By Jonathan Corbet
May 13, 2008
For those who have not seen it, Mark Shuttleworth's recent The Art of Release posting is worth a look. He starts with some rather self-congratulatory talk about the Ubuntu 8.04 release, saying:

To the best of my knowledge there has never been an "enterprise platform" release delivered exactly on schedule, to the day, in any proprietary or Linux OS.

One could quibble with this claim in a number of ways, but it is true that Ubuntu got out a release designed to be supported for a number of years, and they did it when they said they would. That, of course, is only part of the job; now they have to follow through on that little promise of supporting this distribution into 2011. The initial signs are good: Ubuntu's support thus far has been solid, and it would appear that the distribution will not be going away anytime soon.

One might well question whether the timely release of 8.04 is noteworthy. As a community we are increasingly spoiled; an increasingly large number of projects and distributions manage to get out regular releases on a reasonably predictable schedule. Even kernel releases, once known to slip for a year or more, are now predictable to within a couple of weeks. Now that free software releases are rather more predictable and reliable than, say, airline departures, why is the Ubuntu 8.04 release noteworthy?

The answer is the long-term support commitment. Theoretically, a distribution intended for this sort of long lifetime will have had a degree of extra care put into its preparation. Important components will have been given extra time to stabilize so that the distribution will be more reliable from the outset. Some thought will have gone into the selection of packages shipped with an emphasis on supportability over the long term. The whole process requires more effort and a higher degree of assurance that all of the pieces are truly ready.

The degree to which Ubuntu has done all of that work should become clear over time. Certainly the software selected for this release is rather less seasoned than the packages found in a Red Hat or SUSE enterprise release. But "older" does not necessarily mean "better" or "more stable," so the real proof will be in how well this distribution holds up for the next three years.

Meanwhile, Mr. Shuttleworth has already stated that the next long-term support release will be happening in April, 2010. Ubuntu's success with 8.04, he says, allows this commitment to be made almost two years in advance. There is, however, a possibility that things could change:

There's one thing that could convince me to change the date of the next Ubuntu LTS: the opportunity to collaborate with the other, large distributions on a coordinated major / minor release cycle. If two out of three of Red Hat (RHEL), Novell (SLES) and Debian are willing to agree in advance on a date to the nearest month, and thereby on a combination of kernel, compiler toolchain, GNOME/KDE, X and OpenOffice versions, and agree to a six-month and 2-3 year long term cycle, then I would happily realign Ubuntu's short and long-term cycles around that.

This idea is not new, but Mr. Shuttleworth seems to be particularly attached to it. There is no doubt that there would be advantages to aligning schedules in this way. The kernel developers, who have been known to make a special effort for a release destined to be used by a major enterprise distributor, could focus especially hard on a stable release knowing that it would be widely used. Higher-level projects could do the same. The distributors could also, perhaps, find a way to collaborate on the long-term maintenance of these components, rather than duplicating the effort of backporting patches into older code. Perhaps they could even get together for a joint release party, saving even more money.

Or perhaps this is all a nice idea which fails to survive its encounter with reality. Enterprise distribution releases tend to be highly-publicized events. Ubuntu might be happy to share its limelight with the larger distributors, but that feeling might not be reciprocated on the other side. It is hard to imagine Red Hat or Novell wanting to have their big enterprise distribution release be just one of many happening during the same month.

It is also hard to see Ubuntu making an agreement with the enterprise distributors which specifies both a release date and the versions of the major components. 8.04 released with the 2.6.24 kernel, which was almost exactly three months old at the time. Red Hat Enterprise Linux 5 released in mid-March, 2007, when the 2.6.20 kernel was current - but Red Hat shipped the six-month-old 2.6.18 kernel instead. Aligning schedules would require more than picking a date; it would also require adopting similar stabilization periods. It is far from clear that Ubuntu would want to fall that far behind the leading edge for the sake of alignment.

And, frankly, it's hard to imagine Debian making a credible commitment (within one month) to a release date at all.

So the aligned schedules for enterprise distributions seems like a hard sell. A better approach might be to try to wean these distributions off the "freeze and backport" model of support; this model is expensive to sustain, brings risks of its own, and doesn't always fit the needs of enterprise customers.. If the enterprise distributors were able to track more current software - rather than backporting pieces of it into older software - better alignment of releases might just come naturally.

Comments (8 posted)

Distributed bug tracking

By Jonathan Corbet
May 14, 2008
It is fair to say that distributed source code management systems are taking over the world. There are plenty of centralized systems still in use, but it is a rare project which would choose to adopt a centralized SCM in 2008. Developers have gotten too used to the idea that they can carry the entire history of their project on their laptop, make their changes, and merge with others at their leisure.

But, while any developer can now commit changes to a project while strapped into a seat in a tin can flying over the Pacific Ocean, that developer generally cannot simultaneously work with the project's bug database. Committing changes and making bug tracker changes are activities which often go together, but bug tracking systems remain strongly in the centralized mode. Our ocean-hopping developer can commit a dozen fixes, but updating the related bug entries must wait until the plane has landed and network connectivity has been found.

There are a number of projects out there which are trying to change this situation through the creation of distributed bug tracking systems. These developments are all in a relatively early state, but their potential - and limitations - can be seen.

One of the leading projects in this area is Bugs Everywhere, which has recently moved to a new home with Chris Ball as its new maintainer. Bugs Everywhere, like the other systems investigated by your editor, tries to work with an underlying distributed source code management system to manage the creation and tracking of bug entries. In particular, Bugs Everywhere creates a new directory (called .be) in the top level of the project's directory. Bugs are stored as directories full of text files within that directory, and the whole collection is managed with the underlying SCM.

The advantages to an approach like this are clear. The bug database can now be downloaded along with the project's code itself. It can be branched along with the code; if a particular branch contains a fix for a bug, it can also contain the updated bug tracker entry. That, in turn, ensures that the current bug tracking information will be merged upstream at exactly the same time as the fix itself. Contemporary projects are characterized by large numbers of repositories and branches, each of which can contain a different set of bugs and fixes; distributing the bug database into these repositories can only help to keep the code and its bug information consistent everywhere.

There are also some disadvantages to this scheme, at least in its current form. Changes to bug entries don't become real until they are committed into the SCM. If a bug is fixed, committing the fix and the bug tracker update at the same time makes sense; in cases where one is trying to add comments to a bug as part of an ongoing conversation the required commit is just more work to do. That fact that, in git at least, one must explicitly add any new files created by the bug tracker (which have names like 12968ab9-5344-4f08-9985-ef31153e504f/comments/97f56c43-4cf2-4569-9ef4-3e8f2d9eb1fe/body) does not help the situation.

Beyond that, tracking bugs this way creates two independent sets of metadata - the bug information itself, and whatever the developer added when committing changes. There is currently no way of tying those two metadata streams together. Then, there is the issue of merging. Bugs Everywhere appears to reflect some thought about this problem; most changes involve the creation of new, (seemingly) randomly-named files which will not create conflicts at merge time. It did not take long, however, for your editor to prove that changing the severity of a bug in two branches and merging the result creates a conflict which can only be resolved by hand-editing the bug tracker's files. Said files are plain text, but that is less comforting than one might think.

All of this can make distributed bug tracking look like a source of more work for developers, which is not the path to world domination. All of this can make distributed bug tracking look like a source of more work for developers, which is not the path to world domination. What is needed, it seems, is a combination of more advanced tools and better integration with the underlying SCM. Bugs Everywhere, by trying to work with any SCM, risks not being easily usable with any of them.

A project which is trying for closer integration is ticgit, which, as one might expect, is based on git. Ticgit takes a different approach, in that there are no files added to the project's source tree, at least not directly; instead, ticgit adds a new branch to the SCM and stores the bug information there. That allows the bug database to travel with the source (as long as one is careful to push or pull the ticgit branch!) while keeping the associated files out of the way. Ticgit operations work on the git object database directory, so there is no need for separate commit operations. On the other hand, this approach loses the ability to have a separate view of the bug database in each branch; the connection between bug fixes and bug tracker changes has been made weaker. This is something which can be fixed, and it would appear (from comments in the source) that dealing with branches is on the author's agenda.

Ticgit clearly has potential, but even closer integration would be worthwhile. Wouldn't it be nice if a git commit command would also, in a single operation, update the associated entry in the bug database? Interested developers could view a commit which is alleged to fix a bug without the need for anybody to copy commit IDs back and forth. Reverting a bugfix commit could automatically reopen the bug. And so on. In the long run, it is hard to see how a truly integrated, distributed bug tracker can be implemented independently of the source code management system.

There are some other development projects in this area, including:

  • Scmbug is a relatively advanced project which aims "to solve the integration problem once and for all." It is not truly a distributed bug tracker, though; it depends on hooks into the SCM which talk to a central server. Regardless, this project has done a significant amount of thinking about how bug trackers and source code management systems should work together.

  • DisTract is a distributed bug tracker which works through a web interface. To that end, it uses a bunch of Firefox-specific JavaScript code to run local programs, written in Haskell, which manipulate bug entries stored in a Monotone repository. Your editor confesses that he did not pull together all of the pieces needed to make this tool work.

  • DITrack is a set of Python scripts for manipulating bug information within a Subversion repository. It is meant to be distributed (and, eventually, "backend-agnostic"), but its use of Subversion limits how distributed it can be for now.

  • Ditz is a set of Ruby scripts for manipulating bug information within a source code management system; it has no knowledge of the SCM itself.

As can be seen, there is no shortage of work being done in this area, though few of these projects have achieved a high level of usability. Only Scmbug has been widely deployed so far. A few of these projects have the potential to change the way development is done, though, once various integration and user interface issues are addressed.

There is one remaining problem, though, which has not been touched upon yet. A bug tracker serves as a sort of to-do list for developers, but there is more to it than that. It is also a focal point for a conversation between developers and users. Most users are unlikely to be impressed by a message like "set up a git repository and run these commands to file or comment on a bug." There is, in other words, value in a central system with a web interface which makes the issue tracking system accessible to a wider community. Any distributed bug tracking system which does not facilitate this wider conversation will, in the end, not be successful. Creating a distributed tracker which also works well for users could be the biggest challenge of them all.

Comments (43 posted)

Page editor: Jonathan Corbet

Security

Debian vulnerability has widespread effects

By Jake Edge
May 14, 2008

The recent Debian advisory for OpenSSL could lead to predictable cryptographic keys being generated on affected systems. Unfortunately, because of the way keys are used, especially by ssh, this can lead to problems on systems that never installed the vulnerable library. In addition, because the OpenSSL library is used in a wide variety of services that require cryptography, a very large subset of security tools are affected. This is a wide-ranging vulnerability that affects a substantial fraction of Linux systems.

For a look at the chain of errors that led to the vulnerability, see our front page article. Here, we will concentrate on some of the details of the code, the impact of the vulnerability, and what to do about it.

An excellent tool for finding memory-related bugs, Valgrind was used on an application that used the OpenSSL library. It complained about the library using uninitialized memory in two locations in crypto/rand/md_rand.c:

    247:
            MD_Update(&m,buf,j);

    467:
    #ifndef PURIFY
            MD_Update(&m,buf,j); /* purify complains */
    #endif
While the lines of code look remarkably similar (modulo the pre-processor directive), their actual effect is very different.

The first is contained in the ssleay_rand_add() function, which is normally called via the RAND_add() function. It adds the contents of the passed in buffer to the entropy pool of the pseudo-random number generator (PRNG). The other is contained in ssleay_rand_bytes(), normally called via RAND_bytes(), which is meant to return random bytes. It adds the contents of the passed in buffer—before filling it with random bytes to return—to the entropy pool as well. The major difference is that removing the latter might marginally reduce the entropy in the PRNG pool, while removing the former effectively stops any entropy from being added to the pool.

For both RAND_add() and RAND_bytes(), the buffer that gets passed in may not have been initialized. This was evidently known by the OpenSSL folks, but remained undocumented for others to trip over later. The "#ifndef PURIFY" is a clue that someone, at some point, tried to handle the same kind of problem that Valgrind was reporting for the similar, but proprietary, Purify tool. While it isn't necessarily wrong to add these uninitialized buffers to the PRNG pool, it is something that tools like Valgrind will rightly complain about. Since it is dubious whether it adds much in the way of entropy, while constituting a serious hazard for uninitiated, some kind of documentation in the code would seem mandatory.

The major response from the OpenSSL team seems to be from core team member Ben Laurie's weblog, where he has a rant entitled "Vendors Are Bad For Security". In it, and its follow-up, he makes some good points about mistakes that were made, while seeming to be unwilling for OpenSSL to take any share of the blame.

The end result is that OpenSSL would create predictable random numbers, which would then result in predictable cryptographic keys. According to the advisory:

Affected keys include SSH keys, OpenVPN keys, DNSSEC keys, and key material for use in X.509 certificates and session keys used in SSL/TLS connections. Keys generated with GnuPG or GNUTLS are not affected, though.

A program that can detect some weak keys has also been released. It uses 256K hash values to detect the bad keys, which would imply 18-bits of entropy in the PRNG pool of vulnerable OpenSSL libraries. By using hashes of the keys in the detection program, the authors do not directly give away the key values that get generated, but it should not be difficult for an attacker to generate and use that list.

For affected Debian-derived systems, the cleanup is relatively straightforward, if painful. The SSLkeys page on the Debian wiki has specific information on how to remove weak keys along with how to generate new ones for a variety of services affected. Obviously, none of those steps should be taken until the OpenSSL package itself has been upgraded to a version that fixes the hole.

A bigger problem may be for those installations based on distributions that were not directly affected because they did not distribute the vulnerable OpenSSL library. Those machines may very well have weak keys installed in user accounts as ssh authorized_keys. A user who generated a key pair on some vulnerable host may have copied the public key to a host that was not vulnerable. This would allow an attacker to access the account of that user by brute forcing the key from the 256K possibilities.

Because of that danger, the Debian project suspended public key authentication on debian.org machines. In addition, all passwords were reset because of the possibility that an attacker could have captured them by decrypting the ssh traffic using one of the weak keys. One would guess that debian.org machines would have a higher incidence of weak keys, but any host that allows users to use ssh public key authentication is potentially at risk.

The weak key detector (dowkd) has some fairly serious limitations:

dowkd currently handles OpenSSH host and user keys and OpenVPN shared secrets, as long as they use default key lengths and have been created on a little-endian architecture (such as i386 or amd64). Note that the blacklist by dowkd may be incomplete; it is only intended as a quick check.

In order to ensure that there are no weak keys installed as public keys on other hosts, it may be necessary to remove all authorized_keys (and/or authorized_keys2) entries for all users. It may also be wise to set all passwords to something unknown. Until that is done, there still remains a chance that a weak key may allow access to an attacker. It is a unpleasant task that needs to be done for those who administer a multi-user system.

Comments (31 posted)

Security news

Brute-Force SSH Server Attacks Surge (InformationWeek)

InformationWeek reports on an increase in attacks against SSH servers. "The paper focuses on the vulnerability of Linux systems to brute-force SSH attacks... 'Linux systems face a unique threat of compromise from brute-force attacks against SSH servers that may be running without the knowledge of system owners/operators. Many Linux distributions install the SSH service by default, some without the benefit of an effective firewall.'"

Comments (37 posted)

Mozilla ships a compromised extension

From the Mozilla security blog: "The Vietnamese language pack for Firefox 2 contains inserted code to load remote content. This code is the result of a virus infection, but does not contain the virus itself. This usually results in the user seeing unwanted ads, but may be used for more malicious actions. Everyone who downloaded the most recent Vietnamese language pack since February 18, 2008 got an infected copy." Presumably this is only an issue for Windows users, but it is still scary. More information can be found in bugzilla.

Comments (6 posted)

Cryptographic weakness on Debian systems

The Debian project has sent out an advisory stating that, due to a Debian-specific modification to the openssl package, cryptographic keys generated on affected systems may be guessable. "It is strongly recommended that all cryptographic key material which has been generated by OpenSSL versions starting with 0.9.8c-1 on Debian systems is recreated from scratch. Furthermore, all DSA keys ever used on affected Debian systems for signing or authentication purposes should be considered compromised." The project has disabled public key logins on its internal infrastructure in response.

Comments (111 posted)

Tech Insight: Finding & Prioritizing Web Application Vulnerabilities (Dark Reading)

Dark Reading analyzes web application vulnerabilities with an eye towards triage—choosing the right ones to address first. "While there are many Web application vulnerabilities, they aren't all the same. Each one may represent different levels of danger to different organizations, depending on the sensitivity of the data available through the site, user access privileges, and the accessibility of other internal systems from the Web and database servers."

Comments (none posted)

New vulnerabilities

bugzilla: multiple vulnerabilities

Package(s):bugzilla CVE #(s):CVE-2008-2103 CVE-2008-2105
Created:May 12, 2008 Updated:May 14, 2008
Description:

From the Red Hat bugzilla:

CVE-2008-2103: Cross-site scripting (XSS) vulnerability in Bugzilla 2.17.2 and later allows remote attackers to inject arbitrary web script or HTML via the id parameter to the "Format for Printing" view or "Long Format" bug list.

CVE-2008-2105: email_in.pl in Bugzilla 2.23.4, and later versions before 3.0, allows remote authenticated users to more easily spoof the changer of a bug via a @reporter command in the body of an e-mail message, which overrides the e-mail address as normally obtained from the From e-mail header. NOTE: since From headers are easily spoofed, this only crosses privilege boundaries in environments that provide additional verification of e-mail addresses.

Alerts:
Fedora FEDORA-2008-3668 2008-05-13
Fedora FEDORA-2008-3442 2008-05-09
Fedora FEDORA-2008-3488 2008-05-09

Comments (none posted)

cdf: buffer overflow

Package(s):cdf CVE #(s):CVE-2008-2080
Created:May 14, 2008 Updated:May 14, 2008
Description: Versions of the Common Data Format library prior to 3.2.1 suffer from a buffer overflow which could be exploitable via a specially-crafted CDF file.
Alerts:
Gentoo 200805-14 2008-05-13

Comments (none posted)

egroupware: denial of service

Package(s):egroupware CVE #(s):CVE-2008-2041 CVE-2008-1502
Created:May 8, 2008 Updated:July 18, 2008
Description: From the Gentoo alert:

A vulnerability has been reported in FCKEditor due to the way that file uploads are handled in the file editor/filemanager/upload/php/upload.php when a filename has multiple file extensions (CVE-2008-2041). Another vulnerability exists in the _bad_protocol_once() function in the file phpgwapi/inc/class.kses.inc.php, which allows remote attackers to bypass HTML filtering (CVE-2008-1502).

Alerts:
SuSE SUSE-SR:2008:015 2008-07-18
Fedora FEDORA-2008-6226 2008-07-09
Gentoo 200805-04 2008-05-07

Comments (none posted)

gforge: temporary file vulnerability

Package(s):gforge CVE #(s):CVE-2008-0167
Created:May 14, 2008 Updated:May 14, 2008
Description: GForge opens files for writing in an insecure manner, leaving open the possibility of file overwrite attacks by a local user.
Alerts:
Debian DSA-1577-1 2008-05-14

Comments (none posted)

firebird: information disclosure

Package(s):firebird CVE #(s):CVE-2008-1880
Created:May 9, 2008 Updated:May 14, 2008
Description: From the Gentoo advisory: Viesturs reported that the default configuration for Gentoo's init script ("/etc/conf.d/firebird") sets the "ISC_PASSWORD" environment variable when starting Firebird. It will be used when no password is supplied by a client connecting as the "SYSDBA" user.
Alerts:
Gentoo 200805-06 2008-05-09

Comments (1 posted)

imagemagick: heap-based buffer overflows

Package(s):ImageMagick CVE #(s):CVE-2008-1096 CVE-2008-1097
Created:May 9, 2008 Updated:July 4, 2008
Description: From the Mandriva advisory:

A heap-based buffer overflow vulnerability was found in how ImageMagick parsed XCF files. If ImageMagick opened a specially-crafted XCF file, it could be made to overwrite heap memory beyond the bounds of its allocated memory, potentially allowing an attacker to execute arbitrary code on the system running ImageMagick (CVE-2008-1096).

Another heap-based buffer overflow vulnerability was found in how ImageMagick processed certain malformed PCX images. If ImageMagick opened a specially-crafted PCX image file, an attacker could possibly execute arbitrary code on the system running ImageMagick (CVE-2008-1097).

Alerts:
SuSE SUSE-SR:2008:014 2008-07-04
Mandriva MDVSA-2008:099 2007-05-08

Comments (none posted)

inspIRCd: buffer overflow

Package(s):inspircd CVE #(s):CVE-2008-1925
Created:May 9, 2008 Updated:May 14, 2008
Description: From the CVE entry: Buffer overflow in InspIRCd before 1.1.18, when using the namesx and uhnames modules, allows remote attackers to cause a denial of service (daemon crash) via a large number of channel users with crafted nicknames, idents, and long hostnames.
Alerts:
Gentoo 200805-08 2008-05-09

Comments (none posted)

libid3tag: infinite loop

Package(s):libid3tag CVE #(s):CVE-2008-2109
Created:May 13, 2008 Updated:May 20, 2008
Description: From the CVE entry: field.c in the libid3tag 0.15.0b library allows context-dependent attackers to cause a denial of service (CPU consumption) via an ID3_FIELD_TYPE_STRINGLIST field that ends in '\0', which triggers an infinite loop.
Alerts:
Mandriva MDVSA-2008:103 2008-05-19
Fedora FEDORA-2008-3976 2008-05-14
Fedora FEDORA-2008-3874 2008-05-14
Gentoo 200805-15 2008-05-14
Fedora FEDORA-2008-3757 2008-05-13

Comments (none posted)

libvorbis: multiple vulnerabilities

Package(s):libvorbis CVE #(s):CVE-2008-1419 CVE-2008-1420 CVE-2008-1423
Created:May 14, 2008 Updated:June 24, 2008
Description: The libvorbis library contains several vulnerabilities exploitable by way of a specially-crafted Ogg file.
Alerts:
Gentoo 200806-09:02 2008-06-23
SuSE SUSE-SR:2008:012 2008-06-06
Debian DSA-1591-1 2008-06-03
Mandriva MDVSA-2008:102 2007-05-16
Fedora FEDORA-2008-3910 2008-05-14
Fedora FEDORA-2008-3934 2008-05-14
Fedora FEDORA-2008-3898 2008-05-14
CentOS CESA-2008:0270 2008-05-14
Red Hat RHSA-2008:0271-01 2008-05-14
Red Hat RHSA-2008:0270-01 2008-05-14

Comments (none posted)

licq: denial of service

Package(s):licq CVE #(s):CVE-2008-1996
Created:May 13, 2008 Updated:July 31, 2008
Description: From the CVE entry: licq before 1.3.6 allows remote attackers to cause a denial of service (file-descriptor exhaustion and application crash) via a large number of connections.
Alerts:
Mandriva MDVSA-2008:159 2008-07-30
Fedora FEDORA-2008-3969 2008-05-14
Fedora FEDORA-2008-3909 2008-05-14
Fedora FEDORA-2008-3812 2008-05-13

Comments (none posted)

ltsp: multiple vulnerabilities

Package(s):ltsp CVE #(s):
Created:May 9, 2008 Updated:May 14, 2008
Description: The Linux Terminal Server Project ships copies of packages with vulnerabilities. Many of these vulnerabilities have likely been fixed by your distribution provider in the individual packages, but not in the ltsp bundled copies.
Alerts:
Gentoo 200805-07 2008-05-09

Comments (none posted)

moinmoin: privilege escalation

Package(s):moinmoin CVE #(s):CVE-2008-1937
Created:May 12, 2008 Updated:May 14, 2008
Description:

From the Gentoo advisory:

It has been reported that the user form processing in the file userform.py does not properly manage users when using Access Control Lists or a non-empty superusers list.

A remote attacker could exploit this vulnerability to gain superuser privileges on the application.

Alerts:
Gentoo 200805-09 2008-05-11

Comments (none posted)

nagios: cross-site scripting

Package(s):nagios CVE #(s):CVE-2007-5803 CVE-2008-1360
Created:May 9, 2008 Updated:May 14, 2008
Description: From the CVE entry: Cross-site scripting (XSS) vulnerability in Nagios before 2.11 allows remote attackers to inject arbitrary web script or HTML via unknown vectors to unspecified CGI scripts, a different issue than CVE-2007-5624.
Alerts:
SuSE SUSE-SR:2008:011 2008-05-09

Comments (none posted)

openssl: predictable random number generator

Package(s):openssl CVE #(s):CVE-2008-0166
Created:May 13, 2008 Updated:June 19, 2008
Description: This Debian advisory states that, due to a Debian-specific modification to the openssl package, cryptographic keys generated on affected systems may be guessable. See also this brief article for more information.
Alerts:
Ubuntu USN-612-11 2008-06-18
Ubuntu USN-612-9 2008-06-12
Ubuntu USN-612-10 2008-06-12
Ubuntu USN-612-8 2008-05-21
Ubuntu USN-612-7 2008-05-20
Debian DSA-1576-2 2008-05-16
Ubuntu USN-612-6 2008-05-14
Ubuntu USN-612-5 2008-05-14
Debian DSA-1576-1 2008-05-14
Ubuntu USN-612-4 2008-05-14
Ubuntu USN-612-3 2008-05-13
Debian DSA-1571-1 2008-05-13
Ubuntu USN-612-2 2008-05-13
Ubuntu USN-612-1 2008-05-13

Comments (none posted)

php5: multiple vulnerabilities

Package(s):php5 CVE #(s):CVE-2007-3806 CVE-2008-1384 CVE-2008-2050 CVE-2008-2051
Created:May 12, 2008 Updated:July 24, 2008
Description:

From the Debian advisory:

CVE-2007-3806: The glob function allows context-dependent attackers to cause a denial of service and possibly execute arbitrary code via an invalid value of the flags parameter.

CVE-2008-1384: Integer overflow allows context-dependent attackers to cause a denial of service and possibly have other impact via a printf format parameter with a large width specifier.

CVE-2008-2050: Stack-based buffer overflow in the FastCGI SAPI.

CVE-2008-2051: The escapeshellcmd API function could be attacked via incomplete multibyte chars.

Alerts:
Ubuntu USN-628-1 2008-07-23
CentOS CESA-2008:0545 2008-07-16
CentOS CESA-2008:0544 2008-07-16
Red Hat RHSA-2008:0545-01 2008-07-16
Red Hat RHSA-2008:0544-01 2008-07-16
Red Hat RHSA-2008:0582-01 2008-07-22
Red Hat RHSA-2008:0546-01 2008-07-16
Mandriva MDVSA-2008:128 2008-07-03
Mandriva MDVSA-2008:127 2008-07-03
Mandriva MDVSA-2008:125 2008-07-03
Mandriva MDVSA-2008:126 2007-07-03
SuSE SUSE-SR:2008:014 2008-07-04
Red Hat RHSA-2008:0505-01 2008-07-02
Fedora FEDORA-2008-3606 2008-06-20
Fedora FEDORA-2008-3864 2008-06-20
rPath rPSA-2008-0178-1 2008-05-27
rPath rPSA-2008-0176-1 2008-05-23
Debian DSA-1578-1 2008-05-17
Debian DSA-1572-1 2008-05-11

Comments (none posted)

php: PATH_TRANSLATED miscalculation

Package(s):php CVE #(s):CVE-2008-0599
Created:May 8, 2008 Updated:July 24, 2008
Description: From the National Vulnerability Database: CVE-2008-0599: cgi_main.c in PHP before 5.2.6 does not properly calculate the length of PATH_TRANSLATED, which has unknown impact and attack vectors.
Alerts:
Ubuntu USN-628-1 2008-07-23
Mandriva MDVSA-2008:128 2008-07-03
Mandriva MDVSA-2008:127 2008-07-03
Red Hat RHSA-2008:0505-01 2008-07-02
Fedora FEDORA-2008-3606 2008-06-20
Fedora FEDORA-2008-3864 2008-06-20
rPath rPSA-2008-0176-1 2008-05-23
Slackware SSA:2008-128-01 2008-05-08

Comments (none posted)

rdesktop: multiple vulnerabilities

Package(s):rdesktop CVE #(s):CVE-2008-1801 CVE-2008-1802 CVE-2008-1803
Created:May 12, 2008 Updated:September 19, 2008
Description:

From the Debian advisory:

CVE-2008-1801: Remote exploitation of an integer underflow vulnerability allows attackers to execute arbitrary code with the privileges of the logged-in user.

CVE-2008-1802: Remote exploitation of a BSS overflow vulnerability allows attackers to execute arbitrary code with the privileges of the logged-in user.

CVE-2008-1803: Remote exploitation of an integer signedness vulnerability allows attackers to execute arbitrary code with the privileges of the logged-in user.

Alerts:
SuSE SUSE-SA:2008:041 2008-08-14
Red Hat RHSA-2008:0575-01 2008-07-24
Red Hat RHSA-2008:0725-01 2008-07-24
Red Hat RHSA-2008:0576-01 2008-07-24
CentOS CESA-2008:0576 2008-07-25
CentOS CESA-2008:0575 2008-07-24
Gentoo 200806-04 2008-06-14
Slackware SSA:2008-148-01 2008-05-28
Mandriva MDVSA-2008:101 2007-05-16
Fedora FEDORA-2008-3886 2008-05-14
Fedora FEDORA-2008-3917 2008-05-14
Fedora FEDORA-2008-3985 2008-05-14
Debian DSA-1573-1 2008-05-11
Ubuntu USN-646-1 2008-09-18

Comments (none posted)

sarg: stack buffer overflows

Package(s):sarg CVE #(s):CVE-2008-1922
Created:May 9, 2008 Updated:May 14, 2008
Description: Multiple stack buffer overflows have been fixed in the Squid logfile analyzer sarg.
Alerts:
SuSE SUSE-SR:2008:011 2008-05-09

Comments (none posted)

sipp: arbitrary code execution

Package(s):sipp CVE #(s):CVE-2008-1959
Created:May 12, 2008 Updated:May 14, 2008
Description:

From the Fedora advisory:

Stack-based buffer overflow in the get_remote_video_port_media function in call.cpp in SIPp 3.0 allows remote attackers to cause a denial of service and possibly execute arbitrary code via a crafted SIP message.

Alerts:
Fedora FEDORA-2008-3690 2008-05-13
Fedora FEDORA-2008-3508 2008-05-09

Comments (none posted)

X11 terms: privilege escalation

Package(s):aterm CVE #(s):CVE-2008-1142 CVE-2008-1692
Created:May 8, 2008 Updated:August 29, 2008
Description: Privilege escalation vulnerabilities have been found in the following X11 terminal emulators: aterm, Eterm, Mrxvt, multi-aterm, RXVT, rxvt-unicode, and wterm.

From the Gentoo alert:

Bernhard R. Link discovered that Eterm opens a terminal on :0 if the "-display" option is not specified and the DISPLAY environment variable is not set. Further research by the Gentoo Security Team has shown that aterm, Mrxvt, multi-aterm, RXVT, rxvt-unicode, and wterm are also affected.

Alerts:
Mandriva MDVSA-2008:161 2007-08-07
Gentoo 200805-03 2008-05-07
SuSE SUSE-SR:2008:017 2008-08-29

Comments (none posted)

xen: multiple vulnerabilities

Package(s):xen CVE #(s):CVE-2007-5730 CVE-2008-1943 CVE-2008-1944 CVE-2008-2004
Created:May 13, 2008 Updated:August 8, 2008
Description: From the Red Hat advisory:

Tavis Ormandy found that QEMU did not perform adequate sanity-checking of data received via the "net socket listen" option. A malicious local administrator of a guest domain could trigger this flaw to potentially execute arbitrary code outside of the domain. (CVE-2007-5730)

Markus Armbruster discovered that the hypervisor's para-virtualized framebuffer (PVFB) backend failed to validate the frontend's framebuffer description. This could allow a malicious user to cause a denial of service, or to use a specially crafted frontend to compromise the privileged domain (Dom0). (CVE-2008-1943)

Daniel P. Berrange discovered that the hypervisor's para-virtualized framebuffer (PVFB) backend failed to validate the format of messages serving to update the contents of the framebuffer. This could allow a malicious user to cause a denial of service, or compromise the privileged domain (Dom0). (CVE-2008-1944)

Chris Wright discovered a security vulnerability in the QEMU block format auto-detection, when running fully-virtualized guests. Such fully-virtualized guests, with a raw formatted disk image, were able to write a header to that disk image describing another format. This could allow such guests to read arbitrary files in their hypervisor's host. (CVE-2008-2004)

Alerts:
Mandriva MDVSA-2008:162 2008-08-07
SuSE SUSE-SR:2008:013 2008-06-13
CentOS CESA-2008:0194 2008-05-16
Red Hat RHSA-2008:0194-01 2008-05-13

Comments (none posted)

zoneminder: arbitrary code execution

Package(s):zoneminder CVE #(s):CVE-2008-1381
Created:May 12, 2008 Updated:May 14, 2008
Description:

From the Red Hat bugzilla:

ZoneMinder prior to version 1.23.3 contains unescaped PHP exec() calls which can allow an authorised remote user the ability to run arbitrary code as the Apache httpd user.

Alerts:
Fedora FEDORA-2008-3601 2008-05-13
Fedora FEDORA-2008-3462 2008-05-09
Fedora FEDORA-2008-3516 2008-05-09

Comments (none posted)

Page editor: Jake Edge

Kernel development

Release status

Kernel release status

The current 2.6 prepatch is 2.6.26-rc2, released on May 12. This release is dominated by fixes, but also turns the big kernel lock (back) into a spinlock; see the article below for more information.

The current -mm tree is 2.6.26-rc2-mm1. Recent changes to -mm include a rebasing on top of the linux-next tree, a memory initialization debugging framework, the removal of the v850 port, a new set of system calls with additional flags arguments (see below), a WARN() macro which takes printk()-style arguments, ext4 online defragmentation, ext4 FIEMAP support, and the OMFS filesystem.

The current stable 2.6 kernel is 2.6.25.3, released on May 9. This release came out earlier than planned due to the inclusion of a couple of security fixes.

As of this writing, the 2.6.25.4 update - containing a few dozen fixes - is in the review process.

Comments (none posted)

Kernel development news

Quotes of the week

According to my quick & dirty git-log analysis, at the current pace of [big kernel lock] removal we'd have to wait more than 10 years to remove most BKL critical sections from the kernel and to get acceptable latencies again.
-- Ingo Molnar doesn't want to wait that long

Even if you're totally right, with Nick's mmu notifiers, Rusty's mmu notifiers, my original mmu notifiers, Christoph's first version of my mmu notifiers, with my new mmu notifiers, with christoph EMM version of my new mmu notifiers, with my latest mmu notifiers, and all people making suggestions and testing the code and needing the code badly, and further patches waiting inclusion during 2.6.27 in this area, it must be obvious for everyone, that there's zero chance this code won't evolve over time to perfection, but we can't wait it to be perfect before start using it or we're screwed.
Andrea Arcangeli - also impatient

19:29* dilinger sends his patch to lkml for a proper flaming
19:32Quozl> dilinger: it's called "patch hardening"? ;-} the heat of the flames makes the patch stronger.
-- Andres 'dilinger' Salomon

Comments (1 posted)

The big kernel lock strikes again

By Jonathan Corbet
May 13, 2008
When Alan Cox first made Linux work on multiprocessor systems, he added a primitive known as the big kernel lock (or BKL). This lock, originally, ensured that only one processor could be running kernel code at any given time. Over the years, the role of the BKL has diminished as increasingly fine-grained locking - along with lock-free algorithms - have been implemented throughout the kernel. Getting rid of the BKL entirely has been on the list of things to do for some time, but progress in that direction has been slow in recent years. A recent performance regression tied to the BKL might give some new urgency to that task, though; it also shows how subtle algorithmic changes can make a big difference.

The AIM benchmark attempts to measure system throughput by running a large number of tasks (perhaps thousands of them), each of which is exercising some part of the kernel. Yanmin Zhang reported that his AIM results got about 40% worse under the 2.6.26-rc1 kernel. He took the trouble to bisect the problem; the guilty patch turned out to be the generic semaphores code. Reverting that patch made the performance regression go away - at the cost of restoring over 7,000 lines of old, unlamented code. The thought of bringing back the previous semaphore implementation was enough to inspire a few people to look more deeply at the problem.

It did not take too long to narrow the focus to the BKL, which was converted to a semaphore a few years ago. That part of the process was easy - there aren't a whole lot of other semaphores left in the kernel, especially in performance-critical places. But the BKL stubbornly remains in a number of core places, including the fcntl() system call, a number of ioctl() implementations, the TTY code, and open() for char devices. That's enough for a badly-performing BKL to create larger problems, especially when running VFS-heavy benchmarks with a lot of contention.

Ingo Molnar tracked down the problem in the new semaphore code. In short: the new semaphore code is too fair for its own good. When a semaphore is released, and there is another thread waiting for it, the semaphore is handed over to the new thread (which is then made runnable) at that time. This approach ensures that threads obtain the semaphore in something close to the order in which they asked for it.

The problem is that fairness can be expensive. The thread waiting for the semaphore may be on another processor, its cache could be cold, and it might be at a low enough priority that it will not even begin running for some time. Meanwhile, another thread may request the semaphore, but it will get put at the end of the queue behind the new owner, which may not be running yet. The result is a certain amount of dead time where no running thread holds the semaphore. And, in fact, Yanmin's experience with the AIM benchmark showed this: his system was running idle almost 50% of the time.

The solution is to bring in a technique from the older semaphore code: lock stealing. If a thread tries to acquire a semaphore, and that semaphore is available, that thread gets it regardless of whether a different thread is patiently waiting in the queue. Or, in other words, the thread at the head of the queue only gets the semaphore once it starts running and actually claims it; if it's too slow, somebody else might get there first. In human interactions, this sort of behavior is considered impolite (in some cultures, at least), though it is far from unknown. In a multiprocessor computer, though, it makes the difference between acceptable and unacceptable performance - even a thread which gets its lock stolen will benefit in the long run.

Interestingly, the patch which implements this change was merged into the mainline, then reverted before 2.6.26-rc2 came out. The initial reason for the revert was that the patch broke semaphores in other situations; for some usage patterns, the semaphore code could fail to wake a thread when the semaphore became available. This bug could certainly have been fixed, but it appears that things will not go that way - there is a bit more going on here.

What is happening instead is that Linus has committed a patch which simply turns the BKL into a spinlock. By shorting out the semaphore code entirely, this patch fixes the AIM regression while leaving the slow (but fair) semaphore code in place. This change also makes the BKL non-preemptible, which will not be entirely good news for those who are concerned with latency issues - especially the real time tree.

The reasoning behind this course of action would appear to be this: both semaphores and the BKL are old, deprecated mechanisms which are slated for minimization (semaphores) or outright removal (BKL) in the near future. Given that, it is not worth adding more complexity back into the semaphore code, which was dramatically simplified for 2.6.26. And, it seems, Linus is happy with a sub-optimal BKL:

Quite frankly, maybe we _need_ to have a bad BKL for those to ever get fixed. As it was, people worked on trying to make the BKL behave better, and it was a failure. Rather than spend the effort on trying to make it work better (at a horrible cost), why not just say "Hell no - if you have issues with it, you need to work with people to get rid of the BKL rather than cluge around it".

So the end result of all this may be a reinvigoration of the effort to remove the big kernel lock from the kernel. It still is not something which is likely to happen over the next few kernel releases: there is a lot of code which can subtly depend on BKL semantics, and there is no way to be sure that it is safe without auditing it in detail. And that is not a small job. Alan Cox has been reworking the TTY code for some time, but he has some ground to cover yet - and the TTY code is only part of the problem. So the BKL will probably be with us for a while yet.

Comments (5 posted)

Getting a handle on caching

By Jonathan Corbet
May 14, 2008
Memory management changes (for the x86 architecture) have caused surprises for a few kernel developers. As these issues have been worked out, it has become clear that not everybody understands how memory caching works on contemporary systems. In an attempt to bring some clarity, Arjan van de Ven wrote up some notes and sent them to your editor, who has now worked them into this article. Thanks to Arjan for putting this information together - all the useful stuff found below came from him.

As readers of What every programmer should know about memory will have learned, the caching mechanisms used by contemporary processors are crucial to the performance of the system. Memory is slow; without caching, systems will run much slower. There are situations where caching is detrimental, though, so the hardware must provide mechanisms which allow for control over caching with specific ranges of memory. With 2.6.26, Linux is (rather belatedly) starting to catch up with the current state of the art on x86 hardware; that, in turn, is bringing some changes to how caching is managed.

It is good to start with a definition of the terms being used. If a piece of memory is cachable, that means:

  • The processor is allowed to read that memory into its cache at any time. It may choose to do so regardless of whether the currently-executing program is interested in reading that memory. Reads of cachable memory can happen in response to speculative execution, explicit prefetching, or a number of other reasons. The CPU can then hold the contents of this memory in its cache for an arbitrary period of time, subject only to an explicit request to release the cache line from elsewhere in the system.

  • The CPU is allowed to write the contents of its cache back to memory at any time, again regardless of what any running program might choose to do. Memory which has never been changed by the program might be rewritten, or writes done by a program may be held in the cache for an arbitrary period of time. The CPU need not have read an entire cache line before writing that line back.

What this all means is that, if the processor sees a memory range as cachable, it must be possible to (almost) entirely disconnect the operations on the underlying device from what the program thinks it is doing. Cachable memory must always be readable without side effects. Writes have to be idempotent (writing the same value to the same location several times has the same effect as writing it once), ordering-independent, and size-independent. There must be no side effects from writing back a value which was read from the same location. In practice, this means that what sits behind a cachable address range must be normal memory - though there are some other cases.

If, instead, an address range is uncachable, every read and write operation generated by software will go directly to the underlying device, bypassing the CPU's caches. The one exception is with writes to I/O memory on a PCI bus; in this case, the PCI hardware is allowed to buffer and combine write operations. Writes are not reordered with reads, though, which is why a read from I/O memory is often used in drivers for PCI devices as a sort of write barrier.

A variant form of uncached access is write combining. For read operations, write-combined memory is the same as uncachable memory. The hardware is, however, allowed to buffer consecutive write operations and execute them as a smaller series of larger I/O operations. The main user of this mode is video memory, which often sees sequential writes and which offers significant performance improvements when those writes are combined.

The important thing is to use the right cache mode for each memory range. Failure to make ordinary memory cachable can lead to terrible performance. Enabling caching on I/O memory can cause strange hardware behavior, corrupted data, and is probably implicated in global warming. So the CPU and the hardware behind a given address must agree on caching.

Traditionally, caching has been controlled with a CPU feature called "memory type range registers," or MTRRs. Each processor has a finite set of MTRRs, each of which controls a range of the physical address space. The BIOS sets up at least some of the MTRRs before booting the operating system; some others may be available for tweaking later on. But MTRRs are somewhat inflexible, subject to the BIOS not being buggy, and are limited in number.

In more recent times, CPU vendors have added a concept known as "page attribute tables," or PAT. PAT, essentially, is a set of bits stored in the page table entries which control how the CPU does caching for each page. The PAT bits are more flexible and, since they live in the page table entries, they are difficult to run out of. They are also completely under the control of the operating system instead of the BIOS. The only problem is that Linux doesn't support PAT on the x86 architecture, despite the fact that the hardware has had this capability for some years.

The lack of PAT support is due to a few things, not the least of which has been problematic support on the hardware side. Processors have stabilized over the years, though, to the point that it is possible to create a reasonable whitelist of CPU families known to actually work with PAT. There have also been challenges on the kernel side; when multiple page table entries refer to the same physical page (a common occurrence), all of the page table entries must use the same caching mode. Even a brief window with inconsistent caching can be enough to bring down the system. But the code on the kernel side has finally been worked into shape; as a result, PAT support was merged for the 2.6.26 kernel. Your editor is typing this on a PAT-enabled system with no ill effects - so far.

On most systems, the BIOS will set MTRRs so that regular memory is cachable and I/O memory is not. The processor can then complicate the situation with the PAT bits. In general, when there is a conflict between the MTRR and PAT settings, the setting with the lower level of caching prevails. The one exception appears to be when one says "uncachable" and the other enables write combining; in that case, write combining will be used. So the CPU, through the management of the PAT bits, can make a couple of effective changes:

  • Uncached memory can have write combining turned on. As noted above, this mode is most useful for video memory.

  • Normal memory can be made uncached. This mode can also be useful for video memory; in this case, though, the memory involved is normal RAM which is also accessed by the video card.

Linux device drivers must map I/O memory before accessing it; the function which performs this task is ioremap(). Traditionally, ioremap() made no specific changes to the cachability of the remapped range; it just took whatever the BIOS had set up. In practice, that meant that I/O memory would be uncachable, which is almost always what the driver writer wanted. There is a separate ioremap_nocache() variant for cases where the author wants to be explicit, but use of that interface has always been rare.

In 2.6.26, ioremap() was changed to map the memory uncached at all times. That created a couple of surprises in cases where, as it happens, the memory range involved had been cachable before and that was what the code needed. As of 2.6.26, such code will break until the call is changed to use the new ioremap_cache() interface instead. There is also a ioremap_wc() function for cases where a write-combined mapping is needed.

It is also possible to manipulate the PAT entries for an address range explicitly:

    int set_memory_uc(unsigned long addr, int numpages);
    int set_memory_wc(unsigned long addr, int numpages);
    int set_memory_wb(unsigned long addr, int numpages);

These functions will set the given pages to uncachable, write-combining, or writeback (cachable), respectively. Needless to say, anybody using these functions should have a firm grasp of exactly what they are doing or unpleasant results are certain.

Comments (12 posted)

Extending system calls

By Jake Edge
May 14, 2008

Getting interfaces right is a hard, but necessary, task, especially when that interface has to be supported "forever". Such is the case with the system call interface that the kernel presents to user space, so adding features to it must be done very carefully. Even so, when Ulrich Drepper set out to remove a hole that could lead to a race condition, he probably did not expect all the different paths that would need to be tried before closing in on an acceptable solution.

The problem stems from wanting to be able to create file descriptors with new properties—things like close-on-exec, non-blocking, or non-sequential descriptors. Those features were not considered when the system call interface was developed. After all, many of those system calls are essentially unchanged from early Unix implementations of the 1970s. The open() call is the most obvious way to request a file descriptor from the kernel, but there are plenty of others.

In fact, open() is one of the easiest to extend with new features because of its flags argument. Calls like pipe(), socket(), accept(), epoll_create() and others produce file descriptors as well, but don't have a flags argument available. Something different would have to be done to support additional features for the file descriptors resulting from those calls.

The close-on-exec functionality is especially important to close a security hole for multi-threaded programs. Currently, programs can use fcntl() to change an open file descriptor to have the close-on-exec property, but there is always a window in time between the creation of the descriptor and changing its behavior. Another thread could do an exec() call in that window, leaking a potentially sensitive file descriptor into the newly run program. Closing that window requires an in-kernel solution.

Back in June of last year, after some false starts, Linus Torvalds suggested adding an indirect() system call, as a way to pass flags to system calls that don't currently support them. The indirect() call would apply a set of flags to the invocation of an existing system call. This would allow existing calls to remain unchanged, with only new uses calling indirect(). User space programs would be unlikely to call the new function directly, instead they would call glibc functions that handled any necessary indirect() calls.

Davide Libenzi created a sys_indirect() patch in July, but Drepper saw it as "more complex than warranted". So Drepper created his own "trivial" implementation, that was described on this page in November. It was met with a less than enthusiastic response on linux-kernel for being, amongst other things, an exceedingly ugly interface.

The alternative to sys_indirect() is to create a new system call for each existing call that needed a flags argument. This was seen as messy by some, including Torvalds, leading some kernel hackers into looking for alternatives. The indirect approach also had some other potential benefits, though, because it was seen as something that could be used by syslets to allow asynchronous system calls. No decision seemed to be forthcoming, leading Drepper to ask Torvalds for one:

Will you please make a decision regarding sys_indirect? There has been no other proposal so the alternative is to add more syscalls.

To bolster his argument that sys_indirect() was the way to go, Drepper also created a patch to add some of the required system calls. He started with the socket() family, by adding socket4(), socketpair5(), and accept4()—tacking the number of arguments onto the function name a la wait3() and wait4(). Drepper's intent may not have been well served by choosing those calls as Alan Cox immediately noted that the type argument could be overloaded:

Given we will never have 2^32 socket types, and in a sense this is part of the type why not just use
        socket(PF_INET, SOCK_STREAM|SOCK_CLOEXEC, ...)
that would be far far cleaner, no new syscalls on the socket side at all.

Michael Kerrisk looked over the set of system calls that generate file descriptors, categorizing them based on whether they needed a flag argument added. He observed that roughly half of the file descriptor producing calls need not change because they could either use an overloading trick like the socket calls, the glibc API already added a flags argument, or there were alternatives available to provide the same functionality along with flags.

In response, Drepper made one last attempt to push the indirect approach, saying:

Or we just add sys_indirect (which is also usable for other syscall extensions, not just the CLOEXEC stuff) and let userlevel (i.e., me) worry about adding new interfaces to libc. As you can see, for the more recent interfaces like signalfd I have already added an additional parameter so the number of interface changes would be reduced.

Even though the indirect approach has some good points, Torvalds liked the approach advocated by Cox, saying:

Ok, I have to admit that I find this very appealing. It looks much cleaner, but perhaps more importantly, it also looks both readable and easier to use for the user-space programmer.

Ultimately, developers will only use these new interfaces if they can easily test for the existence of the new code. Torvalds gives an example of how that might be done using the O_NOATIME flag to open(), which has only been available since 2.6.8. It is this testability issue that makes him believe the flags-based approach is the right one:

And that's the problem with anything that isn't flags-based. Once you do new system calls, doing the above is really quite nasty. How do you statically even test that you have a system call? Now you need to add a whole autoconf thing for it existing, and when it does exist you still need to test whether it works, and you can't even do it in the slow-path like the above (which turns the failure into a fast-path without the flag).

This new approach, with a scaled down number of new system calls rather than adding a general-purpose system call extension mechanism like sys_indirect(), is now being pursued by Drepper. In the explanatory patch at the start of the series, he lays out which of the system calls will require a new user space interface: paccept(), epoll_create2(), dup3(), pipe2(), and inotify_init1(), as well as those that do not: signalfd4(), eventfd2(), timerfd_create(), socket(), and socketpair().

Drepper has already made several iterations of patches addressing most of the concerns expressed by the kernel developers along the way. There have been some architecture specific problems, but Drepper has been knocking those down as well. If no further roadblocks appear, it would seem a likely candidate for inclusion in 2.6.27.

Comments (8 posted)

Patches and updates

Kernel trees

Core kernel code

Device drivers

Filesystems and block I/O

Memory management

Architecture-specific

Virtualization and containers

Benchmarks and bugs

Miscellaneous

Page editor: Jonathan Corbet

Distributions

News and Editorials

A Talk with Fedora Project Leader Paul Frields

By Rebecca Sobol
May 13, 2008
Late last week I had the pleasure of talking with Fedora Project Leader Paul Frields. Our conversation covered a range of Fedora Project topics, including Fedora 9, the latest Fedora release.

One thing Paul is passionate about is getting people to volunteer. There are many ways to get involved with the Fedora Project, lots of sub-projects and Special Interest Groups (SIGs) that people can join depending on their interests and talents. The Fedora Project wiki is a good starting point for finding out more. The Join Fedora page also goes into the various roles that a Fedora contributor might be suited for, with easy links to setting up a Fedora account and using the Fedora Account system. You don't have to be a programmer or a computer expert to contribute to the project.

Joining the Fedora Project is easier now than it ever was during Fedora's five year history. As a result Fedora now has over 2000 registered account holders. That includes about 350 ambassadors who promote Fedora in their local area. In addition to making it easier to become a Fedora contributor, a variety of new web applications/collaborative tools are now available for contributors. Of course all Fedora infrastructure is Free Software, available in the Fedora repository, and running on Fedora.

All registered account holders may vote in Fedora elections, which is worth noting because there is an election coming up in June.

The composition of the Fedora board was recently changed to five elected members of the nine board seats. Four of those seats will be voted on in the next election. The other board seats are appointed by Red Hat, but are not necessarily Red Hat employees. Red Hat retains some control by employing and appointing the Project Leader. Paul took a job with Red Hat when he was offered the position of Project Leader.

Paul mentioned that former Fedora Project Leader Max Spevack is moving to the Netherlands to organize and manage Fedora volunteers in Europe. Paul also mentioned that Fedora has many Brazilian contributors. Of course Red Hat employs some Fedora engineers. There are fourteen Red Hat employees working full time on Fedora, mostly acting as team leaders and organizing the volunteers. In addition all Red Hat engineers will spend some fraction of their time working on Fedora in areas where Red Hat Enterprise Linux in involved.

Some people think of Fedora as a beta for Red Hat Enterprise Linux, but its more realistic to think of Fedora as the upstream source for its enterprising cousin and spin-offs such as CentOS. So even though Fedora is a community project, Red Hat is still very involved in its development.

FUDCon (Fedora User & Developer Conference) is an event held on an irregular schedule several times per year. Some are smaller events held in conjunction with a larger event, such as the May 30, 2008 FUDCon, which will be held at LinuxTag in Berlin, Germany. Further out, there is some talk of having a mini-FUDCon at the 2009 linux.conf.au. The Boston FUDCon coming up in June, will run for several days. Co-located with the Red Hat Summit, the Boston FUDCon will feature hackfests, a barcamp and technical talks.

The Red Hat Summit will bring in Red Hat customers, and include talks about actual use cases. These talks should be interesting for Fedora developers, who will have a chance to see what people are doing with their work downstream. FUDCon is open to anyone, so stop by if there is a FUDCon in your area.

On to the just released Fedora 9 and the upcoming Fedora 10. Fedora 9 is one of the first major releases to feature KDE 4 by default. To make this work, the KDE SIG has built a compatibility library to keep KDE 3 applications running properly. For Fedora 10 Casey Dahlin is working on replacing the init system with upstart, the system developed for Ubuntu.

Some other items that we touched on briefly: Fedora maintains an open build system and works at getting patches upstream. The project also strives to cooperate with other distributions. From what I've seen, Fedora 9 looks very good, attractive and functional. Now that rawhide has moved on to Fedora 10 it will be a rough ride for at least a few days. So stick with Fedora 9, or get it from a mirror near you.

Fedora 9 is Paul's first release as Project Leader and he had a few words to add. "It's been less than five years since the first release of Fedora (back when it was called Fedora Core), and in that time Fedora has become not just a vibrant, innovative, and extremely popular Linux distribution, but also a thriving community. A community that believes that free and open source software is not just something you *use*, it's something you *do* -- something to which you *contribute*."

Comments (2 posted)

New Releases

Fedora 9 released

Fedora 9 is out. "First to hit were the live USB keys. The heathens cried out for mercy, but were powerless to resist. The sticks were damn persistent and non-destructively formatted - non-destructively! They showed up everywhere, casting out demons from computers infected by the dark one of the interwebs and rescuing lost data from the influence of the evil crackers." See the release notes for a rather more sober description of Fedora 9.

Full Story (comments: 10)

BLFS-6.3-rc1 has been released!

Beyond Linux From Scratch (BLFS) has released the first release candidate for version 6.3. The final version is expected before the end of May. See the release notes for more information.

Full Story (comments: none)

Distribution News

Debian GNU/Linux

Surveying the Debian community!

Several weeks ago we mentioned a couple of surveys for the Debian community. These surveys will be closing soon - 1am UTC time on the 1st of June 2008. There is a Debian user survey and a Debian DM/AM/NM survey.

Comments (none posted)

Fedora

Red Hat Board Appointments

Paul Frields has a note on the upcoming Fedora Board elections. "As everyone probably knows, the Fedora Board is moving into an election season due to the release of another Fedora. In advance of the election, Red Hat appoints one seat, and the final seat is appointed afterward to make sure the Board is fairly balanced to represent the Board's many constituents." Red Hat has named Harald Hoyer, a Senior Software Engineer in Red Hat's Stuttgart office, to occupy one of the two open appointed seats.

Full Story (comments: none)

Rawhide moving on to Fedora 10

Starting tomorrow, with the release of Fedora 9, Fedora "rawhide" will be composed of Fedora 10 content. "This will likely fail in spectacular ways due to all the pent up builds so it should be interesting." Click below for more information and remember: "Keep all body parts inside the cart at all times. Buckle up and enjoy the ride!"

Full Story (comments: 1)

rpm.livna.org repositories for Fedora 9 (Sulphur) now available

The Livna.org package repository for Fedora 9 (Sulphur) is open for business. "The Livna repository hosts software as RPM packages which cannot be shipped in the official Fedora repository for various reasons and support8s the i386, x86_64 and ppc architectures."

Full Story (comments: none)

Gentoo Linux

Gentoo council meeting summary for 8 May 2008

Click below for a summary of the May 8th meeting of the Gentoo council. Some topics include Active-developer document, ChangeLog entries, Ignored arch-team bugs, 8-digit versions, Enforced retirement and New meeting process.

Full Story (comments: none)

Ubuntu family

Xubuntu Meeting

The Xubuntu community had a meeting to resolve some issues. Click below for a summary of the that meeting. "I'd first like to start off this e-mail by announcing the Xubuntu community meeting was a *huge* success. We had roughly two dozen people take part (including old, current, and new faces) and a number of other individuals who sent in e-mails or left a quick IRC message to let us know that they were unable to attend but would be following up with much interest."

Full Story (comments: none)

Distribution Newsletters

OpenSUSE Weekly News/21

This week's edition of openSUSE Weekly News covers openSUSE 11.0 Beta 2, People of openSUSE: Greg Kroah-Hartman, Jigish Gohil: Sliced sphere in compiz-fusion-git packages, and much more.

Comments (none posted)

PCLinuxOS Magazine May 2008 Released

The May 2008 edition of PCLinuxOS Magazine is out. This week's highlights include Manage your Ipod with Amarok, PCLinuxOS Based Distros, Quick Fix for Damaged Xorg, Don't Complain, Something Completely Different, and more.

Comments (none posted)

Ubuntu Weekly Newsletter, Issue 90

The Ubuntu Weekly Newsletter for May 10, 2008 covers Ubuntu Brainstorm Growing, Ubuntu Finland receives award from Finland's Minister of Communications, Ubuntu Featured on Italian TV, submit questions for Launchpad podcast, Forums News and Interviews, Ubuntu UK Podcast Episode 5, and much more.

Full Story (comments: none)

DistroWatch Weekly, Issue 252

The DistroWatch Weekly for May 12, 2008 is out. "It's a Fedora week here at DistroWatch. A new version of the popular distribution will be released later this week, complete with the usual cutting edge features, such as KDE 4, dramatic speed improvements, support for the ext4 file system and many others. One popular application set missing from the distro, however, is KDE 3.5, now relegated to the dustbins of history by the project. If you are a Fedora KDE user, should you upgrade or should you not? Read our first-impressions review of Fedora 9 KDE to obtain some answers. In the news section, openSUSE presents several user interface improvements for its package manager, Ubuntu prepares to deliver cool new features in Intrepid Ibex, Attila Craciun introduces the Slackware-based Bluewhite64 Linux, and PC-BSD updates its artwork and fixes bugs in preparation for the 7.0 release. Also included are several resources to help you manage your OpenSolaris system better and an interesting update on Oracle Enterprise Linux."

Comments (none posted)

Miscellaneous Articles

Hats off to Fedora 9 (DesktopLinux)

DesktopLinux takes a look at Fedora 9 and includes a mini-interview with Paul Frields. "Many people mistakenly believe that Red Hat started Fedora. In fact, the project began independently in 2003, as a "community" version of the popular Linux distribution. The idea was to emulate the "freeness" and community involvement of the Debian distribution, while still leveraging Red Hat's testing and integration work -- not to mention its more regular release cycle schedule."

Comments (none posted)

Fedora 9 Released with KDE 4.0.3 (KDE.News)

KDE.News looks at KDE 4.0.3 in Fedora 9. "In addition to the inclusion of KDE 4 as the default KDE, Fedora 9 also comes with other major new features, such as the switch to Upstart to handle system startup, an improved NetworkManager including support for mobile broadband and systemwide configuration, a new, fast version of X.Org X11, TexLive replacing tetex, unified spellchecking dictionaries and much more."

Comments (none posted)

CNR supports Linux Mint, adds Weatherbug (DesktopLinux)

DesktopLinux covers an announcement from Linspire. "Linspire has upgraded its CNR.com (Click'N'Run) download site for Linux software to support the Ubuntu-based, consumer-friendly Linux Mint distribution. CNR.com will also add a Linux version of Weatherbug's weather service, which offers live, local weather information and severe weather alerts."

Comments (none posted)

Distribution reviews

Top 5 Tiny Distros (TuxMachines)

TuxMachines compares five tiny distributions. "I was cleaning up my /home partiton when I noticed I had several tiny distros hanging around waiting to be tested. So I thought this might be a good time to write an updated Mini-distro Roundup. Unlike last time, the five contestants are all less than 88 MB in download size. The five contestants are CDlinux 0.6.1, Damn Small Linux 4.3r2, Puppy 4.0rc, Slitaz 1.0, and Austrumi 1.6.5. All of these are the latest stable except Damn Small and Puppy, that are release candidates. So, we'll cut them just a bit of slack in the stability department if need be."

Comments (none posted)

Fedora 9 - an OS that even the Linux challenged can love (The Register)

The Register takes a look at Fedora 9. "Fedora 9, the latest release from the Fedora Project, goes up for download on Tuesday. The ninth release of Fedora ushers in a number of changes aimed at making the venerable distribution a more newbie-friendly desktop, but longtime users needn't fear a great dumbing down; version 9 packs plenty of power user punch as well."

Comments (none posted)

Page editor: Rebecca Sobol

Development

The Freedom of Fork

May 14, 2008

This article was contributed by Diego Pettenò

One of the importa