mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 01:32:21 +02:00
thunderbolt: debugfs: Fix margining error counter buffer leak
When USB4 lane margining debugfs write support is enabled,
margining_error_counter_write() copies the user input with
validate_and_copy_from_user(). This allocates a temporary page that is
only needed while parsing the requested error counter mode.
The function currently returns without freeing that page. This leaks one
page per write to the error_counter debugfs file, including successful
writes and writes that later fail while taking the domain lock or because
software margining is not enabled.
Free the temporary page once parsing has completed, and also before
returning from the invalid-input path.
Fixes: 10904df3f2 ("thunderbolt: Improve software receiver lane margining")
Signed-off-by: Xu Rao <raoxu@uniontech.com>
Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
This commit is contained in:
parent
168479c9bf
commit
503c5ae1e7
|
|
@ -956,7 +956,9 @@ margining_error_counter_write(struct file *file, const char __user *user_buf,
|
|||
else if (!strcmp(buf, "stop"))
|
||||
error_counter = USB4_MARGIN_SW_ERROR_COUNTER_STOP;
|
||||
else
|
||||
return -EINVAL;
|
||||
goto err_free;
|
||||
|
||||
free_page((unsigned long)buf);
|
||||
|
||||
scoped_cond_guard(mutex_intr, return -ERESTARTSYS, &tb->lock) {
|
||||
if (!margining->software)
|
||||
|
|
@ -966,6 +968,10 @@ margining_error_counter_write(struct file *file, const char __user *user_buf,
|
|||
}
|
||||
|
||||
return count;
|
||||
|
||||
err_free:
|
||||
free_page((unsigned long)buf);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static int margining_error_counter_show(struct seq_file *s, void *not_used)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user