Check that the tags are within reasonable bounds. Without this, subsequent
checks can fail causing a mount failure.
Signed-off-by: Charles Manning <cdhmanning@gmail.com>
#define YAFFS_MAX_CHUNK_ID 0x000FFFFF
-#define YAFFS_UNUSED_OBJECT_ID 0x0003FFFF
#define YAFFS_ALLOCATION_NOBJECTS 100
#define YAFFS_ALLOCATION_NTNODES 100
#define YAFFS_OBJECT_SPACE 0x40000
+#define YAFFS_MAX_OBJECT_ID (YAFFS_OBJECT_SPACE -1)
#define YAFFS_CHECKPOINT_VERSION 4
dev->nFreeChunks++;
+ } else if (tags.objectId > YAFFS_MAX_OBJECT_ID ||
+ tags.chunkId > YAFFS_MAX_CHUNK_ID ||
+ (tags.chunkId > 0 && tags.byteCount > dev->nDataBytesPerChunk)) {
+ T(YAFFS_TRACE_SCAN,
+ (TSTR("Chunk (%d:%d) with bad tags:obj = %d, chunkId = %d, byteCount = %d, ignored"TENDSTR),
+ blk, c,tags.objectId, tags.chunkId, tags.byteCount));
+
+ dev->nFreeChunks++;
+
} else if (tags.chunkId > 0) {
/* chunkId > 0 so it is a data chunk... */
unsigned int endpos;