diff options
author | Jeff Layton <jlayton@redhat.com> | 2014-03-10 09:54:15 -0400 |
---|---|---|
committer | Jeff Layton <jlayton@redhat.com> | 2014-03-31 08:24:43 -0400 |
commit | d7a06983a01a33605191c0766857b832ac32a2b6 (patch) | |
tree | d6a0f83579e0d7a20a235ddb568d935fe54b24fb /fs/namei.c | |
parent | 90478939dce096ed5b239cad16237dca0a59d66f (diff) |
locks: fix locks_mandatory_locked to respect file-private locks
As Trond pointed out, you can currently deadlock yourself by setting a
file-private lock on a file that requires mandatory locking and then
trying to do I/O on it.
Avoid this problem by plumbing some knowledge of file-private locks into
the mandatory locking code. In order to do this, we must pass down
information about the struct file that's being used to
locks_verify_locked.
Reported-by: Trond Myklebust <trond.myklebust@primarydata.com>
Signed-off-by: Jeff Layton <jlayton@redhat.com>
Acked-by: J. Bruce Fields <bfields@redhat.com>
Diffstat (limited to 'fs/namei.c')
-rw-r--r-- | fs/namei.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/namei.c b/fs/namei.c index d580df2e6804..dc51bac037c9 100644 --- a/fs/namei.c +++ b/fs/namei.c | |||
@@ -2542,7 +2542,7 @@ static int handle_truncate(struct file *filp) | |||
2542 | /* | 2542 | /* |
2543 | * Refuse to truncate files with mandatory locks held on them. | 2543 | * Refuse to truncate files with mandatory locks held on them. |
2544 | */ | 2544 | */ |
2545 | error = locks_verify_locked(inode); | 2545 | error = locks_verify_locked(filp); |
2546 | if (!error) | 2546 | if (!error) |
2547 | error = security_path_truncate(path); | 2547 | error = security_path_truncate(path); |
2548 | if (!error) { | 2548 | if (!error) { |