usb: usbatm: Convert timers to use timer_setup()

In preparation for unconditionally passing the struct timer_list pointer to
all timer callbacks, switch to using the new timer_setup() and from_timer()
to pass the timer pointer explicitly. Additionally corrects and on-stack
timer usage.

Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Duncan Sands <duncan.sands@free.fr>
Cc: "Gustavo A. R. Silva" <garsilva@embeddedor.com>
Cc: accessrunner-general@lists.sourceforge.net
Cc: linux-usb@vger.kernel.org
Signed-off-by: Kees Cook <keescook@chromium.org>
Reviewed-by: Allen Pais <allen.lkml@gmail.com>
This commit is contained in:
Kees Cook
2017-10-21 00:12:34 -07:00
parent ff07a23fec
commit 72a9f9a445
3 changed files with 29 additions and 20 deletions

View File

@@ -547,21 +547,30 @@ static void cxacru_blocking_completion(struct urb *urb)
complete(urb->context);
}
static void cxacru_timeout_kill(unsigned long data)
struct cxacru_timer {
struct timer_list timer;
struct urb *urb;
};
static void cxacru_timeout_kill(struct timer_list *t)
{
usb_unlink_urb((struct urb *) data);
struct cxacru_timer *timer = from_timer(timer, t, timer);
usb_unlink_urb(timer->urb);
}
static int cxacru_start_wait_urb(struct urb *urb, struct completion *done,
int *actual_length)
{
struct timer_list timer;
struct cxacru_timer timer = {
.urb = urb,
};
setup_timer(&timer, cxacru_timeout_kill, (unsigned long)urb);
timer.expires = jiffies + msecs_to_jiffies(CMD_TIMEOUT);
add_timer(&timer);
timer_setup_on_stack(&timer.timer, cxacru_timeout_kill, 0);
mod_timer(&timer.timer, jiffies + msecs_to_jiffies(CMD_TIMEOUT));
wait_for_completion(done);
del_timer_sync(&timer);
del_timer_sync(&timer.timer);
destroy_timer_on_stack(&timer.timer);
if (actual_length)
*actual_length = urb->actual_length;