lkml.org 
[lkml]   [2022]   [Mar]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 21/26] usb: gadget: composite: remove check of list iterator against head past the loop body
    Date
    When list_for_each_entry() completes the iteration over the whole list
    without breaking the loop, the iterator value will be a bogus pointer
    computed based on the head element.

    While it is safe to use the pointer to determine if it was computed
    based on the head element, either with list_entry_is_head() or
    &pos->member == head, using the iterator variable after the loop should
    be avoided.

    In preparation to limiting the scope of a list iterator to the list
    traversal loop, use a dedicated pointer to point to the found element [1].

    Link: https://lore.kernel.org/all/YhdfEIwI4EdtHdym@kroah.com/
    Signed-off-by: Jakob Koschel <jakobkoschel@gmail.com>
    ---
    drivers/usb/gadget/composite.c | 9 +++++----
    1 file changed, 5 insertions(+), 4 deletions(-)

    diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c
    index 9315313108c9..4f7e789c3e07 100644
    --- a/drivers/usb/gadget/composite.c
    +++ b/drivers/usb/gadget/composite.c
    @@ -1690,6 +1690,7 @@ composite_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)
    u16 w_value = le16_to_cpu(ctrl->wValue);
    u16 w_length = le16_to_cpu(ctrl->wLength);
    struct usb_function *f = NULL;
    + struct usb_function *iter;
    u8 endp;

    if (w_length > USB_COMP_EP0_BUFSIZ) {
    @@ -2046,12 +2047,12 @@ composite_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)
    if (!cdev->config)
    break;
    endp = ((w_index & 0x80) >> 3) | (w_index & 0x0f);
    - list_for_each_entry(f, &cdev->config->functions, list) {
    - if (test_bit(endp, f->endpoints))
    + list_for_each_entry(iter, &cdev->config->functions, list) {
    + if (test_bit(endp, iter->endpoints)) {
    + f = iter;
    break;
    + }
    }
    - if (&f->list == &cdev->config->functions)
    - f = NULL;
    break;
    }
    try_fun_setup:
    --
    2.25.1
    \
     
     \ /
      Last update: 2022-03-08 18:22    [W:4.213 / U:0.772 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site