usbdev:fix usbdev usbdev_fs_classuninitialize double free

Signed-off-by: anjiahao <anjiahao@xiaomi.com>
This commit is contained in:
anjiahao 2024-04-01 17:42:05 +08:00 committed by Xiang Xiao
parent a8d7103a2b
commit ff4c6c33e8

View File

@ -83,6 +83,7 @@ struct usbdev_fs_dev_s
uint8_t config;
struct usbdev_devinfo_s devinfo;
FAR struct usbdev_fs_ep_s *eps;
bool uninitialized;
};
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(
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;
int i;
fs->uninitialized = true;
for (i = 0; i < fs->devinfo.nendpoints; i++)
{
if (fs->eps != NULL && fs->eps[i].crefs > 0)