Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1717523
| From | Anton Vasilyev <vasilyev@ispras.ru> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | Re: [PATCH] udc: Memory leak on error path and use after free |
| Date | 2017-08-22 17:50 +0200 |
| Message-ID | <uhjBg-4nc-15@gated-at.bofh.it> (permalink) |
| References | <uf9wm-VL-21@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
Sorry for delayed reply. On 16.08.2017 19:35, Alan Stern wrote: > On Wed, 16 Aug 2017, Anton Vasilyev wrote: > >> On 16.08.2017 18:29, Alan Stern wrote: >>> On Wed, 16 Aug 2017, Anton Vasilyev wrote: >>> >>>> gadget_release() is responsible for cleanup dev memory. >>>> But if net2280_probe() fails after dev allocation, then >>>> gadget_release() become unregistered and dev memory leaks. >>> >>> This isn't needed if usb_add_gadget_udc_release() is fixed, right? >>> >> >> No, this situation could appear before call >> usb_add_gadget_udc_release(). >> >>>> Also net2280_remove() calls usb_del_gadget_udc() which >>>> perform schedule_delayed_work() with gadget_release(), so >>>> it is possible that dev will be deallocated exactly after >>>> this call and leads to use after free. >>> >>> Where is there a possible use after free? >>> >> >> net2280_remove() continue work with struct net2280 *dev after call >> usb_del_gadget_udc(&dev->gadget), but this net2280 *dev could be >> deallocated by gadget_release() >> >>>> The patch moves deallocation from gadget_release() to >>>> net2280_remove(). >>> >>> Alan Stern > > Okay, now I understand what you were saying. Yes, I agree, the > existing code isn't right. > > But a better solution would be to move the usb_del_gadget_udc() call > from the beginning of net2280_remove() to the end. And make the call > conditional, depending on whether usb_add_gadget_udc_release() has > already been called successfully. If allow gadget_release() to deallocate net2280 *dev then it will be called on fail of usb_add_gadget_udc_release() and it will be unsafe to perform clean-up. My point is that gadget shouldn't deallocate its parent memory at all. > > The point is that the device core does not allow drivers to deallocate > memory containing a struct device before the ->release callback has > been invoked. Your patch might do that, if the release was delayed for > some reason. I don't see possibility for parent device to be removed before its child was released. Please point if I'm wrong. Alternative way to move allocation under devm interface. > > Alan Stern > -- Anton Vasilyev Linux Verification Center, ISPRAS web: http://linuxtesting.org e-mail: vasilyev@ispras.ru
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[PATCH] udc: Memory leak on error path and use after free Anton Vasilyev <vasilyev@ispras.ru> - 2017-08-16 15:50 +0200
Re: [PATCH] udc: Memory leak on error path and use after free Alan Stern <stern@rowland.harvard.edu> - 2017-08-16 17:30 +0200
Re: [PATCH] udc: Memory leak on error path and use after free Anton Vasilyev <vasilyev@ispras.ru> - 2017-08-16 18:10 +0200
Re: [PATCH] udc: Memory leak on error path and use after free Alan Stern <stern@rowland.harvard.edu> - 2017-08-16 18:40 +0200
Re: [PATCH] udc: Memory leak on error path and use after free Anton Vasilyev <vasilyev@ispras.ru> - 2017-08-22 17:50 +0200
Re: [PATCH] udc: Memory leak on error path and use after free Alan Stern <stern@rowland.harvard.edu> - 2017-08-22 20:40 +0200
csiph-web