diff mbox

[V9fs-developer] fs/9p: Initialize status in v9fs_file_do_lock.

Message ID 1420804567-15371-1-git-send-email-dominique.martinet@cea.fr (mailing list archive)
State Awaiting Upstream, archived
Headers show

Commit Message

Dominique Martinet Jan. 9, 2015, 11:56 a.m. UTC
If p9_client_lock_dotl returns an error, status is possibly never filled
but will be used in the following switch.
Initializing it to P9_LOCK_ERROR makes sur we will return an error and
cleanup (and not hit the default case).

Signed-off-by: Dominique Martinet <dominique.martinet@cea.fr>
---
 fs/9p/vfs_file.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Kirill A. Shutemov Jan. 9, 2015, 12:33 p.m. UTC | #1
On Fri, Jan 09, 2015 at 12:56:07PM +0100, Dominique Martinet wrote:
> If p9_client_lock_dotl returns an error, status is possibly never filled
> but will be used in the following switch.
> Initializing it to P9_LOCK_ERROR makes sur we will return an error and
> cleanup (and not hit the default case).

That's what my patch[1] fixes.

http://marc.info/?i=1419858019-116944-1-git-send-email-kirill.shutemov%40linux.intel.com
Dominique Martinet Jan. 9, 2015, 1:07 p.m. UTC | #2
Kirill A. Shutemov wrote on Fri, Jan 09, 2015 at 02:33:53PM +0200:
> On Fri, Jan 09, 2015 at 12:56:07PM +0100, Dominique Martinet wrote:
> > If p9_client_lock_dotl returns an error, status is possibly never filled
> > but will be used in the following switch.
> > Initializing it to P9_LOCK_ERROR makes sur we will return an error and
> > cleanup (and not hit the default case).
> 
> That's what my patch[1] fixes.
> 
> http://marc.info/?i=1419858019-116944-1-git-send-email-kirill.shutemov%40linux.intel.com

Actually, it's slightly different and still worth adding (mine if we
apply your's first and your's if we apply mine first - don't think
they'll conflict. I even reworded the (too old!) commit message to fit
with your patch :))

Your patch will not BUG() if status is junk, BUT if status uninitialized
value is 0 and p9_client_lock_dotl then we'll return res=0 (success) and
not unlock before returning. My patch makes sure we'll return -ENOLCK.

Likewise, if we only apply my patch then a rogue server could BUG() a
client, so we want your's anyway.
Kirill A. Shutemov Jan. 9, 2015, 1:20 p.m. UTC | #3
On Fri, Jan 09, 2015 at 02:07:23PM +0100, Dominique Martinet wrote:
> Kirill A. Shutemov wrote on Fri, Jan 09, 2015 at 02:33:53PM +0200:
> > On Fri, Jan 09, 2015 at 12:56:07PM +0100, Dominique Martinet wrote:
> > > If p9_client_lock_dotl returns an error, status is possibly never filled
> > > but will be used in the following switch.
> > > Initializing it to P9_LOCK_ERROR makes sur we will return an error and
> > > cleanup (and not hit the default case).
> > 
> > That's what my patch[1] fixes.
> > 
> > http://marc.info/?i=1419858019-116944-1-git-send-email-kirill.shutemov%40linux.intel.com
> 
> Actually, it's slightly different and still worth adding (mine if we
> apply your's first and your's if we apply mine first - don't think
> they'll conflict. I even reworded the (too old!) commit message to fit
> with your patch :))
> 
> Your patch will not BUG() if status is junk, BUT if status uninitialized
> value is 0 and p9_client_lock_dotl then we'll return res=0 (success) and
> not unlock before returning. My patch makes sure we'll return -ENOLCK.

No, if p9_client_lock_dotl() return 0 it must set status. If it's not,
that's bug on p9_client_lock_dotl() side and must be fixed.
Dominique Martinet Jan. 9, 2015, 1:29 p.m. UTC | #4
Kirill A. Shutemov wrote on Fri, Jan 09, 2015 at 03:20:51PM +0200:
> > Your patch will not BUG() if status is junk, BUT if status uninitialized
> > value is 0 and p9_client_lock_dotl then we'll return res=0 (success) and
> > not unlock before returning. My patch makes sure we'll return -ENOLCK.
> 
> No, if p9_client_lock_dotl() return 0 it must set status. If it's not,
> that's bug on p9_client_lock_dotl() side and must be fixed.

I had that bit right, but I only remembered your second patch -- sorry.

It should be fine with your patchES, please disregard this one.
diff mbox

Patch

diff --git a/fs/9p/vfs_file.c b/fs/9p/vfs_file.c
index 5594505..9b02849 100644
--- a/fs/9p/vfs_file.c
+++ b/fs/9p/vfs_file.c
@@ -149,7 +149,7 @@  static int v9fs_file_do_lock(struct file *filp, int cmd, struct file_lock *fl)
 {
 	struct p9_flock flock;
 	struct p9_fid *fid;
-	uint8_t status;
+	uint8_t status = P9_LOCK_ERROR;
 	int res = 0;
 	unsigned char fl_type;