mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-17 10:26:09 +00:00
staging: gasket: interrupt: fix the missed eventfd_ctx_put() in gasket_interrupt.c
gasket_interrupt_set_eventfd() misses to call eventfd_ctx_put() in an error path. We check interrupt is valid before calling eventfd_ctx_fdget() to fix it. There is the same issue in gasket_interrupt_clear_eventfd(), Add the missed function call to fix it. Fixes: 9a69f5087ccc ("drivers/staging: Gasket driver framework + Apex driver") Signed-off-by: Jing Xiangfeng <jingxiangfeng@huawei.com> Link: https://lore.kernel.org/r/20201112064924.99680-1-jingxiangfeng@huawei.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
8b5b1b8193
commit
ab5b769a23
@ -487,14 +487,16 @@ int gasket_interrupt_system_status(struct gasket_dev *gasket_dev)
|
||||
int gasket_interrupt_set_eventfd(struct gasket_interrupt_data *interrupt_data,
|
||||
int interrupt, int event_fd)
|
||||
{
|
||||
struct eventfd_ctx *ctx = eventfd_ctx_fdget(event_fd);
|
||||
|
||||
if (IS_ERR(ctx))
|
||||
return PTR_ERR(ctx);
|
||||
struct eventfd_ctx *ctx;
|
||||
|
||||
if (interrupt < 0 || interrupt >= interrupt_data->num_interrupts)
|
||||
return -EINVAL;
|
||||
|
||||
ctx = eventfd_ctx_fdget(event_fd);
|
||||
|
||||
if (IS_ERR(ctx))
|
||||
return PTR_ERR(ctx);
|
||||
|
||||
interrupt_data->eventfd_ctxs[interrupt] = ctx;
|
||||
return 0;
|
||||
}
|
||||
@ -505,6 +507,9 @@ int gasket_interrupt_clear_eventfd(struct gasket_interrupt_data *interrupt_data,
|
||||
if (interrupt < 0 || interrupt >= interrupt_data->num_interrupts)
|
||||
return -EINVAL;
|
||||
|
||||
interrupt_data->eventfd_ctxs[interrupt] = NULL;
|
||||
if (interrupt_data->eventfd_ctxs[interrupt]) {
|
||||
eventfd_ctx_put(interrupt_data->eventfd_ctxs[interrupt]);
|
||||
interrupt_data->eventfd_ctxs[interrupt] = NULL;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user