Skip to content
  • David Howells's avatar
    overlayfs: Make f_path always point to the overlay and f_inode to the underlay · 4bacc9c9
    David Howells authored
    
    
    Make file->f_path always point to the overlay dentry so that the path in
    /proc/pid/fd is correct and to ensure that label-based LSMs have access to the
    overlay as well as the underlay (path-based LSMs probably don't need it).
    
    Using my union testsuite to set things up, before the patch I see:
    
    	[root@andromeda union-testsuite]# bash 5</mnt/a/foo107
    	[root@andromeda union-testsuite]# ls -l /proc/$$/fd/
    	...
    	lr-x------. 1 root root 64 Jun  5 14:38 5 -> /a/foo107
    	[root@andromeda union-testsuite]# stat /mnt/a/foo107
    	...
    	Device: 23h/35d Inode: 13381       Links: 1
    	...
    	[root@andromeda union-testsuite]# stat -L /proc/$$/fd/5
    	...
    	Device: 23h/35d Inode: 13381       Links: 1
    	...
    
    After the patch:
    
    	[root@andromeda union-testsuite]# bash 5</mnt/a/foo107
    	[root@andromeda union-testsuite]# ls -l /proc/$$/fd/
    	...
    	lr-x------. 1 root root 64 Jun  5 14:22 5 -> /mnt/a/foo107
    	[root@andromeda union-testsuite]# stat /mnt/a/foo107
    	...
    	Device: 23h/35d Inode: 40346       Links: 1
    	...
    	[root@andromeda union-testsuite]# stat -L /proc/$$/fd/5
    	...
    	Device: 23h/35d Inode: 40346       Links: 1
    	...
    
    Note the change in where /proc/$$/fd/5 points to in the ls command.  It was
    pointing to /a/foo107 (which doesn't exist) and now points to /mnt/a/foo107
    (which is correct).
    
    The inode accessed, however, is the lower layer.  The union layer is on device
    25h/37d and the upper layer on 24h/36d.
    
    Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
    Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
    4bacc9c9