mirror of
https://github.com/torvalds/linux.git
synced 2026-05-12 16:18:45 +02:00
gpib: Fix memory leak in ni_usb_init()
In ni_usb_init(), if ni_usb_setup_init() fails, the function returns
-EFAULT without freeing the allocated writes buffer, leading to a
memory leak.
Additionally, ni_usb_setup_init() returns 0 on failure, which causes
ni_usb_init() to return -EFAULT, an inappropriate error code for this
situation.
Fix the leak by freeing writes in the error path. Modify
ni_usb_setup_init() to return -EINVAL on failure and propagate this
error code in ni_usb_init().
Fixes: 4e127de14f ("staging: gpib: Add National Instruments USB GPIB driver")
Suggested-by: Greg KH <gregkh@linuxfoundation.org>
Suggested-by: Dave Penkler <dpenkler@gmail.com>
Co-developed-by: Jianhao Xu <jianhao.xu@seu.edu.cn>
Signed-off-by: Jianhao Xu <jianhao.xu@seu.edu.cn>
Signed-off-by: Zilin Guan <zilin@seu.edu.cn>
Link: https://patch.msgid.link/20251230034546.929452-1-zilin@seu.edu.cn
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
484e622522
commit
b89921eed8
|
|
@ -1780,7 +1780,7 @@ static int ni_usb_setup_init(struct gpib_board *board, struct ni_usb_register *w
|
|||
i++;
|
||||
if (i > NUM_INIT_WRITES) {
|
||||
dev_err(&usb_dev->dev, "bug!, buffer overrun, i=%i\n", i);
|
||||
return 0;
|
||||
return -EINVAL;
|
||||
}
|
||||
return i;
|
||||
}
|
||||
|
|
@ -1799,10 +1799,12 @@ static int ni_usb_init(struct gpib_board *board)
|
|||
return -ENOMEM;
|
||||
|
||||
writes_len = ni_usb_setup_init(board, writes);
|
||||
if (writes_len)
|
||||
retval = ni_usb_write_registers(ni_priv, writes, writes_len, &ibsta);
|
||||
else
|
||||
return -EFAULT;
|
||||
if (writes_len < 0) {
|
||||
kfree(writes);
|
||||
return writes_len;
|
||||
}
|
||||
|
||||
retval = ni_usb_write_registers(ni_priv, writes, writes_len, &ibsta);
|
||||
kfree(writes);
|
||||
if (retval) {
|
||||
dev_err(&usb_dev->dev, "register write failed, retval=%i\n", retval);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user