drivers/usbdev: fix double free when cdcacm uninitialize with not used
Signed-off-by: dongjiuzhu1 <dongjiuzhu1@xiaomi.com>
This commit is contained in:
parent
ad59ef075f
commit
e5a925543b
@ -3071,6 +3071,10 @@ void cdcacm_uninitialize(FAR struct usbdevclass_driver_s *classdev)
|
|||||||
char devname[CDCACM_DEVNAME_SIZE];
|
char devname[CDCACM_DEVNAME_SIZE];
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
#ifndef CONFIG_CDCACM_COMPOSITE
|
||||||
|
usbdev_unregister(&drvr->drvr);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Un-register the CDC/ACM TTY device */
|
/* Un-register the CDC/ACM TTY device */
|
||||||
|
|
||||||
snprintf(devname, CDCACM_DEVNAME_SIZE, CDCACM_DEVNAME_FORMAT, priv->minor);
|
snprintf(devname, CDCACM_DEVNAME_SIZE, CDCACM_DEVNAME_FORMAT, priv->minor);
|
||||||
@ -3080,18 +3084,6 @@ void cdcacm_uninitialize(FAR struct usbdevclass_driver_s *classdev)
|
|||||||
usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_UARTUNREGISTER),
|
usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_UARTUNREGISTER),
|
||||||
(uint16_t)-ret);
|
(uint16_t)-ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef CONFIG_CDCACM_COMPOSITE
|
|
||||||
usbdev_unregister(&drvr->drvr);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* And free the memory resources. */
|
|
||||||
|
|
||||||
if (priv->serdev.open_count <= 0)
|
|
||||||
{
|
|
||||||
wd_cancel(&priv->rxfailsafe);
|
|
||||||
kmm_free(priv);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
|
@ -312,6 +312,8 @@ enum cdcacm_event_e
|
|||||||
|
|
||||||
typedef CODE void (*cdcacm_callback_t)(enum cdcacm_event_e event);
|
typedef CODE void (*cdcacm_callback_t)(enum cdcacm_event_e event);
|
||||||
|
|
||||||
|
struct usbdevclass_driver_s;
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Public Function Prototypes
|
* Public Function Prototypes
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
@ -336,7 +338,6 @@ typedef CODE void (*cdcacm_callback_t)(enum cdcacm_event_e event);
|
|||||||
|
|
||||||
#if defined(CONFIG_USBDEV_COMPOSITE) && defined(CONFIG_CDCACM_COMPOSITE)
|
#if defined(CONFIG_USBDEV_COMPOSITE) && defined(CONFIG_CDCACM_COMPOSITE)
|
||||||
struct usbdev_devinfo_s;
|
struct usbdev_devinfo_s;
|
||||||
struct usbdevclass_driver_s;
|
|
||||||
int cdcacm_classobject(int minor, FAR struct usbdev_devinfo_s *devinfo,
|
int cdcacm_classobject(int minor, FAR struct usbdev_devinfo_s *devinfo,
|
||||||
FAR struct usbdevclass_driver_s **classdev);
|
FAR struct usbdevclass_driver_s **classdev);
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user