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);

 }