How to change vnode operations ?

Gleb Kurtsou gleb.kurtsou at gmail.com
Thu Apr 22 19:18:59 UTC 2010


On (22/04/2010 16:02), Lukáš Czerner wrote:
> Hi all,
> 
> this may sound a little odd, since I have noticed that there is much
> work done to not allow such a thing ($SUBJ). But may be you can help
> me and point me to the right direction.
> 
> I am writing a kernel module with somewhat similar functionality
> like nullfs has, BUT it has to have some features which nullfs
> itself does not provide :
> 
>  1. I need the new layer to completely hide underlaying layer so no
>     one can bypass it.
Is hypothetic 'mount -t mynullfs /a /a' good enough for you? I'm not sure
what your goals are but completely finding underlaying filesystem won't
be easy because of VFS_GET, getfh and other stuff operating with inode
numbers.

>  2. Nullfs allows me to to overlay just one directory, but i want to
>     include another directories and/or exclude subdirectories/files.
>  3. Nullfs just redirects vnode operations to lower layer, I need to
>     catch that operation, do something (for example alter the arguments
>     somehow etc..), pass the operation (with possibly altered arguments)
>     to the lower layer, get the result and then return the result.
I'd suggest to take a look at pefs: http://github.com/glk/pefs
It's cryptographic stacked filesystem for FreeBSD. It changes file
names, hides directory entries, modifies data from lower layer
(encrypts or decrypts), supports mounting on same directory, etc.

> The best way to do that (I think) is to change vnode operations of
> particular vnodes to point to functions defined in that module. At
> this point, I can catch any operations with the vnode and this is
> the base of what i want.
> 
> So my question is. I there any "clean" way to chande vnode
> operations ? If not, is there any "not so clean" way ? Anyway I will
> appreciate any good idea how to do what I have described.
Imho, stacked filesystem is the only right way to do it (see null,
unionfs, pefs).

> Thanks!
> -Lukas. 
> _______________________________________________
> freebsd-hackers at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe at freebsd.org"


More information about the freebsd-hackers mailing list