All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jeff Layton <jlayton@redhat.com>
To: viro@ZenIV.linux.org.uk
Cc: linux-fsdevel@vger.kernel.org, bfields@fieldses.org
Subject: [PATCH v7 15/17] locks: require that flock->l_pid be set to 0 for file-private locks
Date: Wed, 19 Mar 2014 16:45:59 -0400	[thread overview]
Message-ID: <1395261961-10855-16-git-send-email-jlayton@redhat.com> (raw)
In-Reply-To: <1395261961-10855-1-git-send-email-jlayton@redhat.com>

Neil Brown suggested potentially overloading the l_pid value as a "lock
context" field for file-private locks. While I don't think we will
probably want to do that here, it's probably a good idea to ensure that
in the future we could extend this API without breaking existing
callers.

Typically the l_pid value is ignored for incoming struct flock
arguments, serving mainly as a place to return the pid of the owner if
there is a conflicting lock. For file-private locks, require that it
currently be set to 0 and return EINVAL if it isn't. If we eventually
want to make a non-zero l_pid mean something, then this will help ensure
that we don't break legacy programs that are using file-private locks.

Cc: Neil Brown <neilb@suse.de>
Signed-off-by: Jeff Layton <jlayton@redhat.com>
---
 fs/locks.c | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/fs/locks.c b/fs/locks.c
index ebcc9968ddae..d908b735c157 100644
--- a/fs/locks.c
+++ b/fs/locks.c
@@ -1931,6 +1931,10 @@ int fcntl_getlk(struct file *filp, unsigned int cmd, struct flock __user *l)
 		goto out;
 
 	if (cmd == F_GETLKP) {
+		error = -EINVAL;
+		if (flock.l_pid != 0)
+			goto out;
+
 		cmd = F_GETLK;
 		file_lock.fl_flags |= FL_FILE_PVT;
 		file_lock.fl_owner = (fl_owner_t)filp;
@@ -2062,11 +2066,19 @@ again:
 	 */
 	switch (cmd) {
 	case F_SETLKP:
+		error = -EINVAL;
+		if (flock.l_pid != 0)
+			goto out;
+
 		cmd = F_SETLK;
 		file_lock->fl_flags |= FL_FILE_PVT;
 		file_lock->fl_owner = (fl_owner_t)filp;
 		break;
 	case F_SETLKPW:
+		error = -EINVAL;
+		if (flock.l_pid != 0)
+			goto out;
+
 		cmd = F_SETLKW;
 		file_lock->fl_flags |= FL_FILE_PVT;
 		file_lock->fl_owner = (fl_owner_t)filp;
@@ -2121,6 +2133,10 @@ int fcntl_getlk64(struct file *filp, unsigned int cmd, struct flock64 __user *l)
 		goto out;
 
 	if (cmd == F_GETLKP) {
+		error = -EINVAL;
+		if (flock.l_pid != 0)
+			goto out;
+
 		cmd = F_GETLK64;
 		file_lock.fl_flags |= FL_FILE_PVT;
 		file_lock.fl_owner = (fl_owner_t)filp;
@@ -2185,11 +2201,19 @@ again:
 	 */
 	switch (cmd) {
 	case F_SETLKP:
+		error = -EINVAL;
+		if (flock.l_pid != 0)
+			goto out;
+
 		cmd = F_SETLK64;
 		file_lock->fl_flags |= FL_FILE_PVT;
 		file_lock->fl_owner = (fl_owner_t)filp;
 		break;
 	case F_SETLKPW:
+		error = -EINVAL;
+		if (flock.l_pid != 0)
+			goto out;
+
 		cmd = F_SETLKW64;
 		file_lock->fl_flags |= FL_FILE_PVT;
 		file_lock->fl_owner = (fl_owner_t)filp;
-- 
1.8.5.3


  parent reply	other threads:[~2014-03-19 20:46 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-03-19 20:45 [PATCH v7 00/17] locks: fixes for 3.15 and file-private lock support Jeff Layton
2014-03-19 20:45 ` [PATCH v7 01/17] locks: close potential race between setlease and open Jeff Layton
2014-03-19 20:45 ` [PATCH v7 02/17] locks: clean up comment typo Jeff Layton
2014-03-23 19:54   ` J. Bruce Fields
2014-03-19 20:45 ` [PATCH v7 03/17] locks: remove "inline" qualifier from fl_link manipulation functions Jeff Layton
2014-03-23 19:55   ` J. Bruce Fields
2014-03-19 20:45 ` [PATCH v7 04/17] locks: add __acquires and __releases annotations to locks_start and locks_stop Jeff Layton
2014-03-23 19:55   ` J. Bruce Fields
2014-03-19 20:45 ` [PATCH v7 05/17] locks: eliminate BUG() call when there's an unexpected lock on file close Jeff Layton
2014-03-23 20:01   ` J. Bruce Fields
2014-03-19 20:45 ` [PATCH v7 06/17] locks: fix posix lock range overflow handling Jeff Layton
2014-03-19 20:45 ` [PATCH v7 07/17] locks: consolidate checks for compatible filp->f_mode values in setlk handlers Jeff Layton
2014-03-23 20:08   ` J. Bruce Fields
2014-03-19 20:45 ` [PATCH v7 08/17] locks: rename locks_remove_flock to locks_remove_file Jeff Layton
2014-03-23 22:58   ` J. Bruce Fields
2014-03-19 20:45 ` [PATCH v7 09/17] MAINTAINERS: add Bruce and myself to list of maintainers for file locking code Jeff Layton
2014-03-19 20:45 ` [PATCH v7 10/17] locks: make /proc/locks show IS_FILE_PVT locks with a P suffix Jeff Layton
2014-03-25  0:20   ` J. Bruce Fields
2014-03-25  0:57     ` Jeffrey Layton
2014-03-25  4:18       ` J. Bruce Fields
2014-03-29 14:18         ` Jeff Layton
2014-03-29 19:05           ` J. Bruce Fields
2014-03-19 20:45 ` [PATCH v7 11/17] locks: report l_pid as -1 for FL_FILE_PVT locks Jeff Layton
2014-03-25  0:30   ` J. Bruce Fields
2014-03-19 20:45 ` [PATCH v7 12/17] locks: pass the cmd value to fcntl_getlk/getlk64 Jeff Layton
2014-03-19 20:45 ` [PATCH v7 13/17] locks: skip deadlock detection on FL_FILE_PVT locks Jeff Layton
2014-03-28 21:43   ` J. Bruce Fields
2014-03-19 20:45 ` [PATCH v7 14/17] locks: add new fcntl cmd values for handling file private locks Jeff Layton
2014-03-19 20:45 ` Jeff Layton [this message]
2014-03-19 20:46 ` [PATCH v7 16/17] locks: fix locks_mandatory_locked to respect file-private locks Jeff Layton
2014-03-19 20:46 ` [PATCH v7 17/17] locks: make locks_mandatory_area check for " Jeff Layton
2014-03-28  2:15 ` [PATCH v7 00/17] locks: fixes for 3.15 and file-private lock support J. Bruce Fields

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1395261961-10855-16-git-send-email-jlayton@redhat.com \
    --to=jlayton@redhat.com \
    --cc=bfields@fieldses.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=viro@ZenIV.linux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.