Two suggested change in temp buffer management: 1. When format disk before mounted, the buffer is not allocated and may return NULL buffer pointers. 2. The size of unmanaged buffer should use total_bytes_per_chunk, otherwise it will cause buffer overflow in inband tag mode. diff --git a/yaffs_guts.c b/yaffs_guts.c index c52ff84..94177df 100644 --- a/yaffs_guts.c +++ b/yaffs_guts.c @@ -147,7 +147,7 @@ u8 *yaffs_get_temp_buffer(struct yaffs_dev * dev) dev->max_temp = dev->temp_in_use; for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++) { - if (dev->temp_buffer[i].in_use == 0) { + if (dev->temp_buffer[i].in_use == 0 && dev->temp_buffer[i].buffer) { dev->temp_buffer[i].in_use = 1; return dev->temp_buffer[i].buffer; } @@ -160,7 +160,7 @@ u8 *yaffs_get_temp_buffer(struct yaffs_dev * dev) */ dev->unmanaged_buffer_allocs++; - return kmalloc(dev->data_bytes_per_chunk, GFP_NOFS); + return kmalloc(dev->param.total_bytes_per_chunk, GFP_NOFS); }