inotify-util: drop to use pointer outside of the buffer
Hopefully fixes many Coverity issues.
This commit is contained in:
committed by
Zbigniew Jędrzejewski-Szmek
parent
1bd0cefcab
commit
9e15e24bdb
@@ -4,6 +4,43 @@
|
||||
#include "inotify-util.h"
|
||||
#include "stat-util.h"
|
||||
|
||||
bool inotify_event_next(
|
||||
union inotify_event_buffer *buffer,
|
||||
size_t size,
|
||||
struct inotify_event **iterator,
|
||||
int log_level) {
|
||||
|
||||
struct inotify_event *e;
|
||||
size_t offset = 0;
|
||||
|
||||
assert(buffer);
|
||||
assert(iterator);
|
||||
|
||||
if (*iterator) {
|
||||
assert((uint8_t*) *iterator >= buffer->raw);
|
||||
offset = (uint8_t*) *iterator - buffer->raw;
|
||||
offset += offsetof(struct inotify_event, name) + (*iterator)->len;
|
||||
}
|
||||
|
||||
if (size == offset)
|
||||
return false; /* reached end of list */
|
||||
|
||||
if (size < offset ||
|
||||
size - offset < offsetof(struct inotify_event, name)) {
|
||||
log_full(log_level, "Received invalid inotify event, ignoring.");
|
||||
return false;
|
||||
}
|
||||
|
||||
e = CAST_ALIGN_PTR(struct inotify_event, buffer->raw + offset);
|
||||
if (size - offset - offsetof(struct inotify_event, name) < e->len) {
|
||||
log_full(log_level, "Received invalid inotify event, ignoring.");
|
||||
return false;
|
||||
}
|
||||
|
||||
*iterator = e;
|
||||
return true;
|
||||
}
|
||||
|
||||
int inotify_add_watch_fd(int fd, int what, uint32_t mask) {
|
||||
int wd, r;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user