newlib-cygwin/newlib/libc/stdlib
Joe Seymour 83c39aedac Fix incorrect cast in nano malloc
As described in nano-mallocr.c, chunks of heap are represented in memory
as a size (of type long), followed by some optional padding containing a
negative offset to size, followed by the data area.

get_chunk_from_ptr is responsible for taking a pointer to the data area
(as returned by malloc) and finding the start of the chunk. It does this
by assuming there is no padding and trying to read the size, if the size
is negative then it uses that as an offset to find the true size.
Crucially, it reads the padding area as a long.

nano_malloc is responsible for populating the optional padding area. It
does so by casting a pointer to an (int *) and writing the negative
offset into it.

This means that padding is being written as an int but read as a long.

On msp430 an int is 2 bytes, while a long is 4 bytes. This means that 2
bytes are written to the padding, but 4 bytes are read from it: it has
only been partially initialised.

nano_malloc is the default malloc implementation for msp430.

This patch changes the cast from (int *) to (long *). The change to
nano_malloc has has been observed to fix a TI Energia project that
had been malfunctioning because malloc was returning invalid addresses.
The change to nano_memalign is based entirely on code inspection.

I've built and tested as follows:
  Configured (gcc+newlib) with: --target=msp430-elf --enable-languages=c
  gcc testsuite variations:
    msp430-sim/-mcpu=msp430
    msp430-sim/-mcpu=msp430x
    msp430-sim/-mcpu=msp430x/-mlarge/-mdata-region=either/-mcode-region=either
    msp430-sim/-mhwmult=none
    msp430-sim/-mhwmult=f5series
My testing has shown no regressions, however I don't know if the gcc
testsuite provides sufficient coverage for this patch?

I don't have write access, so if this patch is acceptable after review,
I would appreciate it if someone would commit it for me.

Thanks,

2017-01-XX  Joe Seymour  <joe.s@somniumtech.com>

	newlib/
	* libc/stdlib/nano-mallocr.c (nano_malloc): Fix incorrect cast.
	(nano_memalign): Likewise.
2017-01-09 16:16:12 +01:00
..
Makefile.am Add simple versions of random() and srandom() 2016-03-28 22:39:50 -05:00
Makefile.in Regenerate newlib Makefiles 2016-07-04 17:13:55 +01:00
_Exit.c
__adjust.c
__atexit.c Fix atexit logic to honor _ATEXIT_DYNAMIC_ALLOC setting. 2015-12-21 11:53:14 -05:00
__call_atexit.c 2013-05-07 Sebastian Huber <sebastian.huber@embedded-brains.de> 2013-05-08 23:13:51 +00:00
__exp10.c 2008-12-11 Craig Howland <howland@LGSInnovations.com> 2008-12-11 17:27:56 +00:00
__ten_mu.c 2008-12-11 Craig Howland <howland@LGSInnovations.com> 2008-12-11 17:27:56 +00:00
a64l.c 2009-07-29 Jeff Johnston <jjohnstn@redhat.com> 2009-07-29 22:33:40 +00:00
abort.c
abs.c
aligned_alloc.c C11 aligned_alloc() implementation 2015-10-19 14:10:33 +02:00
arc4random.c Move arc4random Cygwin only code to Cygwin 2016-03-21 11:12:19 +01:00
arc4random.h Allow machine-dependent arc4 locking 2016-03-20 21:30:08 +01:00
arc4random_uniform.c Add arc4random() etc. from OpenBSD 5.8 2016-03-18 12:33:41 +01:00
assert.c 2009-10-08 Jeff Johnston <jjohnstn@redhat.com> 2009-10-08 16:44:10 +00:00
atexit.c 2009-12-17 Jerker Back <jerker.back@gmail.com> 2009-12-17 19:43:43 +00:00
atexit.h
atof.c
atoff.c
atoi.c
atol.c
atoll.c
btowc.c Consolidate wctomb/mbtowc calls for POSIX-1.2008 2016-08-15 10:56:57 +02:00
calloc.c 2008-10-31 Jeff Johnston <jjohnstn@redhat.com> 2008-10-31 21:08:03 +00:00
chacha_private.h Cleanup macros in chacha_private.h to be target-type independent 2016-03-18 21:20:06 +01:00
cxa_atexit.c Add static instance of _on_exit_args for _REENT_SMALL platforms. 2015-12-21 11:49:28 -05:00
cxa_finalize.c
div.c
drand48.c
dtoa.c 2006-08-03 J"orn Rennecke <joern.rennecke@st.com> 2006-08-03 16:56:05 +00:00
dtoastub.c 2009-12-03 Craig Howland <howland@LGSInnovations.com> 2009-12-03 16:11:27 +00:00
ecvtbuf.c 2013-04-29 Sebastian Huber <sebastian.huber@embedded-brains.de> 2013-04-29 21:06:23 +00:00
efgcvt.c Feature test macros overhaul: stdlib.h 2016-03-17 21:09:06 -05:00
environ.c
envlock.c 2008-10-31 Jeff Johnston <jjohnstn@redhat.com> 2008-10-31 21:08:03 +00:00
eprintf.c
erand48.c
exit.c 2013-07-02 Joey Ye <joey.ye@arm.com> 2013-07-02 21:30:57 +00:00
gd_qnan.h 2014-03-21 Maciej W. Rozycki <macro@codesourcery.com> 2014-03-21 21:27:29 +00:00
gdtoa-gethex.c Implement strto[dflu]_l/wcsto[dflu]_l 2016-08-15 17:35:21 +02:00
gdtoa-hexnan.c Make match function globally available to stdlib functions. 2015-11-20 18:03:05 +01:00
gdtoa.h Import correctly working strtold from David M. Gay. 2015-11-20 18:14:58 +01:00
getenv.c * libm/math/ef_sqrt.c: Delete unused variable sign. 2010-03-05 08:55:16 +00:00
getenv_r.c * libm/math/ef_sqrt.c: Delete unused variable sign. 2010-03-05 08:55:16 +00:00
getopt.c * newlib/libc/stdlib/getopt.c (getopt_internal): Add missing braces. 2013-11-13 20:04:18 +00:00
getsubopt.3
getsubopt.c
itoa.c Fix some mangled makedoc markup 2015-06-23 16:14:53 +01:00
jrand48.c
l64a.c
labs.c
lcong48.c
ldiv.c
ldtoa.c Import correctly working strtold from David M. Gay. 2015-11-20 18:14:58 +01:00
llabs.c Fix SYNOPSIS prototypes without marked up parameter names 2015-06-23 17:30:22 +01:00
lldiv.c
local.h Consolidate wctomb/mbtowc calls for POSIX-1.2008 2016-08-15 10:56:57 +02:00
lrand48.c
malign.c
malloc.c 2008-11-19 Jeff Johnston <jjohnstn@redhat.com> 2008-11-19 20:56:22 +00:00
mallocr.c 2010-05-31 Kazu Hirata <kazu@codesourcery.com> 2010-05-31 19:15:41 +00:00
mbctype.h * libc/stdlib/mbctype.h (_iseucjp1): Like _iseucjp, but also 2009-04-09 08:20:10 +00:00
mblen.c Consolidate wctomb/mbtowc calls for POSIX-1.2008 2016-08-15 10:56:57 +02:00
mblen_r.c Consolidate wctomb/mbtowc calls for POSIX-1.2008 2016-08-15 10:56:57 +02:00
mbrlen.c 2013-11-26 Julio Gutierrez <jgutleyva@gmail.com> 2013-11-26 17:21:01 +00:00
mbrtowc.c Consolidate wctomb/mbtowc calls for POSIX-1.2008 2016-08-15 10:56:57 +02:00
mbsinit.c
mbsnrtowcs.c 2013-11-26 Julio Gutierrez <jgutleyva@gmail.com> 2013-11-26 17:21:01 +00:00
mbsrtowcs.c 2013-11-26 Julio Gutierrez <jgutleyva@gmail.com> 2013-11-26 17:21:01 +00:00
mbstowcs.c 2013-11-18 Sahil Patnayakuni <sahilp@oarcorp.com> 2013-11-18 17:26:52 +00:00
mbstowcs_r.c Consolidate wctomb/mbtowc calls for POSIX-1.2008 2016-08-15 10:56:57 +02:00
mbtowc.c Consolidate wctomb/mbtowc calls for POSIX-1.2008 2016-08-15 10:56:57 +02:00
mbtowc_r.c Consolidate wctomb/mbtowc calls for POSIX-1.2008 2016-08-15 10:56:57 +02:00
mlock.c
mprec.c Use NetBSD fix for CVE-2009-0689 security vulnerability. 2009-11-23 17:02:20 +00:00
mprec.h Implement strto[dflu]_l/wcsto[dflu]_l 2016-08-15 17:35:21 +02:00
mrand48.c
msize.c
mstats.c
mtrim.c
nano-mallocr.c Fix incorrect cast in nano malloc 2017-01-09 16:16:12 +01:00
nrand48.c
on_exit.c Add static instance of _on_exit_args for _REENT_SMALL platforms. 2015-12-21 11:49:28 -05:00
on_exit_args.c Add static instance of _on_exit_args for _REENT_SMALL platforms. 2015-12-21 11:49:28 -05:00
on_exit_args.h Add static instance of _on_exit_args for _REENT_SMALL platforms. 2015-12-21 11:49:28 -05:00
putenv.c
putenv_r.c 2011-08-23 Ralf Corsépius <ralf.corsepius@rtems.org> 2011-08-23 12:03:55 +00:00
quick_exit.c Fix compile with GCC 5 -Werror 2016-02-12 10:16:06 -06:00
rand.c 2013-04-29 Sebastian Huber <sebastian.huber@embedded-brains.de> 2013-04-29 21:06:23 +00:00
rand48.c
rand48.h
rand_r.c
random.c Add simple versions of random() and srandom() 2016-03-28 22:39:50 -05:00
realloc.c
reallocf.c 2008-11-19 Jeff Johnston <jjohnstn@redhat.com> 2008-11-19 20:56:22 +00:00
rpmatch.c Fix rpmatch build problem 2015-11-19 16:31:08 +01:00
sb_charsets.c Actually return value from __cp_index 2016-10-22 21:08:44 +02:00
seed48.c
setenv.c 2008-09-24 Pawel Veselov <pawel.veselov@gmail.com> 2008-09-25 01:23:08 +00:00
setenv_r.c Move tzset calls to time functions. 2015-04-23 21:57:08 +02:00
srand48.c
std.h 2008-12-11 Craig Howland <howland@LGSInnovations.com> 2008-12-11 17:27:56 +00:00
stdlib.tex Add simple versions of random() and srandom() 2016-03-28 22:39:50 -05:00
strtod.c Remove extraneous float casts in strtod.c. 2016-12-16 11:32:25 -05:00
strtodg.c Implement strto[dflu]_l/wcsto[dflu]_l 2016-08-15 17:35:21 +02:00
strtol.c Implement strto[dflu]_l/wcsto[dflu]_l 2016-08-15 17:35:21 +02:00
strtold.c Implement strto[dflu]_l/wcsto[dflu]_l 2016-08-15 17:35:21 +02:00
strtoll.c Implement strto[dflu]_l/wcsto[dflu]_l 2016-08-15 17:35:21 +02:00
strtoll_r.c Implement strto[dflu]_l/wcsto[dflu]_l 2016-08-15 17:35:21 +02:00
strtorx.c Implement strto[dflu]_l/wcsto[dflu]_l 2016-08-15 17:35:21 +02:00
strtoul.c Fix pdf build failure wrt documentation of is*_l functions 2016-08-17 20:58:21 +02:00
strtoull.c Implement strto[dflu]_l/wcsto[dflu]_l 2016-08-15 17:35:21 +02:00
strtoull_r.c Implement strto[dflu]_l/wcsto[dflu]_l 2016-08-15 17:35:21 +02:00
system.c 2008-12-11 Craig Howland <howland@LGSInnovations.com> 2008-12-11 17:27:56 +00:00
utoa.c * libc/include/stdlib.h (__itoa): Declare prototype. 2014-12-16 10:55:17 +00:00
valloc.c
wcrtomb.c Consolidate wctomb/mbtowc calls for POSIX-1.2008 2016-08-15 10:56:57 +02:00
wcsnrtombs.c Don't use locale_t in internal header 2016-08-16 13:51:46 +02:00
wcsrtombs.c 2013-11-26 Julio Gutierrez <jgutleyva@gmail.com> 2013-11-26 17:21:01 +00:00
wcstod.c Remove extraneous float casts in wcstod.c. 2016-12-16 19:25:30 +01:00
wcstol.c Implement strto[dflu]_l/wcsto[dflu]_l 2016-08-15 17:35:21 +02:00
wcstold.c Avoid "implicit declaration of function ‘strtold_l’" in wcstold.c 2016-08-16 16:21:19 +02:00
wcstoll.c Implement strto[dflu]_l/wcsto[dflu]_l 2016-08-15 17:35:21 +02:00
wcstoll_r.c Implement strto[dflu]_l/wcsto[dflu]_l 2016-08-15 17:35:21 +02:00
wcstombs.c 2013-11-18 Sahil Patnayakuni <sahilp@oarcorp.com> 2013-11-18 17:26:52 +00:00
wcstombs_r.c Consolidate wctomb/mbtowc calls for POSIX-1.2008 2016-08-15 10:56:57 +02:00
wcstoul.c Implement strto[dflu]_l/wcsto[dflu]_l 2016-08-15 17:35:21 +02:00
wcstoull.c Implement strto[dflu]_l/wcsto[dflu]_l 2016-08-15 17:35:21 +02:00
wcstoull_r.c Implement strto[dflu]_l/wcsto[dflu]_l 2016-08-15 17:35:21 +02:00
wctob.c Consolidate wctomb/mbtowc calls for POSIX-1.2008 2016-08-15 10:56:57 +02:00
wctomb.c Consolidate wctomb/mbtowc calls for POSIX-1.2008 2016-08-15 10:56:57 +02:00
wctomb_r.c Drop redundant checks for NULL input string in wctomb helper funcs 2016-10-22 20:28:08 +02:00