diff options
Diffstat (limited to 'fs/fuse/dev.c')
| -rw-r--r-- | fs/fuse/dev.c | 16 | 
1 files changed, 12 insertions, 4 deletions
diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c index 640fc229df1..5cb8614508c 100644 --- a/fs/fuse/dev.c +++ b/fs/fuse/dev.c @@ -258,10 +258,14 @@ void fuse_queue_forget(struct fuse_conn *fc, struct fuse_forget_link *forget,  	forget->forget_one.nlookup = nlookup;  	spin_lock(&fc->lock); -	fc->forget_list_tail->next = forget; -	fc->forget_list_tail = forget; -	wake_up(&fc->waitq); -	kill_fasync(&fc->fasync, SIGIO, POLL_IN); +	if (fc->connected) { +		fc->forget_list_tail->next = forget; +		fc->forget_list_tail = forget; +		wake_up(&fc->waitq); +		kill_fasync(&fc->fasync, SIGIO, POLL_IN); +	} else { +		kfree(forget); +	}  	spin_unlock(&fc->lock);  } @@ -1358,6 +1362,10 @@ static int fuse_notify_inval_entry(struct fuse_conn *fc, unsigned int size,  	if (outarg.namelen > FUSE_NAME_MAX)  		goto err; +	err = -EINVAL; +	if (size != sizeof(outarg) + outarg.namelen + 1) +		goto err; +  	name.name = buf;  	name.len = outarg.namelen;  	err = fuse_copy_one(cs, buf, outarg.namelen + 1);  |