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. Also adds missing call to
destroy_timer_on_stack();

Cc: Greg Kroah-Hartman <gre...@linuxfoundation.org>
Cc: Felipe Balbi <felipe.ba...@linux.intel.com>
Cc: Alan Stern <st...@rowland.harvard.edu>
Cc: "Gustavo A. R. Silva" <garsi...@embeddedor.com>
Cc: linux-usb@vger.kernel.org
Signed-off-by: Kees Cook <keesc...@chromium.org>
---
 drivers/usb/misc/usbtest.c | 22 +++++++++++++++-------
 1 file changed, 15 insertions(+), 7 deletions(-)

diff --git a/drivers/usb/misc/usbtest.c b/drivers/usb/misc/usbtest.c
index 3639e00a51a0..7f61921e4fa0 100644
--- a/drivers/usb/misc/usbtest.c
+++ b/drivers/usb/misc/usbtest.c
@@ -576,11 +576,16 @@ alloc_sglist(int nents, int max, int vary, struct 
usbtest_dev *dev, int pipe)
        return sg;
 }
 
-static void sg_timeout(unsigned long _req)
+struct sg_timeout {
+       struct timer_list timer;
+       struct usb_sg_request *req;
+};
+
+static void sg_timeout(struct timer_list *t)
 {
-       struct usb_sg_request   *req = (struct usb_sg_request *) _req;
+       struct sg_timeout *timeout = from_timer(timeout, t, timer);
 
-       usb_sg_cancel(req);
+       usb_sg_cancel(timeout->req);
 }
 
 static int perform_sglist(
@@ -594,9 +599,11 @@ static int perform_sglist(
 {
        struct usb_device       *udev = testdev_to_usbdev(tdev);
        int                     retval = 0;
-       struct timer_list       sg_timer;
+       struct sg_timeout       timeout = {
+               .req = req,
+       };
 
-       setup_timer_on_stack(&sg_timer, sg_timeout, (unsigned long) req);
+       timer_setup_on_stack(&timeout.timer, sg_timeout, 0);
 
        while (retval == 0 && iterations-- > 0) {
                retval = usb_sg_init(req, udev, pipe,
@@ -607,13 +614,14 @@ static int perform_sglist(
 
                if (retval)
                        break;
-               mod_timer(&sg_timer, jiffies +
+               mod_timer(&timeout.timer, jiffies +
                                msecs_to_jiffies(SIMPLE_IO_TIMEOUT));
                usb_sg_wait(req);
-               if (!del_timer_sync(&sg_timer))
+               if (!del_timer_sync(&timeout.timer))
                        retval = -ETIMEDOUT;
                else
                        retval = req->status;
+               destroy_timer_on_stack(&timeout.timer);
 
                /* FIXME check resulting data pattern */
 
-- 
2.7.4


-- 
Kees Cook
Pixel Security
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to