The accidental deletion of a data-structure sentinel can cause
serious programming logic problems.
Extended Description
Often times data-structure sentinels are used to mark structure of the
data structure. A common example of this is the null character at the end of
strings. Another common example is linked lists which may contain a sentinel
to mark the end of the list. It is dangerous to allow this type of control
data to be easily accessible. Therefore, it is important to protect from the
deletion or modification outside of some wrapper interface which provides
safety.
Time of Introduction
Architecture and Design
Implementation
Applicable Platforms
Languages
C
C++
Common Consequences
Scope
Effect
Availability
Generally this error will cause the data structure to not work
properly.
Authorization
If a control character, such as NULL is removed, one may cause
resource access control problems.
Demonstrative Examples
Example 1
C and C++
char *foo;
int counter;
foo=malloc(sizeof(char)*10);
for (counter=0;counter!=14;counter++) {
foo[counter]='a';
printf("%s\n",foo);
}
Potential Mitigations
Phase
Description
Requirements
Use a language or compiler that performs automatic bounds
checking.
Architecture and Design
Use an abstraction library to abstract away risky APIs. Not a complete
solution.
Build and Compilation
Compiler-based canary mechanisms such as StackGuard, ProPolice and the
Microsoft Visual Studio /GS flag. Unless this provides automatic bounds
checking, it is not a complete solution.
Operation
Use OS-level preventative functionality. Not a complete
solution.