Loading...
--- xnu/xnu-12377.101.15/libkern/c++/OSUnserialize.cpp
+++ xnu/xnu-7195.141.2/libkern/c++/OSUnserialize.cpp
@@ -188,40 +188,52 @@
#include <kern/kalloc.h>
__END_DECLS
-// Omit from static analysis.
-#ifndef __clang_analyzer__
-
-#define malloc(size) malloc_impl(size)
-#define malloc_type(type) kalloc_type(type, Z_SET_NOT_EARLY)
+#define malloc(size) malloc_impl(size)
static inline void *
malloc_impl(size_t size)
{
if (size == 0) {
return NULL;
}
- return kalloc_data(size,
- Z_VM_TAG_BT(Z_WAITOK_ZERO, VM_KERN_MEMORY_LIBKERN));
+ return kheap_alloc_tag_bt(KHEAP_DEFAULT, size,
+ (zalloc_flags_t) (Z_WAITOK | Z_ZERO),
+ VM_KERN_MEMORY_LIBKERN);
}
-#define free(addr) free_impl(addr)
-#define free_type(type, addr) kfree_type(type, addr)
+#define free(addr) free_impl(addr)
static inline void
free_impl(void *addr)
{
- kfree_data_addr(addr);
+ kheap_free_addr(KHEAP_DEFAULT, addr);
}
static inline void
safe_free(void *addr, size_t size)
{
- kfree_data(addr, size);
+ if (addr) {
+ assert(size != 0);
+ kheap_free(KHEAP_DEFAULT, addr, size);
+ }
}
#define realloc(addr, osize, nsize) realloc_impl(addr, osize, nsize)
static inline void *
realloc_impl(void *addr, size_t osize, size_t nsize)
{
- return krealloc_data(addr, osize, nsize,
- Z_VM_TAG_BT(Z_WAITOK_ZERO, VM_KERN_MEMORY_LIBKERN));
+ if (!addr) {
+ return malloc(nsize);
+ }
+ if (nsize == osize) {
+ return addr;
+ }
+ void *nmem = malloc(nsize);
+ if (!nmem) {
+ safe_free(addr, osize);
+ return NULL;
+ }
+ (void)memcpy(nmem, addr, (nsize > osize) ? osize : nsize);
+ safe_free(addr, osize);
+
+ return nmem;
}
@@ -257,7 +269,7 @@
/* Line 216 of yacc.c. */
-#line 212 "OSUnserialize.tab.c"
+#line 224 "OSUnserialize.tab.c"
#ifdef short
# undef short
@@ -547,9 +559,9 @@
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
static const yytype_uint8 yyrline[] =
{
- 0, 151, 151, 152, 153, 156, 157, 158, 159, 160,
- 161, 162, 163, 172, 180, 181, 184, 185, 188, 198,
- 199, 202, 203, 206, 211, 222, 230, 235, 240
+ 0, 163, 163, 164, 165, 168, 169, 170, 171, 172,
+ 173, 174, 175, 184, 192, 193, 196, 197, 200, 210,
+ 211, 214, 215, 218, 223, 234, 242, 247, 252
};
#endif
@@ -766,7 +778,7 @@
#if YYDEBUG
# ifndef YYFPRINTF
-# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
# define YYFPRINTF fprintf
# endif
@@ -1488,57 +1500,57 @@
YY_REDUCE_PRINT(yyn);
switch (yyn) {
case 2:
-#line 151 "OSUnserialize.y"
+#line 163 "OSUnserialize.y"
{ parsedObject = (OSObject *)NULL; YYACCEPT;;}
break;
case 3:
-#line 152 "OSUnserialize.y"
+#line 164 "OSUnserialize.y"
{ parsedObject = (OSObject *)(yyvsp[(1) - (1)]); YYACCEPT;;}
break;
case 4:
-#line 153 "OSUnserialize.y"
+#line 165 "OSUnserialize.y"
{ yyerror("syntax error"); YYERROR;;}
break;
case 5:
-#line 156 "OSUnserialize.y"
+#line 168 "OSUnserialize.y"
{ (yyval) = (object_t *)buildOSDictionary((yyvsp[(1) - (1)]));;}
break;
case 6:
-#line 157 "OSUnserialize.y"
+#line 169 "OSUnserialize.y"
{ (yyval) = (object_t *)buildOSArray((yyvsp[(1) - (1)]));;}
break;
case 7:
-#line 158 "OSUnserialize.y"
+#line 170 "OSUnserialize.y"
{ (yyval) = (object_t *)buildOSSet((yyvsp[(1) - (1)]));;}
break;
case 8:
-#line 159 "OSUnserialize.y"
+#line 171 "OSUnserialize.y"
{ (yyval) = (object_t *)buildOSString((yyvsp[(1) - (1)]));;}
break;
case 9:
-#line 160 "OSUnserialize.y"
+#line 172 "OSUnserialize.y"
{ (yyval) = (object_t *)buildOSData((yyvsp[(1) - (1)]));;}
break;
case 10:
-#line 161 "OSUnserialize.y"
+#line 173 "OSUnserialize.y"
{ (yyval) = (object_t *)buildOSOffset((yyvsp[(1) - (1)]));;}
break;
case 11:
-#line 162 "OSUnserialize.y"
+#line 174 "OSUnserialize.y"
{ (yyval) = (object_t *)buildOSBoolean((yyvsp[(1) - (1)]));;}
break;
case 12:
-#line 163 "OSUnserialize.y"
+#line 175 "OSUnserialize.y"
{ (yyval) = (object_t *)retrieveObject((yyvsp[(2) - (2)])->u.offset);
if ((yyval)) {
((OSObject *)(yyval))->retain();
@@ -1551,7 +1563,7 @@
break;
case 13:
-#line 172 "OSUnserialize.y"
+#line 184 "OSUnserialize.y"
{ (yyval) = (yyvsp[(1) - (3)]);
rememberObject((yyvsp[(3) - (3)])->u.offset, (yyvsp[(1) - (3)]));
freeObject((yyvsp[(3) - (3)]));
@@ -1559,22 +1571,22 @@
break;
case 14:
-#line 180 "OSUnserialize.y"
+#line 192 "OSUnserialize.y"
{ (yyval) = NULL;;}
break;
case 15:
-#line 181 "OSUnserialize.y"
+#line 193 "OSUnserialize.y"
{ (yyval) = (yyvsp[(2) - (3)]);;}
break;
case 17:
-#line 185 "OSUnserialize.y"
+#line 197 "OSUnserialize.y"
{ (yyvsp[(2) - (2)])->next = (yyvsp[(1) - (2)]); (yyvsp[(1) - (2)])->prev = (yyvsp[(2) - (2)]); (yyval) = (yyvsp[(2) - (2)]);;}
break;
case 18:
-#line 188 "OSUnserialize.y"
+#line 200 "OSUnserialize.y"
{ (yyval) = newObject();
(yyval)->next = NULL;
(yyval)->prev = NULL;
@@ -1584,27 +1596,27 @@
break;
case 19:
-#line 198 "OSUnserialize.y"
+#line 210 "OSUnserialize.y"
{ (yyval) = NULL;;}
break;
case 20:
-#line 199 "OSUnserialize.y"
+#line 211 "OSUnserialize.y"
{ (yyval) = (yyvsp[(2) - (3)]);;}
break;
case 21:
-#line 202 "OSUnserialize.y"
+#line 214 "OSUnserialize.y"
{ (yyval) = NULL;;}
break;
case 22:
-#line 203 "OSUnserialize.y"
+#line 215 "OSUnserialize.y"
{ (yyval) = (yyvsp[(2) - (3)]);;}
break;
case 23:
-#line 206 "OSUnserialize.y"
+#line 218 "OSUnserialize.y"
{ (yyval) = newObject();
(yyval)->object = (yyvsp[(1) - (1)]);
(yyval)->next = NULL;
@@ -1613,7 +1625,7 @@
break;
case 24:
-#line 211 "OSUnserialize.y"
+#line 223 "OSUnserialize.y"
{ oo = newObject();
oo->object = (yyvsp[(3) - (3)]);
oo->next = (yyvsp[(1) - (3)]);
@@ -1624,7 +1636,7 @@
break;
case 25:
-#line 222 "OSUnserialize.y"
+#line 234 "OSUnserialize.y"
{ (yyval) = (yyvsp[(1) - (3)]);
(yyval)->size = (yyvsp[(3) - (3)])->u.offset;
freeObject((yyvsp[(3) - (3)]));
@@ -1633,7 +1645,7 @@
/* Line 1267 of yacc.c. */
-#line 1585 "OSUnserialize.tab.c"
+#line 1597 "OSUnserialize.tab.c"
default: break;
}
YY_SYMBOL_PRINT("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -1845,7 +1857,7 @@
}
-#line 243 "OSUnserialize.y"
+#line 255 "OSUnserialize.y"
static int lineNumber = 0;
@@ -2138,7 +2150,7 @@
#if DEBUG
debugUnserializeAllocCount++;
#endif
- return malloc_type(object_t);
+ return (object_t *)malloc(sizeof(object_t));
}
void
@@ -2147,7 +2159,7 @@
#if DEBUG
debugUnserializeAllocCount--;
#endif
- free_type(object_t, o);
+ safe_free(o, sizeof(object_t));
}
static OSDictionary *tags;
@@ -2332,8 +2344,6 @@
return object;
}
-
-#endif // not __clang_analyzer__
//