infiniband: hfi1: fix a memory leak bug
In fault_opcodes_read(), 'data' is not deallocated if debugfs_file_get() fails, leading to a memory leak. To fix this bug, introduce the 'free_data' label to free 'data' before returning the error. Signed-off-by: Wenwen Wang <wenwen@cs.uga.edu> Reviewed-by: Leon Romanovsky <leonro@mellanox.com> Acked-by: Dennis Dalessandro <dennis.dalessandro@intel.com> Link: https://lore.kernel.org/r/1566156571-4335-1-git-send-email-wenwen@cs.uga.edu Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
committed by
Doug Ledford
parent
5c1baaa82c
commit
b08afa064c
@@ -214,7 +214,7 @@ static ssize_t fault_opcodes_read(struct file *file, char __user *buf,
|
|||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
ret = debugfs_file_get(file->f_path.dentry);
|
ret = debugfs_file_get(file->f_path.dentry);
|
||||||
if (unlikely(ret))
|
if (unlikely(ret))
|
||||||
return ret;
|
goto free_data;
|
||||||
bit = find_first_bit(fault->opcodes, bitsize);
|
bit = find_first_bit(fault->opcodes, bitsize);
|
||||||
while (bit < bitsize) {
|
while (bit < bitsize) {
|
||||||
zero = find_next_zero_bit(fault->opcodes, bitsize, bit);
|
zero = find_next_zero_bit(fault->opcodes, bitsize, bit);
|
||||||
@@ -232,6 +232,7 @@ static ssize_t fault_opcodes_read(struct file *file, char __user *buf,
|
|||||||
data[size - 1] = '\n';
|
data[size - 1] = '\n';
|
||||||
data[size] = '\0';
|
data[size] = '\0';
|
||||||
ret = simple_read_from_buffer(buf, len, pos, data, size);
|
ret = simple_read_from_buffer(buf, len, pos, data, size);
|
||||||
|
free_data:
|
||||||
kfree(data);
|
kfree(data);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user