integrity: nfsd imbalance bug fix
authorMimi Zohar <zohar@linux.vnet.ibm.com>
Wed, 27 May 2009 13:31:52 +0000 (09:31 -0400)
committerJames Morris <jmorris@namei.org>
Wed, 27 May 2009 23:32:43 +0000 (09:32 +1000)
commit14dba5331b90c20588ae6504fea8049c7283028d
tree55b55dfd413e7dcad4d33dca131cba70e281e41a
parent76b0187525f024cb391c8043adf2e359b2adb988
integrity: nfsd imbalance bug fix

An nfsd exported file is opened/closed by the kernel causing the
integrity imbalance message.

Before a file is opened, there normally is permission checking, which
is done in inode_permission().  However, as integrity checking requires
a dentry and mount point, which is not available in inode_permission(),
the integrity (permission) checking must be called separately.

In order to detect any missing integrity checking calls, we keep track
of file open/closes.  ima_path_check() increments these counts and
does the integrity (permission) checking. As a result, the number of
calls to ima_path_check()/ima_file_free() should be balanced.  An extra
call to fput(), indicates the file could have been accessed without first
calling ima_path_check().

In nfsv3 permission checking is done once, followed by multiple reads,
which do an open/close for each read.  The integrity (permission) checking
call should be in nfsd_permission() after the inode_permission() call, but
as there is no correlation between the number of permission checking and
open calls, the integrity checking call should not increment the counters,
but defer it to when the file is actually opened.

This patch adds:
- integrity (permission) checking for nfsd exported files in nfsd_permission().
- a call to increment counts for files opened by nfsd.

This patch has been updated to return the nfs error types.

Signed-off-by: Mimi Zohar <zohar@us.ibm.com>
Signed-off-by: James Morris <jmorris@namei.org>
fs/nfsd/vfs.c