419d6efc50
As Al pointed out, "
... and while we are at it, what happens to
unsigned int nameoff = le16_to_cpu(de[mid].nameoff);
unsigned int matched = min(startprfx, endprfx);
struct qstr dname = QSTR_INIT(data + nameoff,
unlikely(mid >= ndirents - 1) ?
maxsize - nameoff :
le16_to_cpu(de[mid + 1].nameoff) - nameoff);
/* string comparison without already matched prefix */
int ret = dirnamecmp(name, &dname, &matched);
if le16_to_cpu(de[...].nameoff) is not monotonically increasing? I.e.
what's to prevent e.g. (unsigned)-1 ending up in dname.len?
Corrupted fs image shouldn't oops the kernel.. "
Revisit the related lookup flow to address the issue.
Fixes:
|
||
---|---|---|
.. | ||
Documentation/filesystems | ||
include | ||
data.c | ||
dir.c | ||
erofs_fs.h | ||
inode.c | ||
internal.h | ||
Kconfig | ||
Makefile | ||
namei.c | ||
super.c | ||
TODO | ||
unzip_pagevec.h | ||
unzip_vle_lz4.c | ||
unzip_vle.c | ||
unzip_vle.h | ||
utils.c | ||
xattr.c | ||
xattr.h |