Skip to content

Commit bb350fd

Browse files
authored
Merge pull request #54 from struct/11_21_add_malloc_attributes
add malloc and alloc_size attributes, run clang-format
2 parents 4553b80 + c7bdc9c commit bb350fd

4 files changed

Lines changed: 17 additions & 11 deletions

File tree

include/iso_alloc.h

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,22 +11,28 @@
1111

1212
#define NO_DISCARD __attribute__((warn_unused_result))
1313

14+
#define MALLOC_ATTR __attribute__((malloc))
15+
#define ALLOC_SIZE __attribute__((alloc_size(1)))
16+
#define CALLOC_SIZE __attribute__((alloc_size(1, 2)))
17+
#define REALLOC_SIZE __attribute__((alloc_size(2)))
18+
#define ZONE_ALLOC_SIZE __attribute__((alloc_size(2)))
19+
1420
typedef void iso_alloc_zone_handle;
1521

1622
#if CPP_SUPPORT
1723
extern "C" {
1824
#endif
19-
EXTERNAL_API NO_DISCARD void *iso_alloc(size_t size);
20-
EXTERNAL_API NO_DISCARD void *iso_calloc(size_t nmemb, size_t size);
25+
EXTERNAL_API NO_DISCARD MALLOC_ATTR ALLOC_SIZE void *iso_alloc(size_t size);
26+
EXTERNAL_API NO_DISCARD MALLOC_ATTR CALLOC_SIZE void *iso_calloc(size_t nmemb, size_t size);
27+
EXTERNAL_API NO_DISCARD MALLOC_ATTR REALLOC_SIZE void *iso_realloc(void *p, size_t size);
2128
EXTERNAL_API void iso_free(void *p);
2229
EXTERNAL_API void iso_free_permanently(void *p);
23-
EXTERNAL_API NO_DISCARD void *iso_realloc(void *p, size_t size);
2430
EXTERNAL_API size_t iso_chunksz(void *p);
2531
EXTERNAL_API NO_DISCARD char *iso_strdup(const char *str);
2632
EXTERNAL_API NO_DISCARD char *iso_strdup_from_zone(iso_alloc_zone_handle *zone, const char *str);
2733
EXTERNAL_API NO_DISCARD char *iso_strndup(const char *str, size_t n);
2834
EXTERNAL_API NO_DISCARD char *iso_strndup_from_zone(iso_alloc_zone_handle *zone, const char *str, size_t n);
29-
EXTERNAL_API NO_DISCARD iso_alloc_zone_handle *iso_alloc_from_zone(iso_alloc_zone_handle *zone, size_t size);
35+
EXTERNAL_API NO_DISCARD MALLOC_ATTR ZONE_ALLOC_SIZE iso_alloc_zone_handle *iso_alloc_from_zone(iso_alloc_zone_handle *zone, size_t size);
3036
EXTERNAL_API NO_DISCARD iso_alloc_zone_handle *iso_alloc_new_zone(size_t size);
3137
EXTERNAL_API void iso_alloc_destroy_zone(iso_alloc_zone_handle *zone);
3238
EXTERNAL_API void iso_alloc_protect_root();

include/iso_alloc_internal.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,7 @@ using namespace std;
296296
#define BIG_ZONE_USER_PAGE_COUNT 2
297297
#define BIG_ZONE_USER_PAGE_COUNT_SHIFT 1
298298

299-
#define ZONE_LOOKUP_TABLE_SZ ((SMALL_SZ_MAX+1) * sizeof(uint16_t))
299+
#define ZONE_LOOKUP_TABLE_SZ ((SMALL_SZ_MAX + 1) * sizeof(uint16_t))
300300

301301
/* We allocate zones at startup for common sizes.
302302
* Each of these default zones is ZONE_USER_SIZE bytes

src/iso_alloc.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1447,9 +1447,9 @@ INTERNAL_HIDDEN INLINE void check_big_canary(iso_alloc_big_zone *big) {
14471447
* unbounded string reads from leaking it */
14481448
INTERNAL_HIDDEN INLINE void write_canary(iso_alloc_zone *zone, void *p) {
14491449
uint64_t canary = (zone->canary_secret ^ (uint64_t) p) & CANARY_VALIDATE_MASK;
1450-
*(uint64_t *)p = canary;
1450+
*(uint64_t *) p = canary;
14511451
p += (zone->chunk_size - sizeof(uint64_t));
1452-
*(uint64_t *)p = canary;
1452+
*(uint64_t *) p = canary;
14531453
}
14541454

14551455
/* Verify the canary value in an allocation */

src/iso_alloc_interfaces.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44
#include "iso_alloc.h"
55
#include "iso_alloc_internal.h"
66

7-
EXTERNAL_API NO_DISCARD void *iso_alloc(size_t size) {
7+
EXTERNAL_API NO_DISCARD MALLOC_ATTR ALLOC_SIZE void *iso_alloc(size_t size) {
88
return _iso_alloc(NULL, size);
99
}
1010

11-
EXTERNAL_API NO_DISCARD void *iso_calloc(size_t nmemb, size_t size) {
11+
EXTERNAL_API NO_DISCARD MALLOC_ATTR CALLOC_SIZE void *iso_calloc(size_t nmemb, size_t size) {
1212
return _iso_calloc(nmemb, size);
1313
}
1414

@@ -24,7 +24,7 @@ EXTERNAL_API size_t iso_chunksz(void *p) {
2424
return _iso_chunk_size(p);
2525
}
2626

27-
EXTERNAL_API NO_DISCARD void *iso_realloc(void *p, size_t size) {
27+
EXTERNAL_API NO_DISCARD MALLOC_ATTR REALLOC_SIZE void *iso_realloc(void *p, size_t size) {
2828
if(UNLIKELY(size == 0)) {
2929
iso_free(p);
3030
return NULL;
@@ -111,7 +111,7 @@ EXTERNAL_API NO_DISCARD char *iso_strndup_from_zone(iso_alloc_zone_handle *zone,
111111
return p;
112112
}
113113

114-
EXTERNAL_API NO_DISCARD iso_alloc_zone_handle *iso_alloc_from_zone(iso_alloc_zone_handle *zone, size_t size) {
114+
EXTERNAL_API NO_DISCARD MALLOC_ATTR ZONE_ALLOC_SIZE iso_alloc_zone_handle *iso_alloc_from_zone(iso_alloc_zone_handle *zone, size_t size) {
115115
if(zone == NULL) {
116116
return NULL;
117117
}

0 commit comments

Comments
 (0)