On Tue, Mar 19 2013, oskar.andero@xxxxxxxxxxxxxx wrote: > The udc_irq service runs the isr_tr_complete_handler which in turn > "nukes" the endpoints, including a call to rndis_response_complete, > if appropriate. If the rndis_msg_parser fails here, an error will > be printed using a dev_err call (through the ERROR() macro). > > However, if the usb cable was just disconnected the device (cdev) > might not be available and will be null. Since the dev_err macro will > dereference the cdev pointer we get a null pointer exception. > > Reviewed-by: Radovan Lekanovic <radovan.lekanovic@xxxxxxxxxxxxxx> > Signed-off-by: Truls Bengtsson <truls.bengtsson@xxxxxxxxxxxxxx> > Signed-off-by: Oskar Andero <oskar.andero@xxxxxxxxxxxxxx> Acked-by: Michal Nazarewicz <mina86@xxxxxxxxxx> I think this is the best solution. Adding if statements around it would just add noise. > --- > drivers/usb/gadget/f_rndis.c | 3 +-- > 1 files changed, 1 insertions(+), 2 deletions(-) > > diff --git a/drivers/usb/gadget/f_rndis.c b/drivers/usb/gadget/f_rndis.c > index 71beeb8..cc9c49c 100644 > --- a/drivers/usb/gadget/f_rndis.c > +++ b/drivers/usb/gadget/f_rndis.c > @@ -447,14 +447,13 @@ static void rndis_response_complete(struct usb_ep *ep, struct usb_request *req) > static void rndis_command_complete(struct usb_ep *ep, struct usb_request *req) > { > struct f_rndis *rndis = req->context; > - struct usb_composite_dev *cdev = rndis->port.func.config->cdev; > int status; > > /* received RNDIS command from USB_CDC_SEND_ENCAPSULATED_COMMAND */ > // spin_lock(&dev->lock); > status = rndis_msg_parser(rndis->config, (u8 *) req->buf); > if (status < 0) > - ERROR(cdev, "RNDIS command error %d, %d/%d\n", > + pr_err("RNDIS command error %d, %d/%d\n", > status, req->actual, req->length); > // spin_unlock(&dev->lock); > } -- Best regards, _ _ .o. | Liege of Serenely Enlightened Majesty of o' \,=./ `o ..o | Computer Science, Michał “mina86” Nazarewicz (o o) ooo +----<email/xmpp: mpn@xxxxxxxxxx>--------------ooO--(_)--Ooo--
Attachment:
pgp4BanQlR7vN.pgp
Description: PGP signature