That is what people are arguing it is. It is certainly a *potential*
security hole. There are two possibilities:
a) Either flink() is harmless and we should be able to add it.
b) This is a security hole, in which case /proc needs to be fixed. In
particular, the open("/proc/self/fd/3", O_RDWR) in my example above
should return EPERM.
> It is mistake of abstraction. ls show file in /proc/self/fd as
> symbolic links and kernel tries to work with it as symbolic
> links. Because there will be a problem when program can access file
> from cwd but cannot access from absolute path, also after chroot and
> after changing cwd. Therefore it just test permissions of the file
> and don't checks any directories in the path. It works as a program
> doing smth like that: cd testdir open testfile open /proc/self/fd/3
> (in mind: open testfile again)
>
> it was a choice of proceed, and it's a bad choice.
> I think that "open("/proc/self/fd/3", O_RDWR)" should forget anything about "testdir/testfile" and should only check permissions for proc/self/fd/3.
> using your test program i got
> open("testfile", O_RDONLY) = 3
> open("/proc/self/fd/3", O_RDWR) = 5
You've clearly changed it around; the file descriptor should be 4.
> and ls /proc/self/fd:
> l-wx------ 3 -> /.../testfile
> lrwx------ 5 -> /.../testfile
>
> my proceed: if fd 3 have permission l-wx------ it cannot be opened for reading anyway only for writing and execution.
You'd think, but it doesn't work that way. By the way, I
get:
lr-x------ 1 hpa eng 64 Apr 7 07:54 3 ->
/home/hpa/flink/testdir/testfile
lrwx------ 1 hpa eng 64 Apr 7 07:54 4 ->
/home/hpa/flink/testdir/testfile
... not l-wx------ which would be an O_WRONLY file descriptor.
Personally I would prefer if open() on
/proc/*/fd would actually operate as if a dup() on the relevant file
descriptor, which would be a significant change of semantics; however,
one could argue those are the saner semantics.
-hpa
-- <hpa@transmeta.com> at work, <hpa@zytor.com> in private! "Unix gives you enough rope to shoot yourself in the foot." Architectures needed: ia64 m68k mips64 ppc ppc64 s390 s390x sh v850 x86-64 - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/