Mitigating OWASP Top 10 Risks: Finding and Patching insecure memory deallocation leading to information disclosure in C++
Understanding the Vulnerability: Double Free and Use-After-Free in C++
One of the most insidious memory management bugs in C++ is the double free, which can lead to a use-after-free condition. This occurs when a piece of memory is deallocated more than once. The first `free()` or `delete` operation marks the memory as available. A subsequent attempt to free the same memory can corrupt the heap’s internal metadata. This corruption can manifest in various ways, including crashes, but more critically, it can be exploited by an attacker to overwrite critical data structures, potentially leading to arbitrary code execution or, as in the case of OWASP Top 10’s Information Disclosure (A01:2021 – Broken Access Control, or A03:2021 – Injection, if the leaked data is used in a sensitive context), the exposure of sensitive information.
Consider a scenario where a dynamically allocated buffer is intended to hold sensitive user data, such as authentication tokens or personal identifiable information (PII). If this buffer is mistakenly freed twice, and an attacker can influence the program’s execution flow to perform a use-after-free operation on that now-invalidated memory, they might be able to read data that was previously stored there, even after it should have been inaccessible.
Illustrative C++ Code Snippet: The Flaw
Let’s examine a simplified, yet illustrative, C++ code snippet that demonstrates this vulnerability. This example uses raw pointers for clarity, though similar issues can arise with smart pointers if not managed carefully.
#include <iostream>
#include <cstring> // For strcpy
void process_sensitive_data(const char* data) {
// Simulate processing sensitive data
std::cout << "Processing: " << data << std::endl;
}
int main() {
char* sensitive_buffer = new char[256];
strcpy(sensitive_buffer, "SuperSecretToken123"); // Storing sensitive info
process_sensitive_data(sensitive_buffer);
// --- Vulnerable Section ---
// First deallocation
delete[] sensitive_buffer;
// Simulate some other operations...
// ...
// Second deallocation - This is the double free!
// If an attacker can control execution flow to reach here again,
// or if a logic error causes this, it's a problem.
delete[] sensitive_buffer; // Double free!
// --- Potential Use-After-Free ---
// If the program continues and tries to access sensitive_buffer
// after the double free, it's a use-after-free.
// For demonstration, let's assume a hypothetical scenario where
// the pointer wasn't immediately nulled out and some other code
// might still try to read from it.
// In a real exploit, an attacker might overwrite the heap metadata
// during the double free to control where this pointer now points.
// Example of a potential use-after-free if the pointer wasn't nulled:
// std::cout << "Attempting to read after double free: " << sensitive_buffer << std::endl;
// This line would likely crash or exhibit undefined behavior.
// A safer practice would be to nullify the pointer after deletion:
// sensitive_buffer = nullptr; // This would prevent subsequent use-after-free
return 0;
}
In this example, `sensitive_buffer` is allocated, populated with sensitive data, and then deallocated twice. The second `delete[] sensitive_buffer;` is the critical error. If an attacker can trigger this double free and then subsequently cause the program to attempt to read from `sensitive_buffer` (or a memory location that the heap manager has reallocated and is now controlled by the attacker), they could potentially retrieve the original sensitive data or other information.
Detection Strategies: Static and Dynamic Analysis
Identifying such memory corruption bugs requires a multi-pronged approach, combining static analysis for early detection and dynamic analysis for runtime verification.
Static Analysis Tools
Static analysis tools scan source code without executing it, looking for patterns indicative of common programming errors, including memory management issues. For C++, popular choices include:
- Clang Static Analyzer: Integrated into Clang, it can detect a wide range of bugs, including use-after-free and double free vulnerabilities.
- Cppcheck: An open-source static analysis tool that can identify memory leaks, uninitialized variables, and other common C++ errors.
- Coverity Scan (or commercial Coverity): A powerful commercial static analysis tool known for its accuracy in finding complex bugs.
To use Clang Static Analyzer, you would typically invoke it like this:
clang++ -cc1 -analyze -analyzer-checker=core,unix.Malloc,security.FloatLoop,api.ArrayBound,api.StdCLib,api.System,api.Unix,deadcode,experimental,valist,nullability,optin.performance.BusyLoop,optin.portability.UnixSignal,optin.unused.Runtime,uninitialized.ArraySubscript,uninitialized.Assign,uninitialized.Branch,uninitialized.ConditionalOperator,uninitialized.Constructor,uninitialized.Loop,uninitialized.MemberVarAddress,uninitialized.New,uninitialized.PtrParam,uninitialized.Return,uninitialized.SelfAssign,uninitialized.StackAddress,uninitialized.SelfDeref,uninitialized.Temporary,uninitialized.UseAfterAssume,uninitialized.Variable,valist.Array,valist.Assign,valist.Construct,valist.Printf,valist.Sink,valist.Source,valist.Uninitialized,valist.UseAfterAssume,valist.Variable,core.CallAndMessage,core.CastLimitation,core.DivideZero,core.DynamicTypePropagation,core.GetPointee,core.Global,core.Hash,core.Initializer,core.Leak,core.Logic,core.MemoryError,core.NullDereference,core.ObjC,core.Optional,core.PathSensitive,core.PointerArith,core.PointerAndPath,core.PointerOrValue,core.Recursive,core.RegionStore,core.SVal,core.SValBuilder,core.TaintInference,core.TaintPropagation,core.UndefinedBehavior,core.VLA,core.Value,core.Vector,core.Z3,debug.CheckPthreadAPICall,debug.Config,debug.DumpCFG,debug.DumpCFGElement,debug.DumpHTML,debug.DumpSSA,debug.DumpSymbol,debug.DumpVEX,debug.DumpVEXSSA,debug.DumpVEXValue,debug.DumpVEXValueSSA,debug.DumpVEXValueSSAElement,debug.DumpVEXValueSSAElementValue,debug.DumpVEXValueSSAElementValueValue,debug.DumpVEXValueSSAElementValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValueValue,debug.DumpVEXValueSSAElementValueValueValueValueValueValueValueValue