diff options
author | Amir Goldstein <amir73il@gmail.com> | 2019-06-07 17:24:38 +0300 |
---|---|---|
committer | Jeff Layton <jlayton@kernel.org> | 2019-06-19 08:49:38 -0400 |
commit | 387e3746d01c34457d6a73688acd90428725070b (patch) | |
tree | 575796428aac6a85321113d53a75abe9cfdccbcf /kernel/uid16.c | |
parent | d51f527f44f96276a94c191bc160de051f64aeea (diff) | |
download | linux-387e3746d01c34457d6a73688acd90428725070b.tar.bz2 |
locks: eliminate false positive conflicts for write lease
check_conflicting_open() is checking for existing fd's open for read or
for write before allowing to take a write lease. The check that was
implemented using i_count and d_count is an approximation that has
several false positives. For example, overlayfs since v4.19, takes an
extra reference on the dentry; An open with O_PATH takes a reference on
the dentry although the file cannot be read nor written.
Change the implementation to use i_readcount and i_writecount to
eliminate the false positive conflicts and allow a write lease to be
taken on an overlayfs file.
The change of behavior with existing fd's open with O_PATH is symmetric
w.r.t. current behavior of lease breakers - an open with O_PATH currently
does not break a write lease.
This increases the size of struct inode by 4 bytes on 32bit archs when
CONFIG_FILE_LOCKING is defined and CONFIG_IMA was not already
defined.
Signed-off-by: Amir Goldstein <amir73il@gmail.com>
Signed-off-by: Jeff Layton <jlayton@kernel.org>
Diffstat (limited to 'kernel/uid16.c')
0 files changed, 0 insertions, 0 deletions