@@ -528,7 +528,7 @@ static void set_canary(UNUSED const struct slab_metadata *metadata, UNUSED void
528528 }
529529#endif
530530
531- memcpy ((char * )p + size - canary_size , & metadata -> canary_value , canary_size );
531+ h_memcpy_real ((char * )p + size - canary_size , & metadata -> canary_value , canary_size );
532532#endif
533533}
534534
@@ -541,7 +541,7 @@ static void check_canary(UNUSED const struct slab_metadata *metadata, UNUSED con
541541#endif
542542
543543 u64 canary_value ;
544- memcpy (& canary_value , (const char * )p + size - canary_size , canary_size );
544+ h_memcpy_real (& canary_value , (const char * )p + size - canary_size , canary_size );
545545
546546#ifdef HAS_ARM_MTE
547547 if (unlikely (canary_value == 0 )) {
@@ -831,7 +831,7 @@ static inline void deallocate_small(void *p, const size_t *expected_size) {
831831#endif
832832
833833 if (ZERO_ON_FREE && !skip_zero ) {
834- memset (p , 0 , size - canary_size );
834+ h_memset_real (p , 0 , size - canary_size );
835835 }
836836 }
837837
@@ -1502,7 +1502,7 @@ EXPORT void *h_calloc(size_t nmemb, size_t size) {
15021502 total_size = adjust_size_for_canary (total_size );
15031503 void * p = alloc (total_size );
15041504 if (!ZERO_ON_FREE && likely (p != NULL ) && total_size && total_size <= max_slab_size_class ) {
1505- memset (p , 0 , total_size - canary_size );
1505+ h_memset_real (p , 0 , total_size - canary_size );
15061506 }
15071507#ifdef HAS_ARM_MTE
15081508 // use an assert instead of adding a conditional to memset() above (freed memory is always
@@ -1624,7 +1624,7 @@ EXPORT void *h_realloc(void *old, size_t size) {
16241624 mutex_unlock (& ra -> lock );
16251625
16261626 if (memory_remap_fixed (old , old_size , new , size )) {
1627- memcpy (new , old , copy_size );
1627+ h_memcpy_real (new , old , copy_size );
16281628 deallocate_pages (old , old_size , old_guard_size );
16291629 } else {
16301630 memory_unmap ((char * )old - old_guard_size , old_guard_size );
@@ -1646,7 +1646,7 @@ EXPORT void *h_realloc(void *old, size_t size) {
16461646 if (copy_size > 0 && copy_size <= max_slab_size_class ) {
16471647 copy_size -= canary_size ;
16481648 }
1649- memcpy (new , old_orig , copy_size );
1649+ h_memcpy_real (new , old_orig , copy_size );
16501650 if (old_size <= max_slab_size_class ) {
16511651 deallocate_small (old , NULL );
16521652 } else {
@@ -1874,8 +1874,8 @@ EXPORT size_t h_malloc_object_size_fast(const void *p) {
18741874 return SIZE_MAX ;
18751875}
18761876
1877- #if CONFIG_BLOCK_OPS_CHECK_SIZE
18781877inline void * h_memcpy_real (void * dst , const void * src , size_t len ) {
1878+ #if CONFIG_BLOCK_OPS_CHECK_SIZE
18791879 char * p_dst = (char * )dst ;
18801880 char const * p_src = (char const * )src ;
18811881
@@ -1884,20 +1884,13 @@ inline void *h_memcpy_real(void *dst, const void *src, size_t len) {
18841884 }
18851885
18861886 return dst ;
1887- }
1888-
1889- EXPORT void * h_memcpy (void * dst , const void * src , size_t len ) {
1890- if (len > malloc_object_size_fast (src )) {
1891- fatal_error ("memcpy read overflow" );
1892- }
1893- if (len > malloc_object_size_fast (dst )) {
1894- fatal_error ("memcpy buffer overflow" );
1895- }
1896-
1897- return h_memcpy_real (dst , src , len );
1887+ #else
1888+ return memcpy (dst , src , len );
1889+ #endif
18981890}
18991891
19001892inline void * h_memmove_real (void * dst , const void * src , size_t len ) {
1893+ #if CONFIG_BLOCK_OPS_CHECK_SIZE
19011894 char * p_dst = (char * )dst ;
19021895 char const * p_src = (char const * )src ;
19031896
@@ -1912,38 +1905,58 @@ inline void *h_memmove_real(void *dst, const void *src, size_t len) {
19121905 * -- p_dst = * -- p_src ;
19131906 }
19141907 } else {
1915- dst = h_memcpy (dst , src , len );
1908+ dst = h_memcpy_real (dst , src , len );
19161909 }
19171910
19181911 return dst ;
1919- }
1920-
1921- EXPORT void * h_memmove (void * dst , const void * src , size_t len ) {
1922- if (len > malloc_object_size_fast (src )) {
1923- fatal_error ("memmove read overflow" );
1924- }
1925- if (len > malloc_object_size_fast (dst )) {
1926- fatal_error ("memmove buffer overflow" );
1927- }
1928-
1929- return h_memmove_real (dst , src , len );
1912+ #else
1913+ return memmove (dst , src , len );
1914+ #endif
19301915}
19311916
19321917inline void * h_memset_real (void * dst , int value , size_t len ) {
1918+ #if CONFIG_BLOCK_OPS_CHECK_SIZE
19331919 char * p_dst = (char * )dst ;
19341920
19351921 while (len -- ) {
19361922 * p_dst ++ = value ;
19371923 }
19381924
19391925 return dst ;
1926+ #else
1927+ return memset (dst , value , len );
1928+ #endif
19401929}
19411930
1942- EXPORT void * h_memset (void * dst , int value , size_t len ) {
1931+ #if CONFIG_BLOCK_OPS_CHECK_SIZE
1932+ EXPORT void * h_memcpy (void * dst , const void * src , size_t len ) {
1933+ if (len > malloc_object_size_fast (src )) {
1934+ fatal_error ("memcpy read overflow" );
1935+ }
19431936 if (len > malloc_object_size_fast (dst )) {
1944- fatal_error ("memset buffer overflow" );
1937+ fatal_error ("memcpy buffer overflow" );
19451938 }
19461939
1940+ return h_memcpy_real (dst , src , len );
1941+ }
1942+
1943+ EXPORT void * h_memmove (void * dst , const void * src , size_t len ) {
1944+ if (len > malloc_object_size_fast (src )) {
1945+ fatal_error ("memmove read overflow" );
1946+ }
1947+ if (len > malloc_object_size_fast (dst )) {
1948+ fatal_error ("memmove buffer overflow" );
1949+ }
1950+
1951+ return h_memmove_real (dst , src , len );
1952+ }
1953+
1954+ EXPORT void * h_memset (void * dst , int value , size_t len ) {
1955+ //if (len > malloc_object_size_fast(dst)) {
1956+ // fatal_error("memset buffer overflow");
1957+ //}
1958+ fprintf (stderr , "memset: dst: %p, value: %d len: %zu\n" , dst , value , len );
1959+
19471960 return h_memset_real (dst , value , len );
19481961}
19491962#endif
0 commit comments