[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[qemu-s390x] [PATCH 10/14] usb-mtp: avoid warning about unaligned access
From: |
Daniel P . Berrangé |
Subject: |
[qemu-s390x] [PATCH 10/14] usb-mtp: avoid warning about unaligned access to filename |
Date: |
Fri, 29 Mar 2019 11:11:00 +0000 |
The 'filename' field in ObjectInfo struct is declared as a
zero length array of uint16_t. Accessing it is equivalent
to taking the address of the field, and taking the address
of fields in a packed struct causes unaligned pointer
warnings:
hw/usb/dev-mtp.c: In function ‘usb_mtp_write_metadata’:
hw/usb/dev-mtp.c:1712:36: warning: taking address of packed member of ‘struct
<anonymous>’ may result in an unaligned pointer value
[-Waddress-of-packed-member]
1712 | dataset->filename);
| ~~~~~~~^~~~~~~~~~
The warning is in fact correct because the 'filename'
field is preceeded by a uint8_t field which causes it
to have bad alignment.
Using pointer arithmetic instead of accessing the zero
length array field directly avoids the compiler warning
but doesn't ultimately fix the bad alignment. Fixing
that probably requires allocating a new array of
uint16_t in the heap & then memcpy() the data before
accessing the array elements.
Signed-off-by: Daniel P. Berrangé <address@hidden>
---
hw/usb/dev-mtp.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/hw/usb/dev-mtp.c b/hw/usb/dev-mtp.c
index 5343449663..9ddcfbe7a6 100644
--- a/hw/usb/dev-mtp.c
+++ b/hw/usb/dev-mtp.c
@@ -225,7 +225,7 @@ typedef struct {
uint16_t assoc_type;
uint32_t assoc_desc;
uint32_t seq_no; /*unused*/
- uint8_t length; /*part of filename field*/
+ uint8_t length; /*length of filename field*/
uint16_t filename[0];
char date_created[0]; /*unused*/
char date_modified[0]; /*unused*/
@@ -1703,13 +1703,15 @@ static void usb_mtp_write_metadata(MTPState *s,
uint64_t dlen)
MTPObject *o;
MTPObject *p = usb_mtp_object_lookup(s, s->dataset.parent_handle);
uint32_t next_handle = s->next_handle;
+ uint16_t *wfilename = (uint16_t *)(d->data +
+ offsetof(ObjectInfo, filename));
assert(!s->write_pending);
assert(p != NULL);
filename = utf16_to_str(MIN(dataset->length,
dlen - offsetof(ObjectInfo, filename)),
- dataset->filename);
+ wfilename);
if (strchr(filename, '/')) {
usb_mtp_queue_result(s, RES_PARAMETER_NOT_SUPPORTED, d->trans,
--
2.20.1
- [qemu-s390x] [PATCH 00/14] misc set of fixes for warnings under GCC 9, Daniel P . Berrangé, 2019/03/29
- [qemu-s390x] [PATCH 01/14] target/xtensa: fix break_dependency for repeated resources, Daniel P . Berrangé, 2019/03/29
- [qemu-s390x] [PATCH 02/14] target/xtensa: don't announce exit simcall, Daniel P . Berrangé, 2019/03/29
- [qemu-s390x] [PATCH 03/14] tests/tcg/xtensa: clean up test set, Daniel P . Berrangé, 2019/03/29
- [qemu-s390x] [PATCH 04/14] linux-user: avoid string truncation warnings in uname field copying, Daniel P . Berrangé, 2019/03/29
- [qemu-s390x] [PATCH 05/14] linux-user: avoid string truncation warnings in elf field copying, Daniel P . Berrangé, 2019/03/29
- [qemu-s390x] [PATCH 06/14] sockets: avoid string truncation warnings when copying UNIX path, Daniel P . Berrangé, 2019/03/29
- [qemu-s390x] [PATCH 07/14] hw/usb: avoid format truncation warning when formatting port name, Daniel P . Berrangé, 2019/03/29
- [qemu-s390x] [PATCH 09/14] usb-mtp: fix string length for filename when writing metadata, Daniel P . Berrangé, 2019/03/29
- [qemu-s390x] [PATCH 10/14] usb-mtp: avoid warning about unaligned access to filename,
Daniel P . Berrangé <=
- [qemu-s390x] [PATCH 08/14] qxl: avoid unaligned pointer reads/writes, Daniel P . Berrangé, 2019/03/29
- [qemu-s390x] [PATCH 11/14] hw/vfio/ccw: avoid taking address members in packed structs, Daniel P . Berrangé, 2019/03/29
- [qemu-s390x] [PATCH 13/14] hw/s390x/ipl: avoid taking address of fields in packed struct, Daniel P . Berrangé, 2019/03/29