  Tizen is a new Linux-based open source platform for consumer devices
including smartphones, televisions, vehicles, and wearables. While Tizen
provides kernel-level mandatory policy enforcement, it has a large collection
of libraries, implemented in a mix of C and C++, which make their own security
checks. In this research, we describe the design and engineering of a static
analysis engine which drives a full information flow analysis for apps and a
control flow analysis for the full library stack. We implemented these static
analyses as extensions to LLVM, requiring us to improve LLVM's native analysis
features to get greater precision and scalability, including knotty issues like
the coexistence of C++ inheritance with C function pointer use. With our tools,
we found several unexpected behaviors in the Tizen system, including paths
through the system libraries that did not have inline security checks. We show
how our tools can help the Tizen app store to verify important app properties
as well as helping the Tizen development process avoid the accidental
introduction of subtle vulnerabilities.
