Commit 55c336fd authored by unknown's avatar unknown

Bug#35616: memory overrun on 64-bit linux on setting large values for keybuffer-size

We could allocate chunks larger than 4GB, but did our size-accounting in 32-bit
values. This could lead to spurious warnings, inaccurate accounting, and, in
theory, data loss.

Affected: 64-bit platforms. Debug-build (with safemalloc). At least one buffer
larger than 4GB. For potential data loss, a re-alloc on such a buffer would be
necessary.


mysys/my_static.c:
  Make memory-accounting 64-bit safe.
mysys/my_static.h:
  Make memory-accounting 64-bit safe.
  Move in struct for better alignment when 64-bit.
parent ac8585e8
...@@ -74,8 +74,8 @@ uint sf_malloc_prehunc=0, /* If you have problem with core- */ ...@@ -74,8 +74,8 @@ uint sf_malloc_prehunc=0, /* If you have problem with core- */
sf_malloc_endhunc=0, /* dump when malloc-message.... */ sf_malloc_endhunc=0, /* dump when malloc-message.... */
/* set theese to 64 or 128 */ /* set theese to 64 or 128 */
sf_malloc_quick=0; /* set if no calls to sanity */ sf_malloc_quick=0; /* set if no calls to sanity */
ulong sf_malloc_cur_memory= 0L; /* Current memory usage */ size_t sf_malloc_cur_memory= 0L; /* Current memory usage */
ulong sf_malloc_max_memory= 0L; /* Maximum memory usage */ size_t sf_malloc_max_memory= 0L; /* Maximum memory usage */
uint sf_malloc_count= 0; /* Number of times NEW() was called */ uint sf_malloc_count= 0; /* Number of times NEW() was called */
byte *sf_min_adress= (byte*) ~(unsigned long) 0L, byte *sf_min_adress= (byte*) ~(unsigned long) 0L,
*sf_max_adress= (byte*) 0L; *sf_max_adress= (byte*) 0L;
......
...@@ -44,8 +44,8 @@ struct st_irem ...@@ -44,8 +44,8 @@ struct st_irem
struct st_irem *next; /* Linked list of structures */ struct st_irem *next; /* Linked list of structures */
struct st_irem *prev; /* Other link */ struct st_irem *prev; /* Other link */
char *filename; /* File in which memory was new'ed */ char *filename; /* File in which memory was new'ed */
size_t datasize; /* Size requested */
uint32 linenum; /* Line number in above file */ uint32 linenum; /* Line number in above file */
uint32 datasize; /* Size requested */
uint32 SpecialValue; /* Underrun marker value */ uint32 SpecialValue; /* Underrun marker value */
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment