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: 9a69f5087c
("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…
Reference in New Issue
Block a user