locks: fix a memory leak bug in __break_lease()
In __break_lease(), the file lock 'new_fl' is allocated in lease_alloc(). However, it is not deallocated in the following execution if smp_load_acquire() fails, leading to a memory leak bug. To fix this issue, free 'new_fl' before returning the error. Signed-off-by: Wenwen Wang <wenwen@cs.uga.edu> Signed-off-by: Jeff Layton <jlayton@kernel.org>
This commit is contained in:
parent
df2474a22c
commit
cfddf9f4c9
|
@ -1592,7 +1592,7 @@ int __break_lease(struct inode *inode, unsigned int mode, unsigned int type)
|
|||
ctx = smp_load_acquire(&inode->i_flctx);
|
||||
if (!ctx) {
|
||||
WARN_ON_ONCE(1);
|
||||
return error;
|
||||
goto free_lock;
|
||||
}
|
||||
|
||||
percpu_down_read(&file_rwsem);
|
||||
|
@ -1672,6 +1672,7 @@ out:
|
|||
spin_unlock(&ctx->flc_lock);
|
||||
percpu_up_read(&file_rwsem);
|
||||
locks_dispose_list(&dispose);
|
||||
free_lock:
|
||||
locks_free_lock(new_fl);
|
||||
return error;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue