|
|
Log in / Subscribe / Register

LWN.net Weekly Edition for January 5, 2017

Some improbable 2017 predictions

By Jonathan Corbet
January 4, 2017
Welcome to the first LWN.net Weekly Edition for 2017. We are entering a new year characterized by more than the usual amount of uncertainty at many levels. One thing that is sure, though, is that it will be an active and interesting year for the Linux and free-software communities. Many years ago, we started an ill-advised tradition of trying to make some predictions for the coming year. Without further ado, we'll continue this tradition into 2017.

The discussion on eliminating Debian maintainers faded out with no clear conclusions. But, over the years, it has become increasingly clear that the single-maintainer model used in much of the free-software community creates a great many single points of failure, some of which are guaranteed to fail over any reasonable period of time. Thus, we have seen interest in group maintainership models grow, and that process will continue into 2017. We will certainly not see the end of single-maintainer fiefdoms in 2017, but it seems likely that there will be fewer of them.

Another important single point of failure is Android. It has brought a lot of freedom to the mobile device world, but it is still a company-controlled project that is not entirely free and, by some measures at least, is becoming less free over time. A shift of emphasis at Google could easily push Android more in the proprietary direction. Meanwhile, the end of CyanogenMod has, temporarily, brought about the loss of our most successful community-oriented Android derivative.

The good news is that the efforts to bring vendor kernels closer to the mainline will bear some fruit this year, making it easier to run systems that, if not fully free, are more free than before. Lineage OS, rising from the ashes of CyanogenMod, should help to ensure the availability of alternative Android builds. But it seems likely that efforts to provide free software at the higher levels of the stack (microG, for example) will languish.

The security mess will only get worse, as it becomes clear that vast numbers of severely insecure systems have been deployed, many in important infrastructural roles. Those who have been paying attention have understood the scope of this problem for some time; the rest of the world will catch up quickly. By the end of the year, expect to see attempts at legislative solutions in various countries, many of which will be less than helpful at addressing the real problems.

With luck, the free-software community will have a somewhat better security story by the end of the year, as understanding of the gravity of the problem sinks in. Fuzz-testing and hardening efforts will increase, and some notable progress will be made. But it is certain to be far short of what is needed.

The disintermediation of traditional Linux distributors will continue, with more software being distributed via containerization mechanisms, language-specific repositories, and more. But it will also become clear that this process has a cost; distributors perform a useful service by providing an integrated system, and some users will find that they miss that service. Episodes like the Node.js left-pad fiasco will highlight the risks of performing one's own software integration from multiple repositories under varied management.

We should see another ruling in the appealed VMware GPL-infringement lawsuit. Whether that ruling will bring any joy or any clarity in the area of derived works and the GPL is rather less certain.

The problems of protocol ossification and widely deployed ancient kernels will push more big content providers toward protocols like QUIC or TCP over UDP. Both protocols allow moving a lot of networking logic into user space. There are some advantages to such schemes, including the ability to more quickly deploy protocol enhancements and pushing network intelligence back to the endpoints. But they also will facilitate the creation of private low-level protocols that need not be open source. We could be seeing the beginning of the end of the era where widely used protocol implementations had free reference implementations.

Much of the kernel's core memory-management and filesystem code was designed around a fundamental truth of computing: the latency associated with I/O operations is orders of magnitude larger than memory-access latency. As solid-state memory devices replace traditional storage, that "truth" is increasingly untrue. Fundamental changes will be required for the kernel to perform well on near-future hardware. Those changes will not (for the most part) be made this year, but our understanding of what needs to be done will be much improved by the end of the year.

Containers will be big. Really big. You'll be fed up with hearing about containers by the end of the year. You heard it here first.

2016 was a year that saw many triumphs by divisive forces that would set people against one another. Those forces will certainly not rest in 2017, but they will also be more strongly confronted by those with a vision of a more integrated and cooperative world. The free-software community has, over the last few decades, shown that it is possible to bring together people from all over the planet to work toward shared, long-term goals. We have our own inclusiveness problems to solve and, hopefully, will make progress on those this year. But, if we work at it, we can also serve as an example of how a vast number of people and companies, while working toward their own goals, can build something that serves everybody and makes the world a better place.

As always, the usual disclaimers apply to everything written here. Attributing any level of trustworthiness to your editor's predictions is hazardous at best, if not downright foolhardy. The safest prediction of all is that much of the above will be proved wrong.

With 2017, LWN begins its 20th year of publication, something that we certainly did not predict in 1997 when the idea of starting a Linux-oriented newsletter was being discussed. Let us start this year by wishing the best to all of our readers — newcomers along with those who have been with us the whole time. While we thought, 20 years ago, that Linux was bound for success, few of us could have predicted the world we find ourselves in now. It is probably safe to say that Linux and free software will continue to go from strength to strength, and that 2017 will be another successful year. We look forward to being there with you.

Comments (7 posted)

Symbolic mathematics on Linux

January 4, 2017

This article was contributed by Lee Phillips

This article is an introduction to the world of free and open-source applications for symbolic mathematics. These are programs that assist the researcher or student through their ability to manipulate mathematical expressions, rather than just make numerical calculations. I'll give an overview of two large computer algebra packages available for Linux, and a briefer sampling of some of the more specialized tools aimed at particular branches of mathematics.

This category of software is traditionally called a "computer algebra system", but that description can be misleading. These systems can find analytic solutions to algebraic and differential equations; solve integrals; sum infinite series; and generally carry out nearly any kind of mathematical manipulation that can be imagined. At the least, symbolic mathematics software can replace the bulky handbooks of mathematical information that have been lugged by generations of graduate students.

Over decades, mathematicians have honed these programs, encoding within them the accumulated mathematical knowledge of centuries: information about special functions, for example, that's so difficult (for some of us) to remember. They have learned to reduce such things as algebraic simplification and calculating derivatives to patterns of symbol manipulation ripe for automation. The earliest of these systems, developed in the 1960s, were based on Lisp, the obvious choice at the time, but development of later systems used a variety of languages.

Fortunately, most of the best of this software is free and open source, which allows us to look under the hood and examine or alter the algorithms employed.

Maxima

The ancestor of all symbolic mathematics systems is Macsyma [PDF]. It began as an academic project at MIT in the 1960s, but it was eventually licensed to Symbolics (a company founded by former MIT people), which sold it throughout the 1980s. A fork of an earlier version became Maxima, which remains the predominant free-software symbolic mathematics solution. Maxima is actively developed, and has attained a high degree of sophistication and completeness; source is licensed under the GNU GPLv2.

On Ubuntu, at least, the packaged version is quite close to the latest development version; if your distribution lags, you can build it from the sources in the Git repository on SourceForge. If you intend to do any real work with the program you should also install the "maxima-share" package (after installing Maxima itself). This will install a large number of extra mathematical libraries that are used transparently by Maxima and make it far more capable.

The traditional way to use Maxima is in a terminal. Just type "maxima", and you will be presented with an interactive command prompt. You can enter mathematical expressions in the customary computerized dialect (x^2 for x squared, etc.), followed by a semicolon, and Maxima will respond with a simplified or "solved" version of the expression. If Maxima can't do anything with the expression, it usually just repeats it: tell it "foo" and it will respond with "foo". Readline support allows you to recall previous inputs and edit them, which is particularly convenient for the type of exploration that Maxima seems to inspire, at least for this user.

But if you tell it:

    integrate(%e^(-x^2), x);

Maxima will respond with something that looks like:

    sqrt(%pi) erf(x)
    ----------------
           2

This example is here to illustrate three things: First, special numbers such as π and e are represented, in input and output, as %pi and %e. If you say, for example, %e, Maxima will just say %e back; to see the numerical value of the constant, say float(%e).

Second, mathematical expressions in the output are, by default, rendered in an ASCII approximation of mathematical notation, making their structure easier to grasp than the computerese that we are obliged to use for the input. You can enter tex(%) to get the result in a form ready for pasting directly into a TeX or LaTeX document. (The symbol % refers to the immediately preceding output; each input and output is numbered, and can be referred to directly, as %o6 for output number six, %i6 for input number six, etc.)

Third, there is a wealth of mathematical knowledge baked in to Maxima. Notice the erf in the numerator of the answer: this refers to the error function, well known to statisticians. Maxima will provide the results of integrals and the solutions of differential equations in terms of the special functions that it knows about, when appropriate.

[Maxima plot]

If you'd like to know what that error function looks like, you just need to say:

    plot2d(%, [x, -2, 2]);
That will pop up a plot like the one at the right.

Remember, the % notation refers to the last result returned. The three terms in square brackets are the variable on the horizontal axis and its range. Maxima uses gnuplot for its plotting. If you're familiar with gnuplot, you can add options to the plot command to tweak the plot's appearance, or set global options that will apply to every plot in the session. If you have a high-resolution screen you may want to apply these global options to make the plots easier to see:

    set_plot_option(
        [gnuplot_preamble, "set termoption font 'courier,24';
         set termoption lw 4"]);

In fact, these options were used for the example plots in this article.

Maxima also provides an interface to gnuplot's 3D plotting commands. Here's a simple example of a surface plot:

    plot3d(sin(x)*cos(y), [x, 0, 2*%pi], [y, 0, 2*%pi]);
[Maxima 3D plot]

By setting the gnuplot preamble, either globally or per plot, you can access contour, parametric, or any of gnuplot's other plotting modes. The plots use the x11 gnuplot terminal. When you interact with them, you are interacting directly with the gnuplot subsystem, so you can use the mouse to zoom 2D and 3D plots and rotate 3D surfaces.

Using Maxima at the terminal is convenient because it starts instantly, is responsive, and there is nothing extra to install. However, the console interface has some disadvantages: the ASCII output is not easy on the eyes, especially after a long session; there is only one plot window, which gets reused for each plot; and there is no convenient record of your session.

There are a handful of alternative interfaces that solve one or more of these problems. None of them are ideal, nor as capable as the solution that we'll see in the next section; but I'll briefly describe them here, to provide an idea of what's available, and in case any one of them hits a sweet spot for the reader.

Two slightly more graphical interfaces to Maxima are Xmaxima and wxMaxima. The first of these is based on Tk and the second on wxWidgets. They both allow plots to be embedded with the input and output, and allow for various options to save the session, which is useful for creating notebooks or documents from Maxima explorations. Neither one seems to provide true typeset output, although wxMaxima can use the jsMath fonts to make the results somewhat more attractive. wxMaxima can serve as a gentler introduction to Maxima for those who prefer to get started without frequent trips to the manual, as it bristles with menus and dialogs that expose some, but far from all, of the program's options.

As we saw above, Maxima knows how to create TeX versions of its output. Therefore it should be possible to simply run TeX behind the scenes and display math that looks like real math. There are at least two interfaces that follow this strategy. The WYSIWYG editing platform TeXmacs can interface with Maxima and display typeset output, but this is probably mainly of interest to those who are already using TeXmacs. Perhaps of more general interest, especially to Emacs users, is the imaxima mode of that editor, where you can embed plots and fully typeset output directly into the editing buffer. A readline-like functionality is simulated by typing M-p instead of up-arrow.

Installation of imaxima can be an adventure. Several files need to be placed in the correct places, and variables set in the .emacs configuration file. In Ubuntu this can all be done automatically by installing the maxima-emacs package. The downside here is that this package will install large chunks of TeX Live. As the typical user of Maxima is likely to already have installed a more up-to-date version of TeX Live than most Linux distributions' package managers provide, this will create some redundancy — but it does save time. Some alternatives for those who already have TeX installed are to download the Maxima source, which includes the most critical required files, or to try to find recent versions of the imaxima mode files on the web. Either way, smooth operation is likely to require some customization in your .emacs file, some of which can be set through the Emacs user options interface, which exposes some imaxima settings; see the imaxima link above to get started.

[Emacs imaxima]

The next figure shows part of a Maxima session in emacs using the imaxima interface. The regular plot commands can be used as in the terminal, and separate gnuplot windows will pop up. To get embedded graphs, use the wxplot2d() and wxplot3d() analogues. With the use of comments, for which Maxima uses C-style syntax, the Emacs buffer can become a notebook in the Jupyter style (in fact there is also a Maxima kernel for Jupyter). The notebook can be converted into HTML or LaTeX with the Emacs commands imaxima-to-html and imaxima-latex, respectively, making it a convenient way to generate lecture notes or parts of papers. The HTML export is serviceable out of the box, but the current state of LaTeX export fails to create correct graphics insertion commands, requiring some extra ad hoc post-processing steps.

The Emacs session depicted also illustrates a few additional Maxima features, such as the use of infinity, sums, and defining functions.

In the space available, I can't even scratch the surface of all the math that Maxima can do. It has grown by accretion over the decades, and continues to grow, as mathematicians take advantage of its extensible nature to teach it the secrets of their discipline's sundry specialties. Maxima is especially congenial to the Lisp programmer, who can drop into its Lisp subsystem at the interactive prompt and make contact with the internal representation of its mathematical expressions.

Sage

In 2006 a single developer, Ondrej Certik, started a project called SymPy, which is a symbolic mathematics program, like Maxima, written entirely in Python. It grew quickly, and is now a mature project with scores of contributors. SymPy can be used from a specially wrapped IPython, providing an experience similar to Maxima in the terminal, or as a library. It would deserve its own section in this article were it not easier to discuss it in the context of Sage.

Sage is an enormous system for symbolic and numerical mathematics. It is unique in presenting a unified interface to 90 distinct components. Behind the scenes, Sage will automatically use the appropriate component to perform the calculation or manipulation that the user desires; or, when there is more than one way to do something, Sage can be directed to use a particular library or algorithm.

Because of this, Sage can handle optimization problems, astronomical calculations, elliptic curves, number theory, interval arithmetic, networks, cryptography, statistics, Rubik's cubes, ray tracing, and much else that I don't understand. It can display 2D and interactive 3D graphics, including visualizations of molecular structures. It includes embedded versions of Python (with NumPy and many other Python libraries), R, SciPy, SymPy, Maxima, and many other subsystems. Sage even claims to be able to outsource computations to the Wolfram Alpha computational engine, but in my testing this did not work.

Naturally, Sage is a big download. The usual way to install it is to download a 1GB archive from headquarters and expand that to a 3GB directory tree. Start it by typing ./sage in a terminal from the SageMath directory. This approach is convenient, but may result in some redundant installations on your system. On Ubuntu, at least, there is also a PPA that will allow installation through its package manager.

Sage is based on Python rather than Lisp. It has two interfaces, each of which presents a version of Python with superpowers. After typing the sage command you will be faced with a wrapped IPython prompt, as when using SymPy. You can interact with Python normally, but you will find a few alterations in syntax; for example, ^ is used for exponentiation rather than **. You can perform symbolic math manipulations (and numerical calculations) from the prompt just as with Maxima, but with a somewhat different syntax (no semicolons required). There is no need to import any libraries, as everything has been set up within the special IPython environment. You can plot your results, but rather than gnuplot Sage uses matplotlib for 2D graphics and the Jmol Java molecular viewer to put 3D graphs in a window where you can interact with them.

[Sage notebook]

Where Sage really shines is in its notebook interface. If you type notebook() at the IPython prompt, Sage starts a web server and connects it to a new tab in your browser. Here you can talk to Sage just as in the IPython interface, but the responses will be typeset by jsMath, which uses an embedded JavaScript version of the TeX mathematical typesetting algorithms. Thanks to AJAX and other JavaScript magic, interaction using the notebook is smooth; there are keyboard shortcuts for evaluation and for manipulating the "cells" into which the notebook is organized. Graphics are embedded into the page, and you can interact with 3D plots directly, zooming and spinning with the mouse. With a single click, the notebook can be converted into a neat HTML version suitable for printing or for use as a web page. You can even share the live notebook online.

The figure shows an extract from a Sage notebook in Firefox, while playing with the included graph theory packages. It gives some idea of the appearance, but cannot convey the fun of using Sage. This project has succeeded in gathering a carefully curated set of components and presenting them with a unified interface that is powerful and enjoyable to use.

Specialized packages

Maxima and Sage, powerful and wide-ranging as they are, are the general practitioners of the symbolic math world. Sometimes one needs to consult a specialist. Here I survey a few of the more narrowly focused mathematics systems, some of which are research projects, such as a system for symbolic computations in general relativity.

A related project is Cadabra, designed to help with the tensor manipulations and other math used in field theory. Cadabra is unusual in that the input language as well as the output are a subset of TeX. It's available as a reasonably up-to-date Ubuntu package.

While on the subject of physics, the FORM project is popular with particle theorists. Interaction is through text files that define the computation to be performed, and which can be processed in a multi-threaded, multi-processor, or sequential style.

Fermat, the personal project of Robert H. Lewis of Fordham University, specializes in polynomial and matrix algebra over the rational numbers and finite fields. It's the best in class for the specialized set of algebraic problems that it's designed for.

The CoCoA (Computations in Commutative Algebra) System specializes in polynomial systems and commutative algebra. It can employ Gröbner basis computations, unlike Fermat. It can also do map coloring and logic problems.

Macaulay2 concentrates on algebraic geometry and commutative algebra. It's been supported by the National Science Foundation since 1992. You communicate with Macaulay2 through a its own specialized, interpreted language.

TRIP specializes in perturbation series computations, specially adapted to celestial mechanics. In development since 1988, TRIP does both numerical and symbolic work, and is integrated with gnuplot.

I hope this incomplete roundup of a handful of specialized mathematics packages in this section provides a general impression of the range of activity in this field. For anyone with even a nascent interest in mathematics, systems like Sage, in particular, can make exploration of this world a great deal of fun.

Comments (29 posted)

A look at darktable 2.2.0

January 3, 2017

This article was contributed by Nathan Willis

In what is becoming its annual tradition, the darktable project released a new stable version of its image-editing system at the end of December. The new 2.2 release incorporates several new photo-correction features of note, including automatic repair of distorted perspectives and the ability to reconstruct highlights that are washed out in some color channels but not all—a type of overexposure that other editors can miss. There is a new image-warping tool that lets users edit image pixels (a first for darktable, which has historically focused on image-wide tasks like color correction). And there is at least one new tool that may prove intriguing even to users who prefer editing images in some other program: a utility for inspecting and editing color-mapping look-up tables.

Source code bundles are available for download through the project's GitHub repository and binary packages are already available for a wide variety of popular Linux distributions. Users of the 2.0 series should note, however, that opening existing darktable edit files with the 2.2 release will automatically migrate them to the newer format and render them subsequently unopenable with darktable 2.0.

New perspectives

For many users, the most useful new addition in this release will be the automatic perspective-correction tool. Imagine having an image like the one below, where straight lines appear curved due to distortion:

[The perspective-correction tool in darktable]

Using an algorithm from the Windows-only free-software program ShiftN, this new tool automatically detects off-vertical and off-horizontal lines in an image and computes the transformation needed to create a perfectly aligned, perpendicular output image.

[The perspective-correction tool in darktable]

If the algorithm does erroneously mark lines that should not be used when transforming the photo, the user can simply deselect them before generating the correction.

The user can choose whether to apply vertical correction, horizontal correction, or a combination of both, and the parameters are adjustable (although only in truly pathological cases is the algorithm likely to need much adjustment). There are also parameters available for correcting rotation and for applying a lens shift if either of those functions is necessary to align or re-center the image.

Highlights in 2.2

Washed-out highlights in an image usually occur when the light hitting the photosensor meets or exceeds the maximum value that the sensor can measure; the pixel's value then gets clipped and detail is lost. But each pixel in a color image sensor consists of separate red, green, and blue monochrome sensors (at least, for the most common camera types), and it is possible that only one or two of those subpixels has been maxed out. Darktable deals with these cases in a different manner than the case where all three colors are washed out: it reconstructs luminance information from the non-overexposed color channels. That produces grayscale pixels that have at least some texture (as opposed to being flat fields of plain white). So, while the clipped region is still nearly white, it can still exhibit some gradation and reveal some shapes.

This option is the "reconstruct in LCh" mode of darktable's existing highlight-reconstruction tool but, in prior releases, it simply did not work—despite how nice it sounds in theory. In the 2.2 release, "reconstruct in LCh" has been rewritten from scratch and now works as advertised. Moreover, darktable now offers an on-canvas indication of which subpixels are clipped and which are not: a checkerboard pattern utilizing red, green, and blue checks in the washed-out image region.

This clipping information can be computed from the original raw camera file, even before standard transformations like white balancing are performed. When this indicator is activated, it enables the user to spot instances where it is possible to recover more image data from a washed-out image than would otherwise be possible. In the case where all subpixels are clipped, no detail can be recovered with the "reconstruct in LCh" mode. As was mentioned in our look at the 2.0 release, darktable's highlight-reconstruction tool also offers a way to fill in these entirely washed-out areas by copying colors from the surrounding pixels, but that option is something of a last resort. The now-working "reconstruct in LCh" mode is likely preferable.

Strictly speaking, of course, one should not take overexposed images in the first place (perhaps, instead, bracketing exposures if one is unsure of how to get the best shot), but "only take perfect pictures" is hardly practical advice. And overexposed pixels can result from image processing itself; any time the user applies exposure compensation in darktable or some other program, clipped highlights can be among the side effects.

Speaking of bracketing exposures, darktable 2.2 adds another tool designed to help with difficult-to-capture situations. In scenarios where the dynamic range of a scene is too wide to be captured in a single shot, the photographer can shoot multiple exposures (e.g., one to capture the highlights and one for the shadows). Those exposures can then be combined via darktable's new "exposure fusion" module. In essence, the two frames (or however many were taken) are stacked together, then the lighter portions of the darker image and the darker portions of the lighter image are blended to produce one image that looks more-or-less correct everywhere.

This is same the technique found in the Enfuse utility, and similar approaches are available in other "high dynamic range" (HDR) image-processing tools like Luminance HDR (both of which LWN looked at briefly in 2012). Sadly, neither Enfuse nor Luminance HDR has made much progress toward a new stable release since 2012. So the addition of the exposure fusion module in darktable is a welcome sight. Perhaps that is the better option in the long run, since using a single-purpose application like Enfuse makes for a more complicated workflow than most users want. But all of the usual caveats about HDR images apply to darktable's new module: it is easy to overdo the blending process, creating distracting artifacts like halos or producing weird, washed-out looking results. Proceed with caution.

Distort all the things

A key distinction between photo-manipulation programs like darktable and RawTherapee and raster image editors like GIMP is that the former are intentionally restricted to "post-production" image-tuning operations. That means they focus on making adjustments to the hue, saturation, and lightness of the pixels in the image as a whole (or in large portions of the whole), as opposed to painting or drawing with tools onto a canvas. Various names are trotted out for such applications: "raw photo editor" was one of the first; "photo workflow application" is more recent, although neither really seems to communicate the idea unambiguously.

On the plus side, "workflow" adjustments can easily be implemented as non-destructive transformations, and the operations used on any particular image can be saved in a compact file format. The downside is that, in real life, one eventually runs into some situations where on-canvas editing is required.

The darktable 2.2 release adds what could reasonably be considered the application's first on-canvas tool for image manipulation (with possible exceptions going to special cases like flipping and rotating). It is called Liquify and it lets the user deform the image by pinching, stretching, and warping pixels.

[The liquify tool in darktable 2.2]

The name "Liquify" is seemingly borrowed from Adobe Photoshop, though similar functionality can also be found in GIMP's IWarp filter.

Darktable lets the user add a single-point warp node that will stretch, compress, and twist the surrounding pixels within a user-defined radius, or the user can connect several such nodes along a vector path and warp a larger portion of the image. To be sure, the Liquify tool will not suffice for every possible operation, but it is an important first step. If bending or reshaping one portion of a photograph is all that is needed, doing so in darktable is more convenient that exporting the image to a separate raster file and opening it with GIMP.

Darktable is looking up

Whereas the Liquify tool manipulates pixel positions in space, the vast majority of darktable's other functions manipulate pixel colors in some specified fashion: adjusting the white point, brightening the dark regions, shifting certain hues, and so on. The final new tool in the 2.2 release is another color-adjustment feature, but it is a feature [Color look-up tables in darktable 2.2] that can best be thought of as a generic color-mapping function. The color look-up table (CLUT) tool supports remapping all of the colors in the image based on some predefined set of transformations.

Remappings of this type are how "film emulation" features work: when someone takes the time to measure the output of known sample images exposed on Kodachrome 64, Fuji Velvia 50, or some other film stock, they can produce a mapping that transforms a generic RGB image into something that looks more vintage. Photographer and GIMP team member Pat David, for example, has created several hundred open-source film-emulation CLUTs that are already usable in GIMP's G'MIC plugin and in RawTherapee. But there are other important CLUTs found in the wild, such as those that digital cameras apply when converting a raw image into a JPEG to be saved on the memory card. Being able to apply the same CLUT to a raw image in darktable would ensure that its output matches the camera's JPEG exactly.

This is indeed what the new tool in darktable can do—at least, if the CLUT of interest is available. At present, the process of creating those CLUTs is only beginning, with a handful of mappings available.

Creating a new CLUT can be a time-intensive task. Color spaces are three-dimensional constructs—regardless of whether those dimensions are red-green-blue, hue-saturation-lightness, or something more exotic; a 3D-to-3D transformation matrix thus involves looking at a lot of sample points. But the new darktable release adds a utility called darktable-chart that can assist with the process. To match a camera's output, the user will need to purchase a calibrated IT8 target and take a reference photo, but nothing stops interested parties from fiddling around to create interesting CLUT mappings of their own. In fact, the popularity of products like Instagram suggests that it is hard to stop people from fiddling with CLUT transformations.

In the long run, CLUT support will let darktable users easily apply a large variety of color styles to their photographs, whether those styles are designed to emulate film or not. But darktable-chart may prove useful in its own right, because—as David has mentioned on his blog—the existing process for creating a CLUT is complex.

From the shadows

While the aforementioned tools are the biggest changes in the new release, there are scores of smaller improvements to be found as well. The keyboard support introduced in version 2.0 is expanded upon: arrow keys can be used to adjust sliders and controls, and modifier keys can be used to change the rates of adjustment (Shift is a 10x increase in the adjustment increment, while Control is a 0.1x reduction in the increment).

The script-friendly command-line version of darktable, darktable-cli, can now take entire directories as an input argument. Watermarks generated by darktable can now include geolocation information. And, on Linux, the application now tells the window manager when it has completed a batch operation, thus enabling the user to be notified when another application has focus.

There is also initial support for undo and redo on image-adjustment operations. That may seem like a fundamental missing piece, but one must remember that darktable's adjustments are non-destructive and most can only be applied once (e.g., you would not adjust the white balance of a photograph twice). So in most cases, undoing or changing an adjustment was a simple matter of deactivating it or resetting it to the default parameters. Still, this is a nice improvement for how most people think of editing images.

At a lower level, the project has implemented initial support for some new photosensor subpixel patterns, including CYGM and RGBE arrays. OpenCL support has also been improved, with OpenCL now used to demosaic raw images, and the first builds for ARM devices are available. Finally, the program now uses Pango for text rendering, which will enable it to be used with right-to-left languages.

Interfacing

The new feature set boasts a lot of useful additions. But, if there is any criticism to be leveled at the 2.2 release, it is that darktable still hides so much of its functionality behind user-interface choices that are invisible while simply using the program.

A good example is the substantial set of options in the perspective-correction tool that are only made available by holding down modifier keys when clicking on the "automatic fit" buttons. The existence of the modifiers is only discoverable by hovering the mouse over the buttons long enough to bring up the tooltip hints; for an application offering as many functions as darktable does, it is simply not feasible to expect users to memorize every combination of Shift, Control, and left- and right-clicking for every tool.

Other applications—for example, GIMP—find a way to present such options in a persistent message-bar area or in a field within the toolbox itself; there is no reason darktable cannot do the same. Instead, having to pause and hover the mouse over every tool before you can see how to use it is reminiscent of darktable's early days, when the filters and controls had no text labels and users had to guess at the meaning of cryptic icons. The application has come a long way since then; it would seem that it still has some distance to travel.

Comments (5 posted)

Page editor: Jonathan Corbet

Security

Fuzzing open source

By Jake Edge
January 4, 2017

Fuzz testing finds bugs, so it stands to reason that continuous fuzz testing will find more bugs and find them sooner. That is part of the premise behind the OSS-Fuzz program announced by Google on December 1. Since many of the bugs found by fuzzing have security implications, discovering more earlier can only be a good thing for the security of our systems.

OSS-Fuzz is meant to apply fuzzing power to free and open-source software projects, especially those that are part of the critical internet infrastructure. As might be guessed based on that, the Core Infrastructure Initiative has worked with Google to develop OSS-Fuzz. The underlying technology used comes partly from the ClusterFuzz project that has been successfully employed to find a large number of bugs in the Chrome browser.

The basic idea is to continuously fuzz test the latest source version of the projects that have signed up (and been approved) for the OSS-Fuzz beta test. Initially, OSS-Fuzz will be using the libFuzzer coverage-guided fuzzing library in conjunction with AddressSanitizer (ASan) to try to find various types of memory misuse that could be exploited by attackers. That process is parallelized across thousands of virtual machines such that some four trillion test cases are run per week (or were at the time of the announcement, that number may have grown since then).

The announcement describes an early success story for the project:

Our initial trials with OSS-Fuzz have had good results. An example is the FreeType library, which is used on over a billion devices to display text (and which might even be rendering the characters you are reading now). It is important for FreeType to be stable and secure in an age when fonts are loaded over the Internet. Werner Lemberg, one of the FreeType developers, was an early adopter of OSS-Fuzz. Recently the FreeType fuzzer found a new heap buffer overflow only a few hours after the source change:
ERROR: AddressSanitizer: heap-buffer-overflow on address 0x615000000ffa
READ of size 2 at 0x615000000ffa thread T0
SCARINESS: 24 (2-byte-read-heap-buffer-overflow-far-from-bounds)
   #0 0x885e06 in tt_face_vary_cvtsrc/truetype/ttgxvar.c:1556:31
OSS-Fuzz automatically notified the maintainer, who fixed the bug; then OSS-Fuzz automatically confirmed the fix. All in one day!

Many bugs have been found, 150 at the time of the announcement, though there are 200 entries (with 177 verified) in the bug tracker as of this writing. Roughly half of those are marked as security bugs. All of the bugs found will be disclosed within 90 days of their discovery in keeping with Google's own disclosure policy.

ClusterFuzz does more than just parallelize the fuzzing process, it manages test cases to both whittle them down to something small that still reproduces the problem and to continue to run them to detect when the problem is fixed and, after that, whether regressions bring it back. It also tries to determine which change (or set of changes) introduced a problem by doing a bisection.

Projects interested in joining the OSS-Fuzz effort will need to add some fuzz targets to their code. These targets are functions that accept a byte array from the fuzzing engine and use that input in an "interesting" way using the project's API. These fuzz targets are not libFuzzer-specific and can be used by other fuzzers (there is talk of adding support for american fuzzy lop, for example). Those fuzz targets must be integrated with the build and test system for the project.

After that, a corpus of both good and bad inputs for the fuzz target should be created. That gives the fuzzing engine a starting point that has the proper structure for the input data (and the bad inputs will help show ways to "break" the format), which eliminates a whole bunch of wasted effort on inputs that won't get past the first tests in the code. In coverage-guide fuzzing, the binary is instrumented to provide information on the code that a given input has caused to be executed. Changing the input data to cause new paths through the code to be taken is the underlying mechanism for coverage-guided fuzzing.

To set up a new project, a directory needs to be created under projects in a GitHub clone of the oss-fuzz Git repository. It needs a Dockerfile to describe the container environment for building the project and its fuzz targets, a build script (build.sh) that will run in the container to generate a build of the project, and a configuration file (project.yaml) with some project metadata. A pull request can be made to the oss-fuzz project and if it is accepted, the project will be tossed into the ClusterFuzz hopper.

The FAQ lists two main criteria for a project's inclusion in the beta: exposure to remote input and the number of dependent users (people and projects). Right now, the goal is to add "established projects that have a critical impact on infrastructure and user security", though expanding the reach of OSS-Fuzz is in the plans. The current project list has over 50 entries that reads a bit like a "who's who" of open-source projects that fit the criteria including libreoffice, curl, libarchive, pcre2, libpng, openssl, postgresql, sqlite3, tor, strongswan, and so on. There is also a build status page where the most recent build log for each project can be accessed.

Fuzzing takes a lot of resources, but it is an inherently parallelizable process, so it is a perfect match for Google and others with enormous clusters of computers. Though it has taken some time, the security-testing story for open-source projects has certainly gotten better over the years. The lessons of Heartbleed (and, seemingly to a lesser extent, some of the larger vulnerabilities of yesteryear) have not gone completely unheeded. Beyond that, it is good to see other projects that are applying fuzzing to the kernel. Fuzzing is no panacea, but it can certainly help find the next "zero day" before it actually becomes one.

Comments (1 posted)

Brief items

Security quotes of the fortnight

In our implementation, the kernel notifies the hypervisor each time a process is created or destroyed. The permissions associated with that process are stored at the hypervisor level and verified to ensure that they are internally consistent. For instance, if a process is running as an unprivileged user, it should not be able to directly create a child process that is running as root. An attack on the kernel may be able to modify the kernel's internal representation of this state, but will not be able to affect the hypervisor's state.

This state can then be verified whenever a process performs an action requiring a permissions check. For example, when a process requests that a file be opened, the kernel now calls out to the hypervisor. The hypervisor is then able to examine the process state and ensure that it remains consistent with its internal representation of process state. If so, execution is allowed to continue. If not, this indicates that the kernel's internal process state has been modified and the administrator can be alerted that the container has been compromised. The container state can be saved to disk and the container either terminated or restarted in a clean state.

By isolating examination to cases where a permissions check is performed, the overhead of this approach is minimised to the point where most real-world use cases will see no measurable performance impact.

Matthew Garrett on a way for rkt to detect privilege escalation

Then one day, CVE-2002-0059 happened. CVE-2002-0059 was a security flaw that was easy to trigger and easy to exploit. It affected network listening applications that used zlib (which was most of them). Today if this came out, it would make heartbleed look like a joke. This was long long ago though, most people didn't know anything about security (or care in many instances). If you look at the updates that came out because of this flaw, they were huge because literally hundreds of software applications and libraries had to be patched. This affected Windows and Linux, which was most everything back then. Today it would affect every device on the planet. This isn't an exaggeration. Every. Single. Device.
Josh Bressers

In a sense, class breaks are not a new concept in risk management. It's the difference between home burglaries and fires, which happen occasionally to different houses in a neighborhood over the course of the year, and floods and earthquakes, which either happen to everyone in the neighborhood or no one. Insurance companies can handle both types of risk, but they are inherently different. The increasing computerization of everything is moving us from a burglary/fire risk model to a flood/earthquake model, which a given threat either affects everyone in town or doesn't happen at all.

But there's a key difference between floods/earthquakes and class breaks in computer systems: the former are random natural phenomena, while the latter is human-directed. Floods don't change their behavior to maximize their damage based on the types of defenses we build. Attackers do that to computer systems. Attackers examine our systems, looking for class breaks. And once one of them finds one, they'll exploit it again and again until the vulnerability is fixed.

Bruce Schneier

Comments (13 posted)

How to find Android apps that respect user privacy (opensource.com)

Over at opensource.com, Joshua Allen Holm writes about two projects (Privacy Friendly Apps and Simple Mobile Tools) that are producing Android apps that are open source, privacy respecting, and only request the privileges they need. "Below, I take a look at two projects producing a wide variety of Android apps designed to only request the permissions they require to function. These apps cover a wide range of functions with each app being focused on doing only one task and doing that task well. Users looking for well designed, functional apps with no extra features and no anti-features (i.e., advertisements) should consider checking these apps out. Developers, especially those just getting started with developing for Android, should take a look at the source code for these apps to learn about developing apps with a focus on using minimal permissions and respecting users' privacy."

Comments (none posted)

The Year Encryption Won (Wired)

It's not entirely clear that the title is justified, but Wired does cover some progress on the encryption front in 2016. "End-to-end encryption, which ensures that the only people who can see your communications are you and the person on the receiving end, certainly isn’t new. But in 2016, encryption went mainstream, reaching billions of people all over the world. Even more significantly, it overcame its most aggressive legal challenge yet, in a prolonged standoff between Apple and the FBI. And just this week, a Congressional committee affirmed the importance of encryption, giving hope that future laws around the topic will include at least a modicum of sanity. There’s still a long way to go, and any gains that were made could potentially be rolled back, but for now it’s worth taking a step back to appreciate just how far encryption came this year. As far as silver linings go, you could do a lot worse."

Comments (35 posted)

Bottomley: TPM2 and Linux

James Bottomley looks at Trusted Platform Module (TPM) version 2. "Recently Microsoft started mandating TPM2 as a hardware requirement for all platforms running recent versions of windows. This means that eventually all shipping systems (starting with laptops first) will have a TPM2 chip. The reason this impacts Linux is that TPM2 is radically different from its predecessor TPM1.2; so different, in fact, that none of the existing TPM1.2 software on Linux (trousers, the libtpm.so plug in for openssl, even my gnome keyring enhancements) will work with TPM2. The purpose of this blog is to explore the differences and how we can make ready for the transition." (Thanks to Paul Wise)

Comments (1 posted)

New vulnerabilities

bash: code execution

Package(s):bash CVE #(s):CVE-2016-9401
Created:January 2, 2017 Updated:January 6, 2017
Description: From the Gentoo advisory:

Multiple vulnerabilities were found in Bash, the worst of which may allow execution of arbitrary code.

A local attacker could possibly execute arbitrary code with the privileges of the process, or cause a Denial of Service condition.

Alerts:
Mageia MGASA-2017-0005 bash 2017-01-06
Gentoo 201701-02 bash 2017-01-01

Comments (none posted)

borgbackup: two vulnerabilities

Package(s):borgbackup CVE #(s):
Created:January 4, 2017 Updated:January 4, 2017
Description: borgbackup 1.0.9 is available (includes security fixes). From the borgbackup changelog.

A flaw in the cryptographic authentication scheme in Borg allowed an attacker to spoof the manifest. The attack requires an attacker to be able to

  1. insert files (with no additional headers) into backups
  2. gain write access to the repository
This vulnerability does not disclose plaintext to the attacker, nor does it affect the authenticity of existing archives.

If you have archives in your repository that were made with attic <= 0.13 (and later migrated to borg), running borg check would report errors in these archives.

The reason for this is a invalid (and useless) metadata key that was always added due to a bug in these old attic versions.

If you run borg check --repair, things escalate quickly: all archive items with invalid metadata will be killed. Due to that attic bug, that means all items in all archives made with these old attic versions.

Alerts:
Fedora FEDORA-2016-3b51e954fd borgbackup 2017-01-03
Fedora FEDORA-2016-6e66f01186 borgbackup 2017-01-03

Comments (none posted)

botan: integer overflow

Package(s):botan CVE #(s):CVE-2016-9132
Created:December 23, 2016 Updated:January 16, 2017
Description: From the Red Hat bugzilla entry:

While decoding BER length fields, an integer overflow could occur. This could occur while parsing untrusted inputs such as X.509 certificates. The overflow does not seem to lead to any obviously exploitable condition, but exploitation cannot be positively ruled out. Only 32-bit platforms are likely affected; to cause an overflow on 64-bit the parsed data would have to be many gigabytes.

Alerts:
Debian-LTS DLA-786-1 botan1.10 2017-01-16
Fedora FEDORA-2016-7de64a450f botan 2016-12-22
Fedora FEDORA-2016-3b59109c48 botan 2016-12-22

Comments (none posted)

chicken: two vulnerabilities

Package(s):chicken CVE #(s):CVE-2013-2024 CVE-2014-9651
Created:January 2, 2017 Updated:January 4, 2017
Description: From the CVE entry:

Buffer overflow in CHICKEN 4.9.0.x before 4.9.0.2, 4.9.x before 4.9.1, and before 5.0 allows attackers to have unspecified impact via a positive START argument to the "substring-index[-ci] procedures." (CVE-2014-9651)

From the Gentoo advisory:

A remote attacker could possibly execute arbitrary code with the privileges of the process, or cause a Denial of Service condition.

Alerts:
Gentoo 201612-54 chicken 2016-12-31

Comments (none posted)

curl: information leak

Package(s):curl CVE #(s):CVE-2016-9594
Created:January 2, 2017 Updated:January 5, 2017
Description: From the Arch Linux advisory:

libcurl's (new) internal function that returns a good 32bit random value was implemented poorly and overwrote the pointer instead of writing the value into the buffer the pointer pointed to. This random value is used to generate nonces for Digest and NTLM authentication, for generating boundary strings in HTTP formposts and more. Having a weak or virtually non-existent random there makes these operations vulnerable. This function has been introduced in 7.52.0

Alerts:
Gentoo 201701-47 curl 2017-01-19
Arch Linux ASA-201701-8 libcurl-gnutls 2017-01-04
Arch Linux ASA-201701-7 libcurl-compat 2017-01-04
Arch Linux ASA-201701-11 lib32-libcurl-gnutls 2017-01-04
Arch Linux ASA-201701-10 lib32-libcurl-compat 2017-01-04
Arch Linux ASA-201701-9 lib32-curl 2017-01-04
Arch Linux ASA-201612-22 curl 2016-12-31

Comments (none posted)

curl: buffer overflow

Package(s):curl CVE #(s):CVE-2016-9586
Created:December 28, 2016 Updated:January 4, 2017
Description: From the Red Hat bugzilla:

libcurl's implementation of the printf() functions triggers a buffer overflow when doing a large floating point output. The bug occurs when the conversion outputs more than 255 bytes.

The flaw happens because the floating point conversion is using system functions without the correct boundary checks.

The functions have been documented as deprecated for a long time and users are discouraged from using them in "new programs" as they are planned to get removed at a future point. But as the functions are present and there's nothing preventing users from using them, we expect there to be a certain amount of existing users in the wild.

If there are any application that accepts a format string from the outside without necessary input filtering, it could allow remote attacks.

This flaw does not exist in the command line tool.

We are not aware of any exploit of this flaw.

Alerts:
Gentoo 201701-47 curl 2017-01-19
Arch Linux ASA-201701-8 libcurl-gnutls 2017-01-04
Arch Linux ASA-201701-7 libcurl-compat 2017-01-04
Arch Linux ASA-201701-11 lib32-libcurl-gnutls 2017-01-04
Arch Linux ASA-201701-10 lib32-libcurl-compat 2017-01-04
Arch Linux ASA-201701-9 lib32-curl 2017-01-04
Fedora FEDORA-2016-86d2b5aefb curl 2016-12-31
Arch Linux ASA-201612-22 curl 2016-12-31
Debian-LTS DLA-767-1 curl 2016-12-29
Fedora FEDORA-2016-edbb33ab2e curl 2016-12-27

Comments (none posted)

cxf: two vulnerabilities

Package(s):cxf CVE #(s):CVE-2016-6812 CVE-2016-8739
Created:January 2, 2017 Updated:January 4, 2017
Description: From the Red Hat bugzilla [1], [2]:

[1] Apache CXF HTTP transport module uses FormattedServiceListWriter to provide an HTML page which lists the names and absolute URL addresses of the available service endpoints. The module calculates the base URL using the current HttpServletRequest. The calculated base URL is used by FormattedServiceListWriter to build the service endpoint absolute URLs. If the unexpected matrix parameters have been injected into the request URL then these matrix parameters will find their way back to the client in the services list page which represents an XSS risk to the client.

[2] Apache CXF JAX-RS implementation provides a number of Atom MessageBodyReaders. These readers use Apache Abdera Parser to parse Atom feeds or Entries, with this Parser expanding XML entities by default. This represents a major XXE risk.

Alerts:
Fedora FEDORA-2016-2361e1e07a cxf 2016-12-31

Comments (none posted)

cyassl: multiple vulnerabilities

Package(s):cyassl CVE #(s):CVE-2014-2896 CVE-2014-2897 CVE-2014-2898 CVE-2014-2899 CVE-2014-2900
Created:January 2, 2017 Updated:January 4, 2017
Description: From the CVE entries:

wolfSSL CyaSSL before 2.9.4 allows remote attackers to cause a denial of service (NULL pointer dereference) via (1) a request for the peer certificate when a certificate parsing failure occurs or (2) a client_key_exchange message when the ephemeral key is not found. (CVE-2014-2899)

wolfSSL CyaSSL before 2.9.4 does not properly validate X.509 certificates with unknown critical extensions, which allows man-in-the-middle attackers to spoof servers via crafted X.509 certificate. (CVE-2014-2900)

From the Gentoo advisory:

Multiple vulnerabilities have been found in CyaSSL, the worst of which may allow attackers to execute arbitrary code.

An attacker could possibly execute arbitrary code with the privileges of the process, cause a Denial of Service condition, or conduct a man-in-the-middle attack.

Alerts:
Gentoo 201612-53 cyassl 2016-12-31

Comments (none posted)

dovecot: denial of service

Package(s):dovecot CVE #(s):CVE-2016-8652
Created:December 22, 2016 Updated:January 4, 2017
Description: From the Red Hat bugzilla entry:

If auth-policy component has been activated in Dovecot, then remote user can use SASL authentication to crash auth component.

Alerts:
Fedora FEDORA-2016-daf90926d4 dovecot 2017-01-02
Fedora FEDORA-2016-bb22a24d3d dovecot 2016-12-22

Comments (none posted)

exim4: information leak

Package(s):exim4 CVE #(s):CVE-2016-9963
Created:December 26, 2016 Updated:January 6, 2017
Description: From the Exim advisory:

Exim leaks the private DKIM signing key to the log files. Additionally, if the build option EXPERIMENTAL_DSN_INFO=yes is used, the key material is included in the bounce message.

Alerts:
Ubuntu USN-3164-1 exim4 2017-01-05
Debian-LTS DLA-762-1 exim4 2016-12-25
Debian DSA-3747-1 exim4 2016-12-25

Comments (none posted)

firejail-lts: denial of service

Package(s):firejail-lts CVE #(s):
Created:December 28, 2016 Updated:January 4, 2017
Description: From the Gentoo advisory:

Multiple vulnerabilities have been discovered in Firejail. Please review upstream's release notes for details.

A remote attacker could possibly bypass sandbox protection, cause a Denial of Service condition, or change a system's DNS server.

Alerts:
Gentoo 201612-48 firejail-lts 2016-12-27

Comments (none posted)

gdk-pixbuf2: unspecified

Package(s):gdk-pixbuf2 CVE #(s):
Created:December 23, 2016 Updated:January 4, 2017
Description: Somewhere in the mess below evidently lie some security updates. From the Fedora advisory:

gdk-pixbuf 2.36.2 release. * Remove the pixdata loader (#776004) * Fix integer overflows in the jpeg loader (#775218) * Add an external thumbnailer for images * Fix a NULL pointer dereference (#776026) * Fix a memory leak (#776020) * Support bmp headers with bitmask (#766890) * Add tests for scaling (#80925) * Handle compressed pixdata in resources (#776105) * Avoid a buffer overrun in the qtif loader ($#775648) * Fix a crash in the bmp loader (#775242) * Fix crash opening pnm images with large dimensions (#775232) * Prevent buffer overflow in the pixdata loader (#775693) * Translation updates

Alerts:
Fedora FEDORA-2016-a1e8589ef9 gdk-pixbuf2 2016-12-22

Comments (none posted)

graphicsmagick: denial of service

Package(s):GraphicsMagick CVE #(s):CVE-2016-9830
Created:December 22, 2016 Updated:January 4, 2017
Description: Nothing seems to clearly define the bug, but the SUSE bugzilla entry (and links from there) give some hints:

This is an old memory failure, discovered time ago. The maintainer, Mr. Bob Friesenhahn was able to reproduce the issue; I’m quoting his feedback about: The problem is that the embedded JPEG data claims to have dimensions 59395×56833 and this is only learned after we are in the JPEG reader.

Alerts:
Debian DSA-3746-1 graphicsmagick 2016-12-24
openSUSE openSUSE-SU-2016:3238-1 GraphicsMagick 2016-12-22

Comments (none posted)

gstreamer-plugins-good: code execution

Package(s):gstreamer-plugins-good CVE #(s):CVE-2016-9810
Created:December 30, 2016 Updated:January 4, 2017
Description: From the SUSE advisory:

CVE-2016-9810: A maliciously crafted flic file can still cause invalid memory accesses [bsc#1013663]

Alerts:
openSUSE openSUSE-SU-2017:0298-1 gstreamer-0_10-plugins-good 2017-01-27
SUSE SUSE-SU-2017:0225-1 gstreamer-0_10-plugins-good 2017-01-20
SUSE SUSE-SU-2017:0237-1 gstreamer-0_10-plugins-good 2017-01-20
SUSE SUSE-SU-2017:0210-1 gstreamer-0_10-plugins-good 2017-01-19
openSUSE openSUSE-SU-2017:0151-1 gstreamer-plugins-good 2017-01-16
openSUSE openSUSE-SU-2017:0141-1 gstreamer-plugins-good 2017-01-16
openSUSE openSUSE-SU-2017:0160-1 gstreamer-0_10-plugins-good 2017-01-16
openSUSE openSUSE-SU-2017:0071-1 gstreamer-plugins-good 2017-01-08
SUSE SUSE-SU-2016:3303-1 gstreamer-plugins-good 2016-12-30
SUSE SUSE-SU-2016:3288-1 gstreamer-plugins-good 2016-12-29

Comments (none posted)

httpd: three vulnerabilities

Package(s):httpd CVE #(s):CVE-2016-8743 CVE-2016-2161 CVE-2016-0736
Created:December 26, 2016 Updated:January 4, 2017
Description: From the Red Hat bugzilla:

CVE-2016-0736: It was found that session data/cookies presented to mod_session_crypto were not authenticated that can lead to deciphering or tampering with a padding oracle attack.

Affects version 2.4.x up to 2.4.23

CVE-2016-2161: It was found that malicious input to mod_auth_digest will cause the server to crash, and each instance continues to crash even for subsequently valid requests.

Affects versions 2.4.x up to 2.4.23

CVE-2016-8743: Apache HTTP Server, prior to release 2.4.25, accepted a broad pattern of unusual whitespace patterns from the user-agent, including bare CR, FF, VTAB in parsing the request line and request header lines, as well as HTAB in parsing the request line. Any bare CR present in request lines was treated as whitespace and remained in the request field member "the_request", while a bare CR in the request header field name would be honored as whitespace, and a bare CR in the request header field value was retained the input headers array. Implied additional whitespace was accepted in the request line and prior to the ':' delimiter of any request header lines.

These defects represent a security concern when httpd is participating in any chain of proxies or interacting with back-end application servers, either through mod_proxy or using conventional CGI mechanisms. In each case where one agent accepts such CTL characters and does not treat them as whitespace, there is the possibility in a proxy chain of generating two responses from a server behind the uncautious proxy agent. In a sequence of two requests, this results in request A to the first proxy being interpreted as requests A + A' by the backend server, and if requests A and B were submitted to the first proxy in a keepalive connection, the proxy may interpret response A' as the response to request B, polluting the cache or potentially serving the A' content to a different downstream user-agent.

Affects versions since 2.2.0 up to 2.4.23

Alerts:
Gentoo 201701-36 apache 2017-01-15
Slackware SSA:2016-358-01 httpd 2016-12-23
Fedora FEDORA-2016-d22f50d985 httpd 2016-12-25
Fedora FEDORA-2016-8d9b62c784 httpd 2016-12-25

Comments (none posted)

imagemagick: code execution

Package(s):ImageMagick CVE #(s):CVE-2016-9773
Created:December 22, 2016 Updated:January 4, 2017
Description: From a oss-sec mailing list post:

heap-based buffer overflow in IsPixelGray (pixel-accessor.h) (Incomplete fix for CVE-2016-9556)

Alerts:
openSUSE openSUSE-SU-2017:0023-1 ImageMagick 2017-01-04
SUSE SUSE-SU-2016:3258-1 ImageMagick 2016-12-23
openSUSE openSUSE-SU-2016:3233-1 ImageMagick 2016-12-22

Comments (none posted)

imagemagick: code execution

Package(s):imagemagick CVE #(s):CVE-2016-8707
Created:December 22, 2016 Updated:January 4, 2017
Description: From the Talos vulnerability report:

An exploitable out of bounds write exists in the handling of compressed TIFF images in ImageMagicks’s convert utility. A crafted TIFF document can lead to an out of bounds write which in particular circumstances could be leveraged into remote code execution.. The vulnerability can be triggered through any user controlled TIFF that is handled by this functionality.

Alerts:
openSUSE openSUSE-SU-2017:0023-1 ImageMagick 2017-01-04
SUSE SUSE-SU-2016:3258-1 ImageMagick 2016-12-23
openSUSE openSUSE-SU-2016:3233-1 ImageMagick 2016-12-22
Debian-LTS DLA-756-1 imagemagick 2016-12-21

Comments (none posted)

irc-otr: information disclosure

Package(s):irc-otr irssi-otr CVE #(s):
Created:December 30, 2016 Updated:February 13, 2017
Description: From the SUSE bugzilla entry:

It was discovered that irssi-otr had a flaw in handing data returned by libotr. After the initiation of the OTR session only the first line was sent as a PRIVMSG, while additional data would be sent as raw commands to the IRC server. The additional data would ordinarily be a human-readable HTML-formatted instruction message from libotr, a fixed string. However this is a minor security concern and the remediation avoids further security issues.

Alerts:
Mageia MGASA-2017-0043 irssi-otr 2017-02-07
openSUSE openSUSE-SU-2016:3285-1 irc-otr 2016-12-29

Comments (none posted)

js-jquery: cross-site scripting

Package(s):js-jquery CVE #(s):
Created:December 28, 2016 Updated:January 4, 2017
Description: From the Red Hat bugzilla:

jQuery is vulnerable to Cross-site Scripting (XSS) attacks when a cross-domain ajax request is performed without the dataType option causing text/javascript responses to be executed.

Alerts:
Fedora FEDORA-2016-06e8a3f776 js-jquery1 2016-12-29
Fedora FEDORA-2016-b6cb3e83fa js-jquery1 2016-12-29
Fedora FEDORA-2016-8516b7d6fb js-jquery 2016-12-29
Fedora FEDORA-2016-3368a38282 js-jquery 2016-12-27

Comments (none posted)

kernel: denial of service

Package(s):kernel CVE #(s):CVE-2016-9588
Created:December 23, 2016 Updated:January 4, 2017
Description: From the Red Hat bugzilla entry:

Linux kernel built with the KVM virtualisation support(CONFIG_KVM), with nested virtualisation(nVMX) feature enabled(nested=1), is vulnerable to an uncaught exceptions issue. It could occur if a L2 guest was to throw an exception which is not handled by L1 guest. A L1 guest user could use this flaw to crash the guest resulting in DoS.

Alerts:
Ubuntu USN-3208-2 linux-lts-xenial 2017-02-22
Ubuntu USN-3208-1 linux, linux-snapdragon 2017-02-22
Ubuntu USN-3209-1 linux, linux-raspi2 2017-02-22
Fedora FEDORA-2016-2b1f91e9bd kernel 2016-12-23
Fedora FEDORA-2016-dd895763ac kernel 2016-12-23

Comments (none posted)

kernel: three vulnerabilities

Package(s):kernel CVE #(s):CVE-2012-6704 CVE-2016-7915 CVE-2016-10088
Created:January 2, 2017 Updated:January 4, 2017
Description: From the CVE entries:

The sock_setsockopt function in net/core/sock.c in the Linux kernel before 3.5 mishandles negative values of sk_sndbuf and sk_rcvbuf, which allows local users to cause a denial of service (memory corruption and system crash) or possibly have unspecified other impact by leveraging the CAP_NET_ADMIN capability for a crafted setsockopt system call with the (1) SO_SNDBUF or (2) SO_RCVBUF option. (CVE-2012-6704)

The hid_input_field function in drivers/hid/hid-core.c in the Linux kernel before 4.6 allows physically proximate attackers to obtain sensitive information from kernel memory or cause a denial of service (out-of-bounds read) by connecting a device, as demonstrated by a Logitech DJ receiver. (CVE-2016-7915)

The sg implementation in the Linux kernel through 4.9 does not properly restrict write operations in situations where the KERNEL_DS option is set, which allows local users to read or write to arbitrary kernel memory locations or cause a denial of service (use-after-free) by leveraging access to a /dev/sg device, related to block/bsg.c and drivers/scsi/sg.c. NOTE: this vulnerability exists because of an incomplete fix for CVE-2016-9576. (CVE-2016-10088)

Alerts:
Ubuntu USN-3208-2 linux-lts-xenial 2017-02-22
Ubuntu USN-3208-1 linux, linux-snapdragon 2017-02-22
Ubuntu USN-3209-1 linux, linux-raspi2 2017-02-22
SUSE SUSE-SU-2017:0494-1 the Linux Kernel 2017-02-17
SUSE SUSE-SU-2017:0471-1 kernel 2017-02-15
SUSE SUSE-SU-2017:0464-1 kernel 2017-02-15
openSUSE openSUSE-SU-2017:0458-1 kernel 2017-02-13
SUSE SUSE-SU-2017:0437-1 the Linux Kernel 2017-02-09
SUSE SUSE-SU-2017:0407-1 kernel 2017-02-06
SUSE SUSE-SU-2017:0333-1 kernel 2017-01-30
Debian-LTS DLA-772-1 kernel 2017-01-01

Comments (none posted)

libarchive: denial of service

Package(s):libarchive CVE #(s):CVE-2015-8927
Created:January 2, 2017 Updated:January 4, 2017
Description: From the CVE entry:

The trad_enc_decrypt_update function in archive_read_support_format_zip.c in libarchive before 3.2.0 allows remote attackers to cause a denial of service (out-of-bounds heap read and crash) via a crafted zip file, related to reading the password.

Alerts:
Gentoo 201701-03 libarchive 2017-01-01

Comments (none posted)

libcrypto++: denial of service

Package(s):libcrypto++ CVE #(s):CVE-2016-9939
Created:December 26, 2016 Updated:January 9, 2017
Description: From the Debian advisory:

Gergely Gábor Nagy from Tresorit discovered that libcrypto++, a C++ cryptographic library, contained a bug in several ASN.1 parsing routines. This would allow an attacker to remotely cause a denial of service.

Alerts:
Mageia MGASA-2017-0010 libcryptopp 2017-01-07
Debian-LTS DLA-766-1 libcrypto++ 2016-12-27
Debian DSA-3748-1 libcrypto++ 2016-12-26

Comments (none posted)

libphp-phpmailer: code execution

Package(s):libphp-phpmailer CVE #(s):CVE-2016-10033 CVE-2016-10045
Created:January 2, 2017 Updated:January 18, 2017
Description: From the CVE entries:

The mailSend function in the isMail transport in PHPMailer before 5.2.18, when the Sender property is not set, might allow remote attackers to pass extra parameters to the mail command and consequently execute arbitrary code via a \" (backslash double quote) in a crafted From address. (CVE-2016-10033)

The isMail transport in PHPMailer before 5.2.20, when the Sender property is not set, might allow remote attackers to pass extra parameters to the mail command and consequently execute arbitrary code by leveraging improper interaction between the escapeshellarg function and internal escaping performed in the mail function. NOTE: this vulnerability exists because of an incorrect fix for CVE-2016-10033. (CVE-2016-10045)

Alerts:
Mageia MGASA-2017-0022 php-phpmailer 2017-01-27
Fedora FEDORA-2017-c3dc97e1e1 php-PHPMailer 2017-01-17
Arch Linux ASA-201701-22 wordpress 2017-01-15
Fedora FEDORA-2016-6941d25875 php-PHPMailer 2017-01-06
Debian-LTS DLA-770-2 libphp-phpmailer 2017-01-03
Debian DSA-3750-2 libphp-phpmailer 2017-01-03
Debian-LTS DLA-770-1 libphp-phpmailer 2016-12-31
Debian DSA-3750-1 libphp-phpmailer 2016-12-31

Comments (none posted)

libpng: NULL dereference bug

Package(s):libpng CVE #(s):CVE-2016-10087
Created:January 2, 2017 Updated:January 30, 2017
Description: From the libpng-1.6.27, 1.5.28, and 1.2.57 release announcement:

These all fix a potential "NULL dereference" bug that has existed in libpng since version 0.71 of June 26, 1995. To be vulnerable, an application has to load a text chunk into the png structure, then delete all text, then add another text chunk to the same png structure, which seems to be an unlikely sequence, but it has happened.

Alerts:
Gentoo 201701-74 libpng 2017-01-29
Mageia MGASA-2017-0020 libpng, libpng12 2017-01-22
Fedora FEDORA-2016-0eb1d4ad19 mingw-libpng 2017-01-07
Fedora FEDORA-2016-5c8dce58c9 mingw-libpng 2017-01-07
Fedora FEDORA-2016-1a7e14d084 libpng10 2017-01-07
Fedora FEDORA-2016-a4b06a036b libpng10 2017-01-07
Fedora FEDORA-2016-12c22499dd libpng 2017-01-04
Arch Linux ASA-201701-4 libpng12 2017-01-02
Arch Linux ASA-201701-2 libpng 2017-01-02
Arch Linux ASA-201701-6 lib32-libpng12 2017-01-02
Arch Linux ASA-201701-5 lib32-libpng 2017-01-02
Slackware SSA:2016-365-01 libpng 2016-12-30
Fedora FEDORA-2016-aaf771b7a7 libpng 2017-01-01

Comments (none posted)

libvncserver: two vulnerabilities

Package(s):libvncserver CVE #(s):CVE-2016-9941 CVE-2016-9942
Created:January 4, 2017 Updated:February 21, 2017
Description: From the CVE entries:

Heap-based buffer overflow in rfbproto.c in LibVNCClient in LibVNCServer before 0.9.11 allows remote servers to cause a denial of service (application crash) or possibly execute arbitrary code via a crafted FramebufferUpdate message containing a subrectangle outside of the client drawing area. (CVE-2016-9941)

Heap-based buffer overflow in ultra.c in LibVNCClient in LibVNCServer before 0.9.11 allows remote servers to cause a denial of service (application crash) or possibly execute arbitrary code via a crafted FramebufferUpdate message with the Ultra type tile, such that the LZO payload decompressed length exceeds what is specified by the tile dimensions. (CVE-2016-9942)

Alerts:
Gentoo 201702-24 libvncserver 2017-02-21
Mageia MGASA-2017-0027 libvncserver 2017-01-27
Arch Linux ASA-201701-20 libvncserver 2017-01-13
Ubuntu USN-3171-1 libvncserver 2017-01-11
SUSE SUSE-SU-2017:0104-1 LibVNCServer 2017-01-11
Debian DSA-3753-1 libvncserver 2017-01-05
Debian-LTS DLA-777-1 libvncserver 2017-01-03

Comments (none posted)

mariadb: multiple unspecified vulnerabilities

Package(s):mariadb mysql CVE #(s):CVE-2016-3495 CVE-2016-5625 CVE-2016-5628 CVE-2016-5631 CVE-2016-5632 CVE-2016-5633 CVE-2016-5634 CVE-2016-5635 CVE-2016-6652 CVE-2016-8286 CVE-2016-8287 CVE-2016-8289 CVE-2016-8290
Created:January 2, 2017 Updated:January 4, 2017
Description: From the CVE entries:

Unspecified vulnerability in Oracle MySQL 5.7.13 and earlier allows remote administrators to affect availability via vectors related to Server: InnoDB. (CVE-2016-3495)

Unspecified vulnerability in Oracle MySQL 5.7.14 and earlier allows local users to affect confidentiality, integrity, and availability via vectors related to Server: Packaging. (CVE-2016-5625)

Unspecified vulnerability in Oracle MySQL 5.7.13 and earlier allows remote administrators to affect availability via vectors related to Server: DML. (CVE-2016-5628)

Unspecified vulnerability in Oracle MySQL 5.7.13 and earlier allows remote administrators to affect availability via vectors related to Server: Memcached. (CVE-2016-5631)

Unspecified vulnerability in Oracle MySQL 5.7.14 and earlier allows remote administrators to affect availability via vectors related to Server: Optimizer. (CVE-2016-5632)

Unspecified vulnerability in Oracle MySQL 5.7.13 and earlier allows remote administrators to affect availability via vectors related to Server: Performance Schema, a different vulnerability than CVE-2016-8290. (CVE-2016-5633)

Unspecified vulnerability in Oracle MySQL 5.7.13 and earlier allows remote administrators to affect availability via vectors related to RBR. (CVE-2016-5634)

Unspecified vulnerability in Oracle MySQL 5.7.13 and earlier allows remote administrators to affect availability via vectors related to Server: Security: Audit. (CVE-2016-5635)

SQL injection vulnerability in Pivotal Spring Data JPA before 1.9.6 (Gosling SR6) and 1.10.x before 1.10.4 (Hopper SR4), when used with a repository that defines a String query using the @Query annotation, allows attackers to execute arbitrary JPQL commands via a sort instance with a function call. (CVE-2016-6652)

Unspecified vulnerability in Oracle MySQL 5.7.14 and earlier allows remote authenticated users to affect confidentiality via vectors related to Server: Security: Privileges. (CVE-2016-8286)

Unspecified vulnerability in Oracle MySQL 5.7.13 and earlier allows remote administrators to affect availability via vectors related to Server: Replication. (CVE-2016-8287)

Unspecified vulnerability in Oracle MySQL 5.7.13 and earlier allows local users to affect integrity and availability via vectors related to Server: InnoDB. (CVE-2016-8289)

Unspecified vulnerability in Oracle MySQL 5.7.13 and earlier allows remote administrators to affect availability via vectors related to Server: Performance Schema, a different vulnerability than CVE-2016-5633. (CVE-2016-8290)

Alerts:
Gentoo 201701-01 mariadb 2017-01-01

Comments (none posted)

msgpuck: two denial of service flaws

Package(s):msgpuck CVE #(s):CVE-2016-9036 CVE-2016-9037
Created:December 22, 2016 Updated:January 4, 2017
Description: CVE-2016-9036: From the Talos vulnerability report: An exploitable incorrect return value vulnerability exists in the mp_check function of Tarantool’s Msgpuck library 1.0.3. A specially crafted packet can cause the mp_check function to incorrectly return success when trying to check if decoding a map16 packet will read outside the bounds of a buffer, resulting in a denial of service vulnerability.

CVE-2016-9037: From the Talos vulnerability report: An exploitable out-of-bounds array access vulnerability exists in the xrow_header_decode function of Tarantool 1.7.2.0-g8e92715. A specially crafted packet can cause the function to access an element outside the bounds of a global array that is used to determine the type of the specified key’s value. This can lead to an out of bounds read within the context of the server. An attacker who exploits this vulnerability can cause a denial of service vulnerability on the server.

Alerts:
Fedora FEDORA-2016-badd014afe tarantool 2016-12-22
Fedora FEDORA-2016-2d0c8ba781 tarantool 2016-12-22
Fedora FEDORA-2016-badd014afe msgpuck 2016-12-22
Fedora FEDORA-2016-2d0c8ba781 msgpuck 2016-12-22

Comments (none posted)

nagios-plugins: multiple vulnerabilities

Package(s):nagios-plugins CVE #(s):
Created:December 28, 2016 Updated:January 4, 2017
Description: From the Red Hat bugzilla [1], [2], 3]:

[1] Version-Release number of selected component (if applicable): 1.4.15-2

Steps to Reproduce:

  1. . Take Oracle Enterprise Linux 6.1
  2. . Install 389 Directory with SSL or take a working one.
  3. . Install epel repository and latest nagios-plugins-ldap
  4. . Run /usr/lib64/nagios/plugins/check_ldaps -H <389 hostname> -S -p <389 port> -b <389's base DN> -v
Actual results:
ldap_bind: Can't contact LDAP server (-1)
	additional info: TLS error -8172:Unknown code ___f 20
Could not bind to the LDAP server
Expected results:

LDAP OK - 0,008 seconds response time|time=0,007882s;;;0,000000

[2] Calling check_file_age is broken:

# /usr/lib64/nagios/plugins/check_file_age Can't locate utils.pm in @INC (you may need to install the utils module) (@INC contains: . /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5) at /usr/lib64/nagios/plugins/check_file_age line 30.

[3] check_mailq fails with syntax error:

[root@fedora24 ~]# /usr/lib64/nagios/plugins/check_mailq syntax error at /usr/lib64/nagios/plugins/check_mailq line 40, near ")

sub print_help ()" Execution of /usr/lib64/nagios/plugins/check_mailq aborted due to compilation errors.

Alerts:
Fedora FEDORA-2016-8586235698 nagios-plugins 2016-12-27
Fedora FEDORA-2016-f30fae0f67 nagios-plugins 2016-12-27

Comments (none posted)

openfire: multiple vulnerabilities

Package(s):openfire CVE #(s):CVE-2015-6972 CVE-2015-6973 CVE-2015-7707
Created:December 28, 2016 Updated:January 4, 2017
Description: From the CVE entries:

Multiple cross-site scripting (XSS) vulnerabilities in Ignite Realtime Openfire 3.10.2 allow remote attackers to inject arbitrary web script or HTML via the (1) groupchatName parameter to plugins/clientcontrol/create-bookmark.jsp; the (2) urlName parameter to plugins/clientcontrol/create-bookmark.jsp; the (3) hostname parameter to server-session-details.jsp; or the (4) search parameter to group-summary.jsp. (CVE-2015-6972)

Multiple cross-site request forgery (CSRF) vulnerabilities in Ignite Realtime Openfire 3.10.2 allow remote attackers to hijack the authentication of administrators for requests that (1) change a password via a crafted request to user-password.jsp, (2) add users via a crafted request to user-create.jsp, (3) edit server settings or (4) disable SSL on the server via a crafted request to server-props.jsp, or (5) add clients via a crafted request to plugins/clientcontrol/permitted-clients.jsp. (CVE-2015-6973)

Ignite Realtime Openfire 3.10.2 allows remote authenticated users to gain administrator access via the isadmin parameter to user-edit-form.jsp. (CVE-2015-7707)

Alerts:
Gentoo 201612-50 openfire 2016-12-31
Arch Linux ASA-201612-21 openfire 2016-12-27

Comments (none posted)

openjpeg2: multiple vulnerabilities

Package(s):openjpeg2 CVE #(s):CVE-2016-9112 CVE-2016-9113 CVE-2016-9114 CVE-2016-9115 CVE-2016-9116 CVE-2016-9117 CVE-2016-9118
Created:December 28, 2016 Updated:February 20, 2017
Description: From the CVE entries:

Floating Point Exception (aka FPE or divide by zero) in opj_pi_next_cprl function in openjp2/pi.c:523 in OpenJPEG 2.1.2. (CVE-2016-9112)

There is a NULL pointer dereference in function imagetobmp of convertbmp.c:980 of OpenJPEG 2.1.2. image->comps[0].data is not assigned a value after initialization(NULL). Impact is Denial of Service. (CVE-2016-9113)

There is a NULL Pointer Access in function imagetopnm of convert.c:1943(jp2) of OpenJPEG 2.1.2. image->comps[compno].data is not assigned a value after initialization(NULL). Impact is Denial of Service. (CVE-2016-9114)

Heap Buffer Over-read in function imagetotga of convert.c(jp2):942 in OpenJPEG 2.1.2. Impact is Denial of Service. Someone must open a crafted j2k file. (CVE-2016-9115)

NULL Pointer Access in function imagetopnm of convert.c:2226(jp2) in OpenJPEG 2.1.2. Impact is Denial of Service. Someone must open a crafted j2k file. (CVE-2016-9116)

NULL Pointer Access in function imagetopnm of convert.c(jp2):1289 in OpenJPEG 2.1.2. Impact is Denial of Service. Someone must open a crafted j2k file. (CVE-2016-9117)

Heap Buffer Overflow (WRITE of size 4) in function pnmtoimage of convert.c:1719 in OpenJPEG 2.1.2. (CVE-2016-9118)

Alerts:
Mageia MGASA-2017-0051 openjpeg2 2017-02-18
openSUSE openSUSE-SU-2017:0207-1 openjpeg2 2017-01-19
openSUSE openSUSE-SU-2017:0185-1 openjpeg2 2017-01-17
openSUSE openSUSE-SU-2017:0155-1 openjpeg2 2017-01-16
SUSE SUSE-SU-2016:3270-1 openjpeg2 2016-12-27

Comments (none posted)

openssh: multiple vulnerabilities

Package(s):openssh CVE #(s):CVE-2016-10009 CVE-2016-10010 CVE-2016-10011 CVE-2016-10012
Created:December 23, 2016 Updated:February 1, 2017
Description: From the Arch Linux advisory:

- CVE-2016-10009 (arbitrary code execution): It was found that ssh-agent could load PKCS#11 modules from paths outside of a trusted whitelist. An attacker able to load a crafted PKCS#11 module across a forwarded agent channel could potentially use this flaw to execute arbitrary code on the system running the ssh- agent. Note that the attacker must have control of the forwarded agent- socket and the ability to write to the filesystem of the host running ssh-agent.

- CVE-2016-10010 (privilege escalation): It was found that when privilege separation was disabled in OpenSSH, forwarded Unix-domain sockets would be created by sshd with root privileges instead of the privileges of the authenticated user. This could allow an authenticated attacker to potentially gain root privileges on the host system. Privileges separation has been enabled by default since OpenSSH 3.3/3.3p1 (2002-06-21). Thus, OpenSSH is not affected by default. An affected OpenSSH configuration would have to specifically disable privilege separation with the "UsePrivilegeSeparation no" configuration directive in /etc/ssh/sshd_config.

- CVE-2016-10011 (information disclosure): It was found that there is a theoretical leak of host private key material to privilege-separated child processes via realloc() when reading keys. No such leak was observed in practice for normal-sized keys, nor does a leak to the child processes directly expose key material to unprivileged users.

- CVE-2016-10012 (insufficient validation): It was found that the shared memory manager used by pre-authentication compression support had a bounds checks that could be elided by some optimizing compilers. Additionally, this memory manager was incorrectly accessible when pre-authentication compression was disabled. This could potentially allow attacks against the privileged monitor process from the sandboxed privilege-separation process (a compromise of the latter would be required first).

Alerts:
openSUSE openSUSE-SU-2017:0344-1 openssh 2017-01-31
Fedora FEDORA-2017-4767e2991d openssh 2017-01-06
Slackware SSA:2016-358-02 openssh 2016-12-23
Arch Linux ASA-201612-20 openssh 2016-12-23

Comments (none posted)

pcsclite: privilege escalation

Package(s):pcsclite CVE #(s):CVE-2016-10109
Created:January 4, 2017 Updated:February 1, 2017
Description: From the Arch Linux advisory:

The SCardReleaseContext function normally releases resources associated with the given handle (including "cardsList") and clients should cease using this handle. A malicious client can however make the daemon invoke SCardReleaseContext and continue issuing other commands that use "cardsList", resulting in a use-after-free. When SCardReleaseContext is invoked multiple times, it additionally results in a double-free of "cardsList".

The issue allows a local attacker to cause a denial of service, but can potentially result in privilege escalation since the daemon is running as root while any local user can connect to the Unix socket. Fixed by patch "SCardReleaseContext: prevent use-after-free of cardsList" which is released with hpcsc-lite 1.8.20 on 30 December 2016.

Alerts:
Gentoo 201702-01 pcsc-lite 2017-02-01
Mageia MGASA-2017-0026 pcsc-lite 2017-01-27
Ubuntu USN-3176-1 pcsc-lite 2017-01-23
openSUSE openSUSE-SU-2017:0178-1 pcsc-lite 2017-01-17
Fedora FEDORA-2017-8311440c55 pcsc-lite 2017-01-13
Fedora FEDORA-2017-1a7b8c0730 pcsc-lite 2017-01-06
Debian-LTS DLA-778-1 pcsc-lite 2017-01-06
Debian DSA-3752-1 pcsc-lite 2017-01-04
Arch Linux ASA-201701-12 pcsclite 2017-01-04

Comments (none posted)

php-zendframework-zend-mail: parameter injection

Package(s):php-zendframework-zend-mail CVE #(s):CVE-2016-10034
Created:January 2, 2017 Updated:January 13, 2017
Description: From the Zend Framework advisory:

When using the zend-mail component to send email via the Zend\Mail\Transport\Sendmail transport, a malicious user may be able to inject arbitrary parameters to the system sendmail program. The attack is performed by providing additional quote characters within an address; when unsanitized, they can be interpreted as additional command line arguments, leading to the vulnerability.

Alerts:
Mageia MGASA-2017-0016 php-ZendFramework2 2017-01-13
Fedora FEDORA-2016-1185de6aa6 php-zendframework-zend-mail 2016-12-31
Fedora FEDORA-2016-a6e72e28e1 php-zendframework-zend-mail 2016-12-31

Comments (none posted)

pillow: heap-based buffer overflow

Package(s):pillow CVE #(s):CVE-2016-4009
Created:January 2, 2017 Updated:January 4, 2017
Description: From the CVE entry:

Integer overflow in the ImagingResampleHorizontal function in libImaging/Resample.c in Pillow before 3.1.1 allows remote attackers to have unspecified impact via negative values of the new size, which triggers a heap-based buffer overflow.

Alerts:
Gentoo 201612-52 pillow 2016-12-31

Comments (none posted)

postgresql-common: file overwrites

Package(s):postgresql-common CVE #(s):CVE-2016-1255
Created:January 2, 2017 Updated:January 4, 2017
Description: From the Debian LTS advisory:

Dawid Golunski discovered that a symlink in /var/log/postgresql/ could be used by the "postgres" system user to write to arbitrary files on the filesystem the next time PostgreSQL is started by root.

Alerts:
Debian-LTS DLA-774-1 postgresql-common 2017-01-01

Comments (none posted)

python-crypto: denial of service

Package(s):python-crypto CVE #(s):CVE-2013-7459
Created:January 2, 2017 Updated:February 21, 2017
Description: From the Debian LTS advisory:

It was discovered that there was a vulnerability in python-crypto, a library of cryptographic algorithms and protocols for Python. Calling AES.new with an invalid parameter could crash the Python interpreter

Alerts:
Gentoo 201702-14 pycrypto 2017-02-21
Ubuntu USN-3199-2 python-crypto 2017-02-17
Ubuntu USN-3199-1 python-crypto 2017-02-16
Mageia MGASA-2017-0032 python-pycrypto 2017-02-02
Fedora FEDORA-2017-08207fe48b python-crypto 2017-01-30
Fedora FEDORA-2017-7c569d396b python-crypto 2017-01-30
openSUSE openSUSE-SU-2017:0156-1 python-pycrypto 2017-01-16
Arch Linux ASA-201701-25 python2-crypto 2017-01-16
Arch Linux ASA-201701-26 python-crypto 2017-01-16
Debian-LTS DLA-773-4 python-crypto 2017-01-10
Debian-LTS DLA-773-3 python-crypto 2017-01-05
Debian-LTS DLA-773-2 python-crypto 2017-01-04
Debian-LTS DLA-773-1 python-crypto 2017-01-01

Comments (none posted)

python-wikitcms: code execution

Package(s):python-wikitcms CVE #(s):
Created:December 28, 2016 Updated:January 4, 2017
Description: From the Fedora advisory:

This update contains a **SECURITY** fix for an issue with potentially serious consequences but very limited scope. If an administrator of a wiki you talked to using python-wikitcms were malicious, they could cause arbitrary code execution as the user running wikitcms. No-one besides a wiki administrator could do this, as it requires crafting the wiki's response to an edit request to include a malicious payload. It also drops some now useless or unneeded code (due to changes in mediawiki and mwclient).

Alerts:
Fedora FEDORA-2016-608be17784 python-wikitcms 2016-12-27
Fedora FEDORA-2016-fce8b939c9 python-wikitcms 2016-12-27

Comments (none posted)

qemu: denial of service

Package(s):qemu CVE #(s):CVE-2016-9911
Created:December 26, 2016 Updated:January 4, 2017
Description: From the Debian LTS advisory:

Quick Emulator (Qemu) built with the USB EHCI Emulation support is vulnerable to a memory leakage issue. It could occur while processing packet data in 'ehci_init_transfer'. A guest user/ process could use this issue to leak host memory, resulting in DoS for a host.

Alerts:
Fedora FEDORA-2017-12394e2cc7 qemu 2017-01-25
Gentoo 201701-49 qemu 2017-01-23
Fedora FEDORA-2017-b953d4d3a4 qemu 2017-01-20
openSUSE openSUSE-SU-2017:0194-1 qemu 2017-01-18
SUSE SUSE-SU-2017:0127-1 qemu 2017-01-13
Debian-LTS DLA-765-1 qemu-kvm 2016-12-26
Debian-LTS DLA-764-1 qemu 2016-12-26

Comments (none posted)

smack: TLS bypass

Package(s):smack CVE #(s):CVE-2016-10027
Created:December 30, 2016 Updated:January 4, 2017
Description: From the Red Hat bugzilla entry:

A vulnerability in the Smack XMPP library was reported where the security of the TLS connection is not always enforced. By stripping the "starttls" feature from the server response with a man-in-the-middle tool, an attacker can force the client to authenticate in clear text even if the "SecurityMode.required" TLS setting has been set.

Alerts:
Fedora FEDORA-2016-897a1e6698 smack 2016-12-29

Comments (none posted)

spip: two vulnerabilities

Package(s):spip CVE #(s):CVE-2016-9997 CVE-2016-9998
Created:December 26, 2016 Updated:January 4, 2017
Description: From the Debian LTS advisory:

CVE-2016-9997: It was discovered that the 'id' parameter to the puce_statut action isn't sanitized properly. An attacker could inject arbitrary HTML code by tricking an authenticated SPIP user to open a specially crafted URL.

CVE-2016-9998: It was discovered that the 'plugin' parameter to the info_plugin action isn't sanitized properly. An attacker could inject arbitrary HTML code by tricking an authenticated SPIP user to open a specially crafted URL.

Alerts:
Debian-LTS DLA-760-1 spip 2016-12-25

Comments (none posted)

springframework: directory traversal

Package(s):springframework CVE #(s):CVE-2016-9878
Created:January 2, 2017 Updated:January 4, 2017
Description: From the CVE entry:

An issue was discovered in Pivotal Spring Framework before 3.2.18, 4.2.x before 4.2.9, and 4.3.x before 4.3.5. Paths provided to the ResourceServlet were not properly sanitized and as a result exposed to directory traversal attacks.

Alerts:
Fedora FEDORA-2016-f341d71730 springframework 2017-01-01

Comments (none posted)

squid: two vulnerabilities

Package(s):squid CVE #(s):CVE-2016-10002 CVE-2016-10003
Created:December 23, 2016 Updated:February 7, 2017
Description: From the Mageia advisory:

Incorrect processing of responses to If-None-Modified HTTP conditional requests leads to client-specific Cookie data being leaked to other clients. Attack requests can easily be crafted by a client to probe a cache for this information (CVE-2016-10002).

Incorrect HTTP Request header comparison results in Collapsed Forwarding feature mistakenly identifying some private responses as being suitable for delivery to multiple clients (CVE-2016-10003).

Alerts:
Ubuntu USN-3192-1 squid3 2017-02-06
CentOS CESA-2017:0183 squid34 2017-01-26
CentOS CESA-2017:0182 squid 2017-01-26
Oracle ELSA-2017-0183 squid34 2017-01-24
Oracle ELSA-2017-0182 squid 2017-01-24
Scientific Linux SLSA-2017:0183-1 squid34 2017-01-24
Scientific Linux SLSA-2017:0182-1 squid 2017-01-24
Red Hat RHSA-2017:0183-01 squid34 2017-01-24
Red Hat RHSA-2017:0182-01 squid 2017-01-24
Fedora FEDORA-2016-c614315d29 squid 2017-01-20
openSUSE openSUSE-SU-2017:0223-1 squid 2017-01-20
openSUSE openSUSE-SU-2017:0192-1 squid 2017-01-18
Debian-LTS DLA-763-1 squid3 2016-12-25
Debian DSA-3745-1 squid3 2016-12-24
Mageia MGASA-2016-0423 squid 2016-12-22

Comments (none posted)

tracker: adding sandboxing

Package(s):tracker CVE #(s):
Created:December 30, 2016 Updated:January 4, 2017
Description: From the Fedora advisory:

This update adds security sandboxing to tracker-extract.

Alerts:
Fedora FEDORA-2016-631737a49a tracker 2016-12-29

Comments (none posted)

xen: two vulnerabilities

Package(s):xen CVE #(s):CVE-2016-10013 CVE-2016-10024
Created:December 22, 2016 Updated:January 16, 2017
Description: From the SUSE advisory:

A Mishandling of SYSCALL singlestep during emulation which could have lead to privilege escalation. (XSA-204, bsc#1016340, CVE-2016-10013)

PV guests may have been able to mask interrupts causing a Denial of Service. (XSA-202, bsc#1014298, CVE-2016-10024)

Alerts:
Debian-LTS DLA-783-1 xen 2017-01-13
Mageia MGASA-2017-0012 xen 2017-01-09
openSUSE openSUSE-SU-2017:0008-1 xen 2017-01-02
openSUSE openSUSE-SU-2017:0007-1 xen 2017-01-02
openSUSE openSUSE-SU-2017:0005-1 xen 2017-01-02
Gentoo 201612-56 xen 2016-12-31
Fedora FEDORA-2016-bc02bff7f5 xen 2016-12-31
Fedora FEDORA-2016-92e3ea2d1b xen 2016-12-27
SUSE SUSE-SU-2016:3207-1 xen 2016-12-21
SUSE SUSE-SU-2016:3208-1 xen 2016-12-21
SUSE SUSE-SU-2016:3221-1 xen 2016-12-22
SUSE SUSE-SU-2016:3241-1 xen 2016-12-22

Comments (none posted)

xen: denial of service

Package(s):xen CVE #(s):CVE-2016-10025
Created:December 28, 2016 Updated:January 4, 2017
Description: From the Red Hat bugzilla:

When support for the Intel VMX VMFUNC leaf 0 was added, a new optional function pointer hvmemul_vmfunc was added to the hvm_emulate_ops table. As is intended, that new function pointer is NULL on non-VMX hardware, including AMD SVM hardware. However at a call site, the necessary NULL check was omitted before the indirect function call.

Malicious guests may cause a hypervisor crash, resulting in a Denial of Service (DoS).

Alerts:
openSUSE openSUSE-SU-2017:0005-1 xen 2017-01-02
Fedora FEDORA-2016-bc02bff7f5 xen 2016-12-31
Fedora FEDORA-2016-92e3ea2d1b xen 2016-12-27

Comments (none posted)

xen: denial of service

Package(s):xen CVE #(s):CVE-2016-9776
Created:January 2, 2017 Updated:February 15, 2017
Description: From the CVE entry:

QEMU (aka Quick Emulator) built with the ColdFire Fast Ethernet Controller emulator support is vulnerable to an infinite loop issue. It could occur while receiving packets in 'mcf_fec_receive'. A privileged user/process inside guest could use this issue to crash the QEMU process on the host leading to DoS.

Alerts:
Fedora FEDORA-2017-cdb53b04e0 xen 2017-02-14
Fedora FEDORA-2017-12394e2cc7 qemu 2017-01-25
Gentoo 201701-49 qemu 2017-01-23
Fedora FEDORA-2017-b953d4d3a4 qemu 2017-01-20
openSUSE openSUSE-SU-2017:0194-1 qemu 2017-01-18
SUSE SUSE-SU-2017:0127-1 qemu 2017-01-13
openSUSE openSUSE-SU-2017:0007-1 xen 2017-01-02

Comments (none posted)

Page editor: Jake Edge

Kernel development

Brief items

Kernel release status

The current development kernel is 4.10-rc2, released on January 1. This prepatch contains only 27 patches merged since 4.10-rc1 was released on December 25.

Stable updates: none have been released since December 15. The 4.9.1, 4.8.16 and 4.4.40 stable updates are in the review process as of this writing; they can be expected on or after January 6.

Comments (none posted)

Finishing out the 4.10 merge window

By Jonathan Corbet
January 3, 2017
As expected, the 4.10 merge window ended on December 25 with the 4.10-rc1 release. In the end, 11,455 non-merge changesets were pulled into the mainline repository for 4.10, making this a reasonably busy development cycle, even if it falls far short of 4.9. Less than 400 of those changes were pulled after the December 22 summary was written, so the list of additional changes is short.

That list includes:

  • The PA-RISC architecture has gained support for kernel address-space layout randomization.

  • The cache-allocation technology patch set has been merged. These patches provide access to a new mechanism in Intel processors by which the processor's memory cache can be partitioned between processes. It can be used to keep one group of processes (a container, say) from dominating the cache, or to set aside a portion of the cache for a set of privileged processes.

  • There are new drivers for QLogic QEDI 25/40/100Gb iSCSI initiators and Loongson1 SoC hardware watchdogs.

  • The cycle_t type used for clock values inside the kernel has been removed; a plain u64 type is now used instead.

The 4.10 stabilization period got off to a slow start due to the holidays; only 27 non-merge changesets were applied between 4.10-rc1 and 4.10-rc2. The pace of change can be expected to pick up, though, as developers return to work and the final 4.10 release date (probably February 12 or 19) approaches.

Comments (10 posted)

Kernel development news

Tracking functional dependencies between devices

By Jonathan Corbet
January 3, 2017
Computing systems have grown significantly in complexity since the Linux kernel was first written. In response, the kernel has developed new mechanisms for managing device complexity, including the driver model, dynamic number assignment, and more. These mechanisms have solved a number of problems but, while the problem of managing runtime dependencies between seemingly independent devices has been understood for some time, it didn't get a proper solution until the 4.10 merge window.

Some device dependencies are inherent in the architecture of the system. For example, a USB peripheral will not be usable if the appropriate USB host adapter is unavailable, and that adapter is probably connected to some other system bus that must also be up and running. Dependencies based on the connection topology of the system are relatively easily represented in a tree structure; that is what the kernel's device model was created to do. Using this model, the kernel can, for example, suspend devices in the system in the correct order, keeping intermediate devices operational until all the devices that depend on them have been shut down.

In a modern system, though, the dependency graph can be rather more complicated. A camera "device", for example, is likely to be a set of interconnected devices that look independent to the kernel. Actually operating the camera requires a sensor device, which is probably controlled via a connection to an I2C bus; it probably also depends on a couple of GPIO devices for its power and reset lines. The sensor is connected to a separate bridge device that acquires the image data; that bridge may need a DMA controller to move that data into memory. There may be other devices for various hardware-implemented image transformations (rotation or color-space conversion, for example) in the mix as well.

The point is that each of these components looks like a separate device to the kernel. These devices are on separate controllers and, perhaps, on separate buses; they do not appear to be related from a look at the topology of the system. For the most part, a top-level driver marshals these devices together and makes them function together; the information it needs to do this task is, in current systems, often found in the device tree structure. But the kernel's driver core can break things if it shuts down one of the subdevices because it doesn't understand that other devices depend on that subdevice.

Drivers have tended to work around this problem with one-off device-specific code. As one might expect, that leads to a fair amount of code duplication and a lot of inadequate solutions. It would be better to have a single solution in the driver core code that works for all devices. Moving toward that solution is the objective of the functional dependencies infrastructure merged for the 4.10 kernel.

The interface to this mechanism is relatively simple, consisting of a single function to indicate that a dependency exists:

    struct device_link *device_link_add(struct device *consumer,
				    	struct device *supplier,
					u32 flags);

This call informs the driver core that the consumer device depends on the supplier device. So, for example, the system will not suspend supplier unless consumer is already suspended, and it will not probe or resume consumer until supplier is up and functional. Additionally, if the supplier device is unbound, the consumer device will, by virtue of no longer being able to function anyway, be unbound automatically.

By default, device links are persistent and will remain in place for as long as the system is running. If, however, the DL_FLAG_AUTOREMOVE flag is provided when the link is created, that link will be automatically removed if the driver of the consumer device is unbound. These non-persistent links can be useful in situations where the hardware can be configured in multiple ways, creating varying dependencies over time. The DL_FLAG_STATELESS flag can be used to create a link that is used for suspend/resume ordering, but which is not otherwise managed by the driver core.

If there is a need to explicitly remove a device link, that can be done with a call to device_link_del():

    void device_link_del(struct device_link *link);

As of 4.10-rc2, there is only one user of this new infrastructure (the Exynos I/O memory-management unit code) in the mainline kernel. There will certainly be others that will show up in future development cycles, though. With luck, they will be accompanied by a reduction in driver-specific dependency-handling code and an improvement in kernel quality overall.

Comments (1 posted)

Context information in memory-allocation requests

By Jonathan Corbet
January 4, 2017
As is the case with many other tasks, allocation of memory in the kernel is rather more complex than it is in user space. The APIs used for allocation in the kernel have evolved over many years to reflect this complexity. But a highly evolved API is not necessarily an optimal one, and there have been signs for years that the approach used in the kernel is not perfectly suited to the task. A set of patches under consideration now shows how thinking has shifted in this area.

Memory-allocation complexity in the kernel is driven by constraints on what the kernel can do in any given situation. It is often the case, for example, that the kernel is running in a context where it is not allowed to block waiting for an event, so allocation requests must be satisfied without acquiring any sleeping locks. Sometimes a request should be given access to the last-resort pools of memory; this is usually the case when the request itself is part of the process of freeing more memory in a system where memory is tight. There can be constraints on where the allocated memory must be located. And so on.

The approach taken to track these constraints is to add a "GFP flags" argument to every memory-allocation function. So, for example, the prototype of kmalloc(), used to allocate relatively small chunks of memory, is:

    void *kmalloc(size_t size, gfp_t flags);

The flags argument describes the constraints on the request. A value of GFP_ATOMIC indicates that the request is running in atomic context and cannot sleep, for example, while GFP_DMA32 says that the allocated memory must be placed in a physical location reachable by devices limited to 32-bit DMA operations. There is a long list of these flags; <linux/gfp.h> has the whole set.

Two types of flags

The point of interest here is that some of these flags (like GFP_DMA32) describe attributes of the needed memory — they apply to a specific allocation request. But others, like GFP_ATOMIC, instead describe the context in which the allocation request is being made. This context is often not known at the point where the allocation function is called, since that often happens in low-level code that can be invoked in many contexts. So higher-level code must inform the low-level code about the context in which it is running; this is generally done by adding GFP-flags arguments to functions all the way up the call chain. To pick a random example, consider the function that submits a request to a USB device:

    int usb_submit_urb(struct urb *urb, gfp_t mem_flags);

This relatively high-level function must track the given mem_flags and pass them to any function it calls that might allocate memory; it must also adjust the flags if its own context changes. This interface has been made to work for many years, but it is somewhat prone to errors. One could argue, as some have over the years, that it is fundamentally wrong; information tracking the context in which a thread is running might be better attached to the thread directly rather than dragged along through a chain of function calls.

GFP_NOFS

One flag in particular that describes the calling context is GFP_NOFS, which instructs the memory allocator to avoid calling into any filesystem code. In particular, that means that the allocator cannot start writeback on dirty pages to make more memory available. There are (at least) a couple of reasons to impose this constraint. One is that the allocation call itself is coming from filesystem code; in that case, calling back into the filesystem risks deadlocking the system. The other is that adding filesystem calls to a lengthy call chain could overflow the kernel stack, an outcome cherished by attackers but otherwise unloved by Linux users.

Given those possibilities, it is unsurprising that kernel developers have tended to take a "better safe than sorry" approach to the GFP_NOFS flag; as a result, that flag appears in a great many allocation calls — a quick grep shows over 1,300 instances in the 4.10-rc2 kernel. At the Linux Storage, Filesystem, and Memory-Management summit in April 2016, Michal Hocko called out use of this flag as a problem. It appears in many places where it is not really needed, unnecessarily constraining what the memory-management code can do and, as a result, worsening system performance. He suggested that this flag should be phased out in favor of a flag in the task structure that could be used to accurately track the allocation context.

More recently, he has proposed a new API that implements these changes. A new flag (PF_MEMALLOC_NOFS) is defined for the flags field of the task_struct structure. Then, whenever a thread enters a context where filesystem calls should not be made, it should call:

    unsigned int memalloc_nofs_save(void);

This call will set the PF_MEMALLOC_NOFS flag and pass the previous flags value back as its return value. Exiting from the "no filesystem calls" context is done with a call to:

    void memalloc_nofs_restore(unsigned int flags);

The flags value passed in should be the value returned from memalloc_nofs_save().

Between the two above calls, all memory-allocation requests executed in the current thread will behave as if the GFP_NOFS flag had been passed, regardless of whether it is actually present or not. Since each caller saves the previous context, these calls can be nested to any level and the right thing will happen. For now, the GFP_NOFS flag remains (there is the matter of those 1,300 users, after all), but one can see its eventual removal in the cards. The patch set begins that process by fixing some callers in the XFS and ext4 filesystem code. The resulting code should be clearer, and it eliminates the chance of a stray allocation calling into the filesystem code in the wrong place.

Developers familiar with the memory-management code may think that this interface looks familiar. Indeed, it is inspired by a set of already existing functions:

    unsigned int memalloc_noio_save(void);
    void memalloc_noio_restore(unsigned int flags);

These functions were added to the 3.9 kernel in 2013 by Ming Lei; they move the GFP_NOIO flag (which inhibits the initiation of I/O operations) into the task structure in the same way.

The memory-allocation interface is, thus, clearly evolving in a direction where context-related information is stored with the rest of the thread's context rather than being passed through function arguments. This evolution can only be described as a slow process, though; there are nine memalloc_noio_save() calls in the 4.10-rc2 kernel, compared to nearly 500 uses of GFP_NOIO. Increasing the pace of change may be hard, though; switching to the new API requires a fairly deep understanding of the code involved and cannot be done with a simple script.

One could imagine taking this work further by, for example, tracking atomic context explicitly. But that is work for the future; completing the task for GFP_NOIO and GFP_NOFS should arguably be done first. Once all that is done, the kernel's memory-allocation API may better match the uses to which it is put. Given that we have only had 25 years to work on it so far, it is not entirely surprising that we have not gotten there yet.

Comments (12 posted)

Patches and updates

Kernel trees

Linus Torvalds Linux 4.10-rc1 Dec 25
Linus Torvalds Linux 4.10-rc2 Jan 01
Sebastian Andrzej Siewior v4.9-rt1 Dec 23
Steven Rostedt 4.4.39-rt50 Jan 04
Steven Rostedt 4.1.37-rt43 Jan 04
Steven Rostedt 3.18.46-rt50 Jan 04
Steven Rostedt 3.12.69-rt92 Jan 04

Architecture-specific

Core kernel code

Device drivers

Device driver infrastructure

Filesystems and block I/O

Thomas Schoebel-Theuer State of MARS Reo-Redundancy Module Dec 30

Memory management

Kirill A. Shutemov 5-level paging Dec 27

Networking

Security-related

Elena Reshetova refcount_t API + usage Dec 29

Virtualization and containers

Miscellaneous

Page editor: Jonathan Corbet

Distributions

Moving on from net-tools

By Jonathan Corbet
January 4, 2017
Old habits die hard, even when support for the tools required by those habits ended over a decade ago. It is not surprising for users to cling to the tools they learned early in their careers, even when they are told that it is time to move on. A recent discussion on the Debian development list showed the sort of stress that this kind of inertia can put on a distribution and explored the options that distributors have to try to nudge their users toward more supportable solutions.

The package in question is net-tools, the home for many familiar network-configuration utilities. If you are accustomed to using commands like ifconfig, arp, netstat, or route to make network changes, you are a net-tools user. Many of these tools have a long pedigree, at least in spirit, having originally been written before the first Linux kernel. Anybody who has been administering Unix-like systems for any period of time will certainly have learned how to use the net-tools utilities to get things done.

The only problem is that net-tools is considered obsolete; indeed, it has been so considered since early this century. The modern replacement is iproute2, which is actively developed and, unlike net-tools, has support for all of the kernel networking stack's fancier features. In theory, we all should have transitioned over to iproute2 at least ten years ago.

In practice, many of us have not done that. Indeed, "us" in this case includes distributors who still use net-tools utilities in a number of packages. Surprisingly, the net-tools developers, who have not made a new release since 2011, have recently resumed working on those utilities; even more surprisingly, they made output changes, apparently breaking scripts that parse that output. These changes led Debian developer Marco d'Itri to call for the project to "kill" net-tools, and, in particular, to stop depending on it in other packages. He would also like to see the project stop installing net-tools by default.

The list of Debian packages depending on net-tools is not that short, but it would appear to be a manageable list if the project were to decide to fix all of those dependencies. The net-tools maintainer is not opposed to the idea of deprecating and eventually phasing out the package; indeed, he tried to do so in 2009. It seems to be generally agreed that the configuration scripts shipped with Debian packages should use iproute2 rather than net-tools to ensure that the examples seen by administrators are using the current tool set. So there would appear to be little controversy around the idea of phasing out net-tools usage and dropping the priority of the package for installations.

There is less consensus around removing the package entirely, or even just dropping it from the default install. There are, it seems, quite a few users who have ifconfig and netstat burned into their muscle memory; those tools work fine for most use cases, so users don't see a strong reason to shift to iproute2. As Ted Ts'o put it:

This is really going to be a generational thing. For those of us who started programming in the BSD 4.x days (my first kernel programming experience was with BSD 4.3), ifconfig and netstat are still the tools that I use every day, and I only use the iproute2 tools in the *extremely* rare circumstances that I need to do something exotic which is only supported by the iproute2 tools.

The fact that the iproute2 commands are seen as more verbose and, by some at least, as having less readable (and less machine-parseable) output doesn't help either. So it's not surprising that various participants expressed their preference for the net-tools utilities, but Russell Stuart suggested that it might be time to move on:

To me this thread looks like a bunch of old men grumbling that the young'ins have taken over what they created and turned the tools they were comfortable with into something unrecognisable. It's true - they did do that, and it's true it was unnecessary. They could have just extended net-tools. But this is how the young'ins have behaved for time immemorial - when they take over the reins from the previous generation and make it their own.

(It is worth noting that the "unnecessary" part is not universally accepted; it's not clear that net-tools could have been evolved to handle modern networking configuration without incompatible changes.)

Debian, as it happens, is having this discussion a bit late. OpenSUSE discussed removing net-tools in 2009, but has not done so. Red Hat and Fedora got serious in 2011, and the RHEL 7 release no longer installs net-tools by default. The fact that this change is not universally popular shows how reluctant users can be to let go of their long-used tools.

None of these distributors have removed the net-tools package, and none are likely to as long as supporting them is relatively easy and users depend on them. But, when they do break, or when they fail to support new networking features that users need, there is not likely to be a lot of interest in fixing them. Distributors have to choose where to expend their energy, and there will come a point where dragging along obsoleted tools that the old folks want falls off the list.

For now, users who are accustomed to typing commands like ifconfig are probably safe; at worst, they will need to install the net-tools package explicitly. But anybody who is using these commands in scripts should probably have updated those scripts some time ago. There will come a point where those scripts break; it seems that could even happen as a result of attempts to restart development on net-tools, rather than by explicit deprecation. This cheat sheet is likely to prove helpful for anybody wanting to make the transition to the new tools.

Software transitions like this are invariably an unwanted distraction for users who are uninterested in whatever new features are available and would prefer that their systems (and their habits) just continue to work. But the world we live in does not stand still, so such transitions are simply going to happen, and distributors will find themselves caught in the middle. As those distributors strive to keep everybody happy, we should not be surprised to see more of these transitions take a decade or more.

Comments (90 posted)

Brief items

Distribution quotes of the week

.oO (If you thought working for Debian means packaging, nope. Most of the time is spent writing message to other people, in order to clarify something)
Christoph Biedl

The number of characters typed as part of this thread, from a non-insignificant number of people, is significantly larger than the 187 characters of changelog and 3 removed lines of spec file required to 'resolve' this matter and no longer install the non_oss pattern in openSUSE by default.

Heck, this post, pointing this out, is also longer than the actual change required

If we talked less and did more, where would openSUSE be by 2018?

Richard Brown

Comments (3 posted)

Alpine 3.5.0 released

Alpine Linux, a lightweight, security-oriented distribution, has released version 3.5.0. This version features a switch from OpenSSL to LibreSSL, support for aarch64, support for ZFS as root, PostgreSQL update to 9.6.x and many other package upgrades, support for R, JRuby and OCaml, better python3 support, and more.

Comments (none posted)

The end of CyanogenMod

As expected, Cyanogen Inc has announced the shutdown of the CyanogenMod servers as of the end of the year. A group of community developers has declared a fork, though few details are available at this point. "Embracing that spirit, we the community of developers, designers, device maintainers and translators have taken the steps necessary to produce a fork of the CM source code and pending patches. This is more than just a ‘rebrand’. This fork will return to the grassroots community effort that used to define CM while maintaining the professional quality and reliability you have come to expect more recently."

Comments (13 posted)

Announcing FreeDOS 1.2

Jim Hall has announced the release of FreeDOS 1.2. "The FreeDOS 1.2 release is an updated, more modern FreeDOS. You'll see that we changed many of the packages. Some packages were replaced, deprecated by newer and better packages. We also added other packages. And we expanded what we should include in the FreeDOS distribution. Where FreeDOS 1.0 and 1.1 where fairly spartan distributions with only "core" packages and software sets, the FreeDOS 1.2 distribution includes a rich set of additional packages. We even include games." There is also a new installer.

Comments (1 posted)

OpenELEC 7.0 released

OpenELEC 7.0 has been released. Among many upgraded packages, this version features Kodi 16.1. Bluetooth Audio support has been added.

Comments (none posted)

Talks between OpenWrt and LEDE

A summary of talks between the estranged OpenWrt and LEDE router distribution projects has been posted. It seems that progress is being made. "It is still not decided that both project will finally merge and we haven't decided on the name to use, which parts of the infrastructure and many other things. In general we are agreeing on many parts and I am looking forward to a good merged ending for all of us."

Full Story (comments: 10)

Distribution News

CentOS

Release for CentOS 7.3.1611 on ARM64/AArch64

CentOS 7.3.1611 is available for AArch64/ARM64 machines. "The kernel has been rebased from 4.2.0 to 4.5.0, and includes several patches recently merged into the upstream."

Full Story (comments: none)

Debian GNU/Linux

Bits from the DPL -- 2016Q4

Debian Project Leader Mehdi Dogguy wraps up the forth quarter of 2016. Topics include DebConf16, a project roadmap, Debian from 10,000 feet, cloud images for Debian, reimbursement for BSPs, DD certificates for new members, and more.

Full Story (comments: none)

openSUSE

openSUSE Board elections 2016/2017 - Phase 1

The campaigning period for openSUSE board elections is open. The candidates are Aaron Luna, Sarah Julia Kriesch, Michal Hrusecky, Christian Boltz, and Andrew Wafaa.

Full Story (comments: none)

Ubuntu family

Removing 32-bit powerpc architecture from future Ubuntu releases

Steve Langasek looks at the future of 32-bit PowerPC in Ubuntu. "Unlike the ppc64el architecture, there is no longer upstream support for the 32-bit, big-endian powerpc architecture; so its continuation in Ubuntu would be dependent on identifying a community of contributors willing to invest in keeping this port in working order, to carry it forward without it negatively impacting Ubuntu development as a whole."

Full Story (comments: none)

Other distributions

FreeBSD 9.3, 10.1 and 10.2 EoL

FreeBSD 9.3, 10.1 and 10.2 have reached end-of-life and are no longer be supported by the FreeBSD Security Officers Team. Users are strongly encouraged to upgrade to a newer release as soon as possible.

Comments (none posted)

Newsletters and articles of interest

Distribution newsletters

Comments (none posted)

LXLE: A Linux Distribution Light on Resources But Heavy on Function (Linux.com)

Jack Wallen reviews LXLE. "This particular take on the small footprint Linux feels more like it belongs in the good old regular footprint Linux. It’s stuck squarely in the middle and can stake the claim that it can truly revive your old hardware without doing so at the cost of productivity. And, with the latest release (Eclectica, based on Ubuntu 16.04.01), that distribution is better and more capable than you’d imagine."

Comments (none posted)

NethServer: Linux without All That Linux Stuff (Linux Journal)

Over at Linux Journal, Shawn Powers takes a look at NethServer. "Okay, that title really isn't fair. NethServer has all the Linux stuff, it's just that you don't have to interact with it in the traditional way in order to reap the benefits. NethServer is a web-based management software package built on top of CentOS. You can download it as a separate distribution, but truly, it's just software on top of CentOS. In fact, the installationmethods are either "install the NethServer distro" or "add the NethServer repository to your existing CentOS install". I really like that."

Comments (none posted)

Page editor: Rebecca Sobol

Development

New features in Python 3.6

By Jake Edge
December 30, 2016

The Python 3.6 release occurred on December 23, only one week later than planned all the way back in October 2015. Python 3.6 adds a number of new features, including more support for asynchronous operations (generators and comprehensions), a filesystem path protocol, a new literal string formatting option, two random-number-related features, a frame evaluation API for debuggers and just-in-time (JIT) compilation, and more. Some of these features have been described in LWN articles along the way, but many haven't, so an overview of the highlights of the new release is in order.

As always, the release schedule (PEP 494) and, especially, the "What's New In Python 3.6" web pages provide an excellent overview of the release as well.

String formatting

Two string-formatting changes made their way into 3.6. The first adds yet another way to format text strings in Python using f-strings (which are described in PEP 498). This creates a new literal string type in the language (f'string') that can be used to directly interpolate variables (and full expressions) into strings:

    >>> num = 42
    >>> f'November 20{num}'
    November 2042
    >>> f'{num} * {num} = {num*num}'
    42 * 42 = 1764
The __format__() method of the bracketed expression is used to produce the value that gets interpolated into the string.

In addition, PEP 515 was adopted, which extends the language's syntax to allow underscores into numeric literals for readability purposes:

    a = 1_000_000
    b = 0x_abcd_ef09
The underscores are allowed for the benefit of humans reading the code, the parser simply ignores them.

A path protocol

The addition of a filesystem path protocol (PEP 519) will allow easier handling of path names in the language and standard library. The pathlib module was meant to help solve the problem of different representations for path names when it was added (on a provisional basis) for Python 3.4. But it suffered from a lack of widespread adoption, even by other parts of the language (e.g. open()), at least partly because it was provisional. Some discussions in the early part of this year led to the development of the PEP and the removal of pathlib's provisional status.

All of that paved the way for open() and the standard library to start accepting pathlib.Path objects. The protocol allows objects to declare their path-like nature by implementing the __fspath__() method. The os.PathLike() function can be consulted to determine if something is path-like and there are explicit operations in the os module to get either str or bytes representations of paths. The "What's New" page fills in some details as well:

The built-in open() function has been updated to accept os.PathLike objects, as have all relevant functions in the os and os.path modules, and most other functions and classes in the standard library. The os.DirEntry class and relevant classes in pathlib have also been updated to implement os.PathLike.

The hope is that updating the fundamental functions for operating on file system paths will lead to third-party code to implicitly support all path-like objects without any code changes, or at least very minimal ones (e.g. calling os.fspath() at the beginning of code before operating on a path-like object).

Frame evaluation

JITs were a hot topic at the 2016 Python Language Summit; one of the presentations on the Pyjion project introduced a plan to add an API to allow alternative ways to evaluate Python code (i.e. a frame-evaluation API). That idea has come to fruition with the adoption of PEP 523. It adds hooks to the CPython interpreter (the reference Python implementation) that will allow JIT engines as well as debugging tools to intercept the evaluation of frames. That will allow other programs to provide alternate ways to evaluate and execute the code in the frame objects.

Asynchronicity

Two PEPs that extend Python's asynchronous feature set have been adopted for 3.6. They both extend the async/await concept into more contexts. The addition of the async and await keywords in Python 3.5 furthered the move toward better support for asynchronous programming into the language itself. That largely started with the provisional adoption of the asyncio module back in 3.4 (see our coverage of Guido van Rossum's 2013 PyCon keynote for some background).

The asynchronous generators feature (as described in PEP 525) is effectively just a shortcut, but also provides improved performance—roughly twice as fast. Currently, in order to have an asynchronous generator that can be used in async for statements, a class must be defined that implements the __aiter__() and __anext__() asynchronous protocol. An alternative might have been to allow yield statements inside functions defined with async def, but when support for async/await was added, the yield statement was not allowed for async def coroutines. Changing the language to accept that made asynchronous generators easier to write and roughly twice as fast. The PEP gives an example of how that might be used (and compares it to how it would currently need to be written):

    async def ticker(delay, to):
	"""Yield numbers from 0 to `to` every `delay` seconds."""
	for i in range(to):
	    yield i
	    await asyncio.sleep(delay)

PEP 530 allows async and await to be available to comprehensions (i.e. list, dict, and set comprehensions as well as generator expressions) so that async can be used in coroutines defined with async def. The PEP gives an example of an asynchronous list comprehension that uses an asynchronous generator (agen()):

    [ i async for i in agen() ]
The list will be filled asynchronously (perhaps via something I/O-bound like a database lookup), while other parts of the program can still be running using the asyncio event loop.

In addition, await can be used in comprehensions in coroutines to wait for the completion of a asyncio.Future object. One of the dict examples given in the PEP is shown below, but more intricate comprehensions are possible:

    result = { fun : await fun() for fun in funcs }
The dictionary will be created with the elements of the funcs list as keys and values that come from awaiting the return values from calling those functions asynchronously.

Random numbers

As was described in an article back in July, Python will return to having a blocking os.urandom() call. That change was added to Python 3.5, but had an unexpected side effect: Python initialization could block waiting for enough entropy to initialize its seed for dictionary randomization (to avoid hash collision attacks). In 3.5.2, Python stopped using the blocking call for its own initialization, but also partly reverted the change to os.urandom() to give users some time to adjust. For Python 3.6 and beyond, though, the call will block until there is sufficient entropy (i.e. will call getrandom() without the GRND_NONBLOCK flag) in the kernel's entropy pool.

Another change that came about as the project looked at how Python generates random numbers is the advent of the secrets module, which has been specified to provide crypto-strength random numbers. The default random number generator provided by the random module is documented to be unsuited for cryptographic purposes, but was seen as an "attractive nuisance" (as PEP 506 called it) that would draw in new programmers based on code snippets on various web sites. It is hoped that adding secrets will provide users with an obvious standard library alternative that does not suffer from the shortcomings of random.

Variable annotations

Type annotations (or type hints) have been fast-tracked into Python over the last two years or so. The first support for the optional annotations was added to Python 3.5 (PEP 484), but that did not address annotations for variables (just function arguments and return values). PEP 484 suggested using comments as a stopgap, but it was clear that variable annotation would eventually come (see, for instance, Guido van Rossum's 2015 Python Language Summit talk on type hints).

As Van Rossum predicted in that talk, variable annotations will make an appearance in Python 3.6. The optional annotation will be allowed in variable initializations or just as a type declaration. From PEP 526:

    some_number: int           # variable without initial value
    some_list: List[int] = []  # variable with initial value

As with the earlier annotations, there are no language semantics associated with the annotations, but they will be placed into the __annotations__ ordered dictionary for the class, module, or function where they occur. They can also be retrieved using the typing.get_type_hints() API. It is important to note (and the PEP emphasizes) that: "Python will remain a dynamically typed language, and the authors have no desire to ever make type hints mandatory, even by convention."

Compact dictionaries

The internal representation of the dict type has been changed to use far less memory (20-25% less compared to Python 3.5). This is a feature that came from the PyPy project. As a side effect of the new representation, dict now preserves the order in which items were added. This side effect should not be relied upon going forward, but choosing collections.OrderedDict when preserving the order is needed will benefit from the new dict implementation.

And more

There are more features listed for the release, including the removal of the provisional status for the asyncio module, updating the SSL modules to support OpenSSL 1.1.0, adding a PYTHONMALLOC environment variable for debugging memory allocation issues, and more. All in all, it is a solid release that brings some useful facilities, as well as rounding out some features that have appeared in earlier releases. It is far too early to guess what might appear in Python 3.7, but it is currently scheduled for a mid-2018 release.

Comments (9 posted)

Brief items

Development quote of the week

But how could a linter process that [web code], I asked - it was some unholy mess of 3(? maybe more) intermixed languages. It was gently explained that this was the source code form. A large tool chain would digest it, turning it into something no sane human would look at. It was broken into single language modules that were digestible by a browser, downloaded by some dynamic linker created by the tool chain that GET's the requisite parts as the running code links to it while executing. It was complete with debugging symbols packed into separate files, so they were there if needed. From the 1000' view it was not unlike the m4 / cpp / gcc / ld / ldd GNU tool chain - but created in some parallel universe.
Russell Stuart

Comments (none posted)

darktable 2.2.0 released

Darktable 2.2.0 has been released. This version includes the new automatic perspective correction module, a liquify tool for all your fancy pixel moving, a new image module to use a Color Look Up Table (CLUT) to change colors in the image, and much more.

Comments (2 posted)

Inkscape 0.92 released

Version 0.92 of the Inkscape vector drawing editor is available. "New features include mesh gradients, improved SVG2 and CSS3 support, new path effects, interactive smoothing for the pencil tool, a new Object dialog for directly managing all drawing elements, and much more. Infrastructural changes are also under way, including a switch to CMake from the venerable Autotools build system." See the release notes for details.

Comments (3 posted)

LedgerSMB 1.5.0 released

The LedgerSMB project has announced the release of version 1.5.0. "This release can be summarized as a major user experience boost through improvements in performance, look and stability. Performance improvements are being achieved by moving from per-request-invoked CGI-scripts to a preloaded-PSGI application as well as moving to a single-page web application using the Dojo toolkit."

Full Story (comments: none)

Python 3.6.0 released

The Python 3.6.0 release is out. Enhancements in this release include formatted string literals ("f-strings"), variable type annotations, asynchronous generators and comprehensions, and more; see the "what's new" document for details.

Full Story (comments: none)

sed-4.3 released [stable]

Jim Meyering has announced the release of sed-4.3. This release features much faster regular expression matching and faster I/O operations.

Full Story (comments: 2)

Newsletters and articles

Development newsletters

Comments (none posted)

Grumpy: Go running Python

The Google Open Source Blog introduces the Grumpy project. "Grumpy is an experimental Python runtime for Go. It translates Python code into Go programs, and those transpiled programs run seamlessly within the Go runtime. We needed to support a large existing Python codebase, so it was important to have a high degree of compatibility with CPython (quirks and all). The goal is for Grumpy to be a drop-in replacement runtime for any pure-Python project."

Comments (47 posted)

Ringing in 2017 with 90 hacker-friendly single board computers (HackerBoards)

HackerBoards.com takes a look at hacker-friendly single board computers. "Community backed, open spec single board computers running Linux and Android sit at the intersection between the commercial embedded market and the open source maker community. Hacker boards also play a key role in developing the Internet of Things devices that will increasingly dominate our technology economy in the coming years, from home automation devices to industrial equipment to drones. This year, we identified 90 boards that fit our relatively loose requirements for community-backed, open spec SBCs running Linux and/or Android."

Comments (25 posted)

Larsson: A stable base for Flatpak: 0.8

On his blog, Alexander Larsson reflects on the Flatpak 0.8 release and his plans for the application packaging and distribution format going forward. "My goal is to get the 0.8 series into the Debian 9 release, and as many other distributions as possible, so that people who create flatpaks can consider the features it supports as a reliable baseline. Sandboxing has always been one of the pillars of Flatpak, but even more important to me is cross-distro application distribution, even if not sandboxed. This is important because it gives upstream developers a way to directly interact with their users, without having an intermediate distributor. With 0.8 I think we have reached a level where the support for this is solid. So, if you ever thought about experimenting with Flatpak, now is the time!

Comments (7 posted)

Top open source creative tools in 2016 (opensource.com)

Over at opensource.com, Máirín Duffy has a lengthy overview of the open-source creative tools available. She covers the core applications (GIMP, Inkscape, Scribus, MyPaint, Blender, and Krita) for design, as well as tools for video, photography, 2D animation, audio, music, and more. "These six applications are the juggernauts of open source design tools. They are well-established, mature projects with full feature sets, stable releases, and active development communities. All six applications are cross-platform; each is available on Linux, OS X, and Windows, although in some cases the Linux versions are the most quickly updated. These applications are so widely known, I've also included highlights of the latest features available that you may have missed if you don't closely follow their development. If you'd like to follow new developments more closely, and perhaps even help out by testing the latest development versions of the first four of these applications—GIMP, Inkscape, Scribus, and MyPaint—you can install them easily on Linux using Flatpak."

Comments (7 posted)

Page editor: Rebecca Sobol

Announcements

Brief items

Eulogy for Pieter Hintjens

Pieter Hintjens passed away last October. "Pieter was known mostly for founding the ZeroMQ project but he was also an ambitious fighter for the open source philosophy, an active opponent to software patents and an inspiring and keen thinker on open systems of all kind." (Thanks to Viktor Horvath)

Comments (3 posted)

Articles of interest

Free Software Supporter Issue 105, January 2017

This edition of the Free Software Foundation's newsletter covers LibrePlanet, licensing resource series, Licensing and Compliance Lab interviews Björn Schießle, and several other topics.

Full Story (comments: none)

EFF: The Patent Troll Abides

The Electronic Frontier Foundation has a review of patent lawsuits in 2016. "We saw mixed results in the courts this year. The Supreme Court issued a good decision cutting back on out of control damages in design patent cases. Meanwhile, the Federal Circuit issued a very disappointing decision that allows patent owners to undermine ownership by asserting patent rights even after selling a patented good. Fortunately, the Supreme Court has agreed to review that ruling. We will file an amicus brief supporting the fundamental principle that once you buy something, you own it."

Comments (2 posted)

7 notable legal developments in open source in 2016 (opensource.com)

Richard Fontana reviews legal development in 2016 on opensource.com. "The Federal Source Code Policy is notable for placing emphasis on adhering to proper standards for open development as well as open source licensing. Agencies releasing open source code are directed to do so in a manner that encourages engagement with existing communities, fosters growth of new communities, and facilitates contribution both by the community to the federal code and by federal employees and contractors to upstream projects."

Comments (none posted)

Calls for Presentations

FOSSASIA'17 Kernel Track: Call for Speakers

The FOSSASIA 2017 Kernel Track is seeking speakers to submit abstracts for presentations. FOSSAsia will take place March 17-19 in Singapore. The call for speakers has been extended until January 20.

Full Story (comments: none)

CFP Deadlines: January 5, 2017 to March 6, 2017

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

DeadlineEvent Dates EventLocation
January 6 July 16
July 23
CoderCruise New Orleans et. al., USA/Caribbean
January 8 March 11
March 12
Chemnitzer Linux-Tage Chemnitz, Germany
January 11 February 15
February 16
Prague PostgreSQL Developer Day 2017 Prague, Czech Republic
January 13 May 22
May 24
Container Camp AU Sydney, Australia
January 14 March 22
March 23
Vault Cambridge, MA, USA
January 20 March 17
March 19
FOSS Asia Singapore, Singapore
January 31 May 16
May 18
Open Source Data Center Conference 2017 Berlin, Germany
February 6 May 8
May 11
OpenStack Summit Boston, MA, USA
February 12 June 9
June 10
Hong Kong Open Source Conference 2017 Hong Kong, Hong Kong
February 18 March 18 Open Source Days Copenhagen Copenhagen, Denmark
February 24 June 26
June 29
Postgres Vision Boston, MA, USA
February 26 April 3
April 4
Power Management and Scheduling in the Linux Kernel Summit Pisa, Italy
February 27 April 6
April 8
Netdev 2.1 Montreal, Canada
February 28 May 18
May 20
Linux Audio Conference Saint-Etienne, France
February 28 May 2
May 4
samba eXPerience 2017 Goettingen, Germany
March 1 May 6
May 7
LinuxFest Northwest Bellingham, WA, USA
March 4 May 31
June 2
Open Source Summit Japan Tokyo, Japan

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

Upcoming Events

LibrePlanet 2017 keynote announcement

The Free Software Foundation has announced that Cory Doctorow will be a keynote speaker at LibrePlanet, which takes place March 26 in Cambridge, MA. His talk will be about killing DRM.

Comments (none posted)

Events: January 5, 2017 to March 6, 2017

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

Date(s)EventLocation
January 16 Linux.Conf.Au 2017 Sysadmin Miniconf Hobart, Tas, Australia
January 16
January 17
LCA Kernel Miniconf Hobart, Australia
January 16
January 20
linux.conf.au 2017 Hobart, Australia
January 18
January 19
WikiToLearnConf India Jaipur, Rajasthan, India
January 27
January 29
DevConf.cz 2017 Brno, Czech Republic
February 2
February 3
Git Merge 2017 Brussels, Belgium
February 4
February 5
FOSDEM 2017 Brussels, Belgium
February 7
February 9
AnacondaCON Austin, TX, USA
February 14
February 16
Open Source Leadership Summit Lake Tahoe, CA, USA
February 15
February 16
Prague PostgreSQL Developer Day 2017 Prague, Czech Republic
February 17 Swiss Python Summit Rapperswil, Switzerland
February 18
February 19
PyCaribbean Bayamón, Puerto Rico, USA
February 20
February 24
OpenStack Project Teams Gathering Atlanta, GA, USA
February 21
February 23
OpenIoT Summit Portland, OR, USA
February 21
February 23
Embedded Linux Conference Portland, OR, USA
March 2
March 3
PGConf India 2017 Bengaluru, India
March 2
March 5
Southern California Linux Expo Pasadena, CA, USA

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

Page editor: Rebecca Sobol


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