Knowledge (XXG)

Memory safety

Source 📝

1740: 1730: 1720: 1710: 1700: 244:
are special heap allocators that allocate objects in their own random virtual memory page, allowing invalid reads and writes to be stopped and debugged at the exact instruction that causes them. Protection relies upon hardware memory protection and thus overhead is typically not substantial, although
268:
and the insertion of runtime checks on every memory access; this approach has overhead, but less than that of Valgrind. All garbage-collected languages take this approach. For C and C++, many tools exist that perform a compile-time transformation of the code to do memory safety checks at runtime,
256:
and runs the compiled program in a memory-checking virtual machine, providing guaranteed detection of a subset of runtime memory errors. However, it typically slows the program down by a factor of 40, and furthermore must be explicitly informed of custom memory allocators.
469:(concurrent reads/writes to shared memory) as being part of memory safety (e.g., for access control). The Rust programming language prevents many kinds of memory-based race conditions by default, because it ensures there is at most one writer 245:
it can grow significantly if the program makes heavy use of allocation. Randomization provides only probabilistic protection against memory errors, but can often be easily implemented in existing software by relinking the binary.
193:
is the most common technique for preventing some of the memory safety problems, since it prevents common memory safety errors like use-after-free for all data allocated within the language runtime. When combined with automatic
144:
or other application-dependent methods to obtain addresses, although its adoption has been slow. However, deployments of the technology are typically limited to randomizing libraries and the location of the stack.
327:– accessing a pointer outside the virtual memory space. A null pointer dereference will often cause an exception or program termination in most environments, but can cause corruption in operating system 901:
Bessey, Al; Engler, Dawson; Block, Ken; Chelf, Ben; Chou, Andy; Fulton, Bryan; Hallem, Seth; Henri-Gros, Charles; Kamsky, Asya; McPeak, Scott (1 February 2010). "A few billion lines of code later".
260:
With access to the source code, libraries exist that collect and track legitimate values for pointers ("metadata") and check each pointer access against the metadata for validity, such as the
202:
arithmetic, garbage collected languages provide strong memory safety guarantees (though the guarantees may be weaker for low-level operations explicitly marked unsafe, such as use of a
173:. The pervasiveness and severity of vulnerabilities and exploits arising from memory safety issues have led several security researchers to describe identifying memory safety issues as 185:
Most modern high-level programming languages are memory-safe by default, though not completely since they only check their own code and not the system they interact with. Automatic
372:
arise when a pointer is used prior to initialization to some known state. They show the same erratic behaviour as dangling pointers, though they are less likely to stay undetected.
165:
were caused by memory safety problems. Many other high-profile vulnerabilities and exploits in critical software have ultimately stemmed from a lack of memory safety, including
477:
automatically prevent memory-based race conditions, yet are still generally considered "memory safe" languages. Therefore, countering race conditions is generally
276:
BoundWarden is a new spatial memory enforcement approach that utilizes a combination of compile-time transformation and runtime concurrent monitoring techniques.
233:
provide no memory safety guarantees. The substantial amount of software written in C and C++ has motivated the development of external static analysis tools like
424:
may prematurely free a new object at the same address. If the exact address has not been reused, other corruption may occur, especially in allocators that use
1774: 1680: 803: 1341: 1389: 1733: 1537: 1361: 698: 265: 190: 1723: 206:). However, the performance overhead of garbage collection makes these languages unsuitable for certain performance-critical applications. 780: 213:, memory safety is not usually guaranteed by the runtime. Instead, memory safety properties must either be guaranteed by the compiler via 1769: 1743: 1046: 316: 241: 133: 1015: 747: 1560: 1334: 97: 174: 1685: 960: 529: 355:– a variable that has not been assigned a value is used. It may contain an undesired or, in some languages, a corrupt value. 414:
more memory than the amount available. In some languages, this condition must be checked for manually after each allocation.
157:
security engineer reported that 70% of all security vulnerabilities were caused by memory safety issues. In 2020, a team at
299:– out-of-bound writes can corrupt the content of adjacent objects, or internal data (like bookkeeping information for the 1545: 1383: 391: 1210:
Dhumbumroong, Smith (2020). "BoundWarden: Thread-enforced spatial memory safety through compile-time transformations".
1065: 1522: 448:– when multiple allocators are in use, attempting to free memory with a deallocation function of a different allocator 222: 129: 61: 1580: 1703: 1590: 1570: 1423: 1327: 1172: 203: 199: 1649: 636: 328: 253: 218: 45: 1246: 561: 1509: 226: 210: 69: 1713: 1575: 1550: 1456: 261: 214: 65: 1527: 675: 30:
This article is about protection of memory in software development. For hardware protection of memory, see
1764: 1479: 1377: 1190: 351: 162: 850: 644: 125: 1555: 453: 49: 1095: 1433: 514:
Proceedings of the 2003 ACM SIGPLAN conference on Language, compiler, and tool for embedded systems
1122: 625: 1675: 1659: 1585: 1227: 1021: 966: 918: 722: 535: 121: 77: 945:
Proceedings of the 27th ACM SIGPLAN Conference on Programming Language Design and Implementation
772: 1451: 1350: 1011: 956: 694: 598: 525: 411: 395: 332: 186: 117: 31: 1050: 1628: 1623: 1466: 1219: 1003: 948: 910: 686: 517: 342: 311: 304: 270: 57: 992: 1618: 1517: 657: 587: 295: 195: 137: 81: 53: 875: 506: 1633: 1600: 1595: 1441: 1400: 937: 465: 457:– when the same memory location is allocated and modified twice for unrelated purposes. 386: 1758: 1413: 1408: 1231: 406: 364:– dereferencing an invalid pointer or a pointer to memory that has not been allocated 141: 41: 674:
van der Veen, Victor; dutt-Sharma, Nitish; Cavallaro, Lorenzo; Bos, Herbert (2012).
398:
typically halts the program, preventing memory corruption, but functions with large
1025: 970: 922: 539: 505:
Dhurjati, Dinakar; Kowshik, Sumant; Adve, Vikram; Lattner, Chris (1 January 2003).
368: 359: 101: 1297: 1271: 1654: 1223: 690: 439: 399: 378: 300: 109: 390:– occurs when a program runs out of stack space, typically because of too deep 1418: 1000:
Proceedings of the 17th ACM conference on Computer and communications security
323: 166: 602: 1565: 1446: 1073: 1007: 952: 914: 425: 154: 105: 80:
with pointers implemented as direct memory addresses with no provision for
17: 521: 1499: 1494: 1484: 1474: 804:"Serious flaw that lurked in sudo for 9 years hands over root privileges" 249: 234: 1173:"Semantic Designs: CheckPointer compared to other safety checking tools" 473:
one or more readers. Many other programming languages, such as Java, do
315:– out-of-bound reads can reveal sensitive data or help attackers bypass 1489: 113: 1147: 685:. Lecture Notes in Computer Science. Vol. 7462. pp. 86–106. 335:, or when use of the null pointer involves a large or negative offset. 1195: 748:"Microsoft: 70 percent of all security bugs are memory safety issues" 435: 421: 158: 1319: 221:
or carefully managed by the programmer at runtime. For example, the
821: 230: 73: 481:
considered necessary for a language to be considered memory safe.
1066:"Using Valgrind's Memcheck Tool to Find Memory Errors and Leaks" 170: 120:
developed quickly thereafter, escalating with multitudes of new
1323: 1247:"How to Avoid, Find (and Fix) Memory Errors in your C/C++ Code" 595:
Technical Report - University of Cambridge. Computer Laboratory
382:– when memory usage is not tracked or is tracked incorrectly 161:
similarly reported that 70% of all "severe security bugs" in
507:"Memory safety without runtime checks or garbage collection" 938:"DieHard: Probabilistic memory safety for unsafe languages" 225:
implements a borrow checker to ensure memory safety, while
68:
checks array bounds and pointer dereferences. In contrast,
264:. In general, memory safety can be safely assured using 723:"Defeating Solar Designer's Non-executable Stack Patch" 345:
storing the address of an object that has been deleted.
1362:
Memory management as a function of an operating system
936:
Berger, Emery D.; Zorn, Benjamin G. (1 January 2006).
676:"Memory Errors: The Past, the Present, and the Future" 96:
Memory errors were first considered in the context of
1668: 1642: 1609: 1536: 1508: 1465: 1432: 1399: 1370: 991:Novark, Gene; Berger, Emery D. (1 January 2010). 844: 842: 284:Many different types of memory errors can occur: 108:. Developments were mostly theoretical until the 1298:"CWE-762: Mismatched Memory Management Routines" 597:. University of Cambridge, Computer Laboratory. 169:and a long-standing privilege escalation bug in 104:systems, in an effort to avoid problems such as 27:State of being protected from memory access bugs 273:which imposes an average slowdown factor of 2. 1148:"Using the Garbage Collector as Leak Detector" 1335: 683:Research in Attacks, Intrusions, and Defenses 237:, which offers static memory analysis for C. 198:on all array accesses and no support for raw 40:is the state of being protected from various 8: 1681:International Symposium on Memory Management 562:"How C Makes It Hard To Check Array Bounds" 1342: 1328: 1320: 240:DieHard, its redesign DieHarder, and the 140:attacks and requires the attacker to use 1272:"CWE-633: Weaknesses that Affect Memory" 490: 112:, which exploited a buffer overflow in 1123:"Why custom allocators/pools are hard" 669: 667: 653: 642: 500: 498: 496: 494: 64:is said to be memory-safe because its 7: 1191:"AddressSanitizerPerformanceNumbers" 783:from the original on 24 January 2018 777:Common Vulnerabilities and Exposures 1775:Programming language implementation 1390:Input–output memory management unit 1096:"Memcheck: a memory error detector" 128:and defense techniques such as the 626:"Computer Security Planning Study" 317:address space layout randomization 291:: invalid read/write of a pointer 242:Allinea Distributed Debugging Tool 134:address space layout randomization 25: 1047:"Memory Debugging in Allinea DDT" 586:Akritidis, Periklis (June 2011). 1739: 1738: 1729: 1728: 1719: 1718: 1709: 1708: 1699: 1698: 434:– passing an invalid address to 1561:Concurrent mark sweep collector 1212:Science of Computer Programming 802:Goodin, Dan (4 February 2020). 588:"Practical memory safety for C" 98:resource management (computing) 1686:Region-based memory management 1302:Community Weakness Enumeration 1276:Community Weakness Enumeration 993:"DieHarder: Securing the heap" 136:. Randomization prevents most 1: 1734:Memory management algorithms 1546:Automatic Reference Counting 1384:Translation lookaside buffer 463:Some lists may also include 1724:Automatic memory management 1523:C dynamic memory allocation 1224:10.1016/j.scico.2020.102519 691:10.1007/978-3-642-33338-5_5 175:"shooting fish in a barrel" 84:, and thus are potentially 1791: 1770:Computer security exploits 1744:Memory management software 1591:Tracing garbage collection 1424:Virtual memory compression 266:tracing garbage collection 204:foreign function interface 29: 1694: 1357: 1002:. ACM. pp. 573–584. 947:. ACM. pp. 158–168. 903:Communications of the ACM 637:Electronic Systems Center 269:such as CheckPointer and 254:instruction set simulator 223:Rust programming language 219:automated theorem proving 1518:Static memory allocation 1510:Manual memory management 1179:. Semantic Designs, Inc. 855:stanford-cs242.github.io 211:manual memory management 46:security vulnerabilities 1576:Garbage-first collector 1551:Boehm garbage collector 1457:x86 memory segmentation 1177:www.semanticdesigns.com 1008:10.1145/1866307.1866371 953:10.1145/1133981.1134000 915:10.1145/1646353.1646374 851:"CS 242: Memory safety" 826:fishinabarrel.github.io 516:. ACM. pp. 69–80. 410:– the program tries to 352:Uninitialized variables 262:Boehm garbage collector 215:static program analysis 209:For languages that use 66:runtime error detection 1581:Mark–compact algorithm 1378:Memory management unit 652:Cite journal requires 280:Types of memory errors 522:10.1145/780732.780743 248:The memcheck tool of 126:return-to-libc attack 1528:new and delete (C++) 1100:Valgrind User Manual 420:– repeated calls to 402:may bypass the page. 130:non-executable stack 1434:Memory segmentation 624:Anderson, James P. 331:or systems without 1676:Automatic variable 1660:Unreachable memory 1586:Reference counting 1556:Cheney's algorithm 1538:Garbage collection 1076:on 7 November 2018 1070:computing.llnl.gov 1064:Gyllenhaal, John. 822:"Fish in a Barrel" 341:– dereferencing a 324:Invalid page fault 191:garbage collection 78:pointer arithmetic 48:when dealing with 1752: 1751: 1704:Memory management 1452:Virtual 8086 mode 1351:Memory management 721:Wojtczuk, Rafal. 700:978-3-642-33337-8 333:memory protection 187:memory management 118:computer security 58:dangling pointers 32:Memory protection 16:(Redirected from 1782: 1742: 1741: 1732: 1731: 1722: 1721: 1712: 1711: 1702: 1701: 1629:Dangling pointer 1624:Buffer over-read 1596:Strong reference 1467:Memory allocator 1344: 1337: 1330: 1321: 1314: 1313: 1311: 1309: 1294: 1288: 1287: 1285: 1283: 1268: 1262: 1261: 1259: 1257: 1251:Cprogramming.com 1242: 1236: 1235: 1207: 1201: 1200: 1187: 1181: 1180: 1169: 1163: 1162: 1160: 1158: 1144: 1138: 1137: 1135: 1133: 1121:Kreinin, Yossi. 1118: 1112: 1111: 1109: 1107: 1092: 1086: 1085: 1083: 1081: 1072:. Archived from 1061: 1055: 1054: 1049:. Archived from 1043: 1037: 1036: 1034: 1032: 997: 988: 982: 981: 979: 977: 942: 933: 927: 926: 898: 892: 891: 889: 887: 880:The Rustonomicon 872: 866: 865: 863: 861: 849:Crichton, Will. 846: 837: 836: 834: 832: 818: 812: 811: 799: 793: 792: 790: 788: 769: 763: 762: 760: 758: 744: 738: 737: 735: 733: 718: 712: 711: 709: 707: 680: 671: 662: 661: 655: 650: 648: 640: 630: 621: 615: 614: 612: 610: 605:. UCAM-CL-TR-798 592: 583: 577: 576: 574: 572: 560:Koenig, Andrew. 557: 551: 550: 548: 546: 511: 502: 438:can corrupt the 387:Stack exhaustion 343:dangling pointer 312:Buffer over-read 271:AddressSanitizer 76:allow arbitrary 54:buffer overflows 52:access, such as 21: 1790: 1789: 1785: 1784: 1783: 1781: 1780: 1779: 1755: 1754: 1753: 1748: 1690: 1664: 1638: 1619:Buffer overflow 1605: 1532: 1504: 1461: 1428: 1395: 1366: 1353: 1348: 1318: 1317: 1307: 1305: 1296: 1295: 1291: 1281: 1279: 1270: 1269: 1265: 1255: 1253: 1244: 1243: 1239: 1209: 1208: 1204: 1189: 1188: 1184: 1171: 1170: 1166: 1156: 1154: 1152:www.hboehm.info 1146: 1145: 1141: 1131: 1129: 1127:Proper Fixation 1120: 1119: 1115: 1105: 1103: 1094: 1093: 1089: 1079: 1077: 1063: 1062: 1058: 1045: 1044: 1040: 1030: 1028: 1018: 995: 990: 989: 985: 975: 973: 963: 940: 935: 934: 930: 900: 899: 895: 885: 883: 874: 873: 869: 859: 857: 848: 847: 840: 830: 828: 820: 819: 815: 801: 800: 796: 786: 784: 773:"CVE-2014-0160" 771: 770: 766: 756: 754: 746: 745: 741: 731: 729: 720: 719: 715: 705: 703: 701: 678: 673: 672: 665: 651: 641: 639:. ESD-TR-73-51. 628: 623: 622: 618: 608: 606: 590: 585: 584: 580: 570: 568: 559: 558: 554: 544: 542: 532: 509: 504: 503: 492: 487: 466:race conditions 446:Mismatched free 407:Heap exhaustion 296:Buffer overflow 282: 196:bounds checking 189:in the form of 183: 151: 138:buffer overflow 116:. The field of 94: 82:bounds checking 60:. For example, 35: 28: 23: 22: 15: 12: 11: 5: 1788: 1786: 1778: 1777: 1772: 1767: 1757: 1756: 1750: 1749: 1747: 1746: 1736: 1726: 1716: 1714:Virtual memory 1706: 1695: 1692: 1691: 1689: 1688: 1683: 1678: 1672: 1670: 1666: 1665: 1663: 1662: 1657: 1652: 1646: 1644: 1640: 1639: 1637: 1636: 1634:Stack overflow 1631: 1626: 1621: 1615: 1613: 1607: 1606: 1604: 1603: 1601:Weak reference 1598: 1593: 1588: 1583: 1578: 1573: 1568: 1563: 1558: 1553: 1548: 1542: 1540: 1534: 1533: 1531: 1530: 1525: 1520: 1514: 1512: 1506: 1505: 1503: 1502: 1497: 1492: 1487: 1482: 1477: 1471: 1469: 1463: 1462: 1460: 1459: 1454: 1449: 1444: 1442:Protected mode 1438: 1436: 1430: 1429: 1427: 1426: 1421: 1416: 1411: 1405: 1403: 1401:Virtual memory 1397: 1396: 1394: 1393: 1387: 1381: 1374: 1372: 1368: 1367: 1365: 1364: 1358: 1355: 1354: 1349: 1347: 1346: 1339: 1332: 1324: 1316: 1315: 1289: 1263: 1237: 1202: 1182: 1164: 1139: 1113: 1102:. valgrind.org 1087: 1056: 1053:on 2015-02-03. 1038: 1016: 983: 961: 928: 893: 867: 838: 813: 794: 764: 739: 713: 699: 663: 654:|journal= 616: 578: 552: 530: 489: 488: 486: 483: 461: 460: 459: 458: 449: 443: 429: 415: 403: 375: 374: 373: 365: 348: 347: 346: 339:Use after free 336: 320: 308: 281: 278: 182: 179: 150: 147: 93: 90: 26: 24: 14: 13: 10: 9: 6: 4: 3: 2: 1787: 1776: 1773: 1771: 1768: 1766: 1765:Software bugs 1763: 1762: 1760: 1745: 1737: 1735: 1727: 1725: 1717: 1715: 1707: 1705: 1697: 1696: 1693: 1687: 1684: 1682: 1679: 1677: 1674: 1673: 1671: 1667: 1661: 1658: 1656: 1653: 1651: 1650:Fragmentation 1648: 1647: 1645: 1641: 1635: 1632: 1630: 1627: 1625: 1622: 1620: 1617: 1616: 1614: 1612: 1611:Memory safety 1608: 1602: 1599: 1597: 1594: 1592: 1589: 1587: 1584: 1582: 1579: 1577: 1574: 1572: 1569: 1567: 1564: 1562: 1559: 1557: 1554: 1552: 1549: 1547: 1544: 1543: 1541: 1539: 1535: 1529: 1526: 1524: 1521: 1519: 1516: 1515: 1513: 1511: 1507: 1501: 1498: 1496: 1493: 1491: 1488: 1486: 1483: 1481: 1478: 1476: 1473: 1472: 1470: 1468: 1464: 1458: 1455: 1453: 1450: 1448: 1445: 1443: 1440: 1439: 1437: 1435: 1431: 1425: 1422: 1420: 1417: 1415: 1414:Memory paging 1412: 1410: 1409:Demand paging 1407: 1406: 1404: 1402: 1398: 1391: 1388: 1385: 1382: 1379: 1376: 1375: 1373: 1369: 1363: 1360: 1359: 1356: 1352: 1345: 1340: 1338: 1333: 1331: 1326: 1325: 1322: 1303: 1299: 1293: 1290: 1277: 1273: 1267: 1264: 1252: 1248: 1241: 1238: 1233: 1229: 1225: 1221: 1217: 1213: 1206: 1203: 1198: 1197: 1192: 1186: 1183: 1178: 1174: 1168: 1165: 1153: 1149: 1143: 1140: 1128: 1124: 1117: 1114: 1101: 1097: 1091: 1088: 1075: 1071: 1067: 1060: 1057: 1052: 1048: 1042: 1039: 1027: 1023: 1019: 1017:9781450302456 1013: 1009: 1005: 1001: 994: 987: 984: 972: 968: 964: 958: 954: 950: 946: 939: 932: 929: 924: 920: 916: 912: 908: 904: 897: 894: 881: 877: 871: 868: 856: 852: 845: 843: 839: 827: 823: 817: 814: 809: 805: 798: 795: 782: 778: 774: 768: 765: 753: 749: 743: 740: 728: 724: 717: 714: 702: 696: 692: 688: 684: 677: 670: 668: 664: 659: 646: 638: 634: 627: 620: 617: 604: 600: 596: 589: 582: 579: 567: 563: 556: 553: 541: 537: 533: 527: 523: 519: 515: 508: 501: 499: 497: 495: 491: 484: 482: 480: 476: 472: 468: 467: 456: 455: 450: 447: 444: 441: 437: 433: 430: 427: 423: 419: 416: 413: 409: 408: 404: 401: 397: 393: 389: 388: 384: 383: 381: 380: 376: 371: 370: 369:Wild pointers 366: 363: 361: 357: 356: 354: 353: 349: 344: 340: 337: 334: 330: 326: 325: 321: 318: 314: 313: 309: 306: 302: 298: 297: 293: 292: 290: 289:Access errors 287: 286: 285: 279: 277: 274: 272: 267: 263: 258: 255: 251: 246: 243: 238: 236: 232: 228: 224: 220: 216: 212: 207: 205: 201: 197: 192: 188: 180: 178: 176: 172: 168: 164: 160: 156: 148: 146: 143: 142:heap spraying 139: 135: 131: 127: 123: 119: 115: 111: 107: 103: 99: 91: 89: 87: 86:memory-unsafe 83: 79: 75: 71: 67: 63: 59: 55: 51: 47: 43: 42:software bugs 39: 38:Memory safety 33: 19: 1610: 1306:. Retrieved 1301: 1292: 1280:. Retrieved 1275: 1266: 1254:. Retrieved 1250: 1245:Gv, Naveen. 1240: 1215: 1211: 1205: 1194: 1185: 1176: 1167: 1155:. Retrieved 1151: 1142: 1130:. Retrieved 1126: 1116: 1104:. Retrieved 1099: 1090: 1078:. Retrieved 1074:the original 1069: 1059: 1051:the original 1041: 1029:. Retrieved 999: 986: 974:. Retrieved 944: 931: 909:(2): 66–75. 906: 902: 896: 884:. Retrieved 879: 876:"References" 870: 860:22 September 858:. Retrieved 854: 831:21 September 829:. Retrieved 825: 816: 808:Ars Technica 807: 797: 785:. Retrieved 776: 767: 757:21 September 755:. Retrieved 751: 742: 730:. Retrieved 727:insecure.org 726: 716: 704:. Retrieved 682: 645:cite journal 632: 619: 607:. Retrieved 594: 581: 569:. Retrieved 565: 555: 543:. Retrieved 513: 478: 474: 470: 464: 462: 451: 445: 432:Invalid free 431: 417: 405: 400:stack frames 385: 377: 367: 360:Null pointer 358: 350: 338: 322: 310: 294: 288: 283: 275: 259: 247: 239: 208: 184: 152: 124:such as the 102:time-sharing 95: 85: 37: 36: 1655:Memory leak 418:Double free 379:Memory leak 362:dereference 153:In 2019, a 110:Morris worm 18:Memory safe 1759:Categories 1419:Page table 1218:: 102519. 962:1595933204 882:. Rust.org 787:8 February 566:Dr. Dobb's 531:1581136471 485:References 426:free lists 396:guard page 307:addresses. 181:Approaches 167:Heartbleed 106:fork bombs 1566:Finalizer 1447:Real mode 1232:224925197 779:. Mitre. 603:1476-2986 452:Unwanted 392:recursion 155:Microsoft 1500:ptmalloc 1495:mimalloc 1485:jemalloc 1475:dlmalloc 1371:Hardware 1308:13 March 1282:13 March 1256:13 March 1157:14 March 1132:13 March 1106:13 March 1080:13 March 1031:14 March 976:14 March 886:13 March 781:Archived 732:13 March 706:13 March 609:13 March 571:13 March 545:13 March 454:aliasing 412:allocate 252:uses an 250:Valgrind 235:Coverity 163:Chromium 1571:Garbage 1490:libumem 1392:(IOMMU) 1304:. MITRE 1278:. MITRE 1026:7880497 971:8984358 923:2611544 540:1459540 329:kernels 200:pointer 122:attacks 114:fingerd 92:History 1643:Issues 1230:  1196:GitHub 1024:  1014:  969:  959:  921:  697:  601:  538:  528:  305:return 159:Google 149:Impact 50:memory 1669:Other 1480:Hoard 1386:(TLB) 1380:(MMU) 1228:S2CID 1022:S2CID 996:(PDF) 967:S2CID 941:(PDF) 919:S2CID 752:ZDNET 679:(PDF) 629:(PDF) 591:(PDF) 536:S2CID 510:(PDF) 303:) or 1310:2017 1284:2017 1258:2017 1159:2017 1134:2017 1108:2017 1082:2017 1033:2017 1012:ISBN 978:2017 957:ISBN 888:2017 862:2022 833:2022 789:2018 759:2022 734:2017 708:2017 695:ISBN 658:help 611:2017 599:ISSN 573:2017 547:2017 526:ISBN 440:heap 436:free 422:free 394:. A 301:heap 229:and 217:and 171:sudo 132:and 100:and 72:and 62:Java 56:and 44:and 1220:doi 1216:198 1004:doi 949:doi 911:doi 687:doi 518:doi 479:not 475:not 231:C++ 74:C++ 1761:: 1300:. 1274:. 1249:. 1226:. 1214:. 1193:. 1175:. 1150:. 1125:. 1098:. 1068:. 1020:. 1010:. 998:. 965:. 955:. 943:. 917:. 907:53 905:. 878:. 853:. 841:^ 824:. 806:. 775:. 750:. 725:. 693:. 681:. 666:^ 649:: 647:}} 643:{{ 635:. 631:. 593:. 564:. 534:. 524:. 512:. 493:^ 471:or 177:. 88:. 1343:e 1336:t 1329:v 1312:. 1286:. 1260:. 1234:. 1222:: 1199:. 1161:. 1136:. 1110:. 1084:. 1035:. 1006:: 980:. 951:: 925:. 913:: 890:. 864:. 835:. 810:. 791:. 761:. 736:. 710:. 689:: 660:) 656:( 633:2 613:. 575:. 549:. 520:: 442:. 428:. 319:. 227:C 70:C 34:. 20:)

Index

Memory safe
Memory protection
software bugs
security vulnerabilities
memory
buffer overflows
dangling pointers
Java
runtime error detection
C
C++
pointer arithmetic
bounds checking
resource management (computing)
time-sharing
fork bombs
Morris worm
fingerd
computer security
attacks
return-to-libc attack
non-executable stack
address space layout randomization
buffer overflow
heap spraying
Microsoft
Google
Chromium
Heartbleed
sudo

Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.