|
@@ -150,6 +150,11 @@ static int hfsplus_readdir(struct file *filp, void *dirent, filldir_t filldir)
|
|
|
filp->f_pos++;
|
|
|
/* fall through */
|
|
|
case 1:
|
|
|
+ if (fd.entrylength > sizeof(entry) || fd.entrylength < 0) {
|
|
|
+ err = -EIO;
|
|
|
+ goto out;
|
|
|
+ }
|
|
|
+
|
|
|
hfs_bnode_read(fd.bnode, &entry, fd.entryoffset,
|
|
|
fd.entrylength);
|
|
|
if (be16_to_cpu(entry.type) != HFSPLUS_FOLDER_THREAD) {
|
|
@@ -181,6 +186,12 @@ static int hfsplus_readdir(struct file *filp, void *dirent, filldir_t filldir)
|
|
|
err = -EIO;
|
|
|
goto out;
|
|
|
}
|
|
|
+
|
|
|
+ if (fd.entrylength > sizeof(entry) || fd.entrylength < 0) {
|
|
|
+ err = -EIO;
|
|
|
+ goto out;
|
|
|
+ }
|
|
|
+
|
|
|
hfs_bnode_read(fd.bnode, &entry, fd.entryoffset,
|
|
|
fd.entrylength);
|
|
|
type = be16_to_cpu(entry.type);
|