diff options
author | William Wilgus <me.theuser@yahoo.com> | 2019-07-17 00:39:14 -0500 |
---|---|---|
committer | William Wilgus <me.theuser@yahoo.com> | 2019-07-27 14:30:45 +0200 |
commit | e1475a38ef89ef7bb36aeb1238bf5f7d139b78e2 (patch) | |
tree | bf4c87039e552ac92a140f96d23156bdf37f734a | |
parent | 321de68b216400d3542e34d9c64c4aa261e60341 (diff) | |
download | rockbox-e1475a38ef89ef7bb36aeb1238bf5f7d139b78e2.tar.gz rockbox-e1475a38ef89ef7bb36aeb1238bf5f7d139b78e2.zip |
Fix non aligned crashes with tlsf
When the starting address of the plugin buffer
is not aligned to 8 bytes crashes occur in tlsf
(on ARM atleast)
Change-Id: I655500c25e1c8f84b4a2418e9ec5c5948e4bea82
-rw-r--r-- | apps/plugin.c | 3 | ||||
-rw-r--r-- | lib/tlsf/src/tlsf.c | 3 |
2 files changed, 4 insertions, 2 deletions
diff --git a/apps/plugin.c b/apps/plugin.c index 41434f27c4..3c957b40c8 100644 --- a/apps/plugin.c +++ b/apps/plugin.c | |||
@@ -921,7 +921,8 @@ int plugin_load(const char* plugin, const void* parameter) | |||
921 | return -1; | 921 | return -1; |
922 | } | 922 | } |
923 | #if (CONFIG_PLATFORM & PLATFORM_NATIVE) | 923 | #if (CONFIG_PLATFORM & PLATFORM_NATIVE) |
924 | plugin_size = hdr->end_addr - pluginbuf; | 924 | /* tlsf crashes observed on arm with 0x4 aligned addresses */ |
925 | plugin_size = ALIGN_UP(hdr->end_addr - pluginbuf, 0x8); | ||
925 | #else | 926 | #else |
926 | plugin_size = 0; | 927 | plugin_size = 0; |
927 | #endif | 928 | #endif |
diff --git a/lib/tlsf/src/tlsf.c b/lib/tlsf/src/tlsf.c index b842be470b..cea53c3eb8 100644 --- a/lib/tlsf/src/tlsf.c +++ b/lib/tlsf/src/tlsf.c | |||
@@ -508,7 +508,8 @@ size_t add_new_area(void *area, size_t area_size, void *mem_pool) | |||
508 | 508 | ||
509 | /* FW 28-10-17: disabled memset due to crashes on ARM. Functions | 509 | /* FW 28-10-17: disabled memset due to crashes on ARM. Functions |
510 | * fine without it. */ | 510 | * fine without it. */ |
511 | /* memset(area, 0, area_size); */ | 511 | /* BILGUS 17-7-19 re-enabled after setting pluginbuf aligned to 8 bytes */ |
512 | memset(area, 0, area_size); | ||
512 | ptr = tlsf->area_head; | 513 | ptr = tlsf->area_head; |
513 | ptr_prev = 0; | 514 | ptr_prev = 0; |
514 | 515 | ||