On Thu, Jan 03, 2019 at 05:31:13AM -0800, Li Qiang wrote:
> Spotted by Coverity: CID 1397070
> diff --git a/hw/usb/dev-mtp.c b/hw/usb/dev-mtp.c
> index b19b576278..666bafd9e8 100644
> --- a/hw/usb/dev-mtp.c
> +++ b/hw/usb/dev-mtp.c
> @@ -666,6 +666,7 @@ static void usb_mtp_object_readdir(MTPState *s, MTPObject
> *o)
> }
> dir = fdopendir(fd);
> if (!dir) {
> + close(fd);
> return;
> }
Ok, clearly a bug.
> #ifdef CONFIG_INOTIFY1
> @@ -682,6 +683,7 @@ static void usb_mtp_object_readdir(MTPState *s, MTPObject
> *o)
> usb_mtp_add_child(s, o, entry->d_name);
> }
> closedir(dir);
> + close(fd);
Not fully sure this is correct.
The fdopendir manpage says the app should not use fd any more after
successfully calling fdopendir(), and I assumed that includes calling
close(). But I've seen the Coverity message warning this one too, so
maybe I'm wrong ...
cheers,
Gerd