Privacy/Reviews/SnappySymbolicServer
Document Overview
| Feature/Product: | Snappy Symbolic Server |
| Projected Feature Freeze Date: | (tbd) |
| Product Champions: | Vladan Djeric |
| Privacy Champions: | (the privacy Friend you're working with) |
| Security Contact: | Curtis Koenig |
| Document State: | [NEW] |
Timeline:
| Architectural Overview: | (date TBD) |
| Recommendation Meeting: | (date TBD) |
| Review Complete ETA: | tbd |
Architecture
The Snappy Symbolication Server is a Web service for symbolicating Firefox call stacks using Breakpad symbols. It is intended to be used by the SPS profiler, the about:telemetry extension on profiling builds, and by perf-team staff for symbolicating chrome hang stacks reported to Telemetry by profiling builds.
The Symbolication Server is written in Python and runs on the breakpad-symbolapi1.dmz.phx1 Linux VM. It reads the Breakpad .sym files from a mount in the VM and caches them in memory. The .sym files contain mappings of addresses to function names for Windows and Firefox libraries. The mounts also contain Flash and other plugin symbols but these files may be removed in the near future (bug 732485). The Symbolication Server code is available on github.
The symbolication server will be publicly accessible. The symbolication requests and responses are made over HTTP in JSON format. The client HTTP requests do not carry any cookies or state. Each symbolication request consists of two fields: 1) a "stack" field with a list of stack PCs to symbolicate, and 2) a "memoryMap" field which contains information about the addresses of libraries in process memory, their PDB file name, PDB signature and PDB age. The PDB file information is used to located the corresponding .sym files on the symbol mount. The server responses contain the function names corresponding to PCs in the symbolication request.
The only data stored are the server logs. Client IP addresses, requests and responses are never logged by the server unless the server is explicitly configured for debugging.
Components
Firefox Extensions
The Firefox about:telemetry extension sends symbolication requests containing main thread call stacks and memory maps collected from transient main-thread hangs. The symbolication server will respond with symbols for each of the functions on the provided call stacks.
The SPS profiler extension collects traces from the execution of Firefox's main thread and symbolicates the traces the same way as about:telemetry.
Stored Data:
| What | Where |
|---|---|
| None | n/a |
Example communication between about:telemetry extension and Symbolication Server
| Direction | Message | Data | Notes |
|---|---|---|---|
| In: | Symbolication request | [{"stack":["0x247E0"], "memoryMap":[[0, "mozjs.exe", 200000, 2, "3680D18BE79648BEB6FA92475B2636B9", "mozjs.pdb"]]}]
|
|
| Out: | Symbolication response | [["JS::Value::isPrimitive() in mozjs.exe"]] |
Snappy Symbolication Server
The symbolication server parses symbolication requests and looks up function names corresponding to call stack addresses in the .SYM files on its symbol mount. The symbol files are on a read-only NFS mount to another machine on the same subnet. The symbol files contain the addresses and human-readable names for the functions in each library. The Firefox and OS symbols are stored in different directories on the mount; the server configuration file specifies where to find each.
The Snappy Symbolication Server can run as an unprivileged user.
Stored Data:
| What | Where |
|---|---|
| Status log | Stdout/stderr likely redirected to a local file in /var/log. Only server activity & errors logged unless debug mode configured. |
Communication with VM
| Direction | Message | Data | Notes |
|---|---|---|---|
| In/Out: | Symbolication Server looks up and reads .sym files on the NFS mount | Symbolication Server parses lines of interest in .sym files |
Hosting VM
The VM for the server will provide a read-only NFS symbol mount to the Snappy Symbolication Server and expose a publicly accessible TCP port for client symbolication requests.
User Data Risk Minimization
In this section, the privacy champion will identify areas of user data risk and recommendations for minimizing the risk.
Alignment with Privacy Operating Principles
In this section, the privacy champion will identify how the feature lines up with Mozilla's privacy operating principles.
See Also: Privacy/Roadmap_2011#Operating_Principles:
Principle: Transparency / No Surprises
(How the feature addresses this)
Recommendations: (what can be improved)
Principle: Real Choice
Recommendations:
Principle: Sensible Defaults
Recommendations:
Principle: Limited Data
Recommendations:
Follow-up Tasks and tracking
| What | Who | Bug | Details |
|---|---|---|---|
| [NEW] Initial Overview Discussion | ? | Meeting time TBD |