From: "Daniel P. Berrange" <berrange@xxxxxxxxxx> When reading the inotify FD, we get back a sequence of struct inotify_event, each with variable length data following. It is not safe to simply cast from the char *buf to the struct inotify_event struct since this may violate data alignment rules. Thus we must copy from the char *buf into the struct inotify_event instance before accessing the data. uml/uml_driver.c: In function 'umlInotifyEvent': uml/uml_driver.c:327:13: warning: cast increases required alignment of target type [-Wcast-align] e = (struct inotify_event *)tmp; Signed-off-by: Daniel P. Berrange <berrange@xxxxxxxxxx> --- src/uml/uml_driver.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/uml/uml_driver.c b/src/uml/uml_driver.c index 09a777c..4d81a13 100644 --- a/src/uml/uml_driver.c +++ b/src/uml/uml_driver.c @@ -300,7 +300,7 @@ umlInotifyEvent(int watch, void *data) { char buf[1024]; - struct inotify_event *e; + struct inotify_event e; int got; char *tmp, *name; struct uml_driver *driver = data; @@ -321,20 +321,20 @@ reread: tmp = buf; while (got) { - if (got < sizeof(struct inotify_event)) + if (got < sizeof(e)) goto cleanup; /* bad */ - e = (struct inotify_event *)tmp; - tmp += sizeof(struct inotify_event); - got -= sizeof(struct inotify_event); + memcpy(&e, tmp, sizeof(e)); + tmp += sizeof(e); + got -= sizeof(e); - if (got < e->len) + if (got < e.len) goto cleanup; - tmp += e->len; - got -= e->len; + tmp += e.len; + got -= e.len; - name = (char *)&(e->name); + name = (char *)&(e.name); dom = virDomainObjListFindByName(driver->domains, name); @@ -342,7 +342,7 @@ reread: continue; } - if (e->mask & IN_DELETE) { + if (e.mask & IN_DELETE) { VIR_DEBUG("Got inotify domain shutdown '%s'", name); if (!virDomainObjIsActive(dom)) { virObjectUnlock(dom); @@ -359,7 +359,7 @@ reread: dom); dom = NULL; } - } else if (e->mask & (IN_CREATE | IN_MODIFY)) { + } else if (e.mask & (IN_CREATE | IN_MODIFY)) { VIR_DEBUG("Got inotify domain startup '%s'", name); if (virDomainObjIsActive(dom)) { virObjectUnlock(dom); -- 1.8.1.4 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list