From: Bandan Das <bsd@redhat.com>
To: Gerd Hoffmann <kraxel@redhat.com>
Cc: qemu-devel@nongnu.org, Peter Maydell <peter.maydell@linaro.org>
Subject: [Qemu-devel] [PATCH] usb-mtp: fix return status of delete
Date: Fri, 08 Mar 2019 17:14:33 -0500 [thread overview]
Message-ID: <jpg8sxpypx2.fsf_-_@linux.bootlegged.copy> (raw)
In-Reply-To: <jpg36nxf8ta.fsf@linux.bootlegged.copy> (Bandan Das's message of "Fri, 08 Mar 2019 14:46:41 -0500")
Spotted by Coverity: CID 1399414
mtp delete allows the a return status of delete succeeded,
partial_delete or readonly - when none of the objects could be
deleted.
Some initiators recurse over the objects themselves. In that case,
only READ_ONLY can be returned.
Signed-off-by: Bandan Das <bsd@redhat.com>
---
hw/usb/dev-mtp.c | 25 +++++++++----------------
1 file changed, 9 insertions(+), 16 deletions(-)
diff --git a/hw/usb/dev-mtp.c b/hw/usb/dev-mtp.c
index 06e376bcd2..e3401aad75 100644
--- a/hw/usb/dev-mtp.c
+++ b/hw/usb/dev-mtp.c
@@ -1137,9 +1137,9 @@ static MTPData *usb_mtp_get_object_prop_value(MTPState *s, MTPControl *c,
/* Return correct return code for a delete event */
enum {
- ALL_DELETE,
- PARTIAL_DELETE,
+ ALL_DELETE = 1,
READ_ONLY,
+ PARTIAL_DELETE,
};
/* Assumes that children, if any, have been already freed */
@@ -1155,8 +1155,7 @@ static void usb_mtp_object_free_one(MTPState *s, MTPObject *o)
static int usb_mtp_deletefn(MTPState *s, MTPObject *o, uint32_t trans)
{
MTPObject *iter, *iter2;
- bool partial_delete = false;
- bool success = false;
+ int ret = 0;
/*
* TODO: Add support for Protection Status
@@ -1165,34 +1164,28 @@ static int usb_mtp_deletefn(MTPState *s, MTPObject *o, uint32_t trans)
QLIST_FOREACH(iter, &o->children, list) {
if (iter->format == FMT_ASSOCIATION) {
QLIST_FOREACH(iter2, &iter->children, list) {
- usb_mtp_deletefn(s, iter2, trans);
+ ret |= usb_mtp_deletefn(s, iter2, trans);
}
}
}
if (o->format == FMT_UNDEFINED_OBJECT) {
if (remove(o->path)) {
- partial_delete = true;
+ ret |= READ_ONLY;
} else {
usb_mtp_object_free_one(s, o);
- success = true;
+ ret |= ALL_DELETE;
}
} else if (o->format == FMT_ASSOCIATION) {
if (rmdir(o->path)) {
- partial_delete = true;
+ ret |= READ_ONLY;
} else {
usb_mtp_object_free_one(s, o);
- success = true;
+ ret |= ALL_DELETE;
}
}
- if (success && partial_delete) {
- return PARTIAL_DELETE;
- }
- if (!success && partial_delete) {
- return READ_ONLY;
- }
- return ALL_DELETE;
+ return ret;
}
static void usb_mtp_object_delete(MTPState *s, uint32_t handle,
--
2.19.2
next prev parent reply other threads:[~2019-03-08 22:14 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-03-07 9:54 [Qemu-devel] [PULL 0/4] Usb 20190307 patches Gerd Hoffmann
2019-03-07 9:54 ` [Qemu-devel] [PULL 1/4] usb-mtp: return incomplete transfer on a lstat failure Gerd Hoffmann
2019-03-07 9:54 ` [Qemu-devel] [PULL 2/4] usb-mtp: fix some usb_mtp_write_data return paths Gerd Hoffmann
2019-03-08 17:37 ` Peter Maydell
2019-03-08 19:39 ` Bandan Das
2019-03-07 9:54 ` [Qemu-devel] [PULL 3/4] usb-mtp: prevent null dereference while deleting objects Gerd Hoffmann
2019-03-08 17:06 ` Peter Maydell
2019-03-08 19:46 ` Bandan Das
2019-03-08 22:14 ` Bandan Das [this message]
2019-03-09 14:13 ` [Qemu-devel] [PATCH] usb-mtp: fix return status of delete Peter Maydell
2019-03-11 16:14 ` Bandan Das
2019-03-11 16:25 ` Peter Maydell
2019-03-11 16:42 ` Bandan Das
2019-03-11 17:18 ` Peter Maydell
2019-03-11 17:39 ` Bandan Das
2019-03-11 17:55 ` Peter Maydell
2019-03-11 18:11 ` Bandan Das
2019-03-11 18:56 ` Peter Maydell
2019-03-11 23:02 ` Bandan Das
2019-03-09 14:08 ` [Qemu-devel] [PULL 3/4] usb-mtp: prevent null dereference while deleting objects Peter Maydell
2019-03-07 9:54 ` [Qemu-devel] [PULL 4/4] Introduce new "no_guest_reset" parameter for usb-host device Gerd Hoffmann
2019-03-07 15:21 ` [Qemu-devel] [PULL 0/4] Usb 20190307 patches Peter Maydell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=jpg8sxpypx2.fsf_-_@linux.bootlegged.copy \
--to=bsd@redhat.com \
--cc=kraxel@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).