Re: [PATCH 2/5] daemon: if one of the standard fds is missing open it to /dev/null

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Matthias Lederhofer wrote:
>
> +/* if any standard file descriptor is missing open it to /dev/null */
> +static void sanitize_stdfds(void)
> +{
> +	int devnull = -1, i;
> +	struct stat buf;
> +	for (i = 0; i < 3; ++i) {
> +		if (fstat(i, &buf) != -1)
> +			continue;
> +		if (devnull == -1 &&
> +			(devnull = open("/dev/null", O_RDWR, 0)) == -1)
> +			die("open /dev/null failed: %s", strerror(errno));
> +		if (dup2(devnull, i) != i)
> +			die("dup2 failed: %s", strerror(errno));
> +	}
> +	if (devnull != -1)
> +		close(devnull);
> +}

This looks broken.  The open will return i as this is
the lowest free fd.  I don't know what POSIX says
about dup2(i,i) but anyway, you close it at the end
which completely defeats the intent of the function.

How's this?

	devnull = open("/dev/null", O_RDWR, 0);
	if (devnull == 0)
		devnull = dup(devnull);
	if (devnull == 1)
		devnull = dup(devnull);
	if (devnull == -1)
		die("open/dup /dev/null failed: %s", strerror(errno));
	if (devnull > 2)
		close(devnull);

Ciao, ET.
-
: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]