Ethereal-dev: Re: [Ethereal-dev] Major capture engine rework commited!

Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.

From: Guy Harris <gharris@xxxxxxxxx>
Date: Sun, 10 Apr 2005 02:17:05 -0700
Ulf Lamping wrote:

The most important part: we no longer use two different task models for
capturing. Even the ring buffer modes will work with two tasks now.

Note that these changes could, I suspect, allow a process to rename a capture file in between the point at which the capturing child process creates it and the point at which the parent opens it after being given the pathname by the child. This might not be possible on Windows, as it doesn't allow renames of open files, but it *is* possible on UN*X, and runs the risk that the parent could be tricked into reading a file it's not supposed to read.

This might not be an easy exploit - but, a long time ago, the reason why Ethereal was changed to pass a file descriptor for the open file to the capturing child process was that the OpenBSD folk considered this a hole and "fixed" it in the version in the OpenBSD ports database in such a way that broke it.

On many UN*Xes, the capture child could pass to the parent a file descriptor for the file it opened. However, as far as I know, not *all* UN*Xes support this, and the way it's done isn't the same on all UN*Xes (on UN*Xes where pipes are implemented as UNIX-domain sockets, you'd use the mechanism in UNIX-domain sockets to pass file descriptors; on UN*Xes where they're implemented as STREAMS connections and you can pass descriptors over STREAMS connections, you'd use that mechanism; on other UN*Xes, you might not be able to do it).