[can.general] disastrous 4.2bsd bug

henry@utzoo.UUCP (Henry Spencer) (02/11/84)

I apologize to the folks reading these newsgroups who have already
seen this one in net.bugs.4bsd, but there are almost certainly some
sites which don't get the net.* groups but do get one of these.
And this bug is so horrifying that it needs to be shouted from the
housetops.  Anyone running 4.2bsd, FIX IT FAST!

-----
From watmath!arwhite Fri Feb 10 15:47:16 1984
Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Posting-Version: version B 2.10.1 6/24/83; site watmath.UUCP
Path: utzoo!watmath!arwhite
From: arwhite@watmath.UUCP (Alex White)
Newsgroups: net.bugs.4bsd
Subject: Urgent fix to open for 4.2bsd
Message-ID: <6820@watmath.UUCP>
Date: Wed, 8-Feb-84 14:43:29 EST
Article-I.D.: watmath.6820
Posted: Wed Feb  8 14:43:29 1984
Date-Received: Fri, 10-Feb-84 02:01:22 EST
Organization: U of Waterloo, Ontario
Lines: 33

Subject: FTRUNC bypasses permissions!
Index:	/sys/ufs_syscalls.c 4.2BSD

Description:
	copen doesn't check permissions if FTRUNC is specified but FWRITE
	isn't.  This means you can truncate files you don't have perms on,
	and truncate to zero length DIRECTORIES!!!!
Repeat-By:
	#include <sys/file.h>
	main()
	{
		open("xyz", O_TRUNC|O_RDONLY);	/* xyz with no write perms */
		open(".", O_TRUNC|O_RDONLY);	/* Directory is truncated! */
	}
Fix:
	in copen, change
		if((mode&FCREAT) == 0) {
			if (mode&FREAD)
				...
			if (mode&FWRITE) {
				...
			}
		}
	change the 
			if (mode&FWRITE) {
	to
			if (mode&(FWRITE|FTRUNC)) {
	this will mean the check for write perms will be done for truncate,
	and also the check for being a directory.

*If anybody takes advantage of this on any system on campus before I get
*around to changing them all and after I post this note you will find your
*account gone very quickly!


-----
-- 
				Henry Spencer @ U of Toronto Zoology
				{allegra,ihnp4,linus,decvax}!utzoo!henry