Next: Checking Implementation Robustness
Up: Specifying Correctness Properties
Previous: Checking Protocol Conformance
A TCP implementation should release all kernel resources at the end of
the connection. Failure to do so can result in resource lockup, which
subsequently reduces the performance and the availability of the
machine. The resource leaks are not necessarily memory leaks, as these
resources can still have valid references to them.
To check for such resource leaks, CMC requires that the entire kernel
eventually reach the initial state after completing a TCP
connection. CMC reports any violation as a potential resource
leak.
There are, however, valid situations when the kernel might
not reach the initial state. First, some resources can be
cached either by the TCP implementation or by the Linux
kernel. To account for this fact, CMC traces through a few complete
TCP connections to generate a state in which the resources are
already cached. CMC performs the state space exploration from
this state. Second, the initial and final states of a TCP connection
can still differ due to the various statistics the protocol
maintains. During the initial model checking iterations, CMC
progressively learns to factor out these variables from the state
(after simple manual inspection).
Next: Checking Implementation Robustness
Up: Specifying Correctness Properties
Previous: Checking Protocol Conformance
Madanlal Musuvathi
2004-03-03