lkml.org 
[lkml]   [2000]   [Mar]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: fcntl(2) and other file systems like XFS
Linus Torvalds wrote:
> Do a
>
> #define O_NONE 3
>
> and see if it still works.. I suspect it does - I was careful to have
> open() change the flags by doing something like
>
> flags = (flags + 1) & 3;
>
> which turns the O_ACCMODE bits into two nice bits (bit #0 is "readable"
> and bit #1 is "writable" instead of the standard O_ACCMODE braindamage).

[Aside: What is the purpose of the next line?
if (f->f_mode)
flag++;
]

O_NONE nearly works, just the permission check at the start is broken:

#include <fcntl.h>
#include <sys/stat.h>
#define O_NONE 3
int main (int argc, char ** argv)
{
int fd = open (argv [1], O_NONE);
struct stat st;
read (fd, 0, 1);
write (fd, 0, 1);
fstat (fd, &st);
fchdir (fd);
fchown (fd, 0);
fchmod (fd, 0777);
close (fd);
}

On a file with permission 600:

open("f", 0x4) = 3
read(3, 0, 1) = -1 EBADF (Bad file descriptor)
write(3, NULL, 1) = -1 EBADF (Bad file descriptor)
fstat(3, {st_mode=0, st_size=0, ...}) = 0
fchdir(3) = -1 ENOTDIR (Not a directory)
fchown(3, 0, 1) = -1 EPERM (Operation not
permitted)
fchmod(3, 0777) = 0
close(3) = 0

Ignore the fstat result -- it's working but strace is broken.

So fstat, fchdir, fchown and fchmod appear to be working, and read &
write are not permitted.

This is looking good!

On a file with permission 400 or 200 or 000:

open("f", 0x4) = -1 EACCES (Permission denied)

Oh dear, you need to read _and_ write permission to open this file with
mode O_NONE. And then you can't read or write it :-)

For completeness, a directory with mode 775:

open("tmp", 0x4) = -1 EISDIR (Is a directory)

Looks like the directory permissions check is confused too. The same
thing happens with O_DIRECTORY or a trailing slash.

I expect ioctls are not properly restricted for an O_NONE file, but I
didn't try. It wouldn't be hard to simply avoid opening the underlying
device -- thus allowing the fs-specific through to the fs.

That would fix the fs-specific flags thing once and for all, without
requiring new syscalls. And it would be more flexible.

-- Jamie

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 13:57    [W:0.332 / U:0.112 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site