mirror of
https://github.com/apache/nuttx.git
synced 2026-06-03 22:20:31 +08:00
usbdev:fix usbdev usbdev_fs_classuninitialize double free
Signed-off-by: anjiahao <anjiahao@xiaomi.com>
This commit is contained in:
@@ -83,6 +83,7 @@ struct usbdev_fs_dev_s
|
|||||||
uint8_t config;
|
uint8_t config;
|
||||||
struct usbdev_devinfo_s devinfo;
|
struct usbdev_devinfo_s devinfo;
|
||||||
FAR struct usbdev_fs_ep_s *eps;
|
FAR struct usbdev_fs_ep_s *eps;
|
||||||
|
bool uninitialized;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct usbdev_fs_driver_s
|
struct usbdev_fs_driver_s
|
||||||
@@ -528,7 +529,7 @@ static int usbdev_fs_close(FAR struct file *filep)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (do_free)
|
if (do_free && fs->uninitialized)
|
||||||
{
|
{
|
||||||
FAR struct usbdev_fs_driver_s *alloc = container_of(
|
FAR struct usbdev_fs_driver_s *alloc = container_of(
|
||||||
fs, FAR struct usbdev_fs_driver_s, dev);
|
fs, FAR struct usbdev_fs_driver_s, dev);
|
||||||
@@ -1409,6 +1410,7 @@ void usbdev_fs_classuninitialize(FAR struct usbdevclass_driver_s *classdev)
|
|||||||
FAR struct usbdev_fs_dev_s *fs = &alloc->dev;
|
FAR struct usbdev_fs_dev_s *fs = &alloc->dev;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
fs->uninitialized = true;
|
||||||
for (i = 0; i < fs->devinfo.nendpoints; i++)
|
for (i = 0; i < fs->devinfo.nendpoints; i++)
|
||||||
{
|
{
|
||||||
if (fs->eps != NULL && fs->eps[i].crefs > 0)
|
if (fs->eps != NULL && fs->eps[i].crefs > 0)
|
||||||
|
|||||||
Reference in New Issue
Block a user